TL;DR: The main issues affecting safety are reviewed and a paradigm — Verified Design-by-Contract — that uses formal methods to facilitate the safe use of inheritance, polymorphism, dynamic binding and other features of the object-oriented approach is proposed.
Abstract: In recent years, large sectors of the software development industry have moved from the procedural style of software development to an object-oriented style. Safety-critical software developers have largely resisted this trend because of concerns about verifiability of object-oriented systems. This paper outlines the benefits offered by object technology and considers the key features of the object-oriented approach from a user’s perspective. We review the main issues affecting safety and propose a paradigm — Verified Design-by-Contract — that uses formal methods to facilitate the safe use of inheritance, polymorphism, dynamic binding and other features of the object-oriented approach. An outline of Perfect Developer — a tool supporting the Verified Design-by-Contract paradigm — is included.
TL;DR: The Perfect Developer is a formal methods tool for developing specifications and refining them to code through the use of a push-button theorem prover using advanced automated reasoning technology.
Abstract: Perfect Developer is a formal methods tool for developing specifications and refining them to code High productivity is achieved through the use of a push-button theorem prover using advanced automated reasoning technology The tool can import UML models and generates final code in Java or C++ It is being used both commercially and for teaching formal methods in universities
TL;DR: It is found that automated reasoning can be used to discharge a very high proportion of verification conditions arising from the specification and refinement of software components described in the formal specification language, Perfect.
Abstract: Much of the embedded software development market has necessarily tight constraints on program size and processor power, hence developers use handwritten C rather than autocode. They rely primarily on testing to find errors in their code. We have an established software development tool known commercially as Perfect Developer, which uses a powerful automatic theorem prover and inference engine to reason about requirements and specifications. We have found that automated reasoning can be used to discharge a very high proportion of verification conditions arising from the specification and refinement of software components described in our formal specification language, Perfect. The Perfect Developer tool set can also generate code in a C++ subset or in Java, and the output code is then virtually certain to meet the stated specification, reducing the need for exhaustive testing. However, this is not helpful to developers of embedded software who are constrained to write code by hand. We therefore decided to investigate whether automated reasoning could provide a similar degree of success in the verification of annotated C code. We present our preliminary findings.
TL;DR: A formal development of a cardiac pacing system based on a Boston Scientific model, a pilot case study from the Grand Challenge in Software Verification, and a summary of the Z model of the system, its translation into Perfect Developer, and the code generation and execution are presented.
Abstract: This paper presents a formal development of a cardiac pacing system based on a Boston Scientific's model, a pilot case study from the Grand Challenge in Software Verification. We present a summary of our Z model of the system, its translation into Perfect Developer, and the code generation and execution. Further practical result and analysis are also in the context of this paper.
TL;DR: This work critically examines how Perfect Developer supports programming by refinement, focusing on three refinement techniques: algorithm refinement, data refinement and delta refinement, and examines the extent to which Perfect Developer provides formal verification for these techniques.
Abstract: Perfect Developer is a software tool that supports the formal development of object-oriented programs by refinement, including formal verification of code. It is built around a single language that supports both specification and implementation. We critically examine how Perfect Developer supports programming by refinement, focusing on three refinement techniques: algorithm refinement, data refinement and delta refinement. In particular we examine the extent to which Perfect Developer provides formal verification for these techniques. We assess it as a tool for software construction and compare it with related tools.