Theory of Software Testing With Persistent State

Software testing began as an empirical activity, and remains part of engineering practice without a widely accepted theoretical foundation. The overwhelming majority of test methods are designed to find software errors, termed faults, in program source code, but not to assess software operational quality. To go beyond fault-seeking requires a theory that relates static program properties to executions. In the 1970s and 1980s, Gerhart, Howden, and others developed a sound functional theory of program testing. Then Duran and others used this theory to precisely define the notions of random testing and operational reliability. In the Gerhart-Howden-Duran theory, a program's behavior is a pure input-output mapping. This paper extends the theory to include persistent state, by adding a state space to the input space, and a state mapping to a program's output mapping. The extended theory is significantly different because test states, unlike inputs, cannot be chosen arbitrarily. The theory is used to analyze state-based testing methods, to examine the practicality of reliability assessment, and to suggest experiments that would increase understanding of the statistical properties of software.

[1]  C. A. R. Hoare,et al.  Laws of programming , 1987, CACM.

[2]  John D. Musa,et al.  Operational profiles in software-reliability engineering , 1993, IEEE Software.

[3]  William Addis,et al.  Structural engineering : the nature of theory and design , 1990 .

[4]  Simeon C. Ntafos,et al.  An Evaluation of Random Testing , 1984, IEEE Transactions on Software Engineering.

[5]  W. Marsden I and J , 2012 .

[6]  Dick Hamlet,et al.  Science, Mathematics, Computer Science, Software Engineering , 2012, Comput. J..

[7]  Gerard J. Holzmann,et al.  The Model Checker SPIN , 1997, IEEE Trans. Software Eng..

[8]  A. Turing On Computable Numbers, with an Application to the Entscheidungsproblem. , 1937 .

[9]  Verzekeren Naar Sparen,et al.  Cambridge , 1969, Humphrey Burton: In My Own Time.

[11]  Xuejun Yang,et al.  Finding and understanding bugs in C compilers , 2011, PLDI '11.

[12]  Algirdas Avizienis,et al.  Fault Tolerance by Design Diversity: Concepts and Experiments , 1984, Computer.

[13]  David Harel,et al.  Statecharts: A Visual Formalism for Complex Systems , 1987, Sci. Comput. Program..

[14]  Gerd Folkers,et al.  On computable numbers , 2016 .

[15]  Egon Börger,et al.  Abstract State Machines. A Method for High-Level System Design and Analysis , 2003 .

[16]  Cem Kaner,et al.  Foundations of Software Testing , 2013 .

[17]  Zohar Manna,et al.  PROPERTIES OF PROGRAMS AND PARTIAL FUNCTION LOGIC , 1969 .

[18]  Bev Littlewood,et al.  Evaluating Testing Methods by Delivered Reliability , 1998, IEEE Trans. Software Eng..

[19]  Manuel Blum,et al.  Designing programs that check their work , 1989, STOC '89.

[20]  Dick Hamlet,et al.  Software component composition: a subdomain‐based testing‐theory foundation , 2007, Softw. Test. Verification Reliab..

[21]  Michael R. Lyu,et al.  What is software reliability? , 1994, Proceedings of COMPASS'94 - 1994 IEEE 9th Annual Conference on Computer Assurance.

[22]  A. Jefferson Offutt,et al.  Introduction to Software Testing , 2008 .

[23]  Gerard J. Holzmann,et al.  The SPIN Model Checker , 2003 .

[24]  Alastair F. Donaldson,et al.  Software Model Checking , 2014, Computing Handbook, 3rd ed..

[25]  Richard G. Hamlet,et al.  Partition Testing Does Not Inspire Confidence , 1990, IEEE Trans. Software Eng..

[26]  Hoang Pham Software Reliability , 1999 .

[27]  Dick Hamlet Invariants and state in testing and formal methods , 2005, PASTE '05.

[28]  Robert W. Floyd,et al.  Assigning Meanings to Programs , 1993 .

[29]  Juris Hartmanis,et al.  Turing Award lecture on computational complexity and the nature of computer science , 1994, CACM.

[30]  William E. Howden,et al.  Functional program testing and analysis , 1986 .

[31]  Felix Sheng-Ho Chang,et al.  Modular verification of code with SAT , 2006, ISSTA '06.

[32]  S. C. Kleene,et al.  Introduction to Metamathematics , 1952 .

[33]  I. K. Mak,et al.  Adaptive Random Testing , 2004, ASIAN.

[34]  Nancy G. Leveson,et al.  An experimental evaluation of the assumption of independence in multiversion programming , 1986, IEEE Transactions on Software Engineering.

[35]  Luciano Baresi,et al.  An Introduction to Software Testing , 2006, FoVMT.

[36]  Kevin Barraclough,et al.  I and i , 2001, BMJ : British Medical Journal.

[37]  H. Hecht Rare conditions-an important cause of failures , 1993, COMPASS '93: Proceedings of the Eighth Annual Conference on Computer.

[38]  Edward N. Adams,et al.  Optimizing Preventive Service of Software Products , 1984, IBM J. Res. Dev..

[39]  Harlan D. Mills,et al.  Principles of computer programming : a mathematical approach , 1987 .

[40]  Tsong Yueh Chen,et al.  Adaptive Random Testing: The ART of test case diversity , 2010, J. Syst. Softw..

[41]  Dick Hamlet Composing Software Components , 2010 .

[42]  Gary James Jason,et al.  The Logic of Scientific Discovery , 1988 .

[43]  Sriram K. Rajamani,et al.  SLAM and Static Driver Verifier: Technology Transfer of Formal Methods inside Microsoft , 2004, IFM.

[44]  Aaas News,et al.  Book Reviews , 1893, Buffalo Medical and Surgical Journal.

[45]  J. Michael Spivey,et al.  The Z notation - a reference manual , 1992, Prentice Hall International Series in Computer Science.

[46]  Harlan D. Mills,et al.  Engineering software under statistical quality control , 1990, IEEE Software.

[47]  Juris Hartmanis,et al.  On computational complexity and the nature of computer science , 1995, CSUR.

[48]  William G. Griswold,et al.  Dynamically discovering likely program invariants to support program evolution , 1999, Proceedings of the 1999 International Conference on Software Engineering (IEEE Cat. No.99CB37002).

[49]  Bojan Cukic,et al.  Comparing Partition and Random Testing via Majorization and Schur Functions , 2003, IEEE Trans. Software Eng..

[50]  Dick Hamlet Tools and experiments supporting a testing-based theory of component composition , 2009, TSEM.

[51]  Peter G. Bishop,et al.  The variation of software survival time for different operational input profiles (or why you can wait a long time for a big bug to fail) , 1993, FTCS-23 The Twenty-Third International Symposium on Fault-Tolerant Computing.

[52]  Richard G. Hamlet,et al.  Automatically Checking an Implementation against Its Formal Specification , 2000, IEEE Trans. Software Eng..

[53]  G. B. Finelli,et al.  The infeasibility of experimental quantification of life-critical software reliability , 1991, SIGSOFT '91.

[54]  Tsong Yueh Chen,et al.  An upper bound on software testing effectiveness , 2008, TSEM.

[55]  G. B. Finelli,et al.  The Infeasibility of Quantifying the Reliability of Life-Critical Real-Time Software , 1993, IEEE Trans. Software Eng..

[56]  Jon Louis Bentley,et al.  Programming pearls , 1987, CACM.

[57]  S. L. Gerhart,et al.  Toward a theory of test data selection , 1975, IEEE Transactions on Software Engineering.