Agile Testing - Quadrants
Agile Testing - Quadrants Framework
Section titled “Agile Testing - Quadrants Framework”Similar to traditional software development, Agile testing encompasses various test levels to ensure comprehensive quality. These typically include:
- Unit Testing: Verifying individual components or modules in isolation. Primarily developer-led.
- Integration Testing: Testing the interfaces and interactions between integrated components or services.
- System Testing: Testing the complete, integrated system to verify it meets specified requirements (functional and non-functional).
- User Acceptance Testing (UAT): Validating that the system meets the needs and expectations of the end-users or customers.
Understanding Test Levels in an Agile Context
Section titled “Understanding Test Levels in an Agile Context”Unit Testing
Section titled “Unit Testing”- Performed by developers alongside coding, often using TDD.
- Focuses on small, isolated pieces of code (methods, classes).
- Automated tests ensure high code coverage and provide rapid feedback.
- Essential for building a stable foundation and enabling safe refactoring.
Integration Testing
Section titled “Integration Testing”- Performed as components are integrated, often continuously within CI/CD pipelines.
- Tests interactions between modules, services (e.g., API calls), or with external systems.
- Can include contract testing in microservices architectures to ensure service compatibility.
- Largely automated to provide quick feedback on integration issues.
System Testing
Section titled “System Testing”- Conducted on the fully integrated system, simulating end-to-end user scenarios.
- Verifies both functional requirements (user stories, features) and non-functional requirements (performance, security, usability).
- Often involves a mix of automated and manual (exploratory) testing.
- Typically performed in a production-like environment.
User Acceptance Testing (UAT)
Section titled “User Acceptance Testing (UAT)”- Often conducted at the end of each iteration (Sprint Review) and/or before a major release.
- Performed by product owners, stakeholders, or actual end-users.
- Focuses on business validation and ensuring the product delivers the expected value.
- Feedback from UAT is crucial for subsequent iterations.
Classifying Tests: Purpose and Audience
Section titled “Classifying Tests: Purpose and Audience”To effectively plan and prioritize testing, it’s helpful to classify tests based on their primary purpose and intended audience. We can consider two dimensions:
- Guiding Development vs. Critiquing the Product: Some tests are written to help guide the development process (e.g., TDD, BDD), while others are designed to evaluate the finished product and find defects.
- Business-Facing vs. Technology-Facing: Some tests are described in business terms and are understandable by non-technical stakeholders, while others use technical language and focus on the underlying technology.
Business-Facing Tests
Section titled “Business-Facing Tests”These tests are framed using business domain language. They answer questions about whether the system behaves as the business expects and delivers value to users. Examples include acceptance tests derived from user stories or BDD scenarios.
Technology-Facing Tests
Section titled “Technology-Facing Tests”These tests are framed using technical language and focus on the internal workings, architecture, and non-functional aspects of the system. Programmers and technical testers primarily use these to verify code correctness, component interactions, performance, and security. Examples include unit tests, API contract tests, and performance tests.
The Agile Testing Quadrants
Section titled “The Agile Testing Quadrants”Brian Marick introduced the Agile Testing Quadrants as a model to help teams think about the different types of tests needed and to ensure comprehensive test coverage. It combines the two dimensions mentioned above: (Business-Facing vs. Technology-Facing) and (Guiding Development vs. Critiquing the Product).
The quadrants provide a taxonomy for categorizing tests and help teams plan a balanced testing strategy. They are typically numbered Q1, Q2, Q3, and Q4:
A textual representation of the Agile Testing Quadrants:
Top-Left (Q1): Technology-Facing tests that Guide Development
- Focus: Internal quality, code correctness, component behavior.
- Tests: Unit tests, component tests (e.g., testing individual classes, modules, or microservices in isolation).
- Primary Goal: Support developers in building the code correctly.
- Automation: Almost always automated, forming the base of the test automation pyramid.
- Tools/Techniques: xUnit frameworks (JUnit, NUnit, PyTest), mocking/stubbing frameworks.
Top-Right (Q2): Business-Facing tests that Guide Development
- Focus: External quality, feature behavior, user requirements.
- Tests: Functional tests, examples, story tests, prototypes, simulations, API-level business workflow tests.
- Primary Goal: Ensure the team is building the right product by validating business rules and user scenarios.
- Automation: Often automated. This is where BDD and ATDD practices shine.
- Tools/Techniques: BDD frameworks (Cucumber, SpecFlow), UI automation tools (Selenium, Cypress, Playwright for E2E scenarios), API testing tools for business workflows.
Bottom-Right (Q3): Business-Facing tests that Critique the Product
- Focus: User experience, suitability, real-world usage.
- Tests: Exploratory testing, usability testing, user acceptance testing (UAT), alpha/beta testing, scenario-based testing.
- Primary Goal: Evaluate the product from an end-user perspective and provide feedback on its fitness for purpose.
- Automation: Primarily manual, as they often require human observation, intuition, and domain expertise.
- Tools/Techniques: Checklists, personas, session-based test management, user feedback tools.
Bottom-Left (Q4): Technology-Facing tests that Critique the Product
- Focus: Non-functional characteristics like performance, security, reliability, scalability, maintainability.
- Tests: Performance tests, load tests, stress tests, security vulnerability scans, infrastructure tests, recovery tests, chaos engineering experiments.
- Primary Goal: Verify the system’s operational aspects and technical robustness.
- Automation: Often automated using specialized tools.
- Tools/Techniques: Performance testing tools (JMeter, K6, Gatling), security scanning tools (OWASP ZAP, Veracode), monitoring tools, infrastructure automation tools.
The Agile Testing Quadrants help teams ensure a holistic testing approach, covering all necessary aspects of quality. It’s not a rigid prescription, but a guide to stimulate discussion and planning about ‘what testing to do when’ to support the team’s goals.