← Back to list

Testing Strategies in Software Development: A Practical Guide for Developers Who Skipped Testing…

How to think about testing, how much of each type you actually need, and how AI is changing the game -explained with real-world examples.

Lahiru Darshana · 2026-07-18 11:30 · 0 claps · 7.8 min read
#software-development #software-testing #unit-testing #ai #ai-testing
Open on Medium ↗
Wiki topics: AI · AI · General 💻 · Programming

Testing Strategies in Software Development: A Practical Guide for Developers Who Skipped Testing (Until Now)

How to think about testing, how much of each type you actually need, and how AI is changing the game -explained with real-world examples.

Introduction: Why Should You Even Care About Testing?

Here is an uncomfortable number: the Consortium for Information & Software Quality (CISQ) estimated that poor software quality cost the United States around $2.41 trillion in 2022 alone [1]. That’s not a typo. Failed projects, production outages, security breaches — most of it traces back to defects that could have been caught earlier.

And “earlier” is the key word. A widely cited finding from IBM’s Systems Sciences Institute suggests that a bug found in production can cost up to 100 times more to fix than the same bug caught during design or development [2].

Think of it like a restaurant kitchen. If the chef tastes the sauce while cooking, fixing it costs a pinch of salt. If the dish reaches the customer’s table wrong, it costs a remake, an apology, and maybe a one-star review. If it makes the customer sick, it costs the restaurant’s reputation. Software bugs work exactly the same way — the later they’re discovered, the more expensive they become.

A testing strategy is simply a deliberate plan for tasting the sauce at every stage, instead of hoping the final dish turns out fine.

Section 1: The Three Levels of Testing (The Foundation)

Almost every testing strategy in modern software engineering is built on three levels, first popularized by Mike Cohn in his book Succeeding with Agile and later refined in the famous “Practical Test Pyramid” article on Martin Fowler’s site [3][4].

Unit Tests -Testing One Brick at a Time

A unit test checks the smallest piece of your code in isolation -a single function or class. Does calculateDiscount(price, couponCode) return the right number? Does validateEmail() reject "not-an-email"?

Real-world analogy: a car manufacturer doesn’t wait until the car is fully assembled to check if the brake pads work. Each part is quality-checked on its own first.

Unit tests are lightning fast (milliseconds each), so a project can comfortably have hundreds or thousands of them running on every code change.

Integration Tests -Testing Bricks Working Together

Individually perfect parts can still fail as a team. Your payment function might be flawless, and your database code might be flawless — but does the payment function actually save the order to the database correctly? Integration tests verify that modules, services, and components collaborate as expected [4].

Real-world analogy: the engine works, the transmission works — but does the engine actually turn the wheels when they’re connected?

End-to-End (E2E) Tests-Testing the Whole Journey

E2E tests simulate a real user: a real browser opens your app, logs in, adds a product to the cart, checks out, and verifies the confirmation page appears. Tools like Playwright and Cypress dominate this space today.

Real-world analogy: the final test drive. Everything is assembled — now someone actually drives the car around the block.

E2E tests give the highest confidence but are the slowest and most fragile, which is exactly why the next section matters.

Section 2: The Testing Pyramid -How Testing Effort Should Be Divided

If unit tests are cheap and E2E tests are expensive, how many of each should you write? Software engineering’s standard answer is the Testing Pyramid.

The principle, as summarized in the Practical Test Pyramid, has two essential rules: write tests with different levels of granularity, and the more high-level you get, the fewer tests you should have [4]. Google’s engineering guidance made this concrete with its often-quoted 70/20/10 split: roughly 70% unit tests, 20% integration tests, and 10% end-to-end tests [5].

Why this shape? Because it balances confidence against cost:

The wide base of unit tests gives you instant feedback thousands of times a day for almost free. The middle layer confirms the pieces fit together. The small tip of E2E tests confirms the few journeys that would truly hurt your business if they broke -signup, login, checkout.

An inverted pyramid (mostly E2E tests, few unit tests) is a well-known anti-pattern nicknamed the “ice cream cone” -test suites that take hours to run, fail randomly, and get ignored by the team.

It’s worth being honest that the pyramid is a guideline, not a law. Some respected voices in the frontend world, like Guillermo Rauch, argue for a more integration-heavy shape -“Write tests. Not too many. Mostly integration.” [6] The right shape depends on your project. But for most teams, and especially for anyone starting out, the pyramid remains the industry-standard mental model.

Section 3: Other Strategic Dimensions You Should Know

The pyramid covers levels of testing, but a complete strategy considers a few more dimensions. Don’t worry — these are simpler than they sound.

Manual vs. automated testing. Manual testing is a human clicking around; automated testing is code checking code. The modern standard: automate the repetitive checks (regression), keep humans for what humans do best — exploratory testing, where a tester creatively tries to break the app in ways no script anticipated.

Black box vs. white box. Black box testing checks behavior without looking at the code internals (“when I enter a wrong password, do I see an error?”). White box testing uses knowledge of the internal code structure to design tests. Most unit tests lean white box; most E2E tests are black box [7].

Regression testing. Every test you write becomes a permanent guard. When a new feature accidentally breaks an old one (a “regression”), your existing test suite catches it in minutes -this is arguably the single biggest payoff of automated testing.

Non-functional testing. Does the app stay fast under 10,000 users (performance/load testing)? Can it be hacked (security testing)? Can people with disabilities use it (accessibility testing)? These sit alongside the pyramid rather than inside it.

Real-world example: think of an airline. Unit tests check the seat-pricing formula. Integration tests check that booking actually reserves a seat in the inventory system. E2E tests book a complete round trip in a browser. Load tests simulate Black Friday sale traffic. Security tests try to access another passenger’s booking. One strategy, many layers of protection.

Section 4: AI in Software Testing- What’s Actually Real

AI has moved from buzzword to daily workflow in testing. Here’s what teams genuinely use in production today, not just in demos.

1. AI-generated test code. The most immediate win for individual developers: tools like GitHub Copilot and Claude can read your component or function and generate a full test suite in seconds — including edge cases you might not think of. Developers who’ve never written tests before can paste in code, ask for tests, and learn the patterns by reading the output. This is by far the lowest-friction entry point into testing.

2. Self-healing tests. A classic pain: a developer renames a button’s ID and dozens of automated tests break — not because the app is broken, but because the tests were looking for the old ID. Industry analysis suggests 30–40% of QA time traditionally goes into this kind of maintenance [8]. AI-powered platforms like Mabl, Testim, and Functionize detect UI changes and update the tests’ element selectors automatically, dramatically cutting maintenance effort [8][9].

3. Visual AI testing. Applitools Eyes uses a trained neural network that understands page layout rather than comparing raw pixels — so it ignores harmless rendering differences but flags when a “Buy” button visually disappears or overlaps another element. This catches the category of bugs where all functional tests pass but the page looks broken to a human [8].

4. Plain-English test authoring. Tools like testRigor let non-programmers write tests as natural sentences (“login as customer, add the first product to cart, check that the total is not empty”), which the AI translates into executable browser actions [9].

5. Autonomous test generation. The newest wave: platforms that observe how your application (or your real users) behave and generate test coverage themselves, with humans reviewing rather than authoring [9].

The consensus emerging across the industry is AI-augmented testing, not AI-replaced testing: AI handles generation, regression, and maintenance, while humans focus on exploratory testing, usability judgment, and complex business scenarios [8]. The chef still tastes the sauce — AI just washes the dishes and preps the ingredients.

Section 5: A Practical Starting Strategy (If You’re Beginning Today)

Theory is nice; here’s the Monday-morning version. If your project has zero tests today, don’t try to boil the ocean:

  1. Pick your critical 20%. Identify the code that would hurt most if it broke — payments, authentication, core business logic.
  2. Write unit/component tests for those first. In the JavaScript world that’s Vitest or Jest (+ React Testing Library for UI components); in Python it’s pytest; in Java, JUnit.
  3. Use AI to accelerate. Paste your functions into an AI assistant and ask for tests. Review what it writes — you’ll learn faster than from any tutorial.
  4. Add 3–5 E2E tests for your most important user journeys using Playwright (its codegen mode literally records your clicks and writes the test code for you).
  5. Automate the run. Hook the tests into CI (e.g., GitHub Actions) so every push gets tested automatically — a test suite nobody runs is decoration.
  6. Grow with the code. Every new feature ships with its tests; every bug fixed gets a test that would have caught it.

That’s a real testing strategy. Not a 40-page document — a pyramid-shaped habit.

Conclusion

Testing isn’t about achieving a perfect coverage number or following a ritual. It’s about buying confidence at the lowest possible price: lots of cheap fast checks at the bottom, a few expensive realistic checks at the top, humans doing creative exploration, and — increasingly — AI doing the heavy lifting of generation and maintenance.

The teams that ship fast aren’t the ones that skip testing. They’re the ones whose tests let them change code fearlessly.

Start with one test. The pyramid builds itself from there.

References

[1] CISQ — The Cost of Poor Software Quality in the US: A 2022 Report. https://www.it-cisq.org/the-cost-of-poor-quality-software-in-the-us-a-2022-report/

[2] IBM Systems Sciences Institute (widely cited industry figure on relative defect-fix costs across development phases; treat exact multipliers as directional). Discussed in: https://contextqa.com/blog/cost-of-defects-in-software-testing/

[3] Mike Cohn — Succeeding with Agile: Software Development Using Scrum. Addison-Wesley, 2009. (Origin of the Test Automation Pyramid.)

[4] Ham Vocke — The Practical Test Pyramid. martinfowler.com, 2018. https://martinfowler.com/articles/practical-test-pyramid.html

[5] Google Testing Blog — Just Say No to More End-to-End Tests (source of the 70/20/10 guideline). https://testing.googleblog.com/2015/04/just-say-no-to-more-end-to-end-tests.html

[6] web.dev — Pyramid or Crab? Find a testing strategy that fits. https://web.dev/articles/ta-strategies

[7] rubemfsv — Software Testing Fundamentals: Black Box, White Box, and the Test Pyramid. DEV Community. https://dev.to/rubemfsv/software-testing-fundamentals-black-box-white-box-and-the-test-pyramid-mm4

[8] JK Tech Hub — AI in Software Testing & QA [2026]. https://jktechhub.com/blog/ai-in-software-testing-automation-2026

[9] Shiplight — Best AI Testing Tools in 2026: 11 Platforms Compared. https://www.shiplight.ai/blog/best-ai-testing-tools-2026

Further reading: ISO/IEC/IEEE 29119 (the international software testing standards series) and the ISTQB Foundation Level syllabus (https://www.istqb.org) for the formal, certification-grade treatment of these concepts.


메타데이터
post_id
dddb434cd726
slug
testing-strategies-in-software-development-a-practical-guide-for-developers-who-skipped-testing-dddb434cd726
url
https://medium.com/@lahirudarshana/testing-strategies-in-software-development-a-practical-guide-for-developers-who-skipped-testing-dddb434cd726
canonical_url
https://medium.com/@lahirudarshana/testing-strategies-in-software-development-a-practical-guide-for-developers-who-skipped-testing-dddb434cd726
author_url
https://medium.com/@lahirudarshana
status
ok
fetched_at
2026-07-21 11:16:06