August 30, 2013 Reduce Testing Time by Designing for Testability The earlier bugs are found, the cheaper they are to fix. Everyone in the software industry (or in the IT industry in general, or who...The earlier bugs are found, the cheaper they are to fix. Everyone in the software industry (or in the IT industry in general, or who have much in the way of common sense) knows this; but there are some applications that just don’t play well with testing. This software has low testability, and needs its test-friendliness increased. This is accomplished by assessing the application’s adherence to four main principles. Recently, one of our test leaders wrote a white paper on the topic, of which this blog post is a summary; for more in-depth information, take a look at the original document here. The Four Principles of Testability Understandability measures how clearly the tester understands his responsibilities in the test environment. Proper documentation of the test requirements, as well as clear code documentation, allows testers to be autonomous from the developers and helps developers write fewer bugs. This increases efficiency in unit test development and faster problem localization, among others. Visibility refers to how easily the tester can track how much progress the application is making through logging. Logs and data sources, when present in a duplicate-free database which is available to testers will aid in visibility by enabling testers to verify where and when in the process the problem occurs, further expediting the identification process. A process exhibiting isolation is one which can be segmented into individually-testable units, which helps manual testing teams narrow down where a bug originated within the system. There are many methods a developer can implement to promote isolation within their applications, which are explained in-depth in the original white paper. The final and most complex of the principles is automatibility, the measure to which your application can be automated. Because very few developers understand the requirements associated with automatibility, this is often the largest hole in development. There are three aspects of automatibility: consistency of behavior, object visibility, and quantifiability. Lacking any of these aspects presents significant, time-consuming, and undesirable issues when it comes time to automate the testing process. The earlier bugs are found, the cheaper they are to fix. Keeping these four principles in mind can significantly improve test turn-around time for the development team, as well as those generating requirements. Please remember that this is only a bare-bones account of the principles of testability; if you would like more information, please take a look at the full white paper, which we think should be required reading for developers and those who write requirements (but maybe we’re biased).