June 19, 2015
Alberto Goffi and Andrea Mattavelli
Software is sometimes redundant, in the sense that some operations are designed to behave like others but their executions differ. This redundancy can be either deliberately introduced, as in the case of N-version programming, or intrinsically present due to common design and development practices.
In this talk we present the notion of intrinsic redundancy, we show that it exists and is pervasive in software systems, and we argue that it can be exploited to improve the reliability of a system, and to enhance software testing.
Intrinsic redundancy has been manually identified, so far. We present a search-based technique that can effectively and efficiently extract intrinsic redundancy from the source code of a given software.
We then describe a technique to automatically generate test oracles from intrinsic software redundancy. We also present the results of an experimental evaluation showing that such oracles can be quite effective in reveling faults with automatically generated tests and that they can even improve good hand-written test suites.