Agile Development and Testing Practices highlighted by the case studies as being particularly valuable from a software quality perspective
Iteration Advantages: bringing testing into the development life cycle as early as possible ensuring testing continues frequently early identification of defects ensures that the software can be corrected in a timely manner avoiding problems of late delivery and cost overrun Disadvantages: functional tests and regression test suites grow continuously from iteration to iteration -> increasing test load use good test management techniques and test automation
Pair Testing analogous to the practice of pair programming pairing of test resources with developers benefits: testers providing valuable quality assurance input to unit test specification, development and testing ideas. some case studies report measurable improvements in the quality of the delivered code note: avoid the perception by developers that the testers are there as Quality Assurance Police
Involve Test Resources at All Stages Test practitioner is available at all stages of the development life cycle. E.g. Chapter on How to Test a System that is Never Finished: tester was available to directly advise on the testability of any given requirement tester was able to improve the quality of the requirements by highlighting missing, contradictory, or duplicate requirements In parallel with creation of use cases, the tester can also review and agree the suitability of the test case design directly with the customer.
Test-Driven Design and Development Ensuring that developers specify how they will verify that their code has met its requirements and performed correctly - before they write their code - means that the developer gains much greater understanding of the requirement and what the corresponding code needs to do to meet it.
Fix All Defects Immediately Chapter on Agile Testing - Learning from Your Own Mistakes enforces this principle strictly. If defects are detected, development is halted until they are fixed. By using continuous integration techniques plus automated testing, defects are quickly localised to the most recent code change
Continuous Integration used in combination with an automated build tool, and incorporating unit testing, the code can be automatically tested to quickly identify quality issues associated with that unit. one step further: not only automating unit tests but also functional and regression tests, providing very thorough test coverage of the application under development
Test Refactoring Many chapters report benefits from the practice of code refactoring, particularly if conducted in concert with the use of an automatic build tool which can also execute associated automated unit tests. The use of configuration management tools can also be of significant value in code refactoring. Test refactoring: test scripts may be changed for the purposes of making them more efficient and/or more effective, or even remove them from the test suite. Benefits can be gained from using test refactoring on projects where the test suite is very large.
Identify Targets of Test identifying targets of tests is of particular value in large-scale projects involving large volumes of test scripts informal approach is used that is based on the tester s experience, selecting a subset of the overall set of partition test cases. A risk always exist that omitting a test script will have completely unpredictable effects on a seemingly unrelated part of the system.
Code Coverage code coverage metrics may be of value in the process of identifying the targets of test.
Agile Exploratory Testing manual exploratory testing a tester performing the role a skeptical user, creating unusual usage scenario s in order to expose defects that automated tools and methods would be unlikely to uncover!!open-ended exercise!
Rapid Prototyping The generation of simple prototypes prior to the generation of full parts of the system under development can have a number of benefits: helps the developer explore and understand the requirements in detail provides a practical means of verifying the requirements with the customer provides a powerful and effective means of obtaining customer feedback on the functionality, look and feel, and usability of the proposed system.