The knowledge as to whether a software component is testable or not is important to the software engineering process: a program that is not easily testable may have to go through several iterations of program and test redesign. In this paper, we formally investigate the meaning of software testability. We define a new concept, domain testability, by applying the concepts of observability and controllability to software. Observability refers to the ease of determining if specified inputs affect the outputs; controllability refers to the ease of producing a specified output from a specified input. Observability and controllability properties are already used for assessing the testability of hardware components. A domain testable program is observable and controllable: it does not exhibit any test input-output inconsistencies. We discuss the domain testability properties of several programs that have been presented in the literature, and investigate the observability and controllability properties of several programming structures. We also define new testing metrics (that can be applied to programs or to functional specifications) that can be used to easily assess the level of effort required to modify a program so that it becomes domain testable. We also show how testability can be assessed from program specifications, and discuss an experiment that shows that it takes less time to build and test a program developed from a domain testable specification than a similar program developed from a non-domain testable specification. In the Appendix, domain testability is defined in terms of denotational semantics. AUTHOR Roy S. Freedman Formerly with
The notion of software testability dates back to 1991 when Freedman REF formally defined observability and controllability in the domain of software.
Testability of Software Components
IEEE Trans. Software Eng.
Computer Science