Software Design

Summary
Random thoughts about software design

Nancy Leveson said the following about software development:

“Software in essence is the design of a machine abstracted from its physical realization.”

In other words TheSourceCodeIsTheDesign. See Jack Reeves’ What is Software Design?:

“The final goal of any engineering activity is to create some kind of documentation. When a design effort is complete, the design documentation is given to the manufacturing team. This is a different set of people with a different set of skills from those of the design team. If the design documents truly represent a complete design, the manufacturing team can proceed to build the product. In fact, they can proceed to build much of the product without further assistance from the designers. After reviewing the software development lifecycle today, it appears that the only software documentation that actually seems to satisfy the criteria of an engineering design are the source code listings. “

A consequence according to Leveson:

“With computers, the design of a machine is usually created by someone who is not an expert in its design. The autopilot design expert, for example, decides how the autopilot should work, but then provides that information to a software engineer who is an expert in software design but not autopilots. It is the software engineer who then creates the detailed design of the autopilot. [...] The extra communication step between the engineer and the software developer is the source of the most serious problems with software today.”

I found Parnas On the Criteria to be Used in Decomposing Systems into Modules relevant here:

“It is almost always incorrect to begin the decomposition of a system into modules on the basis of a flowchart. We propose instead that one begins with a list of difficult design decisions or design decisions which are likely to change. Each module is then designed to hide such a decision from the others.”

Monday 14 February 2005 17:35