Understanding the meaning of software requirements
Software requirements are important and the art of capturing them varies on the project scope. Products, solutions, and applications suffer from many issues stemming from capturing vague, incorrect and bad software requirements. For a class that I'm taking this fall, I'm reading the following book: Software Requirements, Third Edition by Karl Wiegers and Joy Beatty.
In the first chapter the book discuss the various types of requirements information that can be captured in a software engineering project. It provides a table that I believe would be useful for understanding terms that can be expressed in the various stages of requirements capturing. Below is a table straight from the book:
Term | Definition |
---|---|
Business requirement | A high-level business objective of the organization that builds a product or of a customer who procures it. |
Business rule | A policy, guideline, standard, or regulation that defines or constrains some aspect of the business. Not a software requirements in itself, but the origin of several types of software requirements. |
Constraint | A restriction that is imposed on the choices available to the developer for the design and construction of a product. |
External interface requirement | A description of a behavior that a system will exhibit under specific conditions. |
Feature | One or more logically related system capabilities that provide value to a user and are described by a set of functional requirements. |
Functional requirement | A description of a behavior that a system will exhibit under specific conditions. |
Nonfunctional requirement | A description of a property or characteristic that a system must exhibit or constraint that it must respect. |
Quality attribute | A kind of nonfunctional requirement that describes a service or performance characteristic of a product |
System requirement | A top-level requirement that contains multiple subsystems, which could be all software or software and hardware |
User requirement | A goal or task that specific classes of users must be able to perform with a system, or a desired product attribute |