During a technical conversation, Mark Bregman explained me the concept of Design for Testability (DFT) while I was discussing the open source software testing challenges and opportunities. Mark’s suggestion is that DFT can be effective for software as in the case of hardware, resulting from conscious efforts made by hardware industry to improve testability during mid 80s.
To get contextual background I would recommend reading this paper that talks about different categories of testing. This paper covers many of traditional testing techniques and does not address issues like interoperability testing for combinatorial explosions.
Additional literature search led to this research paper authored by Bret Pettichord. Independent of this thread’s context, I had a conference call with Bret last week talking about Watir and Selenium. It is a small world indeed. Bret’s point is that the testing should be part of the (design) process and not an after thought. Today, most of the software is tested once the product reaches alpha stage, whereas Bret recommends testers to collaborate with developers to design testability features while the product is in design phase. Indeed, an important recommendation. My view is that, open source development model (unlike proprietary models) is uniquely positioned to adopt Bret’s recommendation for improving testability. Testers and Developers can collaborate by exploiting the benefits of source code transparency and by leveraging initiatives like Participatory Testing. In addition, it helps to recruit new committers by having them help in testing to begin with.
Bret highlights Bertrand Meyer’s Design By Contract, which in my opinion is how other engineering disciplines have practiced to identify and resolve defects.
To summarize a testing methodology that exercises and utilizes Interface Definitions (contracts), Instrumentation (probes), Diagnostics (self discovery), Calibration (results comparisons) and Measurement (objective metrics) in a collective manner will help improve testability of software components.
Do you think you can help improve design for testability of open source components? Feel free to share your thoughts…

