In Software Abstractions Daniel Jackson introduces an approach to software
design that draws on traditional formal methods but exploits automated tools to
find flaws as early as possible. This approach--which Jackson calls
¿lightweight formal methods¿ or ¿agile modeling¿--takes from formal
specification the idea of a precise and expressive notation based on a tiny
core of simple and robust concepts but replaces conventional analysis based on
theorem proving with a fully automated analysis that gives designers immediate
feedback. Jackson has developed Alloy, a language that captures the essence of
software abstractions simply and succinctly, using a minimal toolkit of
mathematical notions. This revised edition updates the text, examples, and
appendixes to be fully compatible with the latest version of Alloy (Alloy 4).