DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

Enterprise AI Trend Report: Gain insights on ethical AI, MLOps, generative AI, large language models, and much more.

2024 Cloud survey: Share your insights on microservices, containers, K8s, CI/CD, and DevOps (+ enter a $750 raffle!) for our Trend Reports.

PostgreSQL: Learn about the open-source RDBMS' advanced capabilities, core components, common commands and functions, and general DBA tasks.

AI Automation Essentials. Check out the latest Refcard on all things AI automation, including model training, data security, and more.

Related

  • Smart Wearable Device Testing: Main Steps to Cover
  • The Cost-Benefit Analysis of Unit, Integration, and E2E Testing
  • Importance of Big Data in Software Testing
  • Strategies To Automate Your Integration Testing

Trending

  • BPMN 2.0 and Jakarta EE: A Powerful Alliance
  • Architecture: Software Cost Estimation
  • Sprint Anti-Patterns
  • Initializing Services in Node.js Application
  1. DZone
  2. Software Design and Architecture
  3. Integration
  4. The 10 Laws of Testing

The 10 Laws of Testing

Testing laws will never be complete; sometimes you’ll find yourself breaking one or two (or ten) at a time—the important thing is to seek continuous improvement.

By 
Marcus Merrell user avatar
Marcus Merrell
·
Sep. 05, 23 · Opinion
Like (1)
Save
Tweet
Share
3.5K Views

Join the DZone community and get the full member experience.

Join For Free

Words we as developers should live by: “Quality comes not from inspection, but from the improvement of the production process.” — W. Edwards Deming

Axiom: “Tests are code.”

Too many organizations treat anything that isn’t coded as disposable. It is obvious that testing is indispensable, yet time and time again we find teams who treat test automation and related material as second-class citizens. The tests are documents of user behaviour, inextricably linked to the requirements produced by the Product organization and connected at the virtual hip to the code used to create the feature.

If it provides value, it should be versioned, maintained, cared for, and respected as though it were a core feature of the product itself. This should include test case specifications, design and technical documentation, and bug reports.

Also: “Time kills confidence.”

You would think the more time you spend on a feature, the more time you have to refine, hone, test, and poke around at it. Counterintuitively, this is suitable for the “old world” style of development, with a test environment, a staging environment, and many grand hypotheses around how users will interact with it.

These laws attempt to pull the SDLC into the cloud-enabled world: tiny, incremental changes, rolled out to limited audiences before being put out into the world at large. “Keyboard-to-production in 10 minutes”-- This leads to faster feedback, fewer escapes, and higher confidence. The following are 10 laws for the new world of coding. 

The 10 Laws

1. Everyone Tests — Everyone

Every member of the team, no matter what process is used, no matter what product is being produced, no matter what industry—everyone—is responsible for the quality of the product. Product, engineering, testing, and even the surrounding functions: customer support, sales, marketing, business development, early access beta customers, the C-suite — everyone tests.

2. Measure Risk, Not Coverage

Assuming the team can even agree on a working definition of “perfection”, the mere pursuit of it causes attention to be diverted from the most important thing: the risks to the business of a critical defect escaping to production.

Before you start to worry about comprehensive coverage of all features, become obsessed with the half-dozen user flows that are the most critical to your business.

3. Test What the “Money” Wants

Every business, every division, and every team deploys a set of core features that impact revenue more than others. Alternatively, every team must maintain a set of features that are less impactful, but still necessary. Focus test efforts on the revenue-impacting parts before other considerations. For eCommerce, prioritize checkout flow over user profiles. For finance, prioritize security & money-handling workflows over informational pages.

4. Breadth Is More Important Than Depth

It is more important to test all areas of the product in a shallow way than it is to test some of the product in a deep way. Deep, multivariate combinations of business logic are intended to find the most obscure edge cases: this risks missing more obvious flaws in other high-priority areas.

Once breadth is achieved, how deep do you go on a particular feature? See Law 2.

5. The Only Perfect Signal Is the User's Signal

Until your users interact with your software, everything you do is theoretical.

Tests are models. They are approximations of user behaviours, based on information gained from past user behaviours. The signal we get from a test might be flawed by the environment, by logic flaws in the tests themselves, by unconscious bias, and even by incorrect data from previous models!

The only way to know what happens when a user uses the software is to observe what happens when users use the software. User journeys from production analytics should be correlated with test coverage to evaluate the effectiveness of a test strategy. 

Also, consider that the user experience includes elements that wouldn’t even be regarded as bugs, and might not be reflected in the analytics. Your job isn’t necessarily done when the build turns green.

6. Code Is Not Complete Until It Is Testable (And Tested)

Testability is the act of instrumenting various parts of the code for inspection. It is difficult to judge correct behaviour without allowing these signals to be polled and interpreted. This leads to a disproportionate amount of extra work, which adds time to the release cycle and draws focus away from the customer experience. Time kills confidence.

7. Every Test Should Lead to a Clear Action

If you don’t understand what to do when a test fails (either from a test point of view or a product point of view), the test is not providing value. 

This usually comes from tests having too many steps, or from the product not providing enough information on failure (which includes not being adequately testable. See Law 2).

8. Always Test Where the Signal Is Highest

Software testing has “layers” (from high to low): Production, UAT, Functional, Integration, and Unit. 

Higher-layer tests are critical to force interaction between disparate components developed by different teams, but the minutiae of edge cases can likely be moved down to lower layers. These lower-layer tests have fewer dependencies, avoid costly pipeline configuration/orchestration, and run faster than higher-layer tests.

As an example, a UI test should only be used to determine whether the User Interface is capable of rendering the outputs of an API. If you repeatedly test business logic through the same UI, you should move most of these tests “down” to the API layer.

9. Never Link Tests

All tests should execute without regard to the state of any other test. Test data should be managed such that each test lives in its own segregated scenario, and cannot be altered by another test.

Tests should be atomic and autonomous.

10. Prefer the Tightest Feedback Loop

All tests are feedback loops. They run through the product from a particular perspective and provide feedback to a particular person or team. The tightest feedback loop is the one that cuts out as much as possible to test the particular operation in question. Testing a wider loop than necessary introduces variables that can muddle the signals you get from the test.

Conclusion

People love to argue. You don’t have to look far to find it. These ten laws aren’t complete, and of course, there are many caveats and qualifiers for which neither readability nor word count will allow. I'd love to hear feedback from folks sitting in the chair; what are your 10 Laws of Testing? What did I miss?

These items are framed as laws, but I recognize that context matters and that you can’t always be perfect. Sometimes these laws are aspirational rather than practical. Sometimes you’ll find yourself breaking one or two (or ten) at a time—the important thing is to seek continuous improvement, not perfection.

Law (stochastic processes) Testing Document automation Software Integration Agile testing Integration testing Risk-based testing

Opinions expressed by DZone contributors are their own.

Related

  • Smart Wearable Device Testing: Main Steps to Cover
  • The Cost-Benefit Analysis of Unit, Integration, and E2E Testing
  • Importance of Big Data in Software Testing
  • Strategies To Automate Your Integration Testing

Partner Resources


Comments

ABOUT US

  • About DZone
  • Send feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends: