# The Dirty Little Lies of the Software Industry

I often hear this: The software we create will be flawless if:

- The development team follows the formal certification process _____ (Fill in the blank with your favorite certification process. For example, aerospace companies are required to follow the certification process DO-178C for their software to be approved by the FAA).
- The development team graphically documents every component, interface, connection, input, output, flow, etc., and uses a tool that manages the diagrams (i.e., model-driven development).

Sadly, they are both false. Flawless software does not result from following some check-the-box process or from an organized set of diagrams. These might help, to some degree, but they miss the root cause of flaws in software. The root cause of flaws in software are the pesky little corner cases that were not considered. In software with many parts, there will be lots of pesky corner cases because the human mind is unable to grapple with the astronomical number of combinations. To find the pesky corner cases, you need to create a model of the software and then use a tool that can search through the vast tree of combinations, checking every corner case. In the typical case, this will involve searching and examining billions of cases. Obviously, you are not going to write billions of test cases. So, this analysis needs to be done by a tool. The only tool that I am aware of that can do this is the tool created at MIT called Alloy.