Read Chapters 5–9 to learn about proper design.

  1. Have you included a UML class diagram for all your classes?
  2. Does your design go down to the function level? Have you defined all the major functions your program will include and what each one of them should do?
  3. Do you have a specificiation document that lists every class, what the class does, and every member function and what it does?
  4. Have you iterated, selecting the best of several attempts rather than the first attempt?
  5. Have you tried decomposing the system in several different ways to see which way will work best?
  6. Have you approached the design problem from the top down or from the bottom up?
  7. Have you prototyped risky or unfamiliar parts of the system, creating the absolute minimum of throwaway code needed to answer specific questions?
  8. Has your design been reviewed by others?
  9. Have you driven the design to the point that its implementation seems obvious?
  10. Does the design meet the requirements?
  11. Are you satisfied with the way the program has been decomposed into subsystems, packages, and classes?
  12. Are you satisfied with the way the classes have been decomposed into routines?
  13. Do the classes have good names? Do the functions have good names?
  14. Are classes designed for minimal interaction with each other?
  15. Is the design lean? Are all of its parts strictly neccessary?
  16. Does the design help minimize both accidental and essential complexity?
  17. For the classes: see checklist on page 157.
  18. For the functions: use checklist on page 185.
  19. For exceptions and assertions: use checklist on page 211.
  20. Will you be using the pseudocode programming process of Chapter 9?

Jose M Vidal
Last modified: Wed May 21 15:40:46 EDT 2008