• 4.1: What Are Requirements and Data Types?

    Software requirements are goal specifications of cost, schedule, functionality, or quality that a software system development and resulting software product needs to satisfy. Typically, those goal statements are written using the word "shall". The specifications must be necessary and sufficient. "Necessary" means that each specification is needed to address a customer's need. "Sufficient" means that a specification is only included if it addresses a need of the customer, not a specification for a "want" that, if left out, does not affect the satisfaction of customer needs. In practice, requirements often contain nice-to-have and optional requirements, but these are singled out and treated accordingly. In general, requirements describe the problem to be solved and not the solution. However, problems can have multiple solutions, and the requirements must include only those that address customer needs and exclude those that do not. As with software, requirements have quality features such as necessary, sufficient, complete, verifiable, validatable, and measurable. In short, whereas architecture, design, and implementation answer the "what" and "how" of the solution, requirements definition answers the "why" and "what" of the problem.