What do you think?
Rate this book
331 pages, Hardcover
First published December 12, 2011
This book is part of a series of four books that cover different aspects of formal techniques: static analysis of code; B method; and formal methods.He also expresses that:
[This] first volume concerns industrial examples of the implementation of formal techniques based on static analysis, such as the abstract interpretation and proof of programs to develop certifiable software applications in avionics, automobile, nuclear powerstation and railway control systems. There are examples of use of Astrée tools (chapter 2), Caveat (chapter 2), CodePeer (chapter 5), Frama-C (Chapters 2 and 6), Polyspace (Chapters 3 and 4) and Scade, as well as an example of generated C code analysis (Chapter 7). In these chapters the static code analyses are based on:- Abstract interpretation as based on the pioneering work of Patrick and Radhia Cousot (chapters 2, 3, 4, and 6);
- Program proof as based on Hoare axiomatics (chapters 2, 5 and 6);
- Static analysis of code (chapters 2, 5, 6 and 7)
It is worth noting that the abstract interpretation tools such as Polyspace or Astrée are not new but their efficiency has evolved a great deal. We have moved on from tools tthat, 15 years ago, could require a week's worth of calculations to analyze a code, to trools that require only tens of minutes to arrive at results.This is not an easy book to read and requires a great deal of knowledge about formal methods, automatic software code provers, interval artithmetic and especially abstract interpretation. According to Wikipedia:
...Abstract interpretation is a theory of sound approximation of the semantics of computer programs, based on monotonic functions over ordered sets, especially lattices. It can be viewed as a partial execution of a computer program which gains information about its semantics (e.g., control-flow, data-flow) without performing all the calculations.Tools based on abstract interpretation can be used to determine, without dynamically executing the code being examined, whether it contains dead (unreachable) code, divisions by zero, arithmetic overflows or underflows, out of bounds array indexes, uninitialized variables, other execution time anomalies and certain safety and liveliness properties. The use of such tools are particularly interesting and important in safety-critical applications.