Pinnacles of software engineering: 25 years of formal methods

  • Authors:
  • Dines Bjørner

  • Affiliations:
  • -

  • Venue:
  • Annals of Software Engineering
  • Year:
  • 2000

Quantified Score

Hi-index 0.00

Visualization

Abstract

In this invited paper we review 25 years of propagating formal specification in software engineering. We will do so through outlining a paradigmatic approach to the practice of software engineering. For the sake of contrasting argument we shall claim that this approach stands in sharp contrast to classical engineering – and that there is little help to be obtained from classical engineering in securing the quality of the most important facets of software engineering! We shall be outlining a software engineering* practice in which formal techniques are applied in capturing the application domain void of any reference to requirements let alone software; and in then capturing requirements: Domain requirements (projected, instantiated, possibly extended and usually initialised from domain descriptions), interface requirements and machine requirements. The software engineering practice then goes on to design the software: First the architecture, then the program structure, etc. Throughout abstraction and modelling, hand‐in‐hand, are used in applicative (functional), imperative and process oriented descriptions, from loose specifications towards concrete, instantiated descriptions, using hierarchical as well as configurational modelling, denotational as well as computational modelling, and in structuring even small scale descriptions using appropriate modularisation concepts: Schemes, classes and objects. All the concepts spelled in this font are software engineering “program” description notions that have been honed over the years, starting in 1973 with VDM [Bekić et al. 1974; Bjørner and Jones 1978, 1982b] and continuing with RAISE [Group 1992, 1995]. The current status of our approach to software engineering, based on extensive, but not exclusive use of formal techniques, developed significantly during my years as UN Director of the UN University's International Institute for Software Technology (UNU/IIST) in Macau, 1992–1997. Many large scale software developments based on the domain/requirements/software design paradigm outlined here were systematically applied to the experimental development of software designs for the computing support of a number of diverse infrastructure components**. Special boxes, scattered throughout the text, highlight ‘pinnacle’ contribution by named computer and computing scientists as well as by specific R&D projects. *The text high‐lighted in ‘this font’ identifies important software development principles and techniques – the main contribution and subject of this quarter century overview. **Railways [Bjørner et al. 1997; George 1995], financial service institutions [Bjørner 1997; Bjørner et al. 1998], manufacturing [Bjørner 1996; Janowski 1996; Janowski and Acebedo 1996; Janowski and Atienza 1997], ministry of finance [Dung et al. 1996; George et al. 1995], airlines [Anh and More 1996], air traffic [Bjørner 1995], etc.