|Published (Last):||20 June 2011|
|PDF File Size:||16.96 Mb|
|ePub File Size:||14.31 Mb|
|Price:||Free* [*Free Regsitration Required]|
Motivation[ edit ] In each passing decade, computer systems have become increasingly more powerful and, as a result, they have become more impactful to society. Because of this, better techniques are needed to assist in the design and implementation of reliable software. Established engineering disciplines use mathematical analysis as the foundation of creating and validating product design.
Formal specifications are one such way to achieve this in software engineering reliability as once predicted. Other methods such as testing are more commonly used to enhance code quality. This allows incorrect system designs to be revised before any major investments have been made into an actual implementation. Another approach is to use probably correct refinement steps to transform a specification into a design, which is ultimately transformed into an implementation that is correct by construction.
It is important to note that a formal specification is not an implementation, but rather it may be used to develop an implementation. Formal specifications describe what a system should do, not how the system should do it.
A good specification must have some of the following attributes: adequate, internally consistent, unambiguous, complete, satisfied, minimal  A good specification will have:  Constructability, manageability and evolvability Communicability Powerful and efficient analysis One of the main reasons there is interest in formal specifications is that they will provide an ability to perform proofs on software implementations. Whether the formal specification correctly describes the problem to be solved is a separate issue.
It is also a difficult issue to address since it ultimately concerns the problem constructing abstracted formal representations of an informal concrete problem domain , and such an abstraction step is not amenable to formal proof.
If not, the specification probably needs to be changed to better reflect the domain understanding of those involved with producing and implementing the specification. Formal methods of software development are not widely used in industry. Most companies do not consider it cost-effective to apply them in their software development processes.
Doing a formal specification of the whole system up front is often perceived as being the opposite of flexible. However, there is some research into the benefits of using formal specifications with "agile" development  Complexity They require a high level of mathematical expertise and the analytical skills to understand and apply them effectively  A solution to this would be to develop tools and models that allow for these techniques to be implemented but hide the underlying mathematics   They do not capture properties of interest for all stakeholders in the project  They do not do a good job of specifying user interfaces and user interaction  Not cost-effective This is not entirely true, by limiting their use to only core parts of critical systems they have shown to be cost-effective .
Formal Specification Using Z by David Lightfoot
Formal specification using Z