Software requirements is a field within software engineering that deals with establishing the needs of stakeholders that are to be solved by software. The IEEE Standard Glossary of Software Engineering Terminology defines a requirement as:
- A condition or capability needed by a user to solve a problem or achieve an objective.
- A condition or capability that must be met or possessed by a system or system component to satisfy a contract, standard, specification, or other formally imposed document.
- A documented representation of a condition or capability as in 1 or 2.
Elicitation is the gathering and discovery of requirements from stakeholders and other sources. A variety of techniques can be used such as joint application design (JAD) sessions, interviews, document analysis, focus groups, etc. Elicitation is the first step of requirements development.
Analysis is the logical breakdown that proceeds from elicitation. Analysis involves reaching a richer and more precise understanding of each requirement and representing sets of requirements in multiple, complementary ways.
Specification involves representing and storing the collected requirements knowledge in a persistent and well-organized fashion that facilitates effective communication and change management. Use cases, user stories, functional requirements, and visual analysis models are popular choices for requirements specification.
Validation involves techniques to confirm that the correct set of requirements has been specified to build a solution that satisfies the project's business objectives.
Requirements change during projects and there are often many of them. Management of this change becomes paramount to ensuring that the correct software is built for the stakeholders.
Tool support for Requirements Engineering
Tools for Requirements Elicitation, Analysis and, Validation
Taking into account that these activities may involve some artifacts such as observation reports (user observation), questionnaires (interviews, surveys and polls), use cases, user stories; activities such as requirement workshops (charrettes), brainstorming, mind mapping, role-playing; and even, prototyping; software products providing some or all of these capabilities can be used to help achieve these tasks.
There is at least one author who advocates, explicitly, for mind mapping tools such as FreeMind; and, alternatively, for the use of specification by example tools such as Concordion. Additionally, the ideas and statements resulting from these activities may be gathered and organized with wikis and other collaboration tools such as Trello. The features actually implemented and standards compliance vary from product to product.
Tools for Requirements Specification
A Software Requirement Specification document (SRS) might be created using a software tool as general as a word processor or an electronic spreadsheet; but, there are several specialized tools to carry out this activity.
Some of these tools can import, edit, export and publish SRS documents. They may or not help the user to follow standards such as IEEE 2918-2011 to compose the requirements according to some structure. Likewise, the tool may or not use some standard to import or export requirements (such as ReqIF); or, not allow these exchanges at all.
Tools for Requirements Document Verification
Tools of this kind verify if there are any errors in a requirements document according to some expected structure or standard.
Tools for Requirements Comparison
Tools of this kind compare two requirement sets according to some expected document structure and standard.
Tools for Requirements Merge and Update
Tools of this kind allow the merging and update of requirement documents.
Tools for Requirements Traceability
Tools of this kind allow to trace requirements to other artifacts such as models and source code (forward traceability) or, to previous ones such as business rules and constraints (backwards traceability).
Tools for Model-Based Software or Systems Requirement Engineering
Model-based systems engineering (MBSE) is the formalised application of modelling to support system requirements, design, analysis, measurement, verification and validation activities beginning in the conceptual design phase and continuing throughout development and later lifecycle phases. It is also possible to take a model-based approach for some stages of the requirements engineering and, a more traditional one, for others. All kinds of combinations might be possible.
Tools for general Requirements Engineering
Tools in this category may provide some mix of the capabilities mentioned previously and others such as requirement configuration management and collaboration. The features actually implemented and standards compliance vary from product to product.
There are even more capable or general tools that support other stages and activities. They are classified as ALM tools.
- IEEE Computer Society (1990). "IEEE Standard Glossary of Software Engineering Terminology". IEEE Standard.
- "Guide to the Software Engineering Body of Knowledge". IEEE Computer Society. Retrieved 11 January 2013.
- Laplante, Phillip A. (2009). "Requirements Engineering for Software and Systems". CRC Press. Missing or empty
- Monperrus, M.; Baudry, B.; Champeau, J.; Hoeltzener, B.; Jézéquel, J. M. (2011). "Automated measurement of models of requirements". Software Quality Journal. 21 (1): 3–22. doi:10.1007/s11219-011-9163-6.
- Wiegers, Karl; Beatty, Joy (2013). Software Requirements (3rd ed.). Microsoft Press. ISBN 978-0-7356-7966-5.
- Cockburn, Alistair (2001). Writing Effective Use Cases. Pearson Education. ISBN 0-201-70225-8.
- Leffingwell, Dean (2000). Managing Software Requirements: A Unified Approach. Addison-Wesley Professional. ISBN 0-201-61593-2.