Sometimes, the easiest and most rewarding part of development is the actual coding. Managers and developers often dismiss the building, deploying, testing, and metrics-gathering aspects of the software life cycle.
Continuous integration is the concept of automating the build cycle so that code is built and tested many times during the day. This allows developers to integrate their code into the build daily or hourly, thus lowering the chances of integration problems.
In this article, I introduce an Ant-based build and integration system called BigBrother that leverages XP (Extreme Programming) principles. BigBrother combines several open-source tools into a "continuous integration" system. I also offer a real-world scenario in which BigBrother was used to successfully manage a continuous build process.
The concept of continuous integration has been around for a long time and one of its biggest proponents is Extreme Programming. XP is a disciplined approach to software development that stresses communication, simplicity, feedback, and iterative design. One of the main coding practices of XP is to integrate often. The benefits of integrating code are numerous:
Automating the build-and-test cycle definitely brings many benefits to any software development life cycle, but this only scratches the surface of what can be done by combining some of the open-source tools available today.
Paradise Found
With the advent of Java and open-source projects, creating and automating a continuously integrated environment has become simple, yet extremely powerful. These open-source projects include components for compiling and deploying code, executing automated unit tests, computing and displaying unit test code coverage, calculating various code metrics, as well as many other tools for making a project successful. All of these individual components can then be wrapped and automated with the help of yet other open-source projects.
Using each of these tools by themselves is helpful in the development of software, but the real power is when you combine them into a single continuous integration environment that compiles, tests, and reports metrics on a code base every time a file is checked in. Imagine a development environment with the following features:






