Skip to main content

Search...

Test Levels: From Unit Testing to Acceptance Testing

Good testing is not a random process. Test levels give it structure, focus and clear responsibilities.

What Are Test Levels?

Test levels describe distinct phases in the test process, each with objectives of its own. They are not simply steps in a sequence; each level looks at a different aspect of the software system: every level has its own test objectives, its own test objects, its own test basis and a characteristic family of defects it uncovers. And it uncovers them precisely because that is where they arise.

The idea behind this is pragmatic: a defect found early is cheaper than one discovered late. Each test level is arranged to catch errors on the layer where they usually originate. Bugs inside a component surface in component testing. Problems between components become visible in component integration testing, while system integration testing covers interfaces to other systems and external services. System failures and non-functional deficiencies belong in system testing. Whether the system ultimately delivers what the customer needs is answered by acceptance testing. The levels complement one another, but a project does not have to execute all of them in one rigid sequence.

Test levels are also a planning tool, and in that second role they tend to be underestimated. Deciding at the start of a project which levels will be covered, and how, creates clarity about resources, responsibilities and objectives before the first line of code exists. The discussion about test levels forces a team to say four things out loud: What is tested? By whom? On what basis? At what point in time? Those questions otherwise stay open until answering them becomes uncomfortable.

The Five Test Levels

The Five Test LevelsChain of the five test levels from left to right: Component Testing (test object classes and functions, responsible developers), Component Integration Testing (test object modules and services, responsible often developers), System Testing (test object complete system, responsible test team), System Integration Testing (test object external systems, responsible test team with integration and operations teams), Acceptance Testing (test object system from the user’s perspective, responsible customer and users).The Five Test Levels1ComponentTestingTest objectclasses, functionsResponsibledevelopers2ComponentIntegrationTestingTest objectmodules, servicesResponsibleoften developers3System TestingTest objectcomplete systemResponsibletest team4SystemIntegrationTestingTest objectexternal systemsResponsibletest team withintegration/operations5AcceptanceTestingTest objectuser perspectiveResponsiblecustomer, users

Swipe right or use the arrow keys to see the full graphic.

The following classification into five levels has become a widely shared map, used among others by the ISTQB Foundation Level. It is not binding: teams can merge levels, drop them or define their own.

Component Testing

Component testing, also called unit testing or module testing, validates individual software components in isolation from the rest of the system. Its test objects are classes, functions, modules or other discrete units. Its test basis consists of component specifications, design models and the source code itself. The defects typical of this level grow out of the inner logic of a unit: incorrect algorithms, sloppy boundary value handling, faulty calculations, unhandled exception cases.

Developers usually own component testing, supported by frameworks such as JUnit for Java, pytest for Python or NUnit for .NET. So that a component can genuinely be examined in isolation, stub and mock objects stand in for its external dependencies. All of the diagnostic value hangs on this isolation: a test that does not run in isolation always exercises the dependencies as well, and then it becomes impossible to say where a defect really sits. Component testing is the fastest and least expensive level. A defect found here costs only a fraction of what it would cost in system testing, let alone in production.

Component Integration Testing

Component integration testing validates interfaces and interactions between integrated components within one system. It examines exactly the area where individually sound building blocks unexpectedly fail when they work together. Test objects can include collaborating classes, modules, services or subsystems.

The test basis consists of the software architecture, component specifications, interface descriptions and API documentation. Typical defects include incorrectly exchanged data, faulty call sequences, incompatible formats and error handling that breaks across component boundaries. Developers frequently own this level, and it is well suited to automation in continuous integration pipelines. An incremental approach has proven its worth: integrate and test the smallest sensible groups first, then widen the scope step by step.

System Testing

System testing examines the fully integrated system as a whole and validates it against its specified requirements. It is the most comprehensive level within the software-developing organization and the last before the system leaves the hands of those who built it. The test basis spans system specifications, requirements documents, risk assessments and use cases. Functional and non-functional requirements are covered in equal measure: performance, security, reliability, usability and compatibility all belong on this layer.

System testing is often performed by a test team with some or full independence from development. A different perspective can reveal different defects and challenge assumptions. The degree of independence is not an inherent property of the test level, however: it depends on risk, the development lifecycle and project context, and development teams can perform system testing as well.

System Integration Testing

System integration testing validates the interfaces and interactions between the system under test and other systems or external services. Examples include payment services, identity providers, partner APIs, hardware interfaces and shared data platforms. Unlike component integration testing, its focus therefore extends beyond the boundary of the individual system.

Its test basis includes the system architecture, cross-system interface contracts, protocol specifications, data-flow models and end-to-end workflows. Typical defects include incompatible protocols or formats, faulty authentication, incorrect call sequences and inadequate handling of timeouts or outages. Test teams often execute this level together with integration, operations and external partner teams. Suitable test environments or realistic service simulations are essential.

Acceptance Testing

Acceptance testing determines whether the system is fit for its intended use. It is typically carried out by the customer, the business departments or actual users. Its goal is formal confirmation that the system meets the agreed requirements. The test basis consists of user requirements, contracts, acceptance criteria and regulatory provisions. Acceptance testing comes in several forms: user acceptance testing (UAT), in which real users evaluate the system under realistic conditions; operational acceptance testing; alpha and beta testing; and regulatory acceptance testing in safety-critical domains.

Acceptance testing asks a fundamentally different question than system testing. System testing asks: “Does the system work as specified?” Acceptance testing asks: “Is this system what we actually need?” The distinction sounds subtle but has tangible consequences. A system can pass every system test and still fail acceptance if the specification did not capture what the users truly needed. Confuse the two questions and you end up holding a correctly built solution to a misunderstood problem.

Test Basis at Each Level

Each test level requires its own foundation from which its test cases are derived:

Test LevelTest Basis
Component TestingComponent specification, design, source code
Component Integration TestingSoftware architecture, component specifications, internal interface and API documentation
System TestingSystem specification, requirements documents, use cases, risk register
System Integration TestingSystem architecture, cross-system interface contracts, protocols, data-flow models
Acceptance TestingUser requirements, contracts, acceptance criteria, regulatory provisions

This clean separation prevents a mistake that is surprisingly common in practice: deriving system test cases from the code rather than from the requirements. Whoever draws test cases from the code describes only what the system already does. They confirm the system to itself, instead of checking whether it does the right thing. Only tests that grow out of the requirements measure the system against its intended purpose rather than against its own implementation.

Test Levels in the V-Model and Agile Projects

Test Levels in the V-ModelV-shaped diagram made of two diagonal branches. The left branch starts at the top left with User Requirements and runs via System Architecture, System Specification and Software Architecture diagonally down to Component Specification at the bottom vertex. The right branch starts at the same vertex at Component Testing and runs via Component Integration Testing, System Testing and System Integration Testing diagonally up to Acceptance Testing at the top right. Dashed horizontal lines connect each development phase to its corresponding test level at the same height; the pair System Specification and System Testing in the middle is highlighted.Test Levels in the V-ModelDevelopment phases (left) and test levels (right) comparedUser RequirementsAcceptance TestingSystem ArchitectureSystem IntegrationTestingSystemSpecificationSystem TestingSoftwareArchitectureComponentIntegration TestingComponentSpecificationComponent TestingDevelopment phasesTest levels

Swipe right or use the arrow keys to see the full graphic.

The V-model maps each development phase to a test phase and thereby makes the correspondence between building and checking visible. Component specification and component testing sit on one level, system specification and system testing face each other. From that symmetry follows one insight above all: test activities must be planned early. The test basis for system testing is created the very moment the system specification is written. Not once implementation is complete.

In agile projects the test levels no longer run sequentially. They overlap and proceed in parallel, without the underlying concept losing any of its validity. Component and component integration tests run automatically in the CI pipeline. System tests take place in staging environments, often several times per sprint. System integration tests exercise external interfaces and cross-system workflows there or in dedicated integration environments. Acceptance tests happen in sprint reviews or in dedicated validation cycles. What has shifted is the timing and the organizational boundaries, not the levels themselves. Shift-Left, in this context, means starting test activities earlier in the development process. Write system test cases when the requirements emerge, not when implementation is finished. That, however, presupposes that testers and test teams are involved in requirements work early, instead of waiting at the end of the chain for finished artifacts.

The Test Pyramid as a Complement

The test pyramid by Mike Cohn describes a different dimension from the test levels: the desired distribution of automated tests. Many fast unit tests at the base, service and API integration tests in the middle, only a few slow UI tests at the top. The pyramid is therefore not an alternative to test levels but an automation model that answers a question entirely of its own.

In practice the two models complement each other, because they support different decisions. Test levels determine what is tested at which layer and who carries responsibility for it. The test pyramid offers guidance on how to prioritize automation investments: many stable, fast tests in the lower levels, few but carefully chosen tests in the upper ones. Confuse the two, or play them off against each other, and you lose the strength of both.

The pyramid is at its most valuable as a discussion tool, by the way. When a team walks through it for its own system, it becomes visible which tests run on which layer, and why. The layers are inspiration, not prescription: every team cuts them to fit its own system. And the end result does not have to be a pyramid at all. If a different distribution makes more sense, then the different distribution is the right one.

Interactions: Test Levels and Test Types

Quality Characteristics by Test Level: A Focus MatrixFocus matrix of the five test levels against four quality characteristics (functionality, performance, security, usability) with three levels of emphasis instead of a yes/no mapping: main focus, selective or rare. Component Testing has main focus on functionality, selective checking of performance and security, rare usability checks. Component Integration Testing has main focus on functionality and security, selective performance, rare usability. System Testing has main focus on all four characteristics. System Integration Testing has main focus on functionality, performance and security, selective usability. Acceptance Testing has main focus on functionality and usability, selective performance and security. All four characteristics can in principle be checked at every test level; the matrix only shows where the usual focus lies, not an exclusion list.Quality Characteristics by Test LevelEvery characteristic can, in principle, be tested at every level. What differs is where the main focus lies.Quality CharacteristicsFunctionalityPerformanceSecurityUsabilityComponent TestingComponent Integration TestingSystem TestingSystem Integration TestingAcceptance Testingmain focusselectiverare

Swipe right or use the arrow keys to see the full graphic.

Test levels and test types form two independent dimensions that intersect rather than replace one another. All test types can be applied at all test levels. What changes from level to level is not whether a type applies but what shape it takes. At component level, performance asks: how long does a single function take under load? At system level: how does the complete system behave under realistic load profiles? The same property, entirely different questions.

One clarification belongs here: test types in the narrow sense are functional testing, non-functional testing, black-box testing and white-box testing. Performance, security and usability are quality characteristics per ISO 25010, the things non-functional testing examines, one level below. For planning purposes it is exactly this characteristics level that proves useful, which is why the following matrix works with it. It is a focus table, not a permission table: it shows where a quality characteristic usually has its main emphasis, not where it may exclusively be tested.

Test LevelFunctionalityPerformanceSecurityUsability
Component Testingmain focusselectiveselectiverare
Component Integration Testingmain focusselectivemain focusrare
System Testingmain focusmain focusmain focusmain focus
System Integration Testingmain focusmain focusmain focusselective
Acceptance Testingmain focusselectiveselectivemain focus

Read the matrix as a list of prohibitions and you build in exactly the gaps it is meant to expose. A security problem that could surface in component testing otherwise waits until system testing. And a performance problem rooted in the architecture can hardly be fixed economically once system testing is done. Read as a focus table, the matrix does exactly what a planning tool should: it makes visible where each characteristic gets how much attention, and it forces the conversations early that would otherwise happen under pressure.

From Practice

In the projects I work with, the test level matrix is often the first shared step. Not because the model would surprise anyone. The value lies in the conversation: the moment the matrix is on the table, it becomes visible which test levels are not actually happening, and why. That clarity arrives before the project really gets underway. And that is exactly when it is worth the most.

Frequently Asked Questions

A widely used classification names five test levels: component testing, component integration testing, system testing, system integration testing and acceptance testing. That number is not set in stone: there can be additional test levels, and teams can define their own. Which levels a particular project needs depends on its context.

No. The selection of relevant test levels depends on context, especially risk, system complexity and contractual requirements.

The V-model pairs each development phase with a corresponding test phase. Component tests correspond to component specifications, system tests correspond to system requirements. The model makes clear that test activities must be planned early.

Test levels describe phases in the test process with distinct objectives and responsibilities. The test pyramid by Mike Cohn is an automation model that describes the desired distribution of automated tests: many fast unit tests at the base, few slow UI tests at the top.

Component and component integration tests are typically owned by developers. System and system integration tests are often owned by test teams, with integration or operations teams involved for external interfaces. Acceptance tests are executed by the customer, business departments or actual users. The precise allocation depends on the project context.

Apply the foundations of testing with confidence

The ISTQB Foundation Level connects test levels, test techniques and test management in a practical, systematic programme.