World’s largest virtual agentic engineering & quality conference

WHENAUG 19-21
WHEREVirtual · Global
Register Now
Testing

Incremental Testing Tutorial: Comprehensive Guide With Best Practices

What is incremental testing, how does it compare to Big Bang testing, and which methodology should you use? A complete guide with examples.

Author

Amrita Angappa

Author

Published on: October 25, 2022

Last Updated on: July 17, 2026

OVERVIEW

Incremental testing is an approach used during the testing phase of integration tests. It uses a number of stubs and drivers to test each module independently. This helps identify any errors or defects in the modules

Following the completion of unit testing, integration testing is performed in order to detect the interfaces and interactions between different modules. As the integration process continues, a variety of methods and technologies are used, one of which is incremental testing. In this approach, developers sum up each module one by one using stubs or drivers.

One clarification before we start, because the term is overloaded. This guide covers incremental testing in software engineering: an integration strategy that adds modules to the system one at a time. If you arrived looking for incrementality testing in digital marketing, which measures the causal lift of an ad campaign against a control group, that is a different discipline with the same name, and it is explained in the disambiguation section below.

What is Incremental Testing?

As a developer, once you complete unit testing, you will need to perform integration testing. This process verifies how interfaces perform and how different modules interact. When you integrate, developers make use of tons of techniques. One among them is known as the incremental approach.

When you perform incremental integration testing, you can integrate different modules with the help of drivers or stubs to fix the bugs.

Incremental Testing vs Big Bang Testing

Incremental testing is best understood against its opposite. Big Bang testing, also called non-incremental integration, waits until every module is finished, combines them all at once, and tests the assembled system. It is the intuitive approach, and on a small system with a handful of modules it is perfectly reasonable: there is nothing to gain from staging the work, and you skip the stubs entirely.

The trouble starts as the system grows. When you integrate forty modules simultaneously and a test fails, the defect could be in any of them, or in any interface between them. You have no way to narrow it down except by taking the system apart again, which is precisely the work Big Bang integration was supposed to save. Incremental testing avoids this by never letting the search space get large: you add one module, and if something breaks, you already know where to look.

AspectIncremental TestingBig Bang Testing
Integration approachModules are added progressively, one or a few at a timeAll modules are combined at once, then tested as a whole
Stubs and driversRequired, to stand in for modules not yet builtNot needed, since every module must already exist
Fault isolationStraightforward: a failure points at the module you just addedDifficult: a failure could originate anywhere in the system
When testing startsEarly, as soon as two modules existLate, only once every module is complete
Debugging effortLower, because the search space stays smallHigher, because the whole system is the search space
OverheadWriting and maintaining stubs and driversAlmost none upfront
RiskLower, and defects surface throughout developmentHigher, and defects arrive together at the end
Best suited toLarge systems, or teams building modules in parallelSmall systems with few modules and simple interfaces

The trade is overhead against isolation. Big Bang costs you nothing upfront and everything during debugging. Incremental costs you stubs and drivers upfront and gives you a defect you can locate in minutes. On anything beyond a small system, that trade pays for itself the first time a test goes red.

There is a scheduling argument too. Big Bang testing cannot start until the last module is done, which pushes all integration risk to the end of the project, the point at which you have the least time to absorb it. Incremental testing starts as soon as two modules exist, so integration problems surface while there is still budget to fix them.

Software vs Marketing: The Dual Meaning of Incremental Testing

Search for incremental testing and you will land in two different professions. The term means genuinely different things in software engineering and in digital marketing, and neither field is using it wrongly.

  • In software engineering, incremental testing is the integration strategy this guide describes: add modules to the system progressively, using stubs and drivers to stand in for what is not built yet, so that defects stay easy to locate.
  • In digital marketing, incrementality testing measures the causal lift of a campaign. It asks a question attribution cannot answer: of the conversions credited to this ad, how many would have happened anyway?

The marketing version works like a controlled experiment. You split the audience into a test group, which sees the campaign, and a control group, a holdout that does not. Both groups are otherwise comparable, so any difference in conversions between them is attributable to the ads rather than to the fact that people who were already going to buy also happened to click. Incremental lift is the gap between the two, expressed as a percentage of the control group's baseline.

The reason the technique exists is that last-click attribution flatters advertising. A customer who was always going to renew clicks a retargeting ad on the way to checkout, and the ad claims the sale. A holdout test reveals what the campaign genuinely added, which is often less than the attribution dashboard reports, and occasionally nothing at all.

Both meanings share one instinct, which is presumably why the word attached to both: isolate one change and measure its specific effect, rather than changing everything at once and guessing which part worked. Beyond that they have nothing in common, and the rest of this guide is about the software definition.

Why is incremental testing important?

Incremental testing has its own set of advantages when you want to test a variety of elements. This is why you need incremental testing:

  • To ensure that different modules' functioning is quite successful after it has been integrated.
  • Through this method, you can quickly identify all the defects before passing each phase. This would let every developer get an edge in identifying the core cause of the problem.
  • You can fix issues without requiring much rework and reducing software testing life cycle costs.

When should you use Incremental Testing?

Every software testing company would hire their employees after checking if they have the right skills and knowledge in their niche and domain. All these qualified professionals know how different testing types work. Be it reliability testing, penetration testing, installation testing or exploratory testing, the specialist has the capability to perform website testing on a high-end basis.

When a tester has to perform integration testing, he will find incremental testing as a boon. The major reason for this to happen is that both integration testing and incremental testing are the same way. When we perform incremental testing, we verify the system's elements separately. This way, the testing specialist can achieve faster and better results to support the developers.

Do you want to learn more about exploratory testing? Here is a video:

Subscribe to our TestMu AI YouTube Channel to get the latest updates on tutorials around smoke testing, software quality, responsive design, and more.


Run tests up to 70% faster on the TestMu AI cloud grid

Incremental Testing Methodologies

Before we discuss in detail about incremental testing, we need to know about stubs and drivers. They are nothing but the dummy or pseudo code we use in component testing or integration testing. We use them when one or more than one modules are under development, but you need to test another module.

We use stubs in the top-down test strategy. We can also address them as “called programs.” Through stubs, you can simulate different interfaces between the underdeveloped lower lever module.

On the other hand, we use drivers in the bottom-up testing approach. They are also called “calling programs.” Drivers can simulate the interface between different top-level modules which might not be available or are still under development.

Many of us might have a question needing an answer:

  • Why use a stub or driver before we test?
  • Why don’t we wait until we develop every application module?

The best thing to note is that developers would have to sit idle until every module is developed. This would also make it challenging to analyze the root cause of the defect. To prevent that from happening, we make use of stubs and drivers.

Let’s take a look at different Incremental Testing methodologies:

Top Down methodology

As evident from the name, you can perform code-based testing from top to bottom. It happens right from the central module and ends at the sub-module. This method first tests the modules from the top application layer. Generally, we involve the structural flow of the application under testing when we use this approach. We can substitute unavailable or underdeveloped components or modules with stubs. This testing type, where you can integrate and test every module at the layer-side first, is called “breadth-first”.

Top Down methodology

Here is an example:

  • Module L: Login to the website.
  • Module O: Order what you want
    • Module Order Summary/ OS (Yet to be developed)
  • Module P: Payment to be made
    • Module Payment-by-cash/ PC
    • Module Debit Card/Credit Card Payment aka DP (Yet to be developed)
    • Module E-Payment/ EP (Yet to be developed)
  • Module R: Reporting (Yet to be developed)

For top-down Incremental Integration testing approach, these will be the delivered test cases:

  • Test Case 1: Integrate and test Module L and Module O
  • Test Case 2: Integrate and test Module L, O, and P
  • Test Case 3: Integrate and test Module L, O, P, and R

And so on other test cases are derived.

The next category would be “depth-first”.

You can derive the following test cases for “depth-first”:

  • Test Case 1: Integrate and test Module L and Module O.
  • Test Case 2: Integrate and test Module L, O, and OS.
  • Test Case 3: Integrate and test Module L, O, OS, and P.
  • Test Case 4: Integrate and test Module L, O, OS, P, and CP.

You can similarly derive other test cases.

Why should you use Top-down Methodology?

With top-down methodology, you get to access early architecture defects easily. This can teach you how an application would work in its early stages. Through this, you can easily identify any design defects. You can also test the main control points as early as possible.

Disadvantages of Top-down Methodology

Through this method, you can test the significant modules later in the cycle. It’s quite hard to write different test environment conditions. You cannot call a stub a perfect implementation of modules related to each other. It would simulate only the data flow happening between two modules.

Bottom Up methodology

Through this approach, you can understand that testing would take place from bottom to top. You can integrate and test the modules from the bottom layer first, and after that, you can sequentially integrate other modules as you keep moving up. You can replace underdeveloped or unavailable modules with drivers.

Here is an example to help you understand better:

Modules of healthy food, fruits, vegetables, citrus fruits, oranges, and lemons are under development. Hence we can substitute them with related Drivers:

Bottom Up methodology

For the bottom-up Incremental Integration testing approach, the following test cases will be derived:

  • Test Case 1: Conduct Unit testing for the Modules Orange and Lemon.
  • Test Case 2: Integrate and test Modules Citrus fruits-Orange-Lemon.
  • Test Case 3: Integrate and test Modules Fruits-Citrus fruits-Orange-Lemon.
  • Test Case 4: Conduct Unit testing for Module Vegetables.
  • Test Case 5: Integrate and test Modules Healthy food-Vegetables-Fruits-Citrus fruits-Orange-Lemon.

Why should you use the Bottom-up Methodology?

We can use this method for applications with a bottom-up design model. You can easily create different test conditions using a bottom-up approach. When you start testing right from the testing hierarchy’s bottom level, it means you can test critical functionality or modules quite early. This way, you can easily identify any errors and bugs. You can also detect any defects in the interface early.

Disadvantages of Bottom-up Methodology

  • It’s quite hard to write Drivers compared to a stub.
  • You can catch the Design defects later on.
  • There is no working application until you build the last module.
  • We cannot call a Driver a complete implementation of any related Module. It’s just a way to simulate the data flow between two different modules.

Sandwich Testing methodology

Sandwich testing approach is a hybrid method of both top-down and bottom-up methodologies. We use stubs and drivers to manage underdeveloped or incomplete modules.

How do you perform Sandwich testing?

  • We identify a middle layer from which you perform top-down and bottom-up testing. We call the middle layer the target layer.
  • We then identify the target layer through a heuristic approach. Through this approach, you can choose a layer allowing minimal usage of drivers and stubs.
  • We can then start the top-down testing from the middle layer. Once we are done, we can move downwards towards different lower-level modules.
  • We call this layer present below the middle layer the Bottom layer.
  • We can also start the Bottom-up testing from the middle layer and move right towards the topmost layer modules. We call this layer above the middle layer the Top layer.
  • When you use stubs and drivers, you perform UI testing and functionality testing of different low-level modules, respectively.
  • Finally, we only have the middle layer left when we want to execute the final test.

Here is an example:

Sandwich Testing methodology

The following test cases can be derived with Sandwich Testing Strategy:

  • Test Case 1: Test A, E, F, and G on an individual basis, where Test A is the Top layer test and Tests E, F, and G are the Bottom layer tests.
  • Test Case 2: Test A, B, C, and D.
  • Test Case 3: Test B, E, and F.
  • Test Case 4: Test C and G.
  • Test Case 5: Test A, B, C, D, E, F, and G.

Why should you choose Sandwich Testing Methodology?

Whenever you carry out a big project with plenty of sub-projects, this method is beneficial. You can also run top-down and bottom-up testing methodologies parallely.

Disadvantages of Sandwich Testing Methodology

  • We don’t get a chance to test interfaces and subsystems thoroughly before unifying the modules.
  • The costs are higher since both top-down and bottom-up testing methodologies are involved
  • We don’t advise this testing type for a system with highly interdependent modules.

Limitations of Incremental Testing

Incremental testing is the right default for most systems, but it is not free, and the costs are worth knowing before you commit to it.

  • Stubs and drivers are real work: Every module you have not built yet needs a stand-in, and someone has to write it. That code is throwaway by design: it ships to nobody, it earns no feature credit, and it still has to be maintained. When the real module's interface changes, every stub imitating it needs updating too, and a stub that has quietly drifted out of sync with the module it represents is worse than no stub, because your tests now pass against a fiction.
  • A stub is not the module: Stubs return canned answers. They do not have the real module's performance characteristics, its error paths, or its edge-case behavior. Integration bugs that only appear against the genuine implementation survive the whole incremental process untouched, which is why passing every incremental test is not the same as being integrated.
  • Highly interdependent modules resist it: The strategy assumes you can add modules roughly one at a time. When modules are tightly coupled and call each other in cycles, there is no clean order to add them in, and the stub for each one needs to imitate most of the system. At that point the scaffolding costs more than the integration it was meant to simplify.
  • More cycles means more elapsed time: Testing after every integration step is more total test runs than testing once at the end. Each run is faster and easier to debug, which is the trade, but the calendar cost is real, and it is why automation matters so much here.

None of this argues for Big Bang. It argues for judgment: use incremental testing where modules can be cleanly separated, keep stubs as thin as they can be, and replace each one with the real module the moment it exists.

How to Automate Incremental Integration Testing

The limitation above, more integration steps meaning more test runs, is only painful when a human runs the tests. Automation is what makes incremental testing practical at scale, and modern CI/CD pipelines are built for exactly this shape of work.

The pattern is straightforward. Every time a module is integrated, whether that is a merged pull request or a new build, the pipeline triggers the suite automatically. Nobody decides whether this increment is worth testing, which is the decision that gets skipped under deadline pressure and is precisely the one that should not be.

  • Trigger on integration, not on a schedule: Wire the suite to the merge. The value of incremental testing comes from the tight link between one change and one result, and a nightly run breaks that link by batching ten changes into one failure.
  • Layer the suite by depth: Run fast checks on every commit and the fuller suite on integration. Keeping the common path quick is what stops developers from working around the pipeline.
  • Automate the interface tests with real browsers: Once integrated modules surface in the UI, tools such as Selenium and Playwright drive the assembled application the way a user would, which catches the integration defects that unit-level stubs cannot.
  • Re-run regression on each increment: Regression testing is the natural partner to incremental integration. Each new module can break something that already worked, and the point of integrating one at a time is lost if you do not check the modules already in place. The suite grows with every increment, which is the whole argument for running it automatically.
  • Retire stubs as the pipeline goes green: Track which stubs are still standing in for finished modules and swap them out. Stubs outliving their modules are how a suite ends up testing itself.

The obvious objection is time: a regression suite that grows with every module eventually takes longer than the increment it is verifying. That is a parallelisation problem rather than a strategy problem. Running the suite across a cloud grid, for instance with TestMu AI's HyperExecute, keeps the feedback loop short enough that testing on every integration stays realistic rather than aspirational.

Points to remember when you perform incremental testing

It’s not rocket science to perform incremental testing for any well-experienced tester. These pointers can help you out when you perform incremental testing:

  • It might be a bit difficult if you want to find and fix those defects in every integrated component. To get that done, you can easily perform Incremental integration tests.
  • As soon as the development starts, you can fetch and fix those bugs as you perform incremental integration testing.
  • The incremental tests are quite faster in comparison to the end to end testing process.
  • You can easily find any existing system issues, such as corrupted database schema, cache integration, etc.
  • You can easily reduce software failure with incremental integration tests.
  • With this testing, you can easily check for any existing structural changes when a user shifts directly from one module to another.
  • You can fix those issues in the integrated modules when you want to reduce the bug count.
  • When you perform incremental integrated testing, it’s possible to cover a number of modules. This paves the way for much better testing capabilities.
  • For greater browser coverage, always use cloud testing platforms like TestMu AI to test your websites and apps on a scalable online browser farm and online device farm of 3000+ real browsers, devices, and operating systems.

It has a simple onboarding process to perform mobile app and web testing using automated testing tools like Selenium, Cypress, Playwright, Puppeteer, Appium, Espresso, etc.

Developers and testers can also harness TestMu AI’s HyperExecute - an end-to-end test orchestration cloud to run automated test suites at a blazing speed of up to 70% more than any other conventional cloud grids.

Conclusion

With incremental testing, you can quickly achieve the results you wish to accomplish from integrated tests. It’s always better to involve the right team to derive the best results. Integration testing, combined with incremental testing, provides developers and testers with the results they always aim for. The best development team, combined with the best test execution platform, can make this happen.

Author

...

Amrita Angappa

Blogs: 8

  • Twitter
  • Linkedin

Amrita Angappa is a Community Contributor with 6.5+ years of experience in content creation, specializing in software testing, test automation, AI, Big Data, ML, and analytics. She has authored 100+ technical blogs, with her work featured on platforms like SAP, DZone, Thrive Global, HackerNoon, YourStory, and more. A JOSH Talks speaker and former TestMu AI content lead, Amrita is also the creator of the LinkedIn series #fresherdiaries, which has crossed 10M+ views. On LinkedIn, she is followed by 35,000+ professionals, including QA engineers, software testers, AI innovators, technologists, marketers, and industry leaders.

Open in ChatGPT Icon

Open in ChatGPT

Open in Claude Icon

Open in Claude

Open in Perplexity Icon

Open in Perplexity

Open in Grok Icon

Open in Grok

Open in Gemini AI Icon

Open in Gemini AI

Copied to Clipboard!
...

3000+ Browsers. One Platform.

See exactly how your site performs everywhere.

Try it free
...

Write Tests in Plain English with KaneAI

Create, debug, and evolve tests using natural language.

Try for free
...
TestMu Conf 2026

World's largest virtual agentic engineering & quality conference

...

AUG 19-21, 2026

REGISTER NOW

Frequently asked questions

Did you find this page helpful?

More Related Blogs

TestMu AI forEnterprise

Get access to solutions built on Enterprise
grade security, privacy, & compliance

  • Advanced access controls
  • Advanced data retention rules
  • Advanced Local Testing
  • Premium Support options
  • Early access to beta features
  • Private Slack Channel
  • Unlimited Manual Accessibility DevTools Tests