This document is the Final Report for SBIR contract 50-DKNB-4-00185, titled ``Assessing and Increasing the Testability of Object-Oriented Systems'' for the National Institute of Standards and Technology (NIST). In this Phase II effort, Reliable Software Technologies (Sterling, VA) has developed the following software utilities: (1) an assertion placement tool for C++ software programs, (2) an assertion language tool for C++, and (3) an assertion language tool for Java. Contractually, Reliable Software Technologies was required only to develop the first and second of these for NIST, but because of the commercialization expectations from Phase III, Java provides a much stronger business opportunity for Reliable Software Technologies. Thus we added the Java assertion language capability, and are now ready to begin the Phase III process.
The C++ utilities allow developers and testers to more easily embed assertions based on the recommendations that come after performing software sensitivity analysis [8] on a program's source-code. Sensitivity analysis is a source-code--based fault injection utility that recommends where assertions are warranted. These recommendations are based on the results from running the software with test cases and simulated faults that are instrumented in the software. If a suite of test cases cannot detect simulated faults, then that suite is less likely to detect real faults. This isolates those places in the code that are good candidates for receiving assertions.
Because we have not yet completed the development of our Java sensitivity analysis tool (which is outside of the scope of this Statement of Work), the Java assertion language tool only helps a developer instrument code with assertions, and does not recommend where to place them as the C++ tool does. The Java sensitivity analysis tool is under development, however, and is anticipated for release in 1998.
Run-time software assertions are merely ``little tests'' that are themselves code that are embedded in software to check to see that certain states in an executing program have certain qualities. The typical goal of using assertions is to show that program states are correct, and since state correctness is defined by the specification, assertions can test that various requirements of the specification are correctly implemented.
This two-year effort started in October, 1995, and was completed in late September, 1997. This report contains an overview of the theory that is used to determine where assertions are needed and what those assertions need to check for. This report also describes the architecture of the tools. Details that pertain to using the tools are not captured in this report, but are provided in the User's manual that accompanies the tools.