Waterfall and the V-Model
The waterfall model is a sequential development lifecycle: requirements, design, implementation, testing and deployment follow one another, and each phase is finished and signed off before the next begins. Picture a bank contracting a supplier for a loan portal: the requirements are agreed and frozen, design follows, then months of coding, and only then does a test phase run the software for the first time.
The V-model is sequential too, but it makes testing visible from the start. Its left arm descends through ever more detailed specifications, coding sits at the point, and the right arm climbs back through the test levels. Each specification is paired with the test level that checks against it, so the portal’s acceptance tests are designed alongside the business requirements, long before coding.
Why it matters
Many projects still run this way, especially when a contract fixes the scope, when a regulator or customer expects documented evidence for every phase, or when software is part of a hardware or infrastructure project. On such a project you need to know which documents are your test basis, when to review them, which test levels you own and what the entry and exit criteria of your phase are.
The models also explain risks every tester meets. In a strict waterfall, dynamic testing comes last, so a requirement misunderstood in month one may surface as a failure months later, when the fix touches documents, design and code. And when development runs late but the release date stays, the test phase shrinks. Knowing this lets you ask for counter-measures at the start.
Waterfall phases and where testing sits
Phase names vary between organisations, but a typical waterfall project looks like the list below. Each phase produces a work product, usually a document, that is reviewed, approved and then used as the fixed input of the next phase; later changes go through formal change control.
Testing has two places here. Dynamic testing runs the software, so it waits for the test phase near the end. Static testing examines work products without running them, so it can start in the first phase: CTFL v4.0 notes that in sequential models testers typically take part in requirement reviews, test analysis and test design early on.
- Requirements: the specification is written and signed off; the tester reviews it for ambiguity, gaps and testability and starts the test plan.
- Design: architecture and detailed design are produced; the tester reviews them and identifies test conditions and environment needs.
- Implementation: developers code and test their components; the tester designs test cases and prepares test data and the environment.
- Testing: the test team executes the tests on the integrated system, reports defects and runs confirmation and regression tests on the fixes.
- Deployment and maintenance: the release goes live, often after formal acceptance by the customer, and every later change needs its own testing.
The V-model: each development level has a test level
CTFL v4.0 lists both waterfall and the V-model as sequential development models. What the V-model adds is a one-to-one pairing: each specification on the way down has a test level on the way up that checks the built software against it.
Two timings matter. Test analysis and design for a level begin during the matching development phase, while its specification is being written, and testers review each draft as soon as it exists; CTFL v4.0 lists both as good practices in any lifecycle. Execution runs the other way, bottom-up after coding: component tests first, acceptance tests last. Early test design is the model’s main gift to QA, because turning a specification into concrete tests quickly exposes its vague or contradictory sentences.
In the terms of the lesson on verification and validation, testing the build against each specification is verification, and acceptance testing against real user needs is validation. CTFL v4.0 also splits integration into component integration and system integration testing, which the lesson on test levels covers.
- Business and user requirements ↔ acceptance testing: can the intended users do their work with the system?
- System requirements specification ↔ system testing: does the whole system behave as specified, including non-functional requirements such as performance?
- Architectural design ↔ integration testing: do components, services and external systems work together through their interfaces?
- Detailed design ↔ component testing (often called unit testing): does each component do what its design says, in isolation?
- Left arm: specification:1Business and user requirementsWhat the users and the business need
Feeds: Acceptance tests designed from it
Right arm: test level:Acceptance testingExecuted 4th, last: can the users do their work? - Left arm: specification:2System requirements specificationThe whole system, including non-functional needs
Feeds: System tests designed from it
Right arm: test level:System testingExecuted 3rd: the whole system against its specification - Left arm: specification:3Architectural designComponents and the interfaces between them
Feeds: Integration tests designed from it
Right arm: test level:Integration testingExecuted 2nd: interfaces and interactions - Left arm: specification:4Detailed designThe inside of each component
Feeds: Component tests designed from it
Right arm: test level:Component testingExecuted 1st, right after coding
Then:Coding sits at the point of the V; execution then climbs the right arm from component testing back to acceptance testing.
Conceptual model: document names vary by organisation, and CTFL v4.0 splits integration into component integration and system integration testing.
Worked example: an outpatient booking system
A group of clinics contracts a supplier to build an outpatient booking system at a fixed price, with a signed-off document for every phase. The project follows the V-model, and the tester joins in the requirements phase, not after coding.
As each document is approved, the tester derives tests for the paired level and records the links, so every requirement has a test and every test traces back to a requirement. Two of the four items below exposed a gap before any code existed.
- BR-2 "Patients can book online and receive a reminder" → acceptance test AT-2: pilot patients book real slots on their phones, and receptionists see the bookings in their daily list. Writing it raised an open question: when a patient books for a family member, whose phone receives the reminder?
- SR-14 "A slot can be booked by only one patient" → system test ST-14: two sessions book the same slot at the same moment; one succeeds and the other sees "Slot no longer available".
- AD-3 "Reminders go through an external SMS gateway" → integration test IT-3: with the gateway down, the booking must still be saved. The design did not say what happens to the reminder, so the tester raised a design defect before coding.
- DD-9 "
canCancel()returns true only while the start is more than 24 hours away" → component tests CT-9, written by the developer: 24 hours 1 minute, exactly 24 hours and 23 hours 59 minutes before the start, expectingtrue,falseandfalse.
Traceability: outpatient booking system (V-model)
Left arm (approved first) Right arm (executed later) Tests
BR-2 business requirement <-> acceptance testing AT-2
SR-14 system requirement <-> system testing ST-14.1 ST-14.2
AD-3 architectural design <-> integration testing IT-3.1 IT-3.2
DD-9 detailed design <-> component testing CT-9.1 .. CT-9.3
Designed: AT -> ST -> IT -> CT (as each document is approved)
Executed: CT -> IT -> ST -> AT (after coding, bottom-up)Try it: Requirements → Test Cases Try it: Requirements → Test Scenarios
Strengths and risks for QA
Neither model is good or bad in itself: each fits some contexts and brings predictable risks for testing.
- Strength: a stable, approved test basis. Tests trace cleanly to requirements, and coverage is easy to show to a customer or an auditor.
- Strength: clear gates. Entry and exit criteria, a formal test plan and a test completion report fit the phases naturally; CTFL v4.0 notes that in sequential models the exit criteria of one test level are often part of the entry criteria of the next.
- Strength of the V-model: early test design finds ambiguities and gaps in each specification before it is built.
- Risk: late feedback. Defects missed by the reviews surface late, when a fix touches documents, design and code. Counter: thorough reviews and early test design.
- Risk: a squeezed test phase. If coding overruns and the date is fixed, testing time shrinks. Counter: agreed entry criteria for the test phase and tests prioritised by risk.
- Risk: late validation and big-bang integration. Users may first see the software at acceptance testing, and integrating everything at once hides where failures come from. Counter: prototypes, user walkthroughs and incremental integration.
Common mistakes
- Believing testing starts when the code arrives. In both models, reviews, test planning and test design start in the first phases.
- Treating a signed-off document as correct. Approval means the content is agreed, not that it is free of defects; review it anyway.
- Mixing up the two orders of the V: tests are designed top-down as specifications are approved, but executed bottom-up.
- Testing every level against the same document instead of against each level’s own test basis.
- Accepting a shortened test phase silently instead of stating which risks will stay untested.
The QA perspective
On a sequential project, first clarify your place in the V: which test levels you own, the test basis for each, who signs off each phase, and the entry and exit criteria of the test phase. Ask for the requirements as soon as a draft exists; review comments are cheapest to act on before approval.
Record traceability from the start: each requirement linked to its tests, each defect to the requirement it breaks. When a change request arrives, those links show which tests to update and rerun, and progress reported against the plan keeps the release decision on facts rather than on the calendar.
Practice exercise
Place a project’s tests on the V
A municipality contracts a supplier for an online building-permit portal. The scope is fixed, every phase needs a signed-off document, and the project uses the V-model. The four excerpts below come from the approved work products, one from each level of the left arm; testing gets four weeks after coding ends, and the launch date is fixed.
For each work product, name its level on the left arm, the paired test level and one test idea. Then give the execution order and two QA risks of the plan, each with a counter-measure.
A "Citizens can apply for a building permit online and track its status without
visiting the municipality office."
B "An application cannot be submitted until every mandatory document is uploaded;
missing documents are listed by name."
C "The portal checks property ownership with the national land registry service."
D "calculateFee(area) returns 2 SAR per square metre, with a minimum fee of 200 SAR."- Match each work product (A to D) to its level on the left arm of the V.
- Name the paired test level and write one test idea for it.
- Write the order in which the four test levels will be executed.
- Name two QA risks in the plan and a counter-measure for each.
Show the model answer
A is a business requirement (it states what citizens need to achieve) → acceptance testing: real applicants apply for their own properties and follow the status to a decision without visiting the office, and municipality staff confirm they can process the applications.
B is a system requirement (behaviour of the whole system that a user can observe) → system testing: submit with one mandatory document missing; submission is blocked and that document is named; after uploading it, the submission succeeds.
C is architectural design (it names an interface to an external system) → integration testing: the land registry answers "owner not found" or does not answer at all; the portal shows a clear message and does not treat ownership as confirmed. If the design is silent on this, raise it now.
D is detailed design (the logic of one function) → component testing: calculateFee(50) returns 200 (the minimum, since 50 × 2 = 100) and calculateFee(150) returns 300; also ask what 0 or a negative area should do.
Execution order: component, integration, system, acceptance. Test design runs the other way: the acceptance tests could be designed from A while it was still being written, before B, C and D existed.
Risks, for example: a squeezed test phase before the fixed launch (counter: agree entry criteria now and prioritise tests by risk); late validation, because citizens first see the portal at acceptance testing (counter: a prototype walkthrough with a few applicants during design).
Frequently asked questions
Is the waterfall model still used?
Yes, where it fits: fixed-scope contracts, regulated or safety-related systems that need documented evidence for each phase, and projects tied to hardware or infrastructure that cannot change late. Many organisations also mix models, for example a sequential overall plan with iterative development inside the build phase.
Is the V-model just waterfall with testing added?
It is still sequential, but it changes when test work happens. In a plain waterfall, test analysis and design can be left until the test phase; in the V-model, each test level is planned and designed while its counterpart specification is written, which supports the principle of early testing.
Does one team perform every level of the V?
No. Typically developers perform component testing and developers or testers perform integration testing; system testing may be performed by an independent test team, and acceptance testing is ideally performed by the intended users or customer representatives. Who does what is agreed in the test plan.
References
- ISTQB Certified Tester Foundation Level (CTFL) v4.0The foundation syllabus of software testing: test levels and types, test design techniques, test management and tools.
- ISTQB GlossaryThe standard definitions of testing terms — test case, regression testing, severity, priority, boundary value analysis and the rest.
Practise with Mutqan tools
Convert a list of numbered requirements into traceable test cases with a requirement-to-test matrix.
Derive test scenarios from functional requirements with coverage mapping.
Score features by likelihood and impact, then generate a prioritised risk-based test plan.
Go deeper
- SDLC and STLC ExplainedLifecycle models and how testing differs in each
- How to Review RequirementsHow to review requirements and user stories: an 8-point checklist, red-flag words, a worked example with review comments, and where AI tools help.
- How to Write a Test PlanEntry, exit, suspension and resumption criteria
- End-to-End Product Quality AssuranceTest levels: unit, integration, system and acceptance
Your progress on this topic
Not started
Mark the topic complete when you have studied it and done the exercise.
Sign in to track your progress
Mark topics complete, continue where you left off and unlock specialisation exams.