Test Levels and Test Types
Chapter Thirty-Two
Syllabus topic Module 1, "Software Testing Strategies: Strategic approach to software testing"
Pages 177 to 182 of 622
In one line
A test level says where in development the testing happens and on how big a piece of the software; a test type says what the testing is about; every test sits somewhere on both, and every change calls for two more kinds of test, confirmation that the fix works and regression testing that nothing else broke.
In the wording a student can write in an examination: a test level is "one of a sequence of test stages, each of which is typically associated with the achievement of particular objectives and used to treat particular risks" (ISO/IEC/IEEE 29119-2:2021). The ISTQB syllabus names five: component (unit) testing, component integration testing, system testing, system integration testing and acceptance testing. A test type is "testing that is focused on specific quality characteristics" (the same standard), and the syllabus names four: functional, non-functional, black-box and white-box testing, all of which "can be applied to all test levels". Confirmation testing "confirms that an original defect has been successfully fixed"; regression testing "confirms that no adverse consequences have been caused by a change".
The five test levels
The ISTQB syllabus says levels are distinguished by five attributes: the test object, the test objectives, the test basis, the defects and failures looked for, and the approach and responsibilities. Taking each level through them gives the table that answers most questions about levels.
| Level | Test object | Main objective | Test basis | Typical defects | Usually done by |
|---|---|---|---|---|---|
| Component (unit) | One unit, in isolation | Each unit works as designed | Detailed design, the code | Wrong calculation, a missing case, bad error handling | Developers |
| Component integration | Units combined, and their interfaces | The units work together | Interface and architecture design | Wrong parameters, mismatched data formats, wrong call order | Developers |
| System | The whole system | It meets its specification, end to end | Requirements specification, use cases | Wrong end-to-end behaviour, missing functions, performance and security failures | An independent test team |
| System integration | The system with external systems | Its interfaces with other systems work | Interface agreements, protocols | Messages misread or lost between systems | Test team, with the other system's owners |
| Acceptance | The system in its intended use | It is fit to be accepted and deployed | Business needs, user requirements, contracts | Requirements that were wrong or missing; a system not fit for use | Users and customers |
The standards define each level in a sentence.
- Component testing is "testing of individual hardware or software components" (IEEE 1012-2024). The syllabus adds that it "often requires specific support, such as test harnesses or unit test frameworks" and "is normally performed by developers in their development environments".
- Integration testing is "testing in which software components, hardware components, or both are combined and tested to evaluate the interaction among them" (ISO/IEC 29110-5-1-2:2025). Component integration testing, in the syllabus's words, "is heavily dependent on the integration strategy like bottom-up, top-down or big-bang".
- System testing is "testing conducted on a complete, integrated system to evaluate the system's compliance with its specified requirements" (ISO/IEC 29110-5-1-2:2025).
- System integration testing "focuses on testing the interfaces of the system under test and other systems and external services" (ISTQB).
- Acceptance testing is "formal testing conducted to enable a user, customer, or other authorized entity to determine whether to accept a system or component" (IEEE 1012-2024). Its forms, in the syllabus, are user acceptance testing, operational acceptance testing, contractual and regulatory acceptance testing, and alpha and beta testing.
Test Levels and Test Types
The four test types
Where a level is a place, a type is a purpose. The ISTQB syllabus names four.
- Functional testing "evaluates the functions that a component or system should perform". Its objective is checking "the functional completeness, functional correctness and functional appropriateness". It asks what the system does.
- Non-functional testing "evaluates attributes other than functional characteristics of a component or system", which the syllabus calls testing "how well the system behaves": performance efficiency, compatibility, usability, reliability, security, maintainability, portability and safety, the characteristics of ISO/IEC 25010 from Chapter Twenty, on the quality model today.
- Black-box testing "is specification-based and derives tests from documentation not related to the internal structure of the test object". ISO/IEC/IEEE 29119-1 calls the same thing specification-based testing, in which "the principal test basis is the external inputs and outputs of the test item".
- White-box testing "is structure-based and derives tests from the system's implementation or internal structure (e.g., code, architecture, work flows, and data flows)". Its objective is "to cover the underlying structure by the tests to an acceptable level". The standard's name is structure-based testing.
Notice that the four are not one list of alternatives. Functional and non-functional divide testing by what is being evaluated; black-box and white-box divide it by where the tests come from. A single test can be functional and black-box (a fee case from the fee table) or non-functional and white-box (a timing test aimed at one slow loop). Chapter Fifty-Two, on black-box and white-box testing, starts Module 2 with the techniques of each family.
The grid: every level, every type
The syllabus says the four types "can be applied to all test levels, although the focus will be different at each level." On ExamReg the grid looks like this.
| Level | Functional | Non-functional | Black-box | White-box |
|---|---|---|---|---|
| Component | The fee function returns Rs 500 for 8 days late | The fee function answers in under a millisecond | Fee cases from the fee table | Every branch of the fee function executed |
| Component integration | The fee calculator passes the right total to the payment adapter | The adapter times out safely if the gateway is slow | Cases from the interface specification | Every call path between the two units exercised |
| System | A student registers, pays and downloads a hall ticket | 500 students on the last date; one student cannot see another's form | Scenarios from the requirements | Every workflow step of the registration process covered |
| System integration | A payment made on ExamReg is confirmed by the gateway | The link to the gateway recovers after a dropped connection | Cases from the gateway's interface agreement | Every message type in the exchange covered |
| Acceptance | The exam cell confirms the fee rules match their note | First-year students complete the form unaided | User scenarios | Rarely used |
Test Levels and Test Types
Confirmation testing and regression testing
Two more kinds of testing are defined not by level or type but by what triggers them: a change. The syllabus says that after a change, "Testing should then also include confirmation testing and regression testing."
Confirmation testing, which ISO/IEC/IEEE 29119-2 calls retesting, is "testing performed to check that modifications made to correct a fault have successfully removed the fault". In the syllabus's version it "confirms that an original defect has been successfully fixed", by executing the tests that failed because of it and, where needed, new tests covering the change.
Regression testing is "testing performed following modifications to a test item or to its operational environment, to identify whether failures in unmodified parts of the test item occur" (ISO/IEC/IEEE 29119-1:2022). The syllabus stresses its scope: adverse consequences "could affect the same component where the change was made, other components in the same system, or even other connected systems", so "It is advisable first to perform an impact analysis to recognize the extent of the regression testing."
Worked example: a fix that passes, and a regression it causes
ExamReg's test team reports that a form submitted exactly 15 days late is refused, although the rule says it pays Rs 500. The developer fixes the first condition and, while the file is open, "tidies" another line. The program runs the confirmation test on the fix, then reruns the rest of the suite as a regression test.
def late_fee_before(days_late): # the build tested: refuses a form 15 days late
if days_late < 0 or days_late >= 15:
return "refused"
if days_late <= 0:
return 0
if days_late <= 7:
return 100
return 500
def late_fee_after(days_late): # the developer's fix, with a tidy-up on the side
if days_late < 0 or days_late > 15:
return "refused"
if days_late <= 0:
return 0
if days_late <= 8: # "tidied" while the file was open
return 100
return 500
suite = {"TC-01": (-1, "refused"), "TC-02": (0, 0), "TC-03": (1, 100), "TC-04": (7, 100),
"TC-05": (8, 500), "TC-06": (15, 500), "TC-07": (16, "refused")}
failed_before = [t for t, (d, e) in suite.items() if late_fee_before(d) != e]
print("failed on the build tested:", ", ".join(failed_before))
for t in failed_before: # confirmation testing
d, e = suite[t]
got = late_fee_after(d)
print(f"confirmation {t} ({d} days late): expected {e}, got {got}:",
"pass" if got == e else "FAIL")
rest = [t for t in suite if t not in failed_before] # regression testing
broken = [t for t in rest if late_fee_after(suite[t][0]) != suite[t][1]]
print(f"regression: {len(rest)} tests rerun, {len(broken)} failed")
for t in broken:
d, e = suite[t]
print(f" {t} ({d} days late): expected {e}, got {late_fee_after(d)}")Test Levels and Test Types
failed on the build tested: TC-06
confirmation TC-06 (15 days late): expected 500, got 500: pass
regression: 6 tests rerun, 1 failed
TC-05 (8 days late): expected 500, got 100The confirmation test passes: the reported failure is gone. A team that stopped there would ship a new defect, because the "tidy-up" moved day 8 into the Rs 100 band. Only the regression run, rerunning tests that had passed before and whose code nobody meant to change, catches it. This is why the syllabus calls regression suites "a strong candidate for automation": they are rerun after every change, they grow with every release, and the failures they catch are exactly the ones nobody is looking for. Chapter Thirty-Nine, on regression testing, smoke testing and continuous integration, runs them automatically on every build.
| Confirmation testing | Regression testing | |
|---|---|---|
| Question | Is the reported defect really fixed? | Did the change break anything else? |
| Tests run | The tests that failed, and new tests for the change | Tests that passed before, chosen by impact analysis |
| Scope | The fixed defect | The changed component, other components, even other systems and the environment |
| Size over time | Small, one defect at a time | Grows with every release, so it is automated |
Where each kind of testing is taught in this book
The rest of Module 1 goes through the levels, and Module 2 through the techniques, in this order:
- Static testing: the kinds of V&V and reviews, inspection and the walkthrough, Chapters Twenty-Seven to Thirty.
- Unit testing: its purpose, techniques, frameworks and best practices, Chapters Thirty-Three to Thirty-Six.
- Integration testing: why units fail together, the integration approaches, regression and smoke testing with continuous integration, and the challenges of integration, Chapters Thirty-Seven to Forty.
- Validation and acceptance testing: validation testing and acceptance testing with alpha and beta, Chapters Forty-One and Forty-Two.
- System testing: system testing end to end, the system test types, load testing and cross-browser testing, Chapters Forty-Three to Forty-Six.
- Debugging, which follows a failure at any level, Chapter Forty-Seven.
- Test automation: automation, browser drivers, data-driven testing and the page object model, Chapters Forty-Eight to Fifty-One.
- Black-box, white-box and experience-based techniques in Module 2, from black-box and white-box testing in Chapter Fifty-Two to checklist-based testing in Chapter Sixty-Four.
Test Levels and Test Types
What it does not mean
A test level is not a test type. "System testing" says where; "performance testing" says what; a system-level performance test is both.
White-box testing is not confined to unit testing. Structure can be covered at every level: code at component level, call paths at integration level, workflows at system level.
Confirmation testing is not regression testing. The first checks the fix; the second checks everything the fix might have disturbed.
Regression testing is not only for code changes. A change to the operating system, the database or a connected system can break unchanged code, and the definition includes changes to the "operational environment".
Quick revision
- Test level: a test stage with its own objectives and risks. Five: component, component integration, system, system integration, acceptance.
- Levels differ in test object, objectives, test basis, defects and failures, and approach and responsibilities.
- Test type: testing focused on specific quality characteristics. Four: functional (what), non-functional (how well), black-box (from the specification), white-box (from the structure). All four apply at every level.
- Confirmation testing (retesting): checks the fix removed the fault. Regression testing: checks unmodified parts still work after a change, scoped by impact analysis, and automated.
- Worked example: the fix for day 15 passed its confirmation test; regression caught the new day-8 defect.
Test yourself
1. Name the five test levels and give the test object of each. Component testing (a single unit in isolation), component integration testing (units combined and their interfaces), system testing (the whole system), system integration testing (the system's interfaces with external systems) and acceptance testing (the system in its intended use).
2. Name the four test types and state what each evaluates. Functional testing evaluates what the system does; non-functional testing how well it behaves (performance, usability, security and so on); black-box testing derives tests from the specification, not the internal structure; white-box testing derives them from the internal structure, aiming to cover it.
3. Can a test type be applied at more than one level? Give an example. Yes; all four types apply at all levels. Performance, a non-functional type, can be tested at component level (the fee function's speed) and at system level (500 students on the last date).
4. Distinguish confirmation testing from regression testing. Confirmation testing reruns the tests that failed, and new tests for the change, to check that a defect has been fixed. Regression testing reruns tests that passed before, chosen by impact analysis, to check that the change has not broken anything else in the component, the system, connected systems or the environment.
Test Levels and Test Types
5. Why is regression testing a strong candidate for automation? Because the same tests are rerun after every change, the suite grows with every release, and running it by hand each time would be slow and error-prone; automated in continuous integration, it runs on every build.
The rest of this subject
These notes are cut from the University's printed syllabus. Open the syllabus itself, or the past papers, for the same subject.