Results 1 
9 of
9
Pigs from Sausages? Reengineering from Assembler to C via FermaT Transformations
 Science of Computer Programming, Special Issue on Program Transformation 52
, 2004
"... Software reengineering has been described as being "about as easy as reconstructing a pig from a sausage" [11]. But the development of program transformation theory, as embodied in the FermaT transformation system, has made this miraculous feat into a practical possibility. This paper desc ..."
Abstract

Cited by 22 (6 self)
 Add to MetaCart
(Show Context)
Software reengineering has been described as being "about as easy as reconstructing a pig from a sausage" [11]. But the development of program transformation theory, as embodied in the FermaT transformation system, has made this miraculous feat into a practical possibility. This paper describes the theory...
Foundations for a Practical Theory of Program Refinement and Transformation
, 1994
"... A wide spectrum language is presented, which is designed to facilitate the proof of the correctness of refinements and transformations. Two different proof methods are introduced and used to prove some fundamental transformations, including a general induction rule (Lemma 3.9) which enables transfor ..."
Abstract

Cited by 21 (14 self)
 Add to MetaCart
(Show Context)
A wide spectrum language is presented, which is designed to facilitate the proof of the correctness of refinements and transformations. Two different proof methods are introduced and used to prove some fundamental transformations, including a general induction rule (Lemma 3.9) which enables transformations of recursive and iterative programs to be proved by induction on their finite truncations. A theorem for proving the correctness of recursive implementations is presented (Theorem 3.21), which provides a method for introducing a loop, without requiring the user to provide a loop invariant. A powerful, general purpose, transformation for removing or introducing recursion is described and used in a case study (Section 5) in which we take a small, but highly complex, program and apply formal transformations in order to uncover an abstract specification of the behaviour of the program. The transformation theory supports a transformation system, called FermaT, in which the applicability conditions of each transformation (and hence the correctness of the result) are mechanically verified. These results together considerably simplify the construction of viable program transformation tools; practical consequences are briefly discussed.
Laura: a system to debug student programs
 Arti cial Intelligence
, 1980
"... An effort to automate the debugging of real programs is presented. We discuss possible choices in conceiving a debugging system. In order to detect all the semantic errors, it must have a knowledge of what the program is intended to achieve. Strategies and results are very dependent on the way of gi ..."
Abstract

Cited by 13 (0 self)
 Add to MetaCart
An effort to automate the debugging of real programs is presented. We discuss possible choices in conceiving a debugging system. In order to detect all the semantic errors, it must have a knowledge of what the program is intended to achieve. Strategies and results are very dependent on the way of giving this knowledge. In the LAURA system that we have designed, the program's task is given by means of a 'program model'. Automatic debugging is then viewed as a comparison of programs. The main characteristics of LAURA are the representation f programs by graphs, which gets rid of many syntactical variations, the use of program transformations, realized on the graphs, and its heuristic strategy to identify step by step the elements of the graphs. It has been tested with about a hundred programs written by students to solve eight different problems in various fields. It is able to recognize correct programs even if their structures are very different from the structure of the program model. It is also able to express exact diagnostics of errors, or at least to localize them. It could be an effective tool for students programmers.
A Recursion Removal Theorem  Proof and Applications
, 1999
"... In this paper we briey introduce a Wide Spectrum Language and its transformation theory and describe a recent success of the theory: a general recursion removal theorem. This theorem includes as special cases the two techniques discussed by Knuth [12] and Bird [7]. We describe some applications of t ..."
Abstract

Cited by 11 (8 self)
 Add to MetaCart
In this paper we briey introduce a Wide Spectrum Language and its transformation theory and describe a recent success of the theory: a general recursion removal theorem. This theorem includes as special cases the two techniques discussed by Knuth [12] and Bird [7]. We describe some applications of the theorem to cascade recursion, binary cascade recursion, Gray codes, the Towers of Hanoi problem, and an inverse engineering problem. 1 Introduction In this paper we briey introduce some of the ideas behind the transformation theory we have developed over the last eight years at Oxford and Durham Universities and describe a recent result: a general recursion removal theorem. We use a Wide Spectrum Language (called WSL), developed in [19,20,21] which includes lowlevel programming constructs and highlevel abstract specications within a single language. Working within a single language means that the proof that a program correctly implements a specication, or that a specication correct...
Inverse Engineering a simple Real Time program
, 1999
"... Reverse engineering of interruptdriven realtime programs with timing constraints is a particularly challenging research area, because the functional behaviour of a program, and the nonfunctional timing requirements, are implicit and can be very difficult to discover. However, in this paper we pre ..."
Abstract

Cited by 10 (4 self)
 Add to MetaCart
Reverse engineering of interruptdriven realtime programs with timing constraints is a particularly challenging research area, because the functional behaviour of a program, and the nonfunctional timing requirements, are implicit and can be very difficult to discover. However, in this paper we present a significant advance in this area, which is achieved by modelling realtime programs with interrupts in the wide spectrum language WSL. A small example program is modelled in this way, and formal program transformations are used to derive various timing constraints and to inverse engineer a formal specification of the program. (We use the term inverse engineering to mean reverse engineering achieved by formal program transformations).
Recursion Removal/Introduction by Formal Transformation: An Aid to Program Development and Program Comprehension
 Comput. J
, 1999
"... ..."
(Show Context)
Formal Methods to Aid the Evolution of Software
, 2003
"... There is a vast collection of operational software systems which are vitally important to their users, yet are becoming increasingly difficult to maintain, enhance and keep up to date with rapidly changing requirements. For many of these so called legacy systems the option of throwing the system awa ..."
Abstract
 Add to MetaCart
(Show Context)
There is a vast collection of operational software systems which are vitally important to their users, yet are becoming increasingly difficult to maintain, enhance and keep up to date with rapidly changing requirements. For many of these so called legacy systems the option of throwing the system away an rewriting it from scratch is not economically viable. Methods are therefore urgently required which enable these systems to evolve in a controlled manner. The approach described in this paper uses formal proven program transformations, which preserve or refine the semantics of a program while changing its form. These transformations are applied to restructure ans simplify the legacy systems and to extract higherlevel representations. By using an appropriate sequence of transformations, the extracted representation is guaranteed to be equivalent to the code. The method is based on a formal wide spectrum language, called WSL, with accompanying formal method. Over the last ten years we have developed a large catalogue of proven transformations, together with mechanically verifiable applicability conditions. These have been applied to many software development, reverse engineering and maintenance problems. In this paper, we focus on the results of using this approach in the reverse engineering of medium scale, industrial software, written mostly in languages such as assembler and JOVIAL. Results from both benchmark algorithms and heavily modified, geriatric software are summarised. We conclude that formal methods have an important practical role in software evolution. 1
Abstract
, 2003
"... Reverse engineering of interruptdriven realtime programs with timing constraints is a particularly challenging research area, because the functional behaviour of a program, and the nonfunctional timing requirements, are implicit and can be very difficult to discover. However, in this paper we pre ..."
Abstract
 Add to MetaCart
(Show Context)
Reverse engineering of interruptdriven realtime programs with timing constraints is a particularly challenging research area, because the functional behaviour of a program, and the nonfunctional timing requirements, are implicit and can be very difficult to discover. However, in this paper we present a significant advance in this area, which is achieved by modelling realtime programs with interrupts in the wide spectrum language WSL. A small example program is modelled in this way, and formal program transformations are used to derive various timing constraints and to “inverse engineer ” a formal specification of the program. (We use the term “inverse engineering ” to mean “reverse engineering achieved by formal program transformations). 1
Bede Island Building, The Gateway,
"... The transformational programming method of algorithm derivation starts with a formal specification of the result to be achieved, plus some informal ideas as to what techniques will be used in the implementation. The formal specification is then transformed into an implementation, by means of correct ..."
Abstract
 Add to MetaCart
(Show Context)
The transformational programming method of algorithm derivation starts with a formal specification of the result to be achieved, plus some informal ideas as to what techniques will be used in the implementation. The formal specification is then transformed into an implementation, by means of correctnesspreserving refinement and transformation steps, guided by the informal ideas. The transformation process will typically include the following stages: (1) Formal specification (2) Elaboration of the specification, (3) Divide and conquer to handle the general case (4) Recursion introduction, (5) Recursion removal, if an iterative solution is desired, (6) Optimisation, if required. At any stage in the process, subspecifications can be extracted and transformed separately. The main difference between this approach and the invariant based programming approach (and similar stepwise refinement methods) is that loops can be introduced and manipulated while maintaining program correctness and with no need to derive loop invariants. Another difference is that at every stage in the process we are working with a correct program: there is never any need for a separate “verification ” step. These factors help to ensure that the method is capable of scaling up to the development of large and complex