What is a formal method

A formal method is a mathematically-based technique used in Computer Science to describe properties of hardware and/or software systems. It provides a framework within which large, complex systems may be specified, developed, and verified in a systematic rather than ad hoc manner. A method is formal if it has a sound mathematical basis, typically given by a formal specification language. A formal method is only a method, rather than an isolated mathematical entity in itself, because of a number of pragmatic considerations: who uses it, what it is used for, when it is used, and how it is used This paper elaborates on what makes up a formal method and compares six different well-known formal methods, three used to specify abstract data types and three used to specify properties of concurrent and distributed systems.

[1]  Hans-Dieter Ehrich Extensions and Implementations of Abstract Data Type Specifications , 1978, MFCS.

[2]  Mack W. Alford SREM at the Age of Eight; The Distributed Computing Design System , 1985, Computer.

[3]  Hartmut Ehrig,et al.  Fundamentals of Algebraic Specification 1: Equations and Initial Semantics , 1985 .

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

[5]  Martin S. Feather,et al.  Language support for the specification and development of composite systems , 1987, TOPL.

[6]  Amir Pnueli,et al.  Applications of Temporal Logic to the Specification and Verification of Reactive Systems: A Survey of Current Trends , 1986, Current Trends in Concurrency.

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

[8]  Lawrence Robinson,et al.  SPECIAL - A Specification and Assertion Language. , 1976 .

[9]  Stephen J. Garland,et al.  Verification of VLSI Circuits Using LP , 1988 .

[10]  Robin Milner,et al.  Edinburgh LCF , 1979, Lecture Notes in Computer Science.

[11]  Christopher Strachey,et al.  Toward a mathematical semantics for computer languages , 1971 .

[12]  Robert S. Boyer,et al.  Computational Logic , 1990, ESPRIT Basic Research Series.

[13]  Pierre Lescanne,et al.  Computer experiments with the REVE term rewriting system generator , 1983, POPL '83.

[14]  Martín Abadi,et al.  A logic of authentication , 1990, TOCS.

[15]  Edsger W. Dijkstra,et al.  Notes on structured programming , 1970 .

[16]  Deepak Kapur,et al.  Proof by Consistency , 1987, Artif. Intell..

[17]  David Harel,et al.  On visual formalisms , 1988, CACM.

[18]  Leslie Lamport,et al.  Proving Liveness Properties of Concurrent Programs , 1982, TOPL.

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

[20]  Robert S. Boyer,et al.  A verified operating system kernel , 1987 .

[21]  Allen T. Goldberg,et al.  Knowledge-based programming: A survey of program design and construction techniques , 1986, IEEE Transactions on Software Engineering.

[22]  Mitchell Wand,et al.  Final Algebra Semantics and Data Type Extensions , 1979, J. Comput. Syst. Sci..

[23]  Michael Jackson,et al.  Principles of program design , 1975 .

[24]  John D. Gannon,et al.  Combining Testing with Formal Specifications: A Case Study , 1983, IEEE Transactions on Software Engineering.

[25]  Leslie Lamport,et al.  Specifying Concurrent Program Modules , 1983, TOPL.

[26]  David Lorge Parnas A technique for software module specification with examples , 1983, CACM.

[27]  Donald I. Good,et al.  An interactive program verification system , 1975 .

[28]  Orna Grumberg,et al.  Research on Automatic Verification of Finite-State Concurrent Systems , 1987 .

[29]  永田 守男,et al.  Verifying Properties of Parallel Programs : An Axiomatic Approach , 1976 .

[30]  Samuel N. Kamin Final Data Types and Their Specification , 1983, TOPL.

[31]  Inmos Limited,et al.  Occam Programming Manual , 1984 .

[32]  FrancezNissim,et al.  A Proof System for Communicating Sequential Processes , 1980 .

[33]  Edward Yourdon,et al.  Structured design : fundamentals of a discip!ine of computer proqram and system desiqn , 1979 .

[34]  Cliff B. Jones,et al.  Software development - a rigorous approach , 1980, Prentice Hall international series in computer science.

[35]  Joseph A. Goguen,et al.  Putting Theories Together to Make Specifications , 1977, IJCAI.

[36]  Willem P. de Roever,et al.  Real-time programming and asynchronous message passing , 1983, PODC '83.

[37]  J. Doug Tygar,et al.  Constraining Pictures with Pictures , 1989, IFIP Congress.

[38]  Nancy A. Lynch,et al.  Hierarchical correctness proofs for distributed algorithms , 1987, PODC '87.

[39]  K. Mani Chandy Parallel program design , 1989 .

[40]  C. A. R. Hoare,et al.  Communicating sequential processes , 2021, CACM.

[41]  W. J. Cullyer Implementing Safety-Critical Systems: The VIPER Microprocessor , 1988 .

[42]  David R. Musser,et al.  Abstract Data Type Specification in the Affirm System , 1980, IEEE Transactions on Software Engineering.

[43]  Manfred Broy,et al.  A Fixed Point Approach to Applicative Multiprogramming , 1982 .

[44]  Harry Katzan Systems design and documentation : an introduction to the HIPO method , 1976 .

[45]  M. Gordon HOL: A Proof Generating System for Higher-Order Logic , 1988 .

[46]  William F. Clocksin,et al.  Programming in Prolog , 1987, Springer Berlin Heidelberg.

[47]  Cliff B. Jones,et al.  Systematic software development using VDM , 1986, Prentice Hall International Series in Computer Science.

[48]  Inmos Corp,et al.  Occam Programming Manual , 1984 .

[49]  Stephen J. Garland,et al.  Inductive methods for reasoning about abstract data types , 1988, POPL '88.

[50]  David C. Luckham,et al.  Task Sequencing Language for Specifying Distributed Ada Systems , 1987, PARLE.

[51]  James J. Horning,et al.  Some Notes on Putting Formal Specifications to Productive Use , 1982, Sci. Comput. Program..

[52]  A. Pnueli,et al.  STATEMATE: a working environment for the development of complex reactive systems , 1988, [1988] Proceedings. The Third Israel Conference on Computer Systems and Software Engineering.

[53]  Robin Milner,et al.  A Calculus of Communicating Systems , 1980, Lecture Notes in Computer Science.

[54]  D. I. Good,et al.  An interactive program verification system , 1975, IEEE Transactions on Software Engineering.

[55]  Zohar Manna,et al.  Verification of concurrent programs, Part I: The temporal framework , 1981 .

[56]  David C. Luckham,et al.  An Overview of Anna, a Specification Language for Ada , 1985, IEEE Software.

[57]  Willem P. de Roever,et al.  A Proof System for Communicating Sequential Processes , 1980, ACM Trans. Program. Lang. Syst..

[58]  Pamela Zave,et al.  An Operational Approach to Requirements Specification for Embedded Systems , 1982, IEEE Transactions on Software Engineering.

[59]  J. C. P. Woodcock,et al.  Transaction processing primitives and CSP , 1987 .