Scientific American takes a look at the process of building dependable reliable software, and moreover, building a dependable system by design. Daniel Jackson points out that most of the mistakes in modern software system are made at a design stage, and then discusses solutions for proper design:
Now a new generation of software design tools is emerging. Their analysis engines are similar in principle to tools that engineers increasingly use to check computer hardware designs. A developer models a software design using a high-level (summary) coding notation and then applies a tool that explores billions of possible executions of the system, looking for unusual conditions that would cause it to behave in an unexpected way. This process catches subtle flaws in the design before it is even coded, but more important, it results in a design that is precise, robust and thoroughly exercised.
