Collaboration can be a challenge to any software development company. While most teams use some sort of source control system, these systems do not provide the accountability necessary in tracking software defects quickly. Meanwhile, disciplined developers write unit test suites to improve accountability, but this is often a solitary practice and can be difficult to codify as a workflow.
Continuous integration (CI) systems were introduced in an attempt to solve these problems by providing immediate feedback, historical results and accountability. What may not be obvious, however, is the boon that CI systems bring to dedicated quality assurance (QA) departments that may be isolated from the developers’ processes — in a modified waterfall systems development life cycle (SDLC), for example.
What Is Continuous Integration?
In a nutshell, CI systems have two main goals: to build your software automatically and to give automatic feedback about its quality. Writing testable code along with good tests is at the core of smart CI use, and this process should feel natural to developers who already employ techniques like test-driven development.
Traditionally, CI adoption starts with the development team. Writing small, easily testable portions at a time, developers can commit their code to the main repository often. The CI system then builds and tests the software continuously, often at scheduled periods or triggered with repository updates. After the tests have been run, the system generally provides feedback in the form of statistics, output logs, post-build steps and so on. Some sophisticated systems even update issue-tracking software or send emails to development staff.
Automation of the build process is at the center of CI — automatically building upon code commits, executing test suites for each build, automated and consistent test environment handling, etc. With a comprehensive CI system in place, each developer receives immediate feedback on every code push, exposing any errors in the process for immediate attention.
Advantages of a CI system
It’s easy to spot the advantages of continuous integration for the developer, but what about the other teams on the project? CI can be leveraged in a surprising number of ways. Test packages can be written by QA and maintained within the CI system, automatically run during every build. Software defects can be traced to requirements through issue-tracking software. Smoke tests can be written to perform monitoring of production systems. Deliverables can be automatically generated and made available to a wider audience, integrating alpha or beta testing of software at more stages of development. A CI system can even include automated deployment, with deployment scripts tested every build to ensure no kinks arise when it is time to move code to other environments.
The QA perspective
To the QA team, the benefits of having a comprehensive CI system are immediate and abundant, ameliorating challenges typically associated with code turnover. If automated unit testing is integrated into the process by developers, then the quality of code can be held to a documented standard. Automated unit tests even become self-documenting code, cutting down on reliance of subject matter experts and the risk of incomplete documentation.
The CI system also naturally serves as a facility for automated regression testing suites. Test packages, hosted in the QA repository, can be maintained by multiple QA personnel and automatically executed when new code is deployed to the QA environment. And, with each new-found software defect becoming an automated test case, it’s easy to quickly build a substantial regression test suite to be run automatically against new code. Automated reporting can even be built into the system, cutting down on the amount of time QA spends compiling results and ensuring that stakeholders have reliable, up-to-date information.
Although feature-based unit tests make for an obvious transition to the QA environment, the strength of CI systems lies in their flexibility. CI test suites are not restricted to simple code-level unit tests. With the right tests, even integration testing of interdepending platforms becomes a simple task. When one system is updated, automated integration tests immediately run, detecting any regressions among the systems — with no need to “mock out” components. Schedule this type of task to run often enough, and you have rudimentary platform health monitoring.
As anybody in a large company with varied business units can tell you, the odds of every development team unifying with one method of development are pretty small. However, due to their flexible nature, CI systems can meet the specific needs of many different teams. Build teams even find their use at the tail end of the SDLC, employing a practice known as continuous delivery to ensure that all versions of code are in a proper release state.
Continuous integration and delivery have flourished in West’s QA department. Whether integrated from the beginning of a project, used for developing our own internal QA tools, or used to run automated test suites, CI systems have dramatically cut down on overhead and testing time while improving effectiveness and reliability of test cases.