Practical Emulation of Software Defects in Source Code

Software fault injection is a fundamental technique to evaluate the behavior of systems in presence of software defects. However, in spite of the considerable number of software fault injection proposals, the lack of readily available and practical tools persists as the most serious limitation to the generalized use of software fault injection. This paper describes a fault injection tool designed to simplify the software fault injection process. The tool modifies the source code of target programs by altering the abstract syntax tree and producing software patches automatically. Several key challenges were addressed in the development of the tool. Firstly, we formally describe the software fault injection operators, which has been neglected in previous proposals. Secondly, we propose a comprehensive test suite to verify the correctness of software fault injectors. Thirdly, we improve the performance of the fault injection process by compiling only the file in which a defect is injected and linking/installing that file. Finally, we examine the implications of dealing with macros, and the limitations that source code macros impose on software fault injection. The results of injecting software faults into the Apache web server, as an example of possible target, show how these challenges have been addressed.

[1]  Jeffrey M. Voas,et al.  Predicting How Badly "Good" Software Can Behave , 1997, IEEE Softw..

[2]  Neeraj Suri,et al.  An approach for analysing the propagation of data errors in software , 2001, 2001 International Conference on Dependable Systems and Networks.

[3]  Henrique Madeira,et al.  Emulation of Software Faults: A Field Data Study and a Practical Approach , 2006, IEEE Transactions on Software Engineering.

[4]  Eliane Martins,et al.  Experimental Risk Assessment and Comparison Using Software Fault Injection , 2007, 37th Annual IEEE/IFIP International Conference on Dependable Systems and Networks (DSN'07).

[5]  Henrique Madeira,et al.  Recovery for Virtualized Environments , 2015, 2015 11th European Dependable Computing Conference (EDCC).

[6]  Joseph Robert Horgan,et al.  A study of effective regression testing in practice , 1997, Proceedings The Eighth International Symposium on Software Reliability Engineering.

[7]  Cecília M. F. Rubira,et al.  Jaca: a reflective fault injection tool based on patterns , 2002, Proceedings International Conference on Dependable Systems and Networks.

[8]  Ram Chillarege,et al.  Generation of an error set that emulates software faults based on field data , 1996, Proceedings of Annual Symposium on Fault Tolerant Computing.

[9]  Tânia Basso,et al.  J-SWFIT: A Java Software Fault Injection Tool , 2011, 2011 5th Latin-American Symposium on Dependable Computing.

[10]  Mark Harman,et al.  An Analysis and Survey of the Development of Mutation Testing , 2011, IEEE Transactions on Software Engineering.

[11]  Domenico Cotroneo,et al.  Assessing Dependability with Software Fault Injection , 2016, ACM Comput. Surv..

[12]  Domenico Cotroneo,et al.  On Fault Representativeness of Software Fault Injection , 2013, IEEE Transactions on Software Engineering.

[13]  Peter M. Chen,et al.  The Design and Verification of the Rio File Cache , 2001, IEEE Trans. Computers.

[14]  Eliane Martins,et al.  Jaca - a software fault injection tool , 2003, 2003 International Conference on Dependable Systems and Networks, 2003. Proceedings..

[15]  Roberto Natella,et al.  Achieving Representative Faultloads in Software Fault Injection , 2011 .

[16]  Ralph Johnson,et al.  design patterns elements of reusable object oriented software , 2019 .