Software Development Processes
Continuous Integration / Continuous Delivery
Continuous Integration & Continuous Delivery or CI/CD approach has become an essential part of modern software development processes. It accelerates builds and deployment as well as increases the quality of software solutions and products.
CI/CD process contains common stages:
- tracking of changes in the source code repository
- project build
- automated tests (unit-tests, static code analysis, integrated tests, UI tests)
- deployment of the artifacts to different landscapes
CI/CD process can be visualized as a pipeline with each stage serving as a quality gateway. CI/CD tools support regular automated builds for fast code verification, bug detection and integration checks. Continuous integration makes the process more predictable due to early and steady bug detection, fixing and inconsistencies between implemented code and business requirements.
CI/CD reduces time to market – time from initial request with software requirements to production release and market availability.
Quality Assurance
Previously testing process was decentralized: projects had separate stages of development and testing, Quality Assurance (QA) team implemented software checks as a standalone process.
CI/CD supports uninterrupted quality assurance: tests are running on all stages. There are different kinds of tests running after each source code change with CI/CD tools and test frameworks:
- unit tests
- static code inspection
- deployment of test landscapes and automated integration testing
- automated load and stress testing
For instance, when a developer makes a change in the central repository with a git push, CI server runs unit tests. If tests are not passed, build fails and a developer gets a notification. Nest stage includes a static code inspection with special tools like Sonar. If tests are passed, build is deployed to the integration test landscape for functional and load tests. Tests run in parallel. If all tests are green, release is deployed to the production landscape.
Team Roles in Continuous Integration/Delivery and Quality Assurance
Developers
Unit test which decrease the risk of failure of application modules and services.
Testers (QA)
Test creation and functional testing.
Business Analysts
Usability testing and acceptance testing: decrease of the risk of the new functionality not meeting end user expectations.
System Engineers (SE/DevOps)
Application deployment, data migration, scaling and increasing product availability. Automation of infrastructure deployment as a part of CI/CD and Infrastructure as Сode (IaC) allow to create new landscapes like DEV/QA/PROD with one button click.
Tools
The most frequently used CI/CD tools
(* — tools illustrated below)
Maven* Gradle
build tools
Ansible*
infrastructure configuration management tools
Git*
version control systems
Nexus*
centralized artifact repository
GitLab CI*
Bamboo Jenkins*
CI/CD servers
GitLab*
centralized source code repository