Test Management

7 Principles of Software Testing Explained With Practical QA Examples

7 Principles of Software Testing Explained With Practical QA Examples

A regression run passes, the defect list is quiet, and someone asks whether the release is now bug-free. The results may be encouraging, but that conclusion goes beyond the evidence. A useful test report explains what was checked, what was observed, and what remains uncertain.

The seven principles of software testing in ISTQB's CTFL v4.0.1 syllabus, credited to ISTQB and its authors, help make those limits explicit. They guide decisions about test scope, timing, maintenance and product usefulness. They are general guidelines, not a promise that a particular test process can establish universal correctness.

Consider a fictional invoice-export feature described in the authored EXPORT-PRINCIPLES-1.0 design packet. An export should include only invoices matching the filter captured when the request starts. A synthetic label containing a comma must remain in its own field when the CSV is parsed. An empty selection should produce a header-only file and a clear message. The proposed business goal is to help someone reconcile selected invoices without manually removing unrelated records.

These are unexecuted QA examples using synthetic, non-personal data. No application, export or participant study was run. Each example describes a possible observation and an appropriate next action, rather than reporting a customer result.

Table of Contents

1. Testing Shows the Presence, Not the Absence of Defects

A test can reveal a defect when observed behavior contradicts an expected result. If the export contains an invoice outside the captured filter, that discrepancy warrants investigation against the requirement. Record the request state, input data, expected membership and actual output so another person can examine the failure.

A passing check supports a narrower statement: under those recorded conditions, the checked behavior met its expected outcome. It does not establish that other filters, transitions, file contents or environments are defect-free. Even a run in which every selected test passes cannot prove that no hidden defects remain.

For the fictional export, suppose a future check confirms that a file contains only the expected selected invoices. The defensible report would identify the filter, synthetic dataset and build that were checked. It would leave the behavior of a changed filter during a pending request as untested unless that situation was investigated separately.

The next action is to compare the available evidence with the release risks, then decide which unknowns need more investigation. A green result belongs to a defined check, not to every possible behavior of the product. Avoid turning “no defects found in this run” into “no defects exist.”

2. Exhaustive Testing Is Impossible

Testing everything is generally infeasible, except in trivial cases. For an export, the space extends beyond visible filter options to file contents, request sequences, changing data, timing and supported environments. Exercising the options on a screen does not exhaust those other dimensions.

A small, explicitly bounded model can sometimes be checked completely. For example, a pure filter rule with a fixed finite set of allowed inputs might permit full enumeration of that set. The resulting completeness claim applies to the model and its assumptions. It does not automatically cover the integrated export service, concurrent requests or every real dataset.

Make the selection rationale visible instead of claiming exhaustive system coverage. In the fictional design, useful candidate checks include:

  • Matching and nonmatching records, with expected export membership derived from the captured filter.
  • An empty selection, checked against the header-only file and empty-result message requirements.
  • A synthetic comma-containing label, checked by parsing the output and inspecting field integrity.
  • A visible filter change while an earlier export request is pending, checked against the captured-filter rule.

These candidates address distinct risks; they are not an exhaustive suite. The QA lead and product owner should review omitted conditions and choose further partitions, boundaries and interactions according to their consequences. A coverage statement should name its population, such as the approved filter rules, rather than implying that the entire system has been covered.

3. Early Testing Saves Time and Money

Early feedback can prevent an ambiguous or incorrect decision from spreading into implementation, documentation and later tests. Testing can begin with a review of a requirement or design, before executable software exists. Dynamic checks can then begin as soon as suitable behavior becomes available.

Suppose an earlier version of the export requirement says only, “Export the selected invoices.” A reviewer asks when selection becomes fixed. Does the request use the filter at submission, or whatever filter is visible when generation finishes? Both interpretations could lead developers and testers to build internally consistent but incompatible assumptions.

The product owner needs to resolve that ambiguity. In the fictional packet, the chosen rule captures the filter when the request starts, and a later visible filter change must not alter the pending request. The test basis can then include a concrete transition scenario before implementation proceeds further.

Resolving the question early creates an opportunity to avoid downstream rework. It does not establish a measured saving, guarantee lower total cost in every project, or remove the need for later integration testing. Real behavior may still expose dependency, timing or environment problems that a requirements review could not reveal. Keep the early question and its decision traceable so later tests verify the intended rule rather than a tester's private assumption.

4. Defects Cluster Together

Defects often concentrate in a relatively small part of a system. ISTQB presents this as an illustration of the Pareto principle and an input to risk-based testing. It is a useful pattern to investigate, not a universal numerical law that every project must reproduce.

If future testing finds repeated problems around CSV escaping, the cluster could justify deeper investigation of the shared formatting and parsing paths. Review whether the same mechanism also affects other synthetic label characters or export routes. A locally concentrated problem can reveal a common cause that deserves more attention than isolated symptom fixes.

However, the fictional example contains no observed defect cluster. It describes how a team might respond if one emerged. The team would also need to consider where it has spent its investigation effort: a quiet component may have received little testing, rather than being demonstrably reliable.

Use cluster evidence to adjust priorities while retaining checks on other consequential behavior, including filter membership. Do not stop checking selection merely because escaping produced more discoveries. The accountable risk owner should understand both the signal behind the increased focus and the exposure left elsewhere.

5. Tests Wear Out

Unchanged tests and data can become less effective at revealing new defects. They repeatedly examine the same assumptions and paths while the product and its risks evolve. The practical response is to review what those checks can detect, adapt useful tests and add coverage for new conditions.

Imagine a stable regression check that exports simple synthetic labels under an unchanged filter. It may remain valuable for detecting a return of a previously fixed selection problem. It cannot, by itself, establish that a comma-containing label stays within its field or that a pending request retains its original filter.

Keep that useful regression check. Add or adapt cases for label parsing and the pending-request transition, with expected outcomes derived from the approved requirements. Exploratory investigation can also help identify assumptions that the existing examples did not anticipate. A long sequence of passes should prompt a coverage review when risks change, not automatic deletion of the suite.

Older explanations may call this principle the “pesticide paradox.” The current syllabus label is “tests wear out,” and its qualification is important: repeating the same tests can still be beneficial in automated regression testing. The principle concerns detecting new defects with an unchanged test set; it does not make repeated regression testing worthless.

6. Testing Is Context Dependent

There is no single testing approach that fits every system and project. Objectives, consequences of failure, available environments, delivery constraints and applicable obligations affect what evidence is needed. Context shapes the approach without removing the need for a deliberate process.

An internal prototype for exploring an export layout may justify lightweight investigation and explicit limitations. A business-critical reconciliation workflow may require stronger evidence about record selection, recovery from failed requests and the suitability of the output. Those choices need input from people who understand the consequences and can accept the remaining risk.

The same named technique can also serve different purposes. Exploring a prototype may help clarify the intended workflow, while exploring a release candidate may investigate risky transitions that scripted checks leave open. Neither activity should be presented as a substitute for requirements or obligations that actually apply.

Common practices can remain consistent across contexts: identify the test basis, record relevant conditions, state expected outcomes and retain findings. Adapt their depth and timing to the situation. “Context dependent” is not permission to ignore standards, discard evidence or invent a convenient exit rule. Unknown obligations and acceptance criteria need clarification from accountable owners, not an assumption that a familiar checklist is sufficient.

7. Absence-of-Defects Fallacy

Software can conform to its specified requirements and still fail to meet user needs or business goals. Finding and fixing defects against the specification therefore does not, by itself, establish that the product will succeed. Verification needs to be complemented by validation of whether the product is suitable for its intended use.

In the fictional export design, a future implementation might correctly capture the filter, preserve CSV fields and handle an empty selection. Those checks would still leave a separate question: does the output help the intended person reconcile invoices? The chosen fields, ordering or surrounding workflow might be unsuitable even if the checked rules are satisfied.

That possibility calls for a validation plan, not an invented usability result. The product owner and QA team could agree on a representative reconciliation task, the information needed to complete it and an appropriate review with intended users or knowledgeable representatives. No such session has taken place in this example. Participant arrangements, acceptance criteria and actual findings remain to be established.

This principle differs from the first. Principle one limits the inference that passing tests prove there are no hidden defects. Principle seven challenges the inference that conforming to specified requirements is enough to deliver user or business value. More verification may strengthen evidence about a rule without answering whether it is the right rule.

Keep Test Conclusions Within Their Evidence

A test summary is more useful when its conclusion matches the evidence being reviewed. These boundaries prevent different forms of completeness from being treated as interchangeable:

Evidence Reviewed

Defensible Conclusion

Conclusion to Avoid

Selected checks pass

The recorded checks met their expected outcomes under stated conditions.

No defects remain anywhere in the system.

Every input in a bounded model is checked

That declared model has been exercised completely.

Every real state, input and environment has been tested.

Specified export rules are satisfied

The implementation conforms to those checked rules.

The export necessarily meets users' reconciliation needs.

Before the next release discussion, take a consequential behavior and write down its approved requirement, the available test evidence and the most important unresolved question. Assign a next action and an accountable decision owner. For the export, that might mean adding the pending-filter check, clarifying an uncertain rule, or planning validation of the reconciliation task.

The immediate goal is a defensible decision about what to investigate or accept next. Preserve useful checks, change the test approach when the risks change, and keep unknowns visible instead of converting them into a claim of complete quality.

Related

More on Test Management

Create traceable test cases, prepare release-specific test runs, and keep approved coverage current as the product changes.