Chapter 1 - Effective and Systematic software testing

Systematic and effective testing

Being effective means we focus on writing the right tests. Software testing is all about trade-offs. Testers want to maximize the number of bugs they find while minimizing the effort required to find the bugs. How do we achieve this? By knowing what to test.

Being systematic means that for a given piece of code, any developer should come up with the same test suite. Testing often happens in an ad hoc manner. Developers engineer the test cases that come to mind. It is common to see two developers developing different test suites for the same program. We should be able to systematize our processes to reduce the dependency on the developer who is doing the job.

Boundary testing: testing for edge cases.

Example-based testing: testing with a single example input.

Principles of software testing

<aside> ℹ️ Defect clustering means that a small number of features have caused the majority of quality issues in an application. Basically, the defects are not distributed uniformly across the entire application, rather defects are concentrated or centralized across two or three functionalities. This is the application of the Pareto Principle to software testing: approximately 80% of the problems are found in 20% of the modules. If the same tests are repeated over and over again, eventually the same test cases will no longer find new bugs.

</aside>

The testing pyramid

Untitled