In traditional software development environments, test levels like unit, integration, system, end-to-end and UAT tests are commonly used to ensure that there is no repetition between the different phases of the development life cycle.
However, Agile testing is different. Testing is no longer a separate phase. All team members must work together to get work done and most often test levels are defined as part of the Definition of Done. For example:
Incorporated unit tests in DoD
All unit tests automated and checked in.
All unit tests executed and pass 100%.
Unit test code reviewed.
100% unit tests coverage.
Incorporated integration tests in DoD
All bugs found reported and fixed.
All automated tests are integrated into the CI system.
There are no critical issues open.
Tests cover both positive and negative tests.
Incorporated system tests in DoD
Functional and non-functional tests covered.
Stories tested end-to-end.
Testing was done using customer data.
Testing was done on a production-like environment.
Bugs identified, reported, fixed and verified.
All Tests automated and checked in.
Incorporated UAT tests in DoD
Tests approved and reviewed by the customer.
Tests executed on customer environment.
Customer feedback used as an input for future sprints.
Agile doesn’t have separate test levels. Different test layers can run in parallel.
All team members commit to the testing effort based on their own capabilities.
The term “test levels” is no longer suitable in Agile software development because it is an anti-pattern for a clear deviation between programmers and testers.
On an Agile team, everybody has the same responsibility to make the team successful.
The ‘Whole-Team’ approach to testing is crucial for the team to be able to adopt Agile testing.
Agile testing should cover all test levels, which contribute to the overall quality of the product.