Software development is largely a process of communicating information
about the eventual program and translating this information from one
form to another. In essence, it is moving from the conceptual to the concrete.
For that reason, the vast majority of software errors can be attributed
to breakdowns, mistakes, and ‘‘noise’’ during the communication and
translation of information.