Roy Osherove written an excellent ‘Restaurant’ analogy to explain the difference between unit tests and integration tests. This type of analogy really becomes lot helpful to understand the concepts that are similar to each other, but has significant difference as well as.
In the world of testing, Smoke Testing, Sanity Testing and Regression Testing are very similar to each other: to ensure the quality running the test cases of an existing application with respect to a new feature being added/dropped/modified. They are targeted to find out the bugs in both UI and code level.
We can consider a River Analogy to understand the difference between Smoke Testing, Sanity Testing and Regression Testing better. Before moving to the analogy, lets consider the very basic definition of three of these testing:
- Smoke Testing: Testing all (wide) areas related to new feature, not deeply. Determines if we should go for further testing.
- Sanity Testing: Testing narrow areas related to new feature, deeply.
- Regression testing: Testing all areas related to new feature, deeply.
If we consider a river, for instance, which has, for instance 1000 feet width, and contains “dusts” in its water (which can be considered as “bugs” in software), the goal for the corresponding three types of tests should be as follows:
For Smoke Testing: to find out the dusts in all over the surface of the river, which not includes the dusts under water.
For Sanity Testing: to find out the dusts in a specific width (for instance left side 200 feet), which not only includes the dusts on surface, but also includes the dusts under water, till the last depth of the river.
For Regression Testing: to find out all the dusts that are available on surface and under the water in all over the river.