The theory and practice of specification based software testing

In this thesis my aim is to examine the common ground between formal methods and testing, and the benefits the two fields bring to one another. All too often they are regarded as mutually exclusive approaches in the development of software systems. The thesis begins with an examination of the motivation behind software testing, a summary of its development over the past few decades, and a survey of existing techniques. This involves a detailed discussion of some of those techniques, and leads on to an extensive case study. The case study shows how the use of a formal specification enables an existing “partition” based testing method to be used with far greater precision, but also highlights some of the limitations of the partition based techniques. The thesis continues with a comprehensive look at the development of theoretical models of testing since the mid 1970’s, and the way they have used successively more complex software models in order to be able to adequately describe suitable test cases. The remainder of the thesis is concerned with the introduction and use of Eilenberg’s X -machines as a formal model for the description of software specifications. The goal is to develop the X -machine model to the point where it is both useful and use-able as a tool for system specification, and at the same time the basis for a model of software testing so that test cases can be derived directly from the specification. To this end some of the theoretical properties of X -machines are examined, and some simple but very relevant results proved. The work is grounded on further case studies. Acknowledgements This work was supported by SERC Quota award number 89315080. I would like to thank my supervisor, Mike Holcombe, for all of his help, advice and enthusiasm towards my work over the past three years. At various stages, my work has benefited from discussions with Mike Stannett, Belkacem Mezhoud, Robert Plant, Mark Dunn and the rest of the Formal Methods and Software Engineering Group of the Computer Science Department and with Ian MConnell of the Applied and Computational Maths Department. Thanks also to the many emacs and TEX users who have selflessly placed their work in the public domain; in particular both J. M. Spivey and Paul Taylor’s LTEX styles have eased the writing and improved the appearance of this thesis. The case study of chapter 2 would have made far less sense without the helpful comments of Martin Woodward (Department of Computer Science, Liverpool University) and the anonymous referees of of the Journal of Software Testing, Verification and Reliability. Finally, thanks to Mary Rhoads who is the main reason this thesis is finished on time.

[1]  David Gelperin,et al.  The growth of software testing , 1988, CACM.

[2]  William E. Howden,et al.  Program testing versus proofs of correctness , 1991, Softw. Test. Verification Reliab..

[3]  Standard Glossary of Software Engineering Terminology , 1990 .

[4]  Glenford J. Myers,et al.  A controlled experiment in program testing and code walkthroughs/inspections , 1978, CACM.

[5]  Zvi Kohavi,et al.  Checking experiments for sequential machines , 1974, Inf. Sci..

[6]  Elaine J. Weyuker,et al.  The evaluation of program-based software test data adequacy criteria , 1988, CACM.

[7]  Elaine J. Weyuker,et al.  An Extended Domain-Bases Model of Software Reliability , 1988, IEEE Trans. Software Eng..

[8]  D. Hedley,et al.  A practical method for software quality control via program mutation , 1988, [1988] Proceedings. Second Workshop on Software Testing, Verification, and Analysis.

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

[10]  Tom Gedeon,et al.  Formal methods, testing, and reuse-towards reliability conservation for software , 1990 .

[11]  Simeon C. Ntafos,et al.  A Comparison of Some Structural Testing Strategies , 1988, IEEE Trans. Software Eng..

[12]  R. M. F. Roper,et al.  A specification-based functional testing method for JSP designed programs , 1988 .

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

[14]  Glenford J. Myers,et al.  Art of Software Testing , 1979 .

[15]  Richard J. Lipton,et al.  Hints on Test Data Selection: Help for the Practicing Programmer , 1978, Computer.

[16]  William C. Hetzel,et al.  The complete guide to software testing , 1984 .

[17]  Jeffrey M. Voas,et al.  Estimating the Probability of Failure When Testing Reveals No Failures , 1992, IEEE Trans. Software Eng..

[18]  James L. Peterson,et al.  Petri net theory and the modeling of systems , 1981 .

[19]  Ian J. Hayes,et al.  Specification directed module testing , 1986, IEEE Transactions on Software Engineering.

[20]  Susan L Ge,et al.  Applications of Formal Methods : Developing Virtuoso Software , 2022 .

[21]  William E. Howden,et al.  Weak Mutation Testing and Completeness of Test Sets , 1982, IEEE Transactions on Software Engineering.

[22]  Derek Coleman,et al.  Formal Specification and Design Time Testing , 1990, IEEE Trans. Software Eng..

[23]  Elaine J. Weyuker,et al.  Theories of Program Testing and the Application of Revealing Subdomains , 1980, IEEE Transactions on Software Engineering.

[24]  Anthony Hall,et al.  Seven myths of formal methods , 1990, IEEE Software.

[25]  Pankaj Jalote,et al.  Testing the Completeness of Specifications , 1989, IEEE Trans. Software Eng..

[26]  Jane Sinclair,et al.  Introduction to formal specification and Z , 1991, Prentice Hall International Series in Computer Science.

[27]  Marc Roper,et al.  A structural testing method for JSP designed programs , 1987, Softw. Pract. Exp..

[28]  M. R. Woodward Mutation testing-an evolving technique , 1990 .

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

[30]  Mike Holcombe X-machines as a basis for dynamic system specification , 1988, Softw. Eng. J..

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

[32]  Deepinder P. Sidhu,et al.  Formal Methods for Protocol Testing: A Detailed Study , 1989, IEEE Trans. Software Eng..

[33]  J-C. Laprie,et al.  DEPENDABLE COMPUTING AND FAULT TOLERANCE : CONCEPTS AND TERMINOLOGY , 1995, Twenty-Fifth International Symposium on Fault-Tolerant Computing, 1995, ' Highlights from Twenty-Five Years'..

[34]  Larry J Morell,et al.  A Theory of Fault-Based Testing , 1990, IEEE Trans. Software Eng..

[35]  Tsun S. Chow,et al.  Testing Software Design Modeled by Finite-State Machines , 1978, IEEE Transactions on Software Engineering.

[36]  Marc J. Balcer,et al.  The category-partition method for specifying and generating fuctional tests , 1988, CACM.

[37]  Michael Dyer,et al.  Correctness verification: Alternative to structural software testing , 1990 .

[38]  György E. Révész Lambda-calculus, combinators, and functional programming , 1988, Cambridge tracts in theoretical computer science.

[39]  William E. Howden,et al.  Reliability of the Path Analysis Testing Strategy , 1976, IEEE Transactions on Software Engineering.

[40]  Ferhat Khendek,et al.  Test Selection Based on Finite State Models , 1991, IEEE Trans. Software Eng..