1. Courses
  2. Engineering Roles
  3. Software Testing and QA
  4. Stop 1

35 minBeginner

What testing is for

Testing gives your team facts about risk, so people can decide whether to ship, fix or wait. In this lesson you learn to find the risks in a release, score them, and plan testing that puts the most effort where a failure would hurt most. You will do it for Mangrove Market's festival-rush checkout release.

By the end you can

  • Explain the chain from error to defect to failure, and say where testing can catch each link
  • Use the seven testing principles to argue for or against a test plan
  • Name the quality characteristics a change can hurt, and tell verification from validation
  • Score product risks by likelihood × impact and decide what you will test, how deeply, and what you will not test
  • Ask "how will we know it works?" in refinement and turn the answers into a one-page test plan

The everyday picture

The day before a long drive to visit family for a festival, you take the car to a mechanic. She has one hour. She cannot check every bolt, so for each part she asks two questions: how likely is it to fail on this trip, and how bad would it be if it did? The brakes and tyres get most of the hour, because on a long drive with a full car a failure there is both likely and dangerous. The radio gets a glance.

At the end she does not promise that the car will never break down. Nobody can. She tells you what she found: "Brakes and tyres are good. The battery is old, so it may not start on a cold morning. I did not look at the air conditioning." Now you can decide: go, replace the battery first, or pack a jump-start cable.

Software testing is that hour. Time is always limited, so you spend it where likelihood and impact are highest, and your report is information for a decision. The rest of this lesson turns each part of the mechanic's hour into a method you can use.

Testing gives information for decisions

The ISTQB Foundation Level syllabus (version 4.0, the most common entry certification for testers) lists several objectives of testing: finding defects, checking that requirements are met, building confidence, reducing the level of risk, and giving people the information they need to make informed decisions. The last objective ties the others together. A product manager deciding whether to release on festival eve does not need "312 tests passed". She needs "payments and discounts were tested deeply and work; the slot list slows down above three times normal load; we did not test the old help pages".

To report clearly, you need clear words for what goes wrong. The syllabus uses a chain of three. A person makes an . The error leaves a in a work product: code, a story, a test, a configuration file. When code with a defect runs in the right conditions, the system shows a : it does something it should not, or does not do something it should.

Here is the chain at Mangrove Market's checkout. The rule is that delivery is free from $25.00 (2,500 cents); below that it costs $1.50 (150 cents). One line of the story says "orders over $25 get free delivery". A developer reads "over" (the error) and writes cartCents > 2500 (the defect). Every customer with a cart of exactly $25.00 now pays $1.50 they should not (the failure). Customers at $24.99 or $25.01 see nothing wrong, which is why a defect like this can hide for weeks. Some defects never cause a failure at all, because nobody reaches that code.

Behind the error sits a : here, a story that says "over $25" in one place while the design says "from $25". Fixing the line removes one defect. Fixing the way stories state their rules removes a whole family of them.

Each link in the chain is a place to stop the problem, and the earlier you stop it, the cheaper it is. A tester who reads the story before any code exists and asks "is $25.00 itself free?" stops it at the root. That is : checking work products by reading them. A test with a cart of exactly 2,500 cents (you design tests like this in Designing tests that find bugs) makes the failure happen in a test environment instead of in a customer's pocket. Finding the defect that caused a failure is debugging, a developer's job covered in Errors, debugging and testing. Testing finds and shows failures; debugging finds and fixes their defects.

Quick check

No code has been written yet. A tester notices that the FRESH10 story says "carts over $20" while the campaign brief says "carts of $20 or more". What has she found?

Root cause story: "over $25" design: "from $25" review the story before coding leads to Error developer reads "over $25" ask in refinement "is $25 free?" writes Defect cartCents > 2500 in the fee code a test at 2500 fails in test env runs at $25.00 Failure customer pays $1.50 extra a customer finds it: refunds, trust
From root cause to failure. Each box is a place to stop the problem, and the green notes show how. The lower you catch it, the more it costs: a question in refinement takes a minute, a failure in production costs refunds and trust.

Seven principles that shape every test plan

The syllabus lists seven testing principles. Each one is short, and each one changes a decision you make when you plan. Here they are in ISTQB version 4.0 wording, with what each means for you and how it shows up at the checkout.

PrincipleWhat it means for youAt the checkout
1. Testing shows the presence, not the absence of defectsPassing tests lower the risk. They never prove there are no defects."All 312 tests passed" goes in the report next to what was not tested.
2. Exhaustive testing is impossibleUse techniques, priorities and risk to choose a small set of tests.Every cart from 500 to 50,000 cents, times 20 quantities, 3 payment methods and every slot, is billions of cases. You test partitions and boundaries.
3. Early testing saves time and moneyReview stories and designs before code exists.The "over $25" question costs one minute in refinement and a hotfix after release.
4. Defects cluster togetherA few areas hold most of the defects. Plan more testing there.Last festival, most checkout bugs came from slot booking, so it gets extra sessions this time.
5. Tests wear outThe same tests, run again and again, find fewer new defects. Change them and add new ones.An unchanged checklist keeps passing while each new discount rule breaks in a new way.
6. Testing is context dependentNo single approach fits every product or change.Payments get deep testing with evidence; a new banner on the home screen gets a quick look.
7. Absence-of-defects fallacyMeeting every written requirement does not guarantee a product people want. Validate as well as verify.FRESH10 can match its story perfectly and still win no new customers if nobody finds the code field.

People misuse two of these. "Exhaustive testing is impossible" is the reason you need test techniques and risk, and it never means "test less". "Tests wear out" says that a fixed set of tests loses its power to find new kinds of defects. It says nothing against , which reruns old checks to show that a change broke nothing that used to work. That job stays useful forever, and it is the first thing teams automate. What you add, release by release, are new tests aimed at what changed.

Quick check

Mangrove's 400-case checkout checklist has passed unchanged for six releases. In the same months, customers reported nine new bugs in discount rules. What does this suggest?

What quality means: the characteristics

"Does it work?" is too vague to plan with. Quality has several sides, and a change can hurt one side while the others look fine. The international standard that names them is . Its 2023 edition has nine . The 2011 edition, which many courses and the ISTQB syllabus still use, had eight; where a name changed, the old one is in brackets.

CharacteristicThe question it asksA checkout example
Functional suitabilityDoes it do the right things, completely and correctly?Is the fee 0 at exactly 2,500 cents?
Performance efficiencyIs it fast enough with the resources it has?Does the slot list meet the team's 2-second target at 4× normal orders?
CompatibilityDoes it work alongside other systems and exchange data with them?Does a new order reach the pickers' Store app and the Rider app?
Interaction capability (usability)Can people use it easily, including people with disabilities?Can a first-time shopper find the code field? Does a screen reader announce the fee?
ReliabilityDoes it keep working, and recover when something fails?If the wallet provider answers late, is the customer charged exactly once?
SecurityIs data safe from people who should not see or change it?Can a customer open someone else's order by changing the number in a link?
MaintainabilityCan the team change and test it easily?Is the fee rule in one place, or copied into three screens?
Flexibility (portability)Can it adapt to other devices, environments and growth?Does checkout work on a cheap Android phone with an old OS version? Can it scale for festival week?
Safety (new in 2023)Does it avoid putting people or property in danger?Mostly for physical systems; at Mangrove it matters for the Rider app more than for checkout.

Use the list as a prompt when you read a change. For each change in a release, run down the nine and ask "could this change hurt that?" Most answers will be no. Every yes becomes a line in your risk table. Teams that only read the story test only functional suitability, because that is what stories describe. The failures that reach the news are more often reliability, performance and security.

Two testing objectives sound alike, so keep them apart. checks that the product meets its specified requirements: did we build it right? checks that it meets the needs of its users and other stakeholders in its real environment: did we build the right thing? FRESH10 can pass every verification test: 10% off, only from 2,000 cents, first order only, never with the staff discount. Yet if shoppers in a usability session cannot find where to type the code, the feature fails validation, and the campaign will not win the new customers it was built for. That is principle 7 at work. You validate by putting the product in front of real people in real conditions: a usability session, a pilot in a few stores, or user acceptance testing with store staff (Bugs, reports and acceptance).

Quick check

The new goods-received screen in the Store app does exactly what its acceptance criteria say. In a trial store, receivers wearing work gloves keep pressing the wrong quantity button. What kind of finding is this?

Risk: likelihood times impact

A is something that may happen and would cause harm if it did. It has two factors: likelihood, how probable it is, and impact, how bad the harm would be. Together they set the risk level. A quick, common method is to score each factor from 1 to 5 and multiply them: risk score = likelihood × impact, from 1 to 25. The syllabus calls multiplying the quantitative approach; a risk matrix with words such as "low" and "high" is the qualitative approach. Either works if the team agrees on what the levels mean.

A score is only useful if two people would give the same number, so write anchors down. Likelihood 5 means "new, complex code in an area that has failed before"; 1 means "unchanged code with a long clean record". Impact 5 means "customers lose money, or we break a law or leak personal data"; 1 means "a cosmetic glitch nobody would report". Ask a developer for likelihood, because developers know which code is new and tangled. Ask the product manager or the business owner for impact, because they know what a failure costs. Your job as the tester is to ask both, challenge numbers that look too comfortable, and write the result down.

Two kinds of risk go into a test plan. A is about the product's quality: the fee is wrong, a payment is taken twice, the slot list is slow. Testing reduces these, because it finds them before customers do. A is about the work: the wallet provider's test sandbox arrives late, a tester is on leave in festival week, the test environment is smaller than production. Testing cannot remove these. You manage them with plans, people and dates, and you list them because they limit what testing can do.

Quick check

Risk A has likelihood 2 and impact 5. Risk B has likelihood 4 and impact 2. Which do you test first?

likelihood 5 4 3 2 1 1 2 3 4 5 impact (harm) score 12+ impact 5: always tested R1 R2 R3 R4 R5 R6 R7 deep standard light
The festival release's seven product risks (R1 to R7, listed in Build it) placed by impact and likelihood. Everything above the dashed line scores 12 or more. R7, card details in logs, scores only 5 but has impact 5, so it is always tested. R6, the order-history layout, gets a light check.

Risk-based test planning: what, how deep, and what not

means the risk analysis decides what you test, in what order, and how deeply. You turn scores into depth with tiers the team agrees on. Mangrove's checkout team uses three:

  • Deep (score 15 to 25): test cases designed with several techniques, an exploratory session (Exploratory testing), checks below the screen at the API and in the data (Testing APIs and data), a second person reviews the test cases, and these areas are tested first.
  • Standard (score 8 to 14): designed test cases for the main rules and boundaries, plus the regression checks for that area.
  • Light (score 1 to 7): a short check on two phones, or nothing new if the code did not change.

Add one override: anything with impact 5 is always at least standard, however unlikely it looks. "Card details written to the app logs" scores only 1 × 5 = 5, but the harm is too serious to leave to chance. Areas that score 12 or more, plus every impact-5 area, form the must-test list: the release does not go out until they are tested and the results are known.

Then write down what you will not test, and why. "The Partner app and the Store app are out of scope: this release does not change them" is a decision other people can check and challenge. Silence is a gap nobody sees. When time runs short, you cut from the bottom of the list, and the report says what was cut. That is the mechanic saying "I did not look at the air conditioning".

Risk also sets the order. Test the highest risks first, so that if the release date moves forward, the riskiest areas are already done. When two risks have the same score, put the one with the higher impact first: a rare disaster outranks a common annoyance. And keep scoring as you test. Defects cluster, so an area where you find three bugs in a morning has just shown you its likelihood is higher than you thought.

How testing fits a modern team

In older projects, testers received a finished build at the end and tested it in a separate phase. Modern teams use a : everyone is responsible for quality, and anyone with the right skills can do any task. Developers write unit tests, the product manager writes clear acceptance criteria, the designer checks the screens on real phones, and the tester brings the risk view, designs the tricky tests and explores.

means moving testing work earlier: reviewing stories before coding starts, writing test cases before the code exists, running automated checks on every change in CI (GitHub Actions: continuous integration), and testing performance on single components instead of waiting for the whole system. It costs some effort early and saves more later, which is principle 3 in practice.

The best place to shift left is , the meeting where the team discusses upcoming stories. Your question there is "how will we know it works?" For the festival-slot story, that question becomes several: What happens if the slot fills while the customer is paying? Does "up to 3 days ahead" count from now or from midnight? Can a cash-on-delivery order take a festival slot? Each answer becomes an . The story and its acceptance criteria become the , the material your tests are designed from. A vague test basis gives vague tests, so improving it is testing work too.

Testing also happens at several . ISTQB version 4.0 names five: component testing (one piece in isolation, often called unit testing), component integration testing (how pieces talk to each other), system testing (the whole product), system integration testing (the product with outside systems such as the wallet provider), and acceptance testing (by users or the business). Developers usually own the first two. This course works mostly at the system and acceptance levels; the next course, Test Automation and Quality Engineering, covers the lower levels in code.

Build it

Write a risk table and a one-page test plan for Mangrove's festival-rush checkout release. Use a spreadsheet or a markdown file; the templates work in both. The release ships two weeks before the festival and contains five changes: the FRESH10 code for new customers, festival delivery slots bookable up to 3 days ahead, a new automatic retry when the wallet provider answers slowly, a rewritten cart that recalculates the delivery fee, and a new order-history layout.

  1. Collect the test basis and list what could go wrong

    Gather the five stories with their acceptance criteria, the release notes, last festival's bug list and the top support tickets. For each change, run down the quality characteristics and write one line per real worry. Keep each line concrete enough that someone could test it.

    Output
    Change                     What could go wrong (characteristic)
    FRESH10 code               accepted on a 2nd order or with the staff discount (functional)
    Festival slots             slot list slow or failing at 4x orders (performance)
                               last place in a slot booked twice at the same moment (functional)
    Wallet retry               customer charged twice when the provider answers late (reliability)
                               card details written to the app logs by the new code (security)
    Cart rewrite               fee wrong at exactly 2,500 cents (functional)
    Order-history layout       broken on small screens (interaction capability)
  2. Agree the scales before anyone scores

    Write the anchors where everyone can see them. Without them, one person's 3 is another person's 5.

    Output
    Likelihood  5 new, complex code in an area that failed before
                3 changed code, some tests exist, average history
                1 unchanged code, long clean record
    Impact      5 customers lose money, legal or personal-data harm
                3 customers are blocked or overcharged a little; workaround exists
                1 cosmetic, nobody would report it
    Score       likelihood x impact (1 to 25)
    Depth       15-25 deep | 8-14 standard | 1-7 light | impact 5 = at least standard
    Must-test   score 12 or more, or impact 5
  3. Score, sort and choose the depth

    Ask a developer for each likelihood and the product manager for each impact. Sort by score, highest first; on a tie, the higher impact goes first. Then set the depth from the tiers.

    Markdown
    | ID | Risk                                          | Characteristic | L | I | Score | Depth    | Must-test |
    |----|-----------------------------------------------|----------------|---|---|-------|----------|-----------|
    | R1 | Wallet charged twice on a late reply + retry  | Reliability    | 4 | 5 | 20    | Deep     | yes       |
    | R2 | FRESH10 accepted on 2nd order or with staff   | Functional     | 4 | 4 | 16    | Deep     | yes       |
    | R3 | Slot list slow or failing at 4x orders        | Performance    | 3 | 4 | 12    | Standard | yes       |
    | R4 | Delivery fee wrong at exactly 2,500 cents     | Functional     | 4 | 3 | 12    | Standard | yes       |
    | R5 | Last place in a slot booked twice             | Functional     | 3 | 3 | 9     | Standard | no        |
    | R6 | Order-history layout broken on small screens  | Interaction    | 3 | 2 | 6     | Light    | no        |
    | R7 | Card details written to app logs              | Security       | 1 | 5 | 5     | Standard | yes (I=5) |
  4. List the project risks and what you will do about them

    These do not go into the score table, because testing cannot find them. They go into the plan because they limit what testing can do.

    Markdown
    ## Project risks
    - The wallet provider's test sandbox is ready only 5 days before release.
      Action: ask now for a fake wallet service that can answer slowly; test R1 against it first.
    - One of the two QA engineers is on leave in festival week.
      Action: finish all must-test areas a week early; a developer pairs on R6.
    - The load-test environment is a quarter of production's size.
      Action: test R3 at 4x of that environment's normal load and say so in the report.
  5. Write the one-page test plan

    One page is enough when the risk table carries the detail. Each heading answers a question someone will ask on release day.

    Markdown
    # Test plan: festival checkout release
    
    ## Scope
    In: FRESH10, festival slots, wallet retry, cart fee rewrite, order-history layout.
    Out: Partner app, Store app, POS, Rider app (no changes in this release).
    
    ## Approach (from the risk table)
    - Deep, tested first: R1 wallet retry, R2 FRESH10.
    - Standard: R3 slot load, R4 fee at 2,500 cents, R5 last slot, R7 card data in logs.
    - Light: R6 order history on two small phones.
    
    ## Test basis
    The five stories and their acceptance criteria, last festival's bug list.
    
    ## Environments and data
    Staging with a fake wallet that can answer late; first-time and repeat test customers.
    
    ## Entry and exit criteria
    Start: builds pass CI; test data loaded.
    Exit: every must-test risk tested; no open bug that charges customers wrongly.
    
    ## Project risks
    See the list above.
    
    ## Reporting
    Daily note in the team channel; one-page summary for the go/no-go meeting:
    tested, not tested, open bugs, risks that remain.
  6. Review it with the team and keep it alive

    Walk through the plan in refinement. Ask the developer "which code are you least sure about?" and the product manager "which failure would hurt most on festival eve?". If an answer moves a score, change the table. During testing, raise the likelihood of any area where bugs cluster, and add the scores of new risks you discover. The plan is a live document until release day.

Bring it to your team

Ask these in refinement, release planning and go/no-go meetings.

  • How will we know this story works? What would make us say it does not?
  • Which code in this release are you least sure about, and why?
  • If this failed on festival eve, what would it cost us: money, customers, a legal problem?
  • What are we choosing not to test, and does everyone agree with that choice?
  • Which of our risks are about the product, and which are about the project, and who owns each?
  • Did we check how real users will use this, or only that it matches the story?

Red flags

  • "QA will catch it" said in refinement: quality has become one person's job.
  • A test plan with no "out of scope" line.
  • Every area tested to the same depth, whatever its risk.
  • Risk scores that nobody outside the test team helped set.
  • A release report that says only how many tests passed.

Practice

Score and sort the festival risks

Each risk area is an object like { name: 'FRESH10 rules', likelihood: 4, impact: 4 }. In JavaScript, area.likelihood reads one field of the object and * multiplies two numbers. Complete riskScore(area) so it returns likelihood × impact. Then finish the tie rule in prioritise(areas), which sorts the areas highest score first. The sort function compares two areas, a and b, and needs a number back: below 0 puts a first, above 0 puts b first. So b.impact - a.impact is above 0 when b has the higher impact, which puts b first.

JavaScript exerciseRuns in your browser with tests
// A risk area looks like: { name: 'FRESH10 rules', likelihood: 4, impact: 4 }

function riskScore(area) {
  // Return likelihood × impact. Each is 1 to 5, so the score is 1 to 25.
  return 0;
}

function prioritise(areas) {
  // [...areas] makes a copy, so the original list stays as it was.
  return [...areas].sort((a, b) => {
    const byScore = riskScore(b) - riskScore(a);   // higher score first
    if (byScore !== 0) return byScore;
    return 0;   // same score: put the area with the higher impact first
  });
}
Ctrl + Enter runs
Show a solution
JavaScript
function riskScore(area) {
  return area.likelihood * area.impact;
}

function prioritise(areas) {
  return [...areas].sort((a, b) => {
    const byScore = riskScore(b) - riskScore(a);   // higher score first
    if (byScore !== 0) return byScore;
    return b.impact - a.impact;                     // tie: higher impact first
  });
}
Pass the exercise to finish this task.

Build the must-test list

The must-test list holds every area that scores 12 or more, plus every area with impact 5, whatever its score. The starter keeps only the first rule. In JavaScript, filter keeps the items for which the rule is true, map turns each kept area into its name, and || means "or". Add the impact-5 rule, and keep the areas in the order they arrive.

JavaScript exerciseRuns in your browser with tests
function mustTest(areas) {
  return areas
    .filter((area) => area.likelihood * area.impact >= 12)   // keep areas that meet the rule
    .map((area) => area.name);                                // keep only their names
}
Ctrl + Enter runs
Show a solution
JavaScript
function mustTest(areas) {
  return areas
    .filter((area) => area.likelihood * area.impact >= 12 || area.impact === 5)
    .map((area) => area.name);
}
Pass the exercise to finish this task.

Ask "how will we know it works?" in refinement

The next story in refinement is: "As a customer, I can book a festival delivery slot up to 3 days ahead, so I get my groceries before the festival." Its only acceptance criterion is "Customers can see and book festival slots." Write four questions you would ask in refinement, each naming the risk or quality characteristic behind it, and rewrite the acceptance criterion as two or three checkable lines.

  • At least one question is about a boundary or a time rule, such as what "3 days ahead" means at 11:55 pm
  • At least one question is about something other than functional suitability: load at 4× orders, a full slot during payment, or a screen reader
  • Each question names the risk it protects against
  • The rewritten criteria are specific enough that two testers would agree whether they pass
Show a model answer

Questions: (1) Does "3 days ahead" count from now or from midnight today? A slot at 11:55 pm three days out is the boundary (functional suitability). (2) What happens if the last place in a slot is taken while I am paying? Do I lose my money or my slot (reliability, risk of a double booking)? (3) How fast must the slot list load at 4× normal orders on festival eve (performance efficiency)? (4) Can a cash-on-delivery order book a festival slot, and if not, what does the customer see (functional suitability, a blocked customer)?

Rewritten criteria: Given it is 11:00 on day 1, the slot list shows festival slots up to 23:59 on day 4 and none later. Given a slot has one place left and two customers pay for it, exactly one gets the slot and the other is offered the next slot before any payment is taken. The slot list appears within 2 seconds at 4× normal orders.

Check yourself

The festival release passes all 312 checkout tests. The product manager asks, "So there are no bugs left?" What is the best answer?

Which of these belongs in the test plan's project risks, not in the product risk table?

Two days before release, a broken test environment costs you a full day. Your must-test areas are half done. Following risk-based testing, what do you do?

Flashcards

Open my review

Key takeaways

  • Testing gives information about risk for decisions; it cannot prove software has no defects.
  • Errors leave defects that cause failures; catch them as early in the chain as you can, ideally in refinement.
  • Quality has nine sides in ISO/IEC 25010:2023; check each change against them, and validate with real users as well as verifying against the story.
  • Score risk as likelihood × impact with the developer and the product manager, test the highest first and most deeply, and always test impact-5 risks.
  • A good test plan states what will not be tested and why, and fits on one page.

Sources

Episode transcriptThe mechanic's hour before the festival · about 13 minutes · tap any line to play from there
  1. NadiaImran, last festival evening, nine hundred customers were charged twice for one order. Want to guess how many of our checkout tests had passed the week before?
  2. ImranI'm guessing all of them, or you wouldn't ask.
  3. NadiaAll four hundred. Green from top to bottom. And not one of them tested what happens when the wallet provider answers slowly and the app tries again.
  4. ImranSo the tests passed and the release still hurt people. Then what were the tests for?
  5. NadiaThat's today's question. What testing is for. And the short answer is: information about risk, so people can make a good decision.
  6. NadiaPicture this. The day before a long festival drive to see family, you take your car to a mechanic. She has one hour. She can't check every bolt.
  7. ImranSo she checks what matters. Brakes, tyres.
  8. NadiaExactly. For each part she asks two things. How likely is it to fail on this trip, and how bad would it be? Brakes on a long drive with a full car score high on both. The radio gets a glance.
  9. ImranAnd at the end she says the car is fine?
  10. NadiaShe can't promise that. She says the brakes and tyres are good, the battery is old and might not start on a cold morning, and she didn't look at the air conditioning. Now you decide. Go, change the battery, or pack a jump-start cable.
  11. ImranSo the report isn't a yes or no. It's what she checked, what she found, and what she skipped.
  12. NadiaThat's the whole lesson in one picture. Limited time, spent where likelihood and impact are highest, and a report that helps someone decide.
  13. ImranBefore we get to risk, I need the vocabulary. My team says bug, defect, failure, error, all for the same thing.
  14. NadiaThe ISTQB syllabus, the common entry certification for testers, keeps them apart, and it helps. A person makes an error. The error leaves a defect in something we made, like code or a story. When the defect runs, the system shows a failure.
  15. NadiaIf you can see your screen, the first diagram stacks four boxes from top to bottom. Root cause, error, defect, failure. If not, picture our delivery fee rule. Delivery is free from twenty-five dollars, and costs a dollar fifty below that.
  16. ImranFree from twenty-five. So twenty-five dollars exactly is free.
  17. NadiaRight. But one line in the story says orders over twenty-five get free delivery. A developer reads over. That's the error. He writes a check for cart greater than twenty-five hundred cents. That's the defect. A customer with exactly twenty-five dollars pays the fee. That's the failure.
  18. ImranAnd someone at twenty-four ninety-nine or twenty-five oh one sees nothing wrong. So it could hide for weeks.
  19. NadiaYes. And the root cause sits above all that. The story said over in one place and the design said from in another. Fix the code and you remove one defect. Fix how we write rules in stories and you remove a whole family.
  20. ImranAnd where does testing come in? At the bottom, when the code runs?
  21. NadiaThat's the reasonable guess, and it's the expensive place. Testing can start at the top. A tester who reads the story and asks, is twenty-five dollars itself free, stops it in one minute. Reading work products without running code is called static testing.
  22. ImranSo the earlier box is cheaper. A question in refinement versus refunds after release.
  23. NadiaWhich is one of the seven testing principles. Early testing saves time and money. There are seven, and each one changes a decision.
  24. ImranGive me the ones that actually change what I do on Monday.
  25. NadiaFirst, testing shows the presence of defects, never their absence. So all tests passed goes in a report next to what we didn't test. Second, exhaustive testing is impossible. Every cart size, quantity, payment method and slot together is billions of cases.
  26. ImranSo we pick. Which sounds like permission to test less.
  27. NadiaThat's the misuse. It's the reason we need good techniques and risk, never a reason to do less. Third, defects cluster. Last festival most checkout bugs came from slot booking, so slot booking gets extra time now.
  28. ImranAnd the one about tests wearing out? That sounds like an excuse to delete our regression suite.
  29. NadiaIt isn't. The same tests, run again and again, stop finding new kinds of defects. That's exactly our four hundred green cases. But rerunning them still proves that nothing old broke. Keep them, automate them, and add new tests aimed at what changed.
  30. ImranAnd the last one has the strange name.
  31. NadiaThe absence-of-defects fallacy. A product can meet every written requirement and still not be what people need. Take the FRESH ten code. Ten percent off, first order only, from twenty dollars. It can pass every test and still win no new customers if shoppers can't find where to type it.
  32. ImranSo that's the difference between verification and validation.
  33. NadiaYes. Verification asks, did we build it right, against the story. Validation asks, did we build the right thing, for real users in real conditions. You need both. Validation means real people. A usability session, a pilot store, store staff trying it at work.
  34. ImranNow, quality. When I say does it work, I mean does the button do the thing.
  35. NadiaThat's one side of quality, functional suitability. The standard for this, ISO twenty-five oh ten, names nine sides in its twenty twenty-three edition. Performance, compatibility, interaction capability, which used to be called usability, reliability, security, maintainability, flexibility, and safety.
  36. ImranI won't remember nine.
  37. NadiaYou don't need to recite them. Use them as a prompt. For each change, run down the list and ask, could this change hurt that? Most answers are no. Every yes becomes a risk. Our double charge was reliability. Nobody asked about it because the story only described the happy path.
  38. ImranOkay. Risk. How do we put a number on it?
  39. NadiaTwo factors. Likelihood, how probable it is. Impact, how bad the harm would be. Score each from one to five and multiply. So the score runs from one to twenty-five.
  40. ImranAnd who picks the numbers? If I score my own feature, everything's a two.
  41. NadiaGood point. Write anchors down first. Likelihood five is new, tangled code in an area that failed before. Impact five is customers losing money, or a legal or personal data problem. Then ask a developer for likelihood and the product manager for impact. The tester asks both and writes it down.
  42. ImranQuick test for me. Risk A, likelihood two, impact five. Risk B, likelihood four, impact two. B is twice as likely, so B first?
  43. NadiaThat's the trap. A is two times five, ten. B is four times two, eight. A goes first. A likely annoyance can matter less than an unlikely disaster.
  44. NadiaIf you can see the screen, the second diagram is a grid. Impact runs left to right, likelihood bottom to top, and seven festival risks sit on it as dots. A dashed staircase marks everything that scores twelve or more.
  45. ImranAnd the dot at the bottom right, on its own?
  46. NadiaCard details written to the app logs. Likelihood one, impact five. Score five. On numbers alone it's near the bottom. So the team adds one override. Anything with impact five is always tested, however unlikely.
  47. ImranSo the must-test list is score twelve or more, plus every impact five.
  48. NadiaExactly. And there are depth tiers. Fifteen and above is deep: several techniques, an exploratory session, checks at the API, tested first. Eight to fourteen is standard. Below eight is light, a short check on two phones.
  49. ImranWhat about a tie? Two risks at twelve.
  50. NadiaHigher impact first. The slow slot list at four times orders is three times four. The fee at exactly twenty-five dollars is four times three. Same score, but the slot list has the bigger impact, so it goes first.
  51. ImranAnd one more kind of risk, I assume. My life is full of risks that aren't bugs.
  52. NadiaProject risks. The wallet provider's test sandbox arrives five days before release. A tester is on leave in festival week. Testing can't fix those, so they don't go in the score table. They go in the plan with an action and an owner.
  53. NadiaBack to last festival, then. This year a QA engineer brings a risk table to refinement. I give the likelihood for the new retry code. It's new, the provider is slower at peak, four. The checkout product manager gives the impact. Charging someone twice, five.
  54. ImranTwenty. Top of the list.
  55. NadiaSo the team builds a test setup where the wallet answers after ten seconds, and checks the payment records after every retry. And the order history redesign gets ten minutes on two phones.
  56. ImranAnd the plan says what's out of scope?
  57. NadiaIn writing. The Partner app and the Store app are out, because the release doesn't touch them. If time runs short, we cut from the bottom of the list and the report says what we cut. That's the mechanic saying, I didn't look at the air conditioning.
  58. ImranWalk me through the Build it, then. What do I actually produce?
  59. NadiaTwo things. A risk table and a one-page test plan for the festival checkout release. First you collect the test basis: the five stories, their acceptance criteria, last festival's bugs and the top support tickets. For each change you write what could go wrong.
  60. NadiaThen you agree the scales, score with a developer and the product manager, sort, and pick a depth for each row. Then a short list of project risks with actions. Then the plan itself: scope in and out, approach by risk, environments and data, entry and exit criteria, and how you'll report.
  61. ImranAnd the practice section has two small exercises. One scores and sorts the risks, with the tie rule. The other builds the must-test list, and the starter forgets the impact five rule.
  62. NadiaRight. No programming background needed. The task text explains every piece of code you touch.
  63. ImranWhere do testers fit in a team like mine? We don't have a testing phase anymore.
  64. NadiaMost teams now use a whole-team approach. Everyone owns quality. Developers write unit tests, you write clear acceptance criteria, and the tester brings the risk view and designs the tricky tests. And shift left means moving that work earlier, into refinement.
  65. ImranSo my questions for the next refinement. How will we know this story works? Which code are you least sure about? And if this failed on festival eve, what would it cost us?
  66. NadiaAnd one more. What are we choosing not to test, and does everyone agree? If a plan has no out of scope line, nobody has made that choice. It happens by accident.
  67. NadiaOne to think about. A release passes all three hundred and twelve tests. Your boss asks, so there are no bugs left? What do you say? Take a second.
  68. ImranI'd say passing tests lower the risk but can't prove there are no defects. Then I'd tell her what we tested deeply, what lightly, and what not at all.
  69. NadiaThat's the answer a good tester gives.
  70. ImranMy summary. One, testing gives information about risk so people can decide. It never proves there are no bugs.
  71. ImranTwo, errors make defects, defects make failures. Catch them as high up that chain as you can, ideally with a question in refinement.
  72. ImranThree, score each risk as likelihood times impact, test the highest first and deepest, and write down what you won't test.
  73. NadiaOne correction to the third. Always test impact five risks, however unlikely they look. That's the card details in the logs.
  74. ImranThe low dot in the corner of the grid. Got it.
  75. NadiaNext time: designing tests that find bugs. How a handful of carts, right at the edges of the rules, can find most of the defects in checkout.
Finished reading?Mark it complete to fill in its stop on your course line.

Use it at work

Test plan

Scope, risks, environments and entry/exit criteria as data, with checks that every risk has tests.

Open in the QA Lab
Next stopDesigning tests that find bugs
Was this lesson helpful?
Questions and discussion

Loading the discussion…