Given the requirements and observations mentioned earlier, we developed a specialized tool to support the continuous integration process. This tool can be thought of as a unit testing addition to a normal version management system. It is based on two components.
The typical use case for this tool is that the developer has changed a number of pieces of source code and would like to integrate them to provide the other developers inside the team with the changes. This task is supported by the IntegrationClient, where the developer can list the changed files. The developer can then integrate them by simply pushing a button. This single action guarantees that:
Only if all three actions are successful and no failure occurs during unit testing are the updated pieces of source code accepted on the reference machine and the integration successful. If one unit test fails or an error occurs during one of the actions, the integration is canceled. As a result of a failed integration, the changed versions of the pieces of source code are rejected, and none of the code base is changed on the reference machine. Feedback about a successful or failed integration is reported to the developer sitting in front of the IntegrationClient tool. Test cases are handled as normal source code by the IntegrationClient. The developer can add, modify, or delete test-case classes using the same tool as for every other piece of source code. The other use case that often occurs is that another developer has changed some source code on the reference machine. In this case, the IntegrationClient shows all changed pieces of source code, and the developer has the opportunity to download all new or changed pieces of source code to the development machine. Another interesting case is the occurrence of conflicts for example, when two developers on the team have changed the same source code. In this case, the IntegrationClient indicates the conflict and does not allow the changed source code to be uploaded to the server. First, the developer has to download the changed version from the server, transfer the changes into this source code, and then integrate the new merged version. |