Chapter 12. Software Design


  • To be able to discern desirable properties of a software design

  • To understand different notions of complexity, at both the component and system level

  • To be aware of some object-oriented metrics

  • To be aware of some widely known classical design methods

  • To understand the general flavor of object-oriented analysis and design methods

  • To be aware of a global classification scheme for design methods

  • To understand the role of design patterns and be able to illustrate their properties

  • To be aware of guidelines for the design documentation


Software design concerns the decomposition of a system into its constituent parts. A good design is the key to the successful implementation and evolution of a system. A number of guiding principles for this decomposition help to achieve quality designs. These guiding principles underlie the main design methods discussed in this chapter. Unlike more classical design fields, there is no visual link between the design representation of a software system and the ultimate product. This complicates the communication of design knowledge and raises the importance of proper design representations.

During software development, we should adhere to a planned approach. If we want to travel from point A to point B, we will (probably) consult a map first. According to some criterion, we will then plan our route. The time-loss caused by the planning activity is bound to outweigh the misery that occurs if we do not plan our trip ...

Get Software Engineering: Principles and Practice now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.