Software Testing Taxonomy
A comprehensive map of testing types, strategies and practices.
-
Simulates full user journeys through the entire stack — UI through to database and external services. Slow but highest confidence. Tools: Playwright, Cypress.
-
Complete assembled system tested technically end-to-end. All real dependencies wired. Validates system-level behaviour.
-
Tests interaction between two or more components, services, or systems. Verifies that interfaces, data flows, and contracts work correctly.
-
Tests a self-contained deployable/renderable unit in its own context — e.g. a React component with Testing Library, or a microservice with a test container. Broader than unit, narrower than integration.
-
Narrowest scope. Single function, method, or class in complete isolation. All dependencies mocked/stubbed. Fastest and most numerous tests in a healthy suite.
-
Tester has full visibility of internal code. Tests are written against implementation logic, control flow, and code paths.
-
Tester has no knowledge of internals. Tests are driven purely by specification, inputs and expected outputs.
-
Partial internal knowledge. Combines white and black box — common in integration and API testing.
-
Verifies that a producer (API/service) honours the contract agreed with its consumers. Critical in microservices. Tools: Pact.
-
Automatically introduces small code faults (mutations) to verify existing tests detect them. Measures test suite effectiveness beyond coverage metrics.
-
Umbrella category covering load, stress, soak, and spike testing. Evaluates responsiveness, throughput, and stability.
-
Tests behaviour under expected peak concurrent user load. Validates SLAs and response time targets.
-
Pushes the system beyond normal capacity to find the breaking point and observe failure modes.
-
Sustained load over an extended period. Detects memory leaks, connection pool exhaustion, and gradual degradation.
-
Sudden, extreme load increase. Tests auto-scaling, recovery behaviour, and elasticity.
-
Identifies vulnerabilities, threats, and exploitable weaknesses. Includes SAST, DAST, penetration testing, and dependency auditing.
-
Ensures usability for people with disabilities. Tests against WCAG 2.1/2.2 standards using tools like axe, Lighthouse.
-
Verifies correct behaviour across browsers, OS versions, devices, screen sizes, and third-party integrations.
-
Real users interact with the system to surface UX friction, confusion, and points of failure in user flows.
-
Tests are scripted and executed by tooling. Enables repeatability, CI/CD integration, shift-left practices, and rapid feedback.
-
A human tester executes cases without automation. Essential for exploratory, usability, and first-pass UAT.
-
Unscripted human investigation. Tester simultaneously designs and executes tests. Highly effective for discovering edge cases.
-
Screenshots are captured and pixel-diffed against baselines. Catches unintended UI changes. Tools: Percy, Chromatic, Playwright.
-
Serialises component output (HTML/JSON/DOM) and compares to a stored snapshot. Fast to detect unintended rendering changes.
-
Test-Driven Development. Red → Green → Refactor cycle. Tests are written before implementation, driving design from intent.
-
Behaviour-Driven Development. Given/When/Then syntax bridges technical and business language. Tools: Cucumber, Jest-Cucumber.
-
Acceptance Test-Driven Development. Acceptance criteria are agreed and encoded as executable tests before a story begins.
-
Philosophy of moving testing earlier in the SDLC. Defects found earlier are dramatically cheaper to fix.
-
Testing is embedded into the CI/CD pipeline. Every commit triggers automated test execution, providing rapid feedback.