Specifications as Search Keys for Software Libraries

Searching through a large repository of objects can be a tedious activity if a user cannot easily identify the object of interest. If the object is a file stored in a campus-wide distributed file system, the user might need to know some part of its name, e.g., a partial pathname, and possibly its location, e.g., the host name of the file server. If the object is a database record, the user might need to know the record’s attribute names in order to formulate a query based on the attributes’ values. What if the object is a component in a program module library? We propose searching through software libraries using specificationmatching. We assume a specification, si, is associated with each component, pi, in a software library of i components. For example, a procedure’s specification might consist of a name, a signature, and a pair of preand post-conditions describing the procedure’s behavior. Specification matching is the process of determining whether for a given query, q, and specification, si, si satisfies q. For example, if the query and specification languages are both drawn from the same logical language, then satisfies is logical implication; specification matching is the process of showing an implication holds. The expressiveness of the query and specification languages will determine whether specification matching is decidable. At one extreme, as in traditional program verification, it might require some “heavy-duty” theorem proving with key insights provided by a human user. Through appropriate restrictions on the language and the meaning of satisfies, however, specification matching can be made practical and useful with or without any human guidance. This paper describes one instance of the more general idea of specification

[1]  Mikael Rittri,et al.  Using types as search keys in function libraries , 1989, Journal of Functional Programming.

[2]  David C. J. Matthews,et al.  Poly manual , 1985, SIGP.

[3]  Jeannette M. Wing,et al.  Inheritance of synchronization and recovery properties in Avalon/C++ , 1988 .

[4]  Barbara Liskov,et al.  Guardians and Actions: Linguistic Support for Robust, Distributed Programs , 1983, TOPL.

[5]  David Robson,et al.  Smalltalk-80: The Language and Its Implementation , 1983 .

[6]  Jeff Conklin,et al.  Hypertext: An Introduction and Survey , 1987, Computer.

[7]  Hans H. Kron,et al.  Programming-in-the-Large Versus Programming-in-the-Small , 1975, IEEE Transactions on Software Engineering.

[8]  Władysław Turski,et al.  The specification of computer programs , 1987 .

[9]  Malcolm P. Atkinson,et al.  PS-algol: an algol with a persistent heap , 1982, SIGP.

[10]  Donald E. Knuth,et al.  Literate Programming , 1984, Comput. J..

[11]  James J. Horning,et al.  The Larch Family of Specification Languages , 1985, IEEE Software.

[12]  Alexander A. Stepanov,et al.  The Ada® Generic Library , 1989, Springer Compass International.

[13]  Robin Milner,et al.  Definition of standard ML , 1990 .

[14]  Michael McGill,et al.  Introduction to Modern Information Retrieval , 1983 .

[15]  José Meseguer,et al.  EQLOG: Equality, Types, and Generic Modules For Logic Programming , 1986, Logic Programming: Functions, Relations, and Equations.

[16]  David Lorge Parnas,et al.  On a 'Buzzword': Hierarchical Structure , 2001, IFIP Congress.

[17]  Gopalan Nadathur,et al.  Higher-Order Logic Programming , 1986, ICLP.

[18]  Colin Runciman,et al.  Retrieving re-usable software components by polymorphic type , 1989, Journal of Functional Programming.

[19]  Colin Runciman,et al.  Retrieving Reusable Software Components by Polymorphic Type , 1991, J. Funct. Program..