Larch: Languages and Tools for Formal Specification


Book Description

Building software often seems harder than it ought to be. It takes longer than expected, the software's functionality and performance are not as wonderful as hoped, and the software is not particularly malleable or easy to maintain. It does not have to be that way. This book is about programming, and the role that formal specifications can play in making programming easier and programs better. The intended audience is practicing programmers and students in undergraduate or basic graduate courses in software engineering or formal methods. To make the book accessible to such an audience, we have not presumed that the reader has formal training in mathematics or computer science. We have, however, presumed some programming experience. The roles of fonnal specifications Designing software is largely a matter of combining, inventing, and planning the implementation of abstractions. The goal of design is to describe a set of modules that interact with one another in simple, well defined ways. If this is achieved, people will be able to work independently on different modules, and yet the modules will fit together to accomplish the larger purpose. In addition, during program maintenance it will be possible to modify a module without affecting many others. Abstractions are intangible. But they must somehow be captured and communicated. That is what specifications are for. Specification gives us a way to say what an abstraction is, independent of any of its implementations.




Larch: Languages and Tools for Formal Specification


Book Description

Building software often seems harder than it ought to be. It takes longer than expected, the software's functionality and performance are not as wonderful as hoped, and the software is not particularly malleable or easy to maintain. It does not have to be that way. This book is about programming, and the role that formal specifications can play in making programming easier and programs better. The intended audience is practicing programmers and students in undergraduate or basic graduate courses in software engineering or formal methods. To make the book accessible to such an audience, we have not presumed that the reader has formal training in mathematics or computer science. We have, however, presumed some programming experience. The roles of fonnal specifications Designing software is largely a matter of combining, inventing, and planning the implementation of abstractions. The goal of design is to describe a set of modules that interact with one another in simple, well defined ways. If this is achieved, people will be able to work independently on different modules, and yet the modules will fit together to accomplish the larger purpose. In addition, during program maintenance it will be possible to modify a module without affecting many others. Abstractions are intangible. But they must somehow be captured and communicated. That is what specifications are for. Specification gives us a way to say what an abstraction is, independent of any of its implementations.




First International Workshop on Larch


Book Description

The papers in this volume were presented at the First International Workshop on Larch, held at MIT Endicott House near Boston on 13-15 July 1992. Larch is a family of formal specification languages and tools, and this workshop was a forum for those who have designed the Larch languages, built tool support for them, particularly the Larch Prover, and used them to specify and reason about software and hardware systems. The Larch Project started in 1980, led by John Guttag at MIT and James Horning, then at Xerox/Palo Alto Research Center and now at Digital Equipment Corporation/Systems Research Center (DEC/SRC). Major applications have included VLSI circuit synthesis, medical device communications, compiler development and concurrent systems based on Lamport's TLA, as well as several applications to classical theorem proving and algebraic specification. Larch supports a two-tiered approach to specifying software and hardware modules. One tier of a specification is wrillen in the Larch Shared Language (LSL). An LSL specification describes mathematical abstractions such as sets, relations, and algebras; its semantics is defined in terms of first-order theories. The second tier is written in a Larch interface language, one designed for a specific programming language. An interface specification describes the effects of individual modules, e.g. state changes, resource allocation, and exceptions; its semantics is defined in terms of first-order predicates over two states, where state is defined in terms of the programming language's notion of state. Thus, LSL is programming language independent; a Larch interface language is programming language dependent.




ZUM '95: The Z Formal Specification Notation


Book Description

This book presents the proceedings of the 9th International Conference of Z Users, ZUM '95, held in Limerick, Ireland in September 1995. The book contains 34 carefully selected papers on Z, using Z, applications of Z, proof, testing, industrial usage, object orientation, animation of specification, method integration, and teaching formal methods. Of particular interest is the inclusion of an annotated Z bibliography listing 544 entries. While focussing on Z, by far the most commonly used "formal method" both in industry and application, the volume is of high relevance for the whole formal methods community.




Specification of Software Systems


Book Description

This book provides an introduction to program specification, illustrating the advantages it confers upon the software development process. Covering all three major specification languages (Larch, VDM, and Z), the book discusses specification in general, the abstraction process, the mathematical tools required, and the main formal methods.




Foundations of Algebraic Specification and Formal Software Development


Book Description

This book provides foundations for software specification and formal software development from the perspective of work on algebraic specification, concentrating on developing basic concepts and studying their fundamental properties. These foundations are built on a solid mathematical basis, using elements of universal algebra, category theory and logic, and this mathematical toolbox provides a convenient language for precisely formulating the concepts involved in software specification and development. Once formally defined, these notions become subject to mathematical investigation, and this interplay between mathematics and software engineering yields results that are mathematically interesting, conceptually revealing, and practically useful. The theory presented by the authors has its origins in work on algebraic specifications that started in the early 1970s, and their treatment is comprehensive. This book contains five kinds of material: the requisite mathematical foundations; traditional algebraic specifications; elements of the theory of institutions; formal specification and development; and proof methods. While the book is self-contained, mathematical maturity and familiarity with the problems of software engineering is required; and in the examples that directly relate to programming, the authors assume acquaintance with the concepts of functional programming. The book will be of value to researchers and advanced graduate students in the areas of programming and theoretical computer science.




Formal Specification Techniques for Engineering Modular C Programs


Book Description

Software is difficult to develop, maintain, and reuse. Two factors that contribute to this difficulty are the lack of modular design and good program documentation. The first makes software changes more difficult to implement. The second makes programs more difficult to understand and to maintain. Formal Specification Techniques for Engineering Modular C Programs describes a novel approach to promoting program modularity. The book presents a formal specification language that promotes software modularity through the use of abstract data types, even though the underlying programming language may not have such support. This language is structured to allow useful information to be extracted from a specification, which is then used to perform consistency checks between the specification and its implementation. Formal Specification Techniques for Engineering Modular C Programs also describes a specification-driven, software re-engineering process model for improving existing programs. The aim of this process is to make existing programs easier to maintain and reuse while keeping their essential functionalities unchanged. Audience: Suitable as a secondary text for graduate level courses in software engineering, and as a reference for researchers and practitioners in industry.




Object-Oriented Behavioral Specifications


Book Description

Object-Oriented Behavioral Specifications encourages builders of complex information systems to accelerate their move to using the approach of a scientific discipline in analysis rather than the approach of a craft. The focus is on understanding customers' needs and on precise specification of understanding gained through analysis. Specifications must bridge any gaps in understanding about business rules among customers, Subject Matter Experts, and `computer people', must inform decisions about reuse of software and systems, and must enable review of semantics over time. Specifications need to describe semantics rather than syntax, and to do that in an abstract and precise manner, in order to create software systems that satisfy business rules. The papers in this book show various ways of designing elegant and clear specifications which are reusable, lead to savings of intellectual effort, time, and money, and which contribute to the reliability of software and systems. Object-Oriented Behavioral Specifications offers a fresh treatment of the object-oriented paradigm by examining the limitations of traditional OO methodologies and by describing the significance of competing trends in OO modeling. The book builds on four years of successful OOPSLA workshops (1991-1995) on behavior semantics. This book deals with precise specifications of `what' is accomplished by the business and `what' is to be done by a system. The book includes descriptions of successful use of abstract and precise specification in industry. It draws on the experience of experts from industrial and academic settings and benefits from international participation. Collective behavior, neglected in some treatment of the OO paradigm, is addressed explicitly in this book. The book does not take `reuse' of specifications or software for granted, but furnishes a foundation for taking as rigorous an approach to reuse decisions as to precise specifications in original developments.




TAPSOFT'97: Theory and Practice of Software Development


Book Description

This book constitutes the refereed proceedings of the 7th International Joint Conference CAAP/FASE on Theory and Practice of Software Development (TAPSOFT'97), held in Lille, France, in April 1997. The volume is organized in three parts: The first presents invited contributions, the second is devoted to trees in algebra in programming (CAAP) and the third to formal approaches in software engineering (FASE). The 30 revised full papers presented in the CAAP section were selected from 77 submissions; the 23 revised full papers presented in the FASE section were selected from 79 submissions.




Formal Methods and Software Engineering


Book Description

This book constitutes the refereed proceedings of the 12th InternationalConference on Formal Engineering Methods, ICFEM 2010, held in Shanghai, China,November 2010. The 42 revised full papers together with 3 invited talks presented were carefully reviewed and selected from 114 submissions. The papers address all current issues in formal methods and their applications in software engineering. They are organized in topical sections on theorem proving and decision procedures, web services and workflow, verification, applications of formal methods, probability and concurrency, program analysis, model checking, object orientation and model driven engineering, as well as specification and verification.