An automated tool for analyzing completeness of equational specifications

Books on software engineering methodologies talk about the significance and need for designing consistent and complete specifications during the requirement analysis and design stages of a software development cycle. There is, however, little (or at best very limited) discussion of methods for ensuring these structural properties of specifications. In this paper, we discuss methods for checking completeness of equational specifications. Some of these methods were earlier proposed in somewhat different form in the context of developing the so-called inductionless induction method for automating proofs by induction using completion procedures. These methods are implemented in our theorem prover Rewrite Rule Laboratory (RRL), and have been tried on a number of examples of specifications of data abstractions. In case a specification is incomplete, these methods can aid in making them complete by generating templates which are not specified. Templates can also be helpful in distinguishing between intentional and unintentional incompleteness in specifications. Further, these methods can be used to generate test cases for checking specifications and verifying implementations of specifications. These methods are illustrated on examples which exhibit their power as well as limitations.

[1]  Paliath Narendran,et al.  Automating Inductionless Induction Using Test Sets , 1991, J. Symb. Comput..

[2]  Luqi,et al.  Software engineering with abstractions , 1991 .

[3]  John V. Guttag,et al.  The specification and application to programming of abstract data types. , 1975 .

[4]  Roger S. Pressman,et al.  Software engineering (3rd ed.): a practitioner's approach , 1992 .

[5]  D. Knuth,et al.  Simple Word Problems in Universal Algebras , 1983 .

[6]  Deepak Kapur,et al.  Automated Reasoning About Parallel Algorithms Using Powerlists , 1995, AMAST.

[7]  Johan Lewi,et al.  Algebraic Specifications in Software Engineering , 1989, Springer Berlin Heidelberg.

[8]  Roger S. Pressman,et al.  Software Engineering: A Practitioner's Approach , 1982 .

[9]  Richard A. Kemmerer,et al.  Testing Formal Specifications to Detect Design Errors , 1985, IEEE Transactions on Software Engineering.

[10]  Richard G. Hamlet,et al.  Data Abstraction, Implementation, Specification, and Testing , 1981, TOPL.

[11]  Jean-Pierre Jouannaud,et al.  Automatic Proofs by Induction in Theories without Constructors , 1989, Inf. Comput..

[12]  Dan Craigen,et al.  An International Survey of Industrial Applications of Formal Methods , 1992, Z User Workshop.

[13]  I. Sommerville,et al.  Software engineering (2nd ed.) , 1985 .

[14]  Jayadev Misra,et al.  Powerlist: a structure for parallel recursion , 1994, TOPL.

[15]  William E. Lorensen,et al.  Object-Oriented Modeling and Design , 1991, TOOLS.

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

[17]  Hantao Zhang,et al.  An overview of Rewrite Rule Laboratory (RRL) , 1995 .

[18]  Jean-Jacques Thiel Stop losing sleep over incomplete data type specifications , 1984, POPL '84.

[19]  Laurent Fribourg,et al.  Test sets generation from algebraic specifications using logic programming , 1986, J. Syst. Softw..

[20]  Tobias Nipkow,et al.  A decidability result about sufficient-completeness of axiomatically specified abstract data types , 1983 .

[21]  Jan A. Bergstra,et al.  Algebraic specification , 1989 .

[22]  Deepak Kapur,et al.  Rewrite Rule Theory and Abstract Data Type Analysis , 1982, EUROCAM.

[23]  Richard E. Fairley,et al.  Software engineering concepts , 1985, McGraw-Hill series in software engineering and technology.

[24]  James J. Horning,et al.  Formal specification as a design tool , 1980, POPL '80.