Test Case Quality and Review
Test case review is static testing applied to testware: someone other than the author checks test cases against the test basis and an agreed checklist before they are run or added to a regression suite. The ISTQB Foundation syllabus lists test cases among the work products static testing can examine, so the review types from the requirements module apply here too.
Take a case titled "Cancel order" with the expected result "Order is cancelled correctly". Every field is filled in. A reviewer with the user story open sees that it names no order, traces to no acceptance criterion and cannot fail, because "correctly" is nothing you can observe.
Why it matters
A test case is run many times, and its result is what the team reports. A case with a vague expected result passes whatever the product does, so a real defect can reach production while the report says the requirement was tested. A missing precondition does the opposite: the case fails on a correct product and a developer chases a bug that does not exist.
Before execution, the fix is a few edited lines. Your test cases are also the visible record of your work: new team members learn the product from them and automation engineers turn them into scripts.
What makes a test case good
The ISTQB glossary describes a test case as preconditions, inputs, actions, expected results and postconditions, developed from test conditions. Any of these parts can be wrong, missing or unclear. There is no single standard list of quality attributes, but most review checklists come down to these:
- Traceable: it names the requirement, acceptance criterion or risk it covers.
- Correct: its expected result comes from the test basis, not from what the system does today.
- Unambiguous: two testers would perform the same actions and judge the result alike.
- Verifiable: each expected result names something observable, such as a value, a message or a status.
- Focused: it checks one behaviour, so a failure points at one cause.
- Independent and repeatable: it states or creates what it needs and gives the same result in any order.
- Maintainable, at the agreed level of detail: exact where the team needs exact values, with shared steps referenced rather than copied.
A test case review checklist
Review cases before their first run, before they join the regression suite, and when a requirement they trace to changes. For most cases an informal peer review is enough: another tester reads them with the story open.
Keep the checklist short and grow it from the defects you actually find. A starting point:
- Basis: does the case name what it covers, and does that item still say what the case assumes?
- Title: does it state one behaviour and its condition?
- Preconditions: is every required state written down, such as role, record status and settings?
- Test data: are exact, synthetic values given, or a named data set?
- Steps: is each step a clear action that a new team member could follow exactly as written?
- Expected results: is each one observable, specific and taken from the test basis?
- Focus and independence: does the case check one behaviour and run correctly on its own, in any order?
- The set: is every acceptance criterion covered, are negative and boundary cases present, and are there duplicates?
Try it: Requirements → Test Cases Try it: User Story → Test Cases
Defects that reviews find in test cases
Test cases have defects like any other work product. Each type below makes a case pass when it should fail, fail when it should pass, or cost time without adding coverage.
- Vague expected result ("works correctly", "an error is shown"): the case passes whatever happens.
- Expected result copied from the system: if that behaviour was wrong, the case now confirms the defect.
- Missing precondition or data: the case fails for reasons unrelated to the product, or passes only with the author’s own data.
- Several behaviours in one case: a failure does not show which behaviour broke.
- Hidden dependency: the case works only after another case has created its data.
- Outdated case: the requirement changed and the case did not.
- Duplicates: two cases test the same condition under different titles.
- Gaps in the set: an acceptance criterion, negative path or role with no case at all.
Worked example: reviewing an order cancellation case
Story ORD-31 lets a customer cancel an order before it ships. AC1: an order with status Placed or Paid can be cancelled from My orders after a confirmation. AC2: a cancelled order shows status Cancelled and a full refund to the original payment method starts. AC3: a Shipped order shows no Cancel order button.
A colleague wrote TC-ORD-07. You review it with the story open and mark each finding major (the case could give a wrong result) or minor (it is harder to read or maintain).
TC-ORD-07 for story ORD-31, before review
Part 1:ID: TC-ORD-07 Part 2:Title: Order cancellation Part 3:Requirement: - Part 4:Preconditions: User is logged in Part 5:Test data: Any order Part 6:Steps: 1. Open My orders and select the order 2. Click "Cancel order" and confirm Part 7: 3. Check the refund and that a shipped order cannot be cancelled Part 8:Expected result: Order is cancelled correctly and the refund works
- 1IDStable and unique, so bug reports and test reports can refer to it.Pass
- 2TitleNames a feature, not the behaviour under test.
Title: Paid order can be cancelled before it shipsminorCaution - 3RequirementNot traced: nobody can tell which acceptance criteria the case covers.
Requirement: ORD-31 AC1, AC2majorFail - 4PreconditionsSays nothing about the order: with a shipped order, the case fails on a correct product.
Her order ORD-1042 has status PaidmajorFail - 5Test dataA different order on every run, and no amount to check the refund against.
ORD-1042: 349.00 SAR, paid by cardmajorFail - 6Steps 1 and 2Clear actions a new team member could follow; the rework only names the dialog button.Pass
- 7Step 3Checks AC2 and AC3 at once, and AC3 needs a shipped order, so it gets its own case.
TC-ORD-08 (ORD-31 AC3)majorFail - 8Expected result“Correctly” and “works” cannot be observed, so the case cannot fail.
Status "Cancelled"; refund of 349.00 SAR "Started"majorFail - 9Not in the case: the rest of ORD-31No case covers AC3, or cancelling a Placed order that is not yet paid; the review adds two cases.
TC-ORD-08 (AC3), TC-ORD-09 (AC1)major · the setFail
Fail marks a major finding and Caution a minor one; the line under a part is its fix after the review.
- Passes: the ID, and steps 1 and 2, clear actions a new team member could follow. The rework only names the dialog button.
- Title, minor: it names a feature, not a behaviour. Suggested: "Paid order can be cancelled before it ships".
- Requirement, major: empty, although the case covers ORD-31 AC1 and AC2.
- Preconditions and test data, major: "Any order" may be a shipped one, which fails on a correct product, and gives no refund amount to check.
- Step 3, major: it checks AC2 and AC3 together, though AC3 needs a shipped order and its own case.
- Expected result, major: "correctly" and "works" cannot be observed, so the case cannot fail.
- The set, major: no case covers AC3, or cancelling a Placed order that is not yet paid.
Text version
ID: TC-ORD-07
Title: Order cancellation
Requirement: -
Preconditions: User is logged in
Test data: Any order
Steps:
1. Open My orders and select the order
2. Click "Cancel order" and confirm
3. Check the refund and that a shipped order cannot be cancelled
Expected result:
Order is cancelled correctly and the refund worksRecording findings and checking the rework
Log each finding where the author will see it: case ID, checklist item, what is wrong and a suggested fix. Comment on the case, not the person. Some findings are gaps in the requirement: AC2 promises a refund for every cancelled order, but a Placed order was never paid. Ask the product owner instead of guessing in the test case.
Then check the rework by comparing the old and new versions line by line. A common exit rule is no open major findings. The reworked case and the cases the review added:
ID: TC-ORD-07
Title: Paid order can be cancelled before it ships
Requirement: ORD-31 AC1, AC2
Preconditions: Customer sara.k@example.com is signed in
Her order ORD-1042 has status Paid
Test data: ORD-1042: 349.00 SAR, paid by card
Steps:
1. Open My orders and select ORD-1042
2. Click "Cancel order"
3. In the dialog, click "Yes, cancel"
Expected result:
- ORD-1042 shows status "Cancelled" in My orders
- The "Cancel order" button is no longer shown
- Order details show a refund of 349.00 SAR to the card, status "Started"
Added by the review:
TC-ORD-08 Shipped order shows no "Cancel order" button (ORD-31 AC3)
TC-ORD-09 Placed order that is not yet paid can be cancelled (ORD-31 AC1)Common mistakes
- Reviewing without the test basis open: you can check format but not correctness.
- Checking only that every field is filled in.
- Silently rewriting the author’s cases instead of logging findings, so nobody learns what changed or why.
- Vague or personal comments ("unclear", "you always forget preconditions") instead of the line, the checklist item and a fix.
- Reviewing cases one by one and never the set.
- Closing findings without checking the rework.
The QA perspective
On an agile team, a story’s cases are reviewed during the sprint, soon after they are written: another tester reads them against the acceptance criteria, and the story’s developer often spots wrong assumptions. Cases chosen for the regression suite get a second look, and when a requirement changes, traceability tells you which cases to review again.
Keep a light record: the findings, their status and the decisions on open questions. Review generated cases with the same checklist, because a generator knows structure, not your business rules.
Practice exercise
Review a test case for an email change
Review TC-PRF-03 below against story PRF-14 with this lesson’s checklist. Log each finding with its checklist item, major or minor, and a suggested fix.
Then rewrite the case and list the cases the set still needs.
PRF-14 Change the email address on my profile
AC1 The new email becomes active only after the customer opens the
confirmation link sent to it; until then the old email stays active.
AC2 The confirmation link expires 24 hours after it is sent.
AC3 An email that another account already uses is rejected with the
message "This email is already in use".
ID: TC-PRF-03
Title: Change email
Requirement: PRF-14
Preconditions: -
Test data: A new email
Steps:
1. Log in and go to Profile
2. Enter a new email and click Save
3. Open the confirmation email and click the link
4. Try again with an email that already exists
Expected result:
Email is changed and an error message appears- Note which acceptance criteria the case claims to cover.
- Apply the checklist item by item and log each finding.
- Rewrite TC-PRF-03 with exact preconditions, data and observable expected results.
- List uncovered acceptance criteria and questions for the product owner.
Show the model answer
Title, minor: it names a feature; better "New email becomes active only after the confirmation link is opened". Basis, minor: "PRF-14" names the story, not AC1. Preconditions, major: empty, so the account and its current email are unknown. Test data, major: "A new email" changes on every run and may already belong to another account. Focus, major: step 4 tests AC3 inside the AC1 case. Expected results, major: "Email is changed" misses the core of AC1, that the old email stays active until the link is opened, and "an error message appears" does not give the message AC3 requires.
Reworked: customer omar.t@example.com is signed in; the new email omar.new@example.com is used by no account. 1. Enter the new email in Profile and click Save. 2. Sign out and sign in with the old email. 3. Open the link sent to the new email. Expected: after step 1, Profile still shows the old email and a confirmation email arrives at omar.new@example.com; step 2 succeeds; after step 3, Profile shows the new email.
The set needs TC-PRF-04 for AC3 and TC-PRF-05 for AC2; ask the developers how to create an expired link in the test environment. For the product owner: can the customer sign in with the new email before confirming it?
Frequently asked questions
Who should review test cases?
Ideally another tester who knows the feature, with the test basis open. Ask the product owner or business analyst about expected results that encode business rules, and a developer about technical details. Review your own cases with the checklist first, but a self-review does not replace a second reader: authors tend to read what they meant, not what they wrote.
Does every test case need a formal review?
No. Match the formality to the risk. An informal peer review suits most cases, a walkthrough helps when a new suite is introduced to the team, and a technical review or an inspection, led by a moderator with a checklist and a findings log, suits payment, security or regulated features.
Do generated or AI-written test cases need a review?
Yes, with the same checklist. Generators and AI tools produce well-structured cases quickly, but they do not know your business rules, may describe behaviour the requirement does not contain, and often miss what is specific to your product. Treat their output as a first draft.
What if the author disagrees with a finding?
Go back to the test basis. If it settles the question, the case follows it. If it does not, the question goes to the product owner, and the decision is recorded so that the next reviewer does not reopen it.
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.
- ISO/IEC 20246:2017 — Software and systems engineering — Work product reviewsA generic framework for reviewing work products — the review process, roles and review techniques.
- ISO/IEC/IEEE 29119-3:2021 — Software and systems engineering — Software testing — Part 3: Test documentationTemplates and content for test documentation — test policy, strategy, plan, status and completion reports, incident reports.
Practise with Mutqan tools
Convert a list of numbered requirements into traceable test cases with a requirement-to-test matrix.
Convert a user story (As a / I want / So that) into structured test cases using templates and heuristics.
Generate structured test cases (id, title, preconditions, steps, expected result, priority) from a feature description and field list.
Compare two texts line by line or word by word and highlight differences.
Improve existing test cases: clearer steps, precise expected results, missing preconditions and better structure, with Mutqan AI.
Find duplicate and overlapping test cases in a suite and get merge recommendations from Mutqan AI.
Go deeper
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.