I often hear this: The software we create will be flawless if:
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.