Error Guessing

Error guessing is an experience-based test technique: you anticipate the errors people are likely to make when building a feature, the defects those errors leave and the failures they cause, and design tests aimed straight at them. The ISTQB Foundation syllabus (CTFL v4.0) lists it with exploratory testing and checklist-based testing.

An example: no requirement mentions double clicks on "Place order", but many forms send the same request twice when a button is pressed quickly. So you double-click it. If two orders appear, the guess has found a defect that no partition or decision table pointed to.

Why it matters

Specification-based techniques test what the requirement says. Many costly defects sit in what it does not say: a double submit, a session that expires during payment, an empty list for a new user. Experience-based techniques complement black-box and white-box techniques because they can find defects those techniques miss.

For the tester, it puts the team’s defect history to work. Done casually, though, it depends on one person’s memory and nobody can say what was covered; this lesson makes it repeatable.

What you guess: errors, defects and failures

Reason along the chain from the lesson on error, defect and failure: a developer forgets that a customer can have no orders (error), the code has no branch for an empty list (defect), and the order history crashes for a new customer (failure). The test is cheap: open the order history as a brand-new customer.

The test basis is the tester’s knowledge, not a specification, so coverage is hard to measure. Some teams say "error guessing" for any unplanned clicking around; here it means tests derived from a stated expectation of what is likely to fail. The syllabus names three sources of that knowledge:

  • How the application has worked in the past: its defect history and fragile modules.
  • The errors developers tend to make: > instead of >=, a missing null check, a fix applied to one copy of the code but not another.
  • Failures in similar applications: sign-up forms, checkouts and file imports fail in familiar ways.

A list of typical errors

The syllabus groups errors, defects and failures into six areas. Use them as the headings of your list; each bullet gives the syllabus examples, then ideas to try.

  • Input: correct input not accepted, parameters wrong or missing. Try O'Brien, leading spaces, or an API request missing a field the app always sends.
  • Output: wrong format, wrong result. Try amounts that need rounding, Arabic text in a PDF, and screens that may show null.
  • Logic: missing cases, wrong operator. Try the case nobody listed, such as an order both discounted and partly refunded.
  • Computation: incorrect operand, wrong computation. Try tax on a discounted price and a division by a count that can be zero.
  • Interfaces: parameter mismatch, incompatible types. Try a number sent as a string and a date passed between systems in another format.
  • Data: incorrect initialisation, wrong type. Try a new user with no history and a value too large for its column.

Try it: Negative Test Generator Try it: Special Character Dataset Generator

Fault attacks: guessing from a list

A fault attack is the methodical way to apply error guessing: create or acquire a list of possible errors, defects and failures, then design tests that expose those defects or cause those failures. The ISTQB glossary describes an attack as a directed, focused attempt to force specific failures to occur. It is not a security attack: you aim it at your own product, in a test environment.

Each entry, drawn from experience, defect data or common knowledge of why software fails, is a hypothesis about where the product is weak. The attack turns it into a test with concrete data and an expected result:

ID          FL-07
Area        Logic (missing case)
Hypothesis  A form submitted twice creates two records
Evidence    Found twice in our defect history: DEF-112, DEF-240
Attack      Double-click "Pay"; press Enter twice; go Back and resubmit
Expected    One order and one charge; the second submit is ignored
Applies to  Every form that creates, pays for or sends something

Worked example: a CSV employee import

Requirement: "HR admins can import employees from a CSV file with the columns employee_id, full_name, email and hire_date (DD/MM/YYYY). Valid rows are imported; invalid rows are listed in an error report with their row number. A summary shows how many rows were imported and how many were rejected."

The specification-based tests already exist. Now write one attack per area, with the expected result or, where the requirement is silent, a question.

Fault attacks on a CSV employee import, one per ISTQB error area: the likely error, the concrete attack and the expected result, with the duplicate ID case left as a question for the product owner.
Error areaLikely errorAttack on the importExpected result
Inputcorrect input not accepted; parameters wrong or missingThe parser does not expect a BOM or a quoted commaA BOM before employee_id; "Al-Harbi, Sara"Header recognised; the name stored whole
Outputwrong format, wrong resultRows numbered without counting the headerA file with rejected rowsRow numbers match the file; the header is row 1
Logicmissing cases, wrong operatorDuplicate IDs never consideredThe same employee_id twice; an ID that already existsRequirement silent: reject, update or skip?
Computationincorrect operand, wrong computationThe header row counted in the totals100 data rows, 3 of them invalid97 imported, 3 rejected
Interfacesparameter mismatch, incompatible typesThe date read as month first between screen and databaseHire date 03/04/20263 April 2026 in the API response and the database
Dataincorrect initialisation, wrong typeAn empty file or a trailing empty line not handledA header-only file; a file ending in an empty line0 imported, no crash; the empty line not reported
  • The requirement is silent: a question for the product owner, not an expected result
  • Input: a byte order mark (BOM) before employee_id, as some spreadsheet programs save it, and the quoted name "Al-Harbi, Sara" → header recognised, name stored whole.
  • Output: rejected rows → the row numbers in the error report match the file, where the header is row 1.
  • Logic: the same employee_id twice, or an ID that already exists → the requirement is silent: reject, update or skip? Ask the product owner.
  • Computation: 100 data rows, 3 of them invalid → 97 imported, 3 rejected; the header is not counted.
  • Interfaces: hire date 03/04/2026 → 3 April 2026, not 4 March, in the API response and database, not only on screen.
  • Data: a header-only file → "0 imported" and no crash; a file ending in an empty line → the empty line is not reported as an invalid row.

Try it: CSV Dataset Generator Try it: Unicode Dataset Generator

Making error guessing systematic

Error guessing becomes a team method rather than one person’s talent when the list is written down, fed with evidence and maintained:

  • Collect evidence: root causes of defects from testing and production, support tickets, developers’ worries about the change.
  • Keep one shared fault list, grouped by the six areas; each entry has a hypothesis, evidence and a sample attack.
  • Select the entries that fit the change, most likely and most damaging first; note what you skip.
  • Attack in a time-box; record the entry, data and result, so the attack can be reported and repeated.
  • Update the list: add new patterns, retire entries that never find anything, and turn steady finders into regression tests or checklist items (the next lesson).
Error guessing as a team cycle: evidence feeds one shared fault list, entries are selected for each change, attacked in a time-box and recorded, and the results update the list. Conceptual model
  1. 1Collect evidenceRoot causes from testing and production, support tickets, developers’ concerns
  2. 2Keep the fault listGrouped by the six areas; each entry a hypothesis with its evidence
  3. 3Select for the changeMost likely and most damaging first; note what you skip
  4. 4AttackConcrete data and an expected result, in a time-box
  5. 5RecordThe entry, the data, the result and any defect found
  6. 6Update the listAdd new patterns, retire dead entries, promote steady finders to regression tests or checklists

Back to step 2 The updated list serves the next change

One practical way to run the technique; the ISTQB syllabus does not prescribe these steps.

Try it: Edge Case Generator

Common mistakes

  • Guessing without writing anything down, so nothing can be reported, repeated after a fix or learned from.
  • Using error guessing instead of specification-based techniques; it complements them and does not replace them.
  • Copying a generic list and never adapting it to the product’s own defect history.
  • Stopping at "this might break" without concrete data and an expected result.
  • Reporting "tested with error guessing" as if it were measured coverage, instead of listing the entries attacked.

The QA perspective

On a team, error guessing happens at three moments. In refinement, list entries become questions: "What if the same file is imported twice?" In test design, you add targeted attacks next to the specification-based cases, each labelled with its list entry. After a release, defects that escaped to production go back into the list.

Ask developers which part of a change they trust least. In a bug report, name the attack and its evidence, so the fix covers the whole pattern, such as every form that submits twice. In the test summary, list the entries attacked and skipped, so the product owner sees the remaining risk.

Practice exercise

Build a fault list for a profile photo upload

Your task

A social app says: "Users can upload a profile photo (JPG or PNG, up to 5 MB). The photo is cropped to a square and shown in the page header and next to the user’s comments."

Write one fault-list entry per area: the likely error, a concrete attack, and the expected result or a question. Then pick three attacks to run first and say why. Attack only a test environment you may use.

Steps
  1. Note what the requirement does not say.
  2. Write one hypothesis per area.
  3. Turn each hypothesis into an attack with concrete data.
  4. Rank the attacks by likelihood and damage.
Show the model answer
Model answer

Not stated: a minimum image size, what users see while a photo is processing or when an upload fails, and how phone photos with rotation metadata are shown. Where an expected result below is not in the requirement, confirm it with the product owner.

Input. Likely error: the type is judged by the extension, compared case-sensitively. Attack: photo.PNG, and a PDF renamed to photo.jpg → the first accepted, the second rejected, because the content is checked, not the extension.

Output. Likely error: the rotation stored in a phone photo’s metadata is ignored. Attack: upload such a photo → shown upright, not on its side.

Logic. Likely error: overlapping uploads are not ordered. Attack: upload a new photo while the previous one is still processing → the newer photo wins even if the older one finishes later; never a broken image.

Computation. Likely error: the crop assumes a roughly square image. Attack: a 4000 × 300 pixel panorama and a 1 × 1 pixel image → a centred square crop, not stretched; ask about a minimum size.

Interfaces. Likely error: an error or timeout from the storage service is not handled. Attack: simulate a storage failure or timeout in the test environment → a clear message, and the old photo stays.

Data. Likely error: no default for users without a photo, or a stale cached copy. Attack: a user with no photo, and a photo replaced after commenting → a placeholder; the new photo on old comments, not a cached one.

Run first: the content check (also a security risk), the storage failure (users left without a photo) and the rotation (many profile photos come from phones). Another ranking is fine if likelihood and impact justify it.

Frequently asked questions

Is error guessing the same as exploratory testing?

No, although they are often used together. Error guessing designs tests from an expectation of likely errors, defects and failures. Exploratory testing designs, executes and evaluates tests at the same time while you learn about the product, and an explorer often uses error guessing to choose what to try next. Both are experience-based techniques in the ISTQB syllabus.

Can a beginner use error guessing without much experience?

Yes, by borrowing experience. Start from the six areas in this lesson, read your team’s defect history and the bug reports of similar features, and ask developers what worries them. Your list grows with every defect you find.

How is a fault list different from a checklist?

They overlap. A fault list is organised around likely failures and is used to design attacks. A checklist is a list of test conditions to cover, and it can draw on the same experience. In practice, attacks that keep finding defects often become checklist items; checklist-based testing is the next lesson.

How do I report coverage for error guessing?

Its coverage is hard to measure because the list is never complete, so report what you did: which entries you attacked, with which data, which ones found defects, and which you skipped and why. That gives the team an honest picture of the remaining risk.

References

  • ISTQB Certified Tester Foundation Level (CTFL) v4.0ISTQB · 2023The foundation syllabus of software testing: test levels and types, test design techniques, test management and tools.
  • ISTQB GlossaryISTQBThe standard definitions of testing terms — test case, regression testing, severity, priority, boundary value analysis and the rest.

Practise with Mutqan tools

Generate negative test cases for form fields and APIs: empty, null, wrong type, too long, injection, invalid format.

Test Design

Generate edge cases for strings, numbers, dates, files, lists and concurrency from a field definition.

Test Design

Generate Unicode test strings across scripts (Arabic, Devanagari, CJK, Cyrillic), emoji, combining marks and normalisation forms.

Test Data

Generate CSV files with custom columns, data types, row counts and delimiters.

Test Data

Go deeper

Your progress on this topic

Part of the QA Roadmap