Build and delivery
The goal of CI/CD is to verify that any new source code update, from an application in progress development, does not generate errors: regressions or anomalies.
Continuous integration is a software brick that will allow to automate many tasks : compiling the code, unit tests, functional tests, etc.
GitFlow for the versioning is a workflow that we exploit as overlay to use the Git branch system. The main purpose of GitFlow is to be able to run high-level commands on the development branches and thus save a lot of time for developers.
The practice of versioning & CI/CD involves to setup a number of good practices.
The importance of versioning and uniqueness of source code.
One of the prerequisites for continuous integration is that the source manager be unique and versioned. To do this we already use version management software: Git.
The source manager contains all versioned sources of the product, specifically the timeline of all changes made to the application. The advantage of this tool is to easily go back on an earlier version.
In addition we work with the GitFlow methodology. The "Flow" extension linked to our Git provides additional controls and allows developers to perform complex operations on a source code repository.
Regularly integrate changes (commits).
Developers integrate their changes every day, so testers can regularly test the latest changes. As a result, the risk of conflicts in the code is diminished and especially it is detected more quickly because the commits are not much spaced. This allows to correct early detected problems and therefore to maintain a product of quality and functional.
Set up integration tests.
When a piece of function is realized, a piece of code is developed in parallel to test it. The principle is to design the tests before coding the application components. Therefore, it is the tests that will influence how to code.
This virtuous circle, which needs to be methodical in the realization of developments, generates an increase in the quality of the modifications and therefore the final application.
Test the application in an environment identical to the production environment.
The test environment configuration must be similar to the production environment. Thus the tests are carried out under the "real" conditions of the final environment which generates a certain serenity when the modifications are delivered in production. A lot of bad surprises are avoided.
Our engineers are currently using several work environments:
- A development environment.
- A preproduction environment.
- A production environment.
Our progressive approach to implement continuous integration in our various projects, is a part of a constant dynamic to increase the quality of the applications that we develop. This method significantly improves coding quality, and thus the final product.
The benefits of continuous integration for your digital projects*
- Serenity and Visibility: beyond the peace of mind that comes with automated testing, all developers see what is happening, allowing them to better anticipate and adapt their next developments.
- Quick code discrepancy detection: developers are quickly informed of regressions, bugs, or other anomalies and can take corrective actions continuously. The earlier the errors are detected in a project the less time it will take to be corrected.
- Immediate availability of the application: a version of the functional application is always available for a test or a demonstration.
*Depending of the type of project, continuous integration may be implemented more or less easily.
Test Driven Development (TDD)
Automated testing and Test Driven Development (TDD) are complementary but separate principles.
The TDD is a set of successive tasks corresponding to 3 Red-Green-Refactor components:
- Red: Create a failing test.
- Green: Write the piece of code that makes this test pass.
- Refactor: Refactor the code.
Many tools exist to set up automated tests and do Test Driven Development: PHP Code Sniffer, PHPUnit, Selenium, Selenium IDE, Selenium WebDriver, Jenkinsetc.
Development Quality Control: Automated Testing
The tests are carried out in a very specific order: we begin with deploying unit tests, followed by integration tests and we finally generate functional end-to-end tests.
These tests are automated. They ensure and verify that the components of the application function properly in an independent manner. We may also refer to them as "qualifying tests".
Also automated, this type of tests is carried out to ensure and verify that the features communicate well amongst themselves. This process allows us to be certain that all features interact well with one other, in accordance with project specifications.
End-to-end Functional Tests
Whether they are manual or automated, these tests ensure that the software meets the scenarios of usage detailed by users. The tester will run end-to-end acceptance tests on business processes and will, then, make sure they meet the customer's needs. If all business scenarios meet the customer's expectations, then the application’s objective is attained.
Impacts on your product quality:
- Fewer bugs: significant decrease in the number of bugs and regressions.
- Advanced tests: a final product, fully and especially regularly tested.
- An evolutionary product: the guarantee of having a sustainable and easily maintainable product in the long-term.
- Functional software fast delivery: provision of a functional product available at any time for a demonstration.
- Risk reduction: the discovery of defects in the application is not late.
Tech, methods and news
ISD plays an essential role in the company development. However, various departments are now more autonomous and ...
Having a business idea is good but being the first one to develop it is even better! The time to have your app released on the market is the key factor of a successful business.