A software requirement specifies a need to be fulfilled by the software product.
A software project may be one of two types:
In either case, requirements need to be gathered, analyzed, specified, and managed.
Requirements come from stakeholders.
Stakeholder: An individual or an organization that is involved in or potentially affected by the software project. Examples include users, sponsors, developers, interest groups, government agencies, etc.
Identifying requirements is often not easy.
Example Stakeholders may not be aware of their precise needs, may not know how to communicate their requirements correctly, or may not be willing to spend effort identifying requirements.
Requirements can be divided into two in the following way:
Example Some categories of non-functional requirements:
Example Some concrete NFRs, drawn from various projects:
You may have to spend extra effort identifying NFRs as early as possible because:
Requirements can be prioritized based on the importance and urgency, while keeping in mind the constraints of schedule, budget, staff resources, quality goals, and other constraints.
A common approach is to group requirements into priority categories. Note that all such scales are subjective, and stakeholders define the meaning of each level in the scale for the project at hand.
Example One scheme for categorizing requirements:
Essential: The product must fulfill this requirement; otherwise, users will not accept it.Typical: Most similar systems have this feature although the product can survive without it.Novel: New features that could differentiate this product from the rest.Other schemes:
High, Medium, LowMust-have, Nice-to-have, Unlikely-to-haveLevel 0, Level 1, Level 2, ...Some requirements can be discarded if they are considered ‘out of ’.
Example The requirement given below is for a Calendar application. Stakeholders of the software (e.g., product designers) might decide it is outside the software's scope.
The software records the actual time taken by each task and shows the difference between the actual and scheduled time for the task.
Here are some characteristics of well-defined requirements [📖 zielczynski]:
Two of these carry most of the weight: a requirement that is unambiguous and testable states an observable result, so evidence can settle whether it has been met. A requirement that states a judgment instead can only be settled by argument. To make one testable, say who is involved, what they are doing, and what result counts as success.
Example Two requirements from the same project, one testable and one not:
The system should respond within two seconds. You can measure this, and the measurement settles the matter.The system should be usable by a novice who has never carried out an online purchase. Two people can disagree about whether the system is 'usable', and neither can show the other is wrong.The second can be rewritten so that evidence settles it:
A user who has never carried out an online purchase should be able to complete a purchase unaided, on the first attempt, within five minutes.Besides these criteria for individual requirements, the set of requirements as a whole should be:
Requirements are not settled once and then left alone; they keep changing while the product is being built. Three reasons account for most of it:
Two things follow from this.
A specification that is not kept up to date does not become harmless, it becomes misleading, because people keep acting on it. A developer builds the version that was superseded a month ago; a tester reports a defect against behavior nobody wants any more.
Every change is also a decision about what will not be built. Accepting a new requirement late competes with requirements already agreed, so priorities have to be revisited rather than settled once at the start.