Confidence=>Verification that our system behaves as it is suppose to. this can be done manually or can be automated. Automated testing is less painful and much easier because it shortened feedback loop make improving our design.
There are two fundamental purposes of testing:
1.verifying procurement specifications
2. managing risk.
First, testing is about verifying that what was specified is what was
delivered: it verifies that the product (system) meets the functional, performance,
design, and implementation requirements identified in the procurement specifications.
Second, testing is about managing risk for both the acquiring agency and the system’s
vendor/developer/integrator. The testing program is used to identify when the work has
been “completed” so that the contract can be closed, the vendor paid, and the system
shifted by the agency into the warranty and maintenance phase of the project.
What testing do for us?
- Testing improves your designs. Each target object that you test must have at least two clients: your production code, and your test case. These clients force you to decouple your code. Testing also encourages and rewards smaller, simpler methods.
- Testing reduces unnecessary code. When you write your test cases first, you get in the habit of writing only enough code to make the test case pass. You reduce the temptation to code features because you might need them later.
- Test-first development is motivating. Each test case that you write establishes a small problem. Solving that problem with code is rewarding and motivating. When I do test-driven development, the hours fly by.
- Testing allows more freedom. If you have test cases that will catch likely errors, you’ll find that you’re more willing to make improvements to your code.