We are aware of the concept of agile, Continuous Integration(CI) is a term closely associated with agile methodology of software development. This technique follows an incremental approach, with an aim to keep the whole system under development, integrated.
The idea behind continuous integration is that, when a large software system is developed, it becomes difficult to collaborate the changes made in different modules. Hence over the years, the traditional approach towards software development has gradually transformed into modern approaches like agile. In continuous integration method, the code from all the developers are integrated at a common repository, where the code is reviewed. It prevents code overlapping in the sense that it avoids developers from stepping into each other's code. There often exists interdependencies among different modules, therefore complexities are bound to exist. CI intends to improve the quality and responsiveness to changing customer requirements.
The major objective of CI is to cater to frequent changes in each iterative development cycle, with an aim to improve productivity and also to mark checkpoints at which new customer requirements could be adopted.
Component Level Continuous Integration :
An agile team holds some importance when members in the team come together and integrate their work to test and ensure that work progress is on the right track. Frequent communication plays a very important role in the collaboration of different roles and functions, so that a productive consensus is achieved. Integration can thus be understood at various levels.
With each iteration in the development process, it becomes important to carry out frequent integration and testing of modules. This definitely helps to monitor the progress and also unravel any issues and fix it. This method helps to get a system view with each iteration , that can be used by team members for further evaluation.
The second point to understand is the solution integration which involves representing the agile release of the development efforts collectively to the customers and stakeholders. It provides the basis for understanding a program's flow and also gaining customer and stake-holder's feedback.
Synchronising with suppliers often leads to faster delivery of a product in the shortest time. Here by suppliers we mean a person or persons from an external source or someone within the organisation is hired in order to share their unique capabilities. This benefits the organisation to gain economic value. This whole activity involves - planning integration points, establish milestones based on current working solution, maintaining a consistent integration and testing infrastructure, collaborate and synchronise between system's architecture at all levels etc.
Benefits of Continuous Integration:
Reviewing code frequently reduces the chances of error (using Jenkins)
Developer's code are categorized according to their functions, eases understanding of code
Using a common platform, monitoring the code becomes easy. For example, uploading one's code on github lets us monitor the code and send the report through email. One more advantage is that one can set timer in Jenkins to run the code on the specified time mentioned by the user.
Risks involved in CI :
High cost is associated with maintenance and administration of CI tools.
Usually we do not find testers who are well versed in automation, hence training them leads to a responsible and time consuming task.
A complete test coverage is required to ensure automation proves to be of some use.
Unit testing is sometimes emphasised more than automation.
Continuous Integration is thus a process of consistent watch over the build. It is a continuous effort for improving the system under development. After all the motive behind this technique is to deliver a quality and bug free software product.