Two best practices for software testing that have gained impressive footing over the last few years are Continuous Integration and Continuous Deployment.
Continuous Integration is a software development practice where members of a team integrate their work frequently; usually each person integrates at least daily
– leading to multiple integrations per day. Each integration is verified by an automated build (including test), to detect integration errors as quickly as possible. This approach has proven to significantly reduce integration problems and allow teams to develop cohesive software more rapidly.
Teams practicing continuous integration seek two objectives:
• Minimize the duration and effort required by each integration
• Be able to deliver “at any moment” a product suitable for release
To do this requires an integration procedure that is reproducible and preferably automated. This is achieved through a mix of software process automation tools, version control tools, team policies and conventions. Having an inconsistent development build process will cost you a lot, so getting the workflow in order is one of the most critical steps any business or team can take.
Every step in your software development workflow that can be automated should be. You need this automation to be able to focus all your time on building your product and providing value to your customers. Unit and smoke testing is one of those steps where automation is significant. Automated software testing enables increased focus on new feature development and testing because the automation can quickly prove that your most important features still work as you expect. This provides more time spent on features that delight users, deliver new functionality and/or generate revenue.
Unit test your software interfaces
• Methods/API calls
• Database calls
Smoke test your core functionality
• What are the typical workflows?
• What features do users go through often?
• What steps do users go through often?
Continuous Deployment is the next step of continuous integration, focused on minimizing lead time and elapsed time between one new line of code and a new code being used by live users in production.
To achieve continuous deployment, the team relies on infrastructure that automates various steps leading up to deployment, so that after each step of integration meets the new release criteria, the live application is updated with new code.
The key benefits for continuous deployment are reducing lead time, with two important effects:
• Earlier return on investment for each feature after it is developed, which reduces the need for large capital investments
• Earlier feedback from users on each new feature as it is released to production, which affords techniques such as parallel (or A/B) testing to determine what users prefer