System Build

The transformation of source code into execution code can either occur during development, because it is necessary to run the code to be tested, or during deployment, because a release is ready to go to production. The transformations consist of repetitive tasks with some levels of complexity, due to the number of variations usually associated with a build of a software artefact, Variations in the Build of Software Artefacts. Therefore, it helps to automate the build process it in order to reduce errors and optimize the development.

Maven is a build tool, designed by software engineerings for software engineers, that follows the software engineering principles of Standardized Common Behaviours, by providing built-in lifecycles,  Automate Repetitive Actions, by supporting goals, and Allow Extensions by, for instance, configuring plugins.

Continuous Integration is a build strategy proposed by the approaches where the code is the most important, if not the only, software artefact. Continuous integration advocates a short cycle between implementing a task in isolation and sharing it with other developers. To do so, developers have to frequently checkout the most recent changes and checkin their own. However, such a dynamic development environment easily degrades the quality of the code. Developers want to work on the most recent changes but should not be disturbed by others bugs. Therefore, it is necessary to have complete test suites that assess the code robustness. Test suites are periodically run and the team has to decide how thoroughly should tests be done. It is important that developers do not give up test-first because tests take too long to run, but the code committed to the mainline should not contain bugs that disturb other developers. On the other hand, the level of quality of a mainline vary during the development process and the extent of tests may vary accordingly. Continuous integration separates private builds, which support the development in isolation, from integration builds, that intend to verify whether the code has the required quality to be shared. While in the former tests need to have a short duration, the integration builds can take longer, in large projects they occur during the night, and are, obviously, named nightly builds. When progress is the driven force of a project, frequent integrations may be enforced and the integration build tests are less demanding.

Travis CI Tool supports continuous integration. When used together with GitHub, it is possible to do integration builds in a fork of the repository while private builds are done locally. This way developers do short duration builds while programming and run long duration regression tests in the cloud, in the Travis CI servers, before doing a pull request to the remote repository.