Analysis and design
FAD: A Functional Analysis and Design Methodology
It is a Phd thesis written by Dan Russell. Computing Laboratory, University of Kent at Canterbury, January 2001.
This thesis presents the functional analysis and design methodology FAD. By functional we mean that it naturally supports software development within the functional programming paradigm (FP).
Every popular methodology has a graphical modelling language which presents various pictorial representations of a system. FAD's modelling language provides the typical elements of functional programming, types and functions, plus elements to support modular development such as modules, subsystems and two forms of signature which specify an interface or a behavioural requirement. The language also includes relationships and associations between these elements, and provides simple representations of functional designs. The methodology has an integrated set of techniques which guide the development of an implementable solution from the deliverables of requirements engineering. FAD's data dictionary provides an organised repository for entities during and after development.
The thesis thus provides a development medium which has hitherto been absent from the functional programming paradigm.
See on PURe -- Program Understanding and Re-engineering: Calculi and Applications.
The aim of the PURe research project is to develop calculi for program understanding and re-engineering. Formal techniques that have traditionally been developed for and applied to forward engineering of software, are applied in reverse direction, i.e. for the understanding and re-engineering of existing (legacy) program code.
There are a lot of materials on this page, an example (among many others) Camila.
Camila is a system for software development using formal methods.
The Camila project explores how concepts from the VDM specification language and the functional programming language Haskell can be combined. On the one hand, it includes experiments of expressing VDM's data types (e.g. maps, sets, sequences), data type invariants, pre- and post-conditions, and such within the Haskell language. On the other hand, it includes the translation of VDM specifications into Haskell programs.