October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsWindows FixRecommendedWindows errors stealing your time? Find the fix fastScan stability, cleanup and performance issues.Fix NowOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
World desk5 min

Software Testing Principles: Quality Goals for a Big Ball of Mud

Testing a Big Ball of Mud cannot prove software is bug-free, but risk-led quality goals and a balanced test portfolio can provide faster, more useful evidence.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Testing a hard-to-understand system is not about proving it has no bugs. It is about reducing uncertainty: gathering useful evidence about the behavior users and dependent components rely on, finding defects early, and making changes safer. A balanced test portfolio can help—even when the system is difficult to change—but it cannot turn a tangled architecture into a well-structured one by itself.

What testing principles matter most?

Software testing reveals defects and provides evidence about quality; a passing test suite does not prove that software is defect-free. The ISTQB testing principles also recognize that exhaustive testing is generally infeasible. Teams must choose cases according to risk and use suitable test techniques rather than attempt every possible input and state.

As an Amazon Associate I earn from qualifying purchases.

That makes testing a quality-engineering activity, not just a final inspection. Set goals for the product or service, identify risks that could prevent those goals from being met, and decide what evidence would be useful. The UK Home Office guidance puts the starting point plainly: “Make sure that there are clear quality goals established for the product, service or platform, so that you can more easily identify problems or risks.” See its quality assurance and testing guidance.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

How do you test a Big Ball of Mud?

A Big Ball of Mud is an architecture in which responsibilities and dependencies have become difficult to distinguish. That makes it harder to predict what a change might affect and harder to isolate a failure. Pearson’s sample for Developer Testing: Building Quality into Software notes that “Testers approaching a system with The Big Ball of Mud architecture also face a daunting task.” The challenge is real, but it does not mean testing must wait for a rewrite.

Start with behavior that matters

Identify high-risk user journeys, business rules, and interactions with other components. Prefer checks that answer a specific question: Does this critical behavior still work? Does this component communicate correctly with the real dependency? A passing test is most useful when its result changes a decision or provides confidence that a risky change is safe.

Add a safety net around changes

When a behavior is poorly understood, first capture what the system currently does at an observable boundary. Such a test may preserve an awkward behavior; that can still be useful if callers or users depend on it. Before changing it, confirm whether the behavior is intentional, relied upon, or a defect. As understanding improves, tests can become more focused and the code can be changed in smaller, better-bounded steps.

Improve testability incrementally

Look for seams where a dependency can be controlled, a component can be exercised independently, or an observable result can be checked without running the whole system. Make these changes where they lower setup effort or improve failure diagnosis. Treat them as incremental improvements, not a guaranteed cure: some tests will remain broad or costly while the architecture stays tangled.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What does the test pyramid help you decide?

The test pyramid is a planning metaphor, not a required numeric ratio. It helps teams compare test scope, feedback speed, maintenance burden, and the distinct confidence a test adds. Martin Fowler’s discussion of the practical test pyramid and his original test-pyramid article both caution against treating the model as a rigid rule.

Test level Typical scope Feedback and diagnosis Trade-offs and confidence
Unit A small unit of behavior, often with collaborators replaced or controlled. Usually fast and easier to pinpoint when it fails. Often cheaper to maintain, but may not reveal failures in real integration or runtime configuration.
Integration Interactions between components or with selected real dependencies. Broader feedback; diagnosis can require more investigation than a focused unit test. Can provide confidence about boundaries that isolated tests do not cover; setup and maintenance may cost more.
End-to-end A user-visible flow across a larger portion of the system. Can expose problems in the assembled system, but failures may be harder to localize and feedback slower. Useful for important journeys that narrower tests cannot establish; broad setup and change sensitivity can make these tests costly.

These are tendencies, not guarantees. A slow or unreliable unit test may be less valuable than a well-designed broader test, and an integration test earns its place when it covers behavior that isolated tests cannot. Keep broader checks when they add distinct confidence; avoid repeating the same assertion at multiple levels without a clear benefit. Fowler’s guidance on test shapes explains why a portfolio should reflect the system rather than a single idealized diagram.

How many unit tests versus integration tests should you have?

There is no universal percentage. The useful balance depends on the system’s risks, dependency boundaries, test reliability, feedback time, and the cost of keeping tests working. The pyramid can prompt the right question—whether the portfolio has enough fast, focused feedback and enough broader confidence—not supply a target count.

  • For a failure with a clear unit-level cause: favor a focused test that makes the failure quick to diagnose.
  • For a risk at a component boundary: use an integration test that exercises the relevant interaction.
  • For a critical user journey: retain an end-to-end check when lower-level tests cannot establish that the assembled flow works.
  • For duplicate coverage: keep the test that provides the clearest, most reliable evidence unless the second one protects a distinct risk.

As the UK Home Office guidance recommends, automate across test levels and avoid duplicated coverage. That does not mean automating every possible check: weigh expected value against implementation, execution, diagnosis, and maintenance costs.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

How can a team turn testing into quality goals?

  1. State the quality outcome. Describe what must work for users and dependent components, in terms the team can observe.
  2. Rank the risks. Consider impact, likelihood, and uncertainty. Prioritize behavior whose failure would matter most, since exhaustive testing is impractical.
  3. Choose evidence for each risk. Use the narrowest test that can credibly answer the question, and add a broader test where it covers a different uncertainty.
  4. Check the feedback loop. Notice how quickly a failure appears, whether the cause is clear, and whether test setup or instability creates avoidable delays.
  5. Revisit the portfolio after changes. Remove checks that no longer protect a distinct risk, and add or reshape tests when new behavior or dependencies change what needs evidence.

For further reading on the specific architectural challenge, Pearson’s publisher sample for Developer Testing: Building Quality into Software discusses testing a Big Ball of Mud. Its sample is a useful reference for the problem, not evidence that any single testing strategy will resolve it.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Outdated Drivers Are Slowing You DownFree scan - exact matches
PC Slower Than It Used to Be?Free scan - under a minute

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.