Testability

Testability is how easily something can be tested. The ISTQB glossary, following ISO/IEC 25010, defines it as the degree to which test conditions can be established for a component or system, and tests performed to determine whether those conditions are met. For a tester it has two sides: a requirement is testable when you can say in advance which result passes and which fails; a system is testable when a test can put it into the state it needs and see what it did.

Example: "Search results should appear quickly" is not testable, because nobody can say whether 1.8 seconds passes. "With 50,000 products in the catalogue and 100 users searching at the same time on the staging environment, 95% of searches show results within 2 seconds of pressing Search" is testable, provided the team can load 50,000 products into staging, simulate 100 users and measure the time until results appear. That proviso is the system side.

Why it matters

A requirement that no result can fail gives no basis for a verdict. Each person fills the gap with their own reading: the developer builds one behaviour, the tester checks another, the product owner expected a third. The difference surfaces late, as an argument about whether a defect is a defect, when changing the feature costs most.

Low system testability costs time and hides defects. If test data takes ten screens to create, a reminder can only be tested by waiting a day, or a failed request shows only "Something went wrong", tests become slow, get skipped or miss the cause. The ISTQB Foundation syllabus includes assessing the testability of the test basis in test analysis, so testers raise it in reviews and refinement, while change is still cheap.

What makes a requirement testable

A quick check: could you write the expected result of a test case from the requirement today, and would two testers give the same verdict on the same outcome? Three of the defects from the previous lesson, ambiguous, incomplete and contradictory requirements, fail this check; the fourth, a missing requirement, leaves nothing to check at all. A testable requirement is:

  • Clear: it has one meaning. The actor, the trigger and the result are named, terms are defined, and each statement describes one behaviour. "The user can cancel an order" is unclear until you know which user, which order states and until when.
  • Measurable: each quality word is replaced by an observable result (a message, a state, a stored record, a sent email) or by a target with a unit and conditions. The lesson on non-functional testing showed how to turn "fast" or "easy" into such a target.
  • Consistent: it agrees with itself, with other requirements, business rules and the design, and uses the same name for the same thing. When two requirements disagree, every possible result fails one of them.

Testability of the system: controllability and observability

A clear requirement still cannot be tested if the system does not let you set up the situation or see the outcome. Two properties describe this. Controllability is how easily a test can put the system into the state it needs: create data, set the date, switch a feature on, make a payment provider decline. Observability is how easily a test can see what the system did, including results that never reach the screen: the stored record, the email sent, the log entry, the exact error.

Both are design decisions, and they are cheapest when asked for before the feature is built. ISO/IEC 25010:2023 places testability under maintainability: a product that is hard to test is also hard to change safely. Typical requests from testers:

  • A way to create and reset test data (a seed script, an API or an admin screen).
  • A clock or expiry setting that a test can control, for anything that expires or is scheduled.
  • Sandbox (test) modes or test doubles, stand-ins that imitate a real service, for third-party services, so that a declined payment or a timeout can be produced on demand.
  • Logs with a correlation id (one id that links every log entry for the same request), specific error codes, and the build version visible in the application.
  • Stable identifiers for automation, such as a data-testid attribute that a test uses to find an element even when its text or layout changes.
  • Confirmation that control hooks such as a data reset or a clock override are switched off outside test environments: a data-reset endpoint reachable in production is a defect in itself.

Try it: Mock API Response Generator

Rewriting an untestable requirement

A rewrite is a proposal, not a decision. The tester finds what is missing and suggests wording; the owner of the requirement, usually the product owner or a business analyst, decides the values and approves the text. Work in this order:

  • Mark every word a test cannot check: quality adjectives (fast, easy, secure), vague amounts (some, large, reasonable), open lists (etc., such as) and weak verbs (support, handle, manage).
  • Replace each one with an observable result or a target with a unit and conditions. Propose a value and mark it "to confirm".
  • Split compound sentences so that each statement has one pass or fail verdict, and number the statements so that test cases can trace to them.
  • Name the actor, the trigger, the preconditions and the error paths.
  • Check the rewrite against related requirements and business rules, then note what you need to control and observe to test it.

Try it: AI Requirement Ambiguity Detector Try it: Acceptance Criteria Generator

Worked example: a subscription renewal requirement

A language-learning app sells monthly subscriptions. Its specification says: REQ-21 "Subscribers should be reminded in good time before their subscription renews. If the payment fails, it should be retried a few times before the subscription ends." A business rule says: BR-9 "A paused subscription is not charged."

Review: "in good time" and "a few times" are not measurable; "reminded" and "should" are not clear (by which channel, saying what, and is it mandatory?); and REQ-21 is silent about paused subscriptions, so it may contradict BR-9. The tester proposes the rewrite below, asks the product owner whether "ends" means cancelled or paused, and lists what the test environment must offer:

  • A clock that the test environment can move forward, so that the reminder (21.1) and the retries (21.3) can be tested without waiting a week (controllability).
  • The payment provider’s sandbox with test cards that are declined on demand, so that one, two or three declined attempts can be produced (controllability, 21.3).
  • A capture inbox, so that the reminder and the cancellation email can be read without real mailboxes (observability, 21.1 and 21.3).
  • Test data with an active and a paused subscription, and the sandbox list of charge attempts, to confirm that no fourth attempt is made and that the paused subscription is never charged (controllability and observability, 21.3 and 21.4).
REQ-21  Monthly renewal (proposed rewrite; values to be confirmed by the product owner)

21.1  7 days before the renewal date, the subscriber receives one email that states
      the renewal date, the amount and how to pause or cancel.
21.2  On the renewal date, the saved card is charged the price of the plan, and the
      subscription continues for one more month.
21.3  If the charge is declined, it is retried 1 day and 3 days after the renewal
      date. If all three attempts are declined, the subscription is cancelled and
      the subscriber receives an email saying so. No further charge is attempted.
21.4  A paused subscription receives no reminder and is not charged (BR-9).
21.5  Every charge attempt, accepted or declined, appears under "Billing history"
      with its date, amount and result.
Subscription renewal REQ-21 before and after rewriting: vague words become a reminder 7 days ahead, two retries and a stated end, and the tester adds a test clock and declining sandbox cards to test it.

Original REQ-21Untestable

Subscribers are reminded “in good time”; a failed payment is retried “a few times”

Clear: who and what:
“Reminded”, “should”: by which channel, saying what, and is it mandatory?
Measurable:
“in good time”, “a few times”
Consistent:
Silent on paused subscriptions: may contradict BR-9
Control and observe:
Not considered
Can a test reach a verdict?:
Only for obvious failures: there is no agreed expected resultFail

Rewrite 21.1–21.5Testable

Five numbered statements, each with one verdict

Clear: who and what:
One email 7 days before renewal, stating the date, the amount and how to pause or cancel
Measurable:
Retries 1 and 3 days after the renewal date; after three declined attempts the subscription is cancelled
Consistent:
A paused subscription gets no reminder and no charge, as BR-9 requires
Control and observe:
A test clock and sandbox cards that decline on demand; a capture inbox and the list of charge attempts
Can a test reach a verdict?:
Yes: each statement passes or failsPass

The values in the rewrite are the tester’s proposals until the product owner confirms them.

Try it: Requirements → Test Cases Try it: AI Acceptance Criteria Reviewer

Common mistakes

  • Accepting "fast", "intuitive" or "secure" as written and inventing your own pass criteria while testing, so that the verdict is your opinion rather than an agreement.
  • Putting the values you chose only into your test cases. That creates a hidden second specification; get the agreed wording into the requirement itself.
  • Adding a number without conditions: "within 2 seconds" with no data volume, load or measuring point can still be argued either way.
  • Reviewing only the wording, then finding on test day that the email cannot be read or that a 24-hour expiry means a 24-hour test.
  • Treating testable as correct: precise wording can still describe the wrong behaviour.
  • Asking for test hooks such as a data reset or a clock override without checking that they are switched off in production.

The QA perspective

Testability is checked wherever requirements are discussed: backlog refinement, requirements reviews and test analysis. For each statement ask "How would I know it passed?" and "What would I need to set up and to see?" Record each finding as a review comment or a question on the ticket: the statement, why it cannot be tested, a proposed rewrite and who decides.

The system side is a conversation with developers and architects. Ask for testability features as part of the story, and record any that are missing as a risk in the test plan. Once the rewrite is agreed it becomes your test basis, and each test case traces to a numbered statement, which the lesson on requirements traceability builds on.

Practice exercise

Make a delivery-slot requirement testable

Your task

A grocery delivery app has the requirement and the business rule below. Judge their testability, rewrite the requirement as testable statements, and list what the system must offer so that you can test them.

Material
REQ-14  Customers should be able to choose a convenient delivery slot. Slots should
        update in real time, and fully booked slots should not be offered, etc.
BR-3    Orders placed after 22:00 are delivered on the day after tomorrow at the
        earliest.
Steps
  1. Mark every word or phrase a test could not check, and name the property it breaks: clear, measurable or consistent.
  2. Compare REQ-14 with BR-3 and note any conflict or gap.
  3. Rewrite REQ-14 as numbered statements with one verdict each, marking proposed values "to confirm".
  4. List what you need to control and to observe to test your rewrite.
Show the model answer
Model answer

Not testable as written: "convenient" (not measurable: which days and slot lengths are offered?), "in real time" (not measurable: how soon must a full slot disappear?), "fully booked" (not clear: how many orders fill a slot?), "etc." (not clear: an open list) and "should" (not clear: mandatory or optional?). BR-3 is testable except at its edge: ask whether an order at exactly 22:00 counts as "after 22:00", and which time zone the clock uses.

Consistency: REQ-14 does not mention the 22:00 cut-off, so a customer ordering at 22:30 could be offered tomorrow’s slots, which BR-3 forbids. The rewrite must follow BR-3, or the owner must change one of them.

Proposed rewrite, values to confirm: 14.1 Checkout offers 2-hour slots between 08:00 and 22:00 on each of the next 7 days, starting tomorrow. 14.2 For an order placed after 22:00, tomorrow’s slots are not offered: the earliest slot is on the day after tomorrow (BR-3). 14.3 A slot holds at most 20 orders; a slot with 20 confirmed orders is not offered. 14.4 A slot that becomes full disappears for other customers within 10 seconds; if a customer confirms a slot that has just filled, the order is not placed and the message "This slot is no longer available. Choose another slot." is shown. Ask the product owner what "etc." was meant to cover.

Controllability: set the current time in the test environment to test the 22:00 cut-off without waiting, create orders in bulk (API or seed data) to fill a slot, and make the slot capacity configurable in testing. Observability: see each slot’s capacity and booked count (admin screen, API or database), and timestamps in the logs to measure the 10-second update.

Frequently asked questions

Is testability about requirements or about the system?

Both. The requirement side decides whether you know the expected result; the system side decides whether you can set up the test and see the actual result. A clear requirement on a system you cannot observe can be as hard to test as a vague requirement on a system that shows everything it does.

Who rewrites an untestable requirement, the tester or the product owner?

The tester finds the gap, proposes wording and asks the questions. The owner of the requirement decides the values and approves the wording, and the agreed version goes into the backlog or specification so that developers and testers work from the same text.

If a requirement is testable, is it correct?

No. Testable means a test can show whether the system meets it; it says nothing about whether it describes what users and the business actually need. A precise requirement can be precisely wrong. Checking that is requirements validation, the topic of the next lesson.

Can every requirement be made testable?

Most can, by naming an observable result or a target with conditions. A broad goal such as "customers trust the app" cannot be tested as written: keep it as context and derive testable requirements that support it, such as specific security, privacy and error-handling rules.

References

Practise with Mutqan tools

Convert a list of numbered requirements into traceable test cases with a requirement-to-test matrix.

Test Design

Detect ambiguous, vague or contradictory statements in requirements and get clarifying questions from Mutqan AI.

Requirement Analysis AI

Review acceptance criteria for testability, completeness and ambiguity, with rewritten suggestions from Mutqan AI.

Requirement Analysis AI

Generate complete mock API responses (status, headers, JSON body) for success, list, detail, error and empty cases.

Mocking

Go deeper

Your progress on this topic

Part of the QA Roadmap