One of the most important properties about any software system is the ability to understand what it is going to do without having to run it. This concept is usually referred to as the ability to “reason about the system.” Basically, you want to make statements about the structures, actions, and results of the system without having to see them in action first. To understand why this is important, imagine a system with a hundred different pieces. To keep this simple, let’s pretend it’s ...