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
Please enter at least three characters to search
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

Because the DevOps movement has redefined engineering responsibilities, SREs now have to become stewards of observability strategy.

Apache Cassandra combines the benefits of major NoSQL databases to support data management needs not covered by traditional RDBMS vendors.

The software you build is only as secure as the code that powers it. Learn how malicious code creeps into your software supply chain.

Generative AI has transformed nearly every industry. How can you leverage GenAI to improve your productivity and efficiency?

Related

  • Mocking and Its Importance in Integration and E2E Testing
  • The Cost-Benefit Analysis of Unit, Integration, and E2E Testing
  • Importance of Big Data in Software Testing
  • Strategies To Automate Your Integration Testing

Trending

  • The Perfection Trap: Rethinking Parkinson's Law for Modern Engineering Teams
  • Advancing Robot Vision and Control
  • A Guide to Auto-Tagging and Lineage Tracking With OpenMetadata
  • Implementing API Design First in .NET for Efficient Development, Testing, and CI/CD
  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
Likes (1)
Comment
Save
Tweet
Share
4.2K 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

  • Mocking and Its Importance in Integration and E2E Testing
  • 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
Oops! Something Went Wrong

The likes didn't load as expected. Please refresh the page and try again.

ABOUT US

  • About DZone
  • Support and 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:

Likes
There are no likes...yet! 👀
Be the first to like this post!
It looks like you're not logged in.
Sign in to see who liked this post!