Welcome to Software Testing: From Theory to Practice!
This book covers the most important testing techniques needed to build high-quality software systems. Specific topics covered are quality attributes, maintainability and testability, manual and exploratory testing, automated testing, DevOps, test adequacy, model-based testing, state-based testing, decision tables, reviews and inspections, design-by-contract, test-driven design, unit versus integration testing, mocks and stubs.
We expect readers to be able to:
-
Create unit, integration, and system tests using current existing tools (i.e., JUnit, Mockito, and JaCoCo) that effectively test complex software systems.
-
Derive test cases that deal with exceptional, corner, and bad weather cases by performing several different techniques (i.e., boundary analysis, state-based testing, decision tables) as well as able to reflect on their limitations, when and when not to apply them in a given context.
-
Measure and reflect on the efficiency of the developed test suites by means of different test adequacy metrics (i.e., line, branch, condition, MC/DC coverage).
-
Design and implement testable software systems by means of architectural patterns such as dependency injection, and ports and adapters.
-
Write maintainable test code by avoiding well-known test code smells (e.g., Assertion Roulette, Slow or Obscure Tests).
Target audience: first-year Computer Science students. Knowledge in programming is required. Code examples are in Java, although easily transferrable to other languages.