Chapter 1. Software qualities and a problem to solve


This chapter covers

  • Evaluating software from different points of view and for different objectives
  • Distinguishing internal from external software qualities
  • Distinguishing functional from nonfunctional software qualities
  • Assessing interactions and trade-offs between software qualities

The core idea of this book is to convey the mindset of an experienced developer by comparing and contrasting different code qualities (aka nonfunctional requirements). Most of these qualities—like performance or readability—are universal, in the sense that they’re relevant to any piece of software. To emphasize this fact, you’ll revisit the same recurring example in each chapter: a simple class representing a system of water containers.

In this chapter, I’ll introduce the software qualities that this book addresses, and I’ll present the specifications for the water container example, followed by a preliminary implementation.

1.1. Software qualities

In this book, you should interpret the word quality as a characteristic that a piece of software may or may not have, not as its overall value. That’s why I talk about multiple qualities. You can’t consider all characteristics qualities; for example, the programming language in which a piece of software is written is certainly a characteristic of that software but not a quality. Qualities are characteristics that you can grade on a scale, at least in principle.

1.2. Mostly external software qualities

1.3. Mostly internal software qualities

1.4. Interactions between software qualities

1.5. Special qualities

1.6. The recurring example: A system of water containers

1.7. Data model and representations

1.8. Hello containers!    [Novice]


Further reading