The Use of Software Faults in Software Reliability Assessment and Software Mutation Testing
Xiang Li · OhioLink ETD Center (Ohio Library and Information Network) · 2015
A software fault is a structural imperfection in a software system that may lead to the system eventually failing [1].Software faults have been heavily studied before, especially in the software reliability [2, 3] and software testing communities [4, 5].In this research, we focus on two usages of software faults to improve the software quality: (1) Using software fault information at various stages of software development to assess software reliability, and (2) Seeding software faults into the original source code to drive software test case development.More specifically: For (1), we have developed the Extended Finite State Machine-based Reliability Prediction System (EFSM-based RePS) method to assess software reliability [6, 7].This method utilizes the uncovered faults from the N-1'th version of the software to predict the software reliability of the N'th version.The software documentation at different development life cycles, which includes Software Requirement Specifications (SRS), Software Design Documents (SDD) and the source code, is collected.All this information is analyzed and used to construct a hierarchical model of the software.The Operating Profile (OP) of the software is then used to assess software reliability.A tool called the Automated Reliability Prediction System (ARPS) is also developed which implements the EFSM-based RePS methodology.An experiment was conducted to evaluate the tool's usability where human subjects were recruited, trained and tested.For (2), we have investigated and improved the software mutation testing technique [34][35][36][37], which is a fault-based automatic software testing technique.In mutation testing, the tester first defines a set of rules to systematically seed faults into the source code.Each seeded fault results in a new version of the software, which is called a mutant.Test suites are then developed to iii distinguish the mutants from the original program (i.e., to kill the mutants).Since these test suites can find the seeded faults, they are also helpful to find the indigenous ones.In this research we introduce heuristics to strongly kill mutants.To verify these heuristics, they are applied to sample programs.It is found that these heuristics indeed help propagate data state difference further than weak mutation, which will eventually lead to test cases that can strongly kill mutants.