Software Design

Software design is the process of defining software methods, functions, objects, and the overall structure and interaction of your code so that the resulting functionality will satisfy your users requirements.

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 life cycle today, it appears that the only software documentation that actually seems to satisfy the criteria of an engineering design are the source code listings.

What are the ramifications?

  • Software runs on computers. It is a sequence of ones and zeros. Software is not a program listing.
  • A program listing is a document that represents a software design. Compilers, linkers, and interpreters actually build (manufacture) software.
  • Software is very cheap to build. You just press a button.
  • Software is expensive to design because it is complicated and all phases of the development cycle are part of the design process.
  • Programming is a design activity; a good software design process recognizes this and does not hesitate to code when coding makes sense.
  • Coding actually makes sense more often than believed. Often the process of rendering the design in code will reveal oversights and the need for more design effort. The earlier this happens, the better.
  • Testing and debugging are design activities – they are the equivalents of design validation and refinement in other engineering disciplines. They can not be short changed.
  • Formal
    methods are not of much use because it is cheaper to build software and test it than to prove it.