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.