Requirements Gathering and Specification
Learn to translate user needs and problem statements into clear, actionable software requirements.
About This Topic
Requirements gathering and specification build the groundwork for effective software development. Students translate user needs and problem statements into clear, actionable requirements, distinguishing functional ones that outline specific features and behaviors, such as data input forms or search functions, from non-functional ones addressing performance, usability, security, and scalability. This process directly supports Ontario Curriculum expectations in collaborative software development, where students construct unambiguous specs and evaluate them for completeness and consistency.
These skills extend beyond coding to essential practices like stakeholder communication and iterative design, mirroring professional agile methodologies. By practicing requirement elicitation through interviews and analysis, students develop critical thinking to spot gaps, conflicts, or ambiguities, preparing them for team-based projects and real-world problem-solving in computer science.
Active learning excels with this topic because students conduct mock interviews, collaborate on spec drafts, and critique peers' work. These approaches make abstract concepts concrete, encourage questioning assumptions, and reveal how poor requirements lead to project failures, boosting retention and practical application.
Key Questions
- Differentiate between functional and non-functional requirements.
- Construct a set of clear and unambiguous requirements for a software project.
- Evaluate the completeness and consistency of a given set of requirements.
Learning Objectives
- Differentiate between functional and non-functional software requirements, providing specific examples for each.
- Construct a set of clear, unambiguous, and testable requirements for a given software problem statement.
- Evaluate a set of software requirements for completeness, consistency, and feasibility.
- Analyze user needs and problem statements to identify implicit and explicit software requirements.
Before You Start
Why: Students need a basic understanding of what software development entails before learning how to specify requirements for it.
Why: The ability to break down problems and think logically is foundational to translating user needs into structured requirements.
Key Vocabulary
| Functional Requirement | A description of a specific function or behavior the software must perform. These define what the system does, such as 'The system shall allow users to reset their password.' |
| Non-Functional Requirement | A description of a quality or constraint of the software, such as performance, security, or usability. These define how the system performs, like 'The login page shall load within 2 seconds.' |
| Requirement Elicitation | The process of gathering information about user needs and system constraints from stakeholders. This can involve interviews, surveys, or analyzing existing systems. |
| Ambiguity | Uncertainty or inexactness in meaning, which can lead to misinterpretation. Requirements must be stated clearly to avoid ambiguity. |
| Testability | The degree to which a requirement can be verified through testing. Requirements should be written in a way that allows for objective validation. |
Watch Out for These Misconceptions
Common MisconceptionRequirements only include features the software must have, ignoring quality aspects.
What to Teach Instead
Functional requirements detail actions like user authentication; non-functional cover speed and accessibility. Sorting activities in small groups help students categorize examples and spot missing qualities, building comprehensive specs.
Common MisconceptionVague descriptions like 'user-friendly interface' count as clear requirements.
What to Teach Instead
Requirements must be precise, measurable, and testable to avoid misinterpretation. Peer review stations let students identify vagueness in samples and rewrite them, practicing unambiguous language through discussion.
Common MisconceptionRequirements are fixed once written and do not evolve.
What to Teach Instead
Software needs change, so specs require iteration. Mock project simulations with changing client demands show this, as groups adapt specs collaboratively and learn the value of flexibility.
Active Learning Ideas
See all activitiesRole-Play: Stakeholder Interviews
Assign pairs: one as developer, one as client with a vague app idea like a school event planner. The developer asks targeted questions to uncover needs, then drafts initial requirements. Pairs switch roles and compare specs for clarity.
Small Groups: Spec Building Workshop
Provide a problem statement, such as designing a grade tracker app. Groups brainstorm and categorize functional and non-functional requirements, then write a complete spec document. Share one key requirement per group with the class.
Whole Class: Requirements Review Walkabout
Students post their specs on posters. Class members rotate, noting issues in completeness, consistency, or ambiguity using a checklist. Debrief as a group to refine originals.
Individual: Iterative Refinement
Students revise their specs based on peer feedback and class discussion. Add test cases to verify each requirement, then self-assess against criteria for unambiguity.
Real-World Connections
- Software developers at Google use detailed requirement specifications to build new features for products like Google Maps, ensuring that user needs for navigation and location services are met accurately and efficiently.
- Video game designers at Ubisoft meticulously document functional requirements for character abilities and non-functional requirements for game performance to create immersive and stable gaming experiences for millions of players.
- Financial technology companies, such as Wealthsimple, define strict security and performance requirements for their trading platforms to ensure user data is protected and transactions are processed without delay.
Assessment Ideas
Present students with a scenario, e.g., 'Design a simple online library catalog.' Ask them to list two functional requirements and two non-functional requirements for this system. Review responses for clarity and correctness.
In pairs, students draft a set of 3-5 requirements for a hypothetical app (e.g., a task manager). They then swap documents and use a checklist to evaluate their partner's requirements for clarity, testability, and potential ambiguity. The checklist includes questions like: 'Is each requirement specific?' 'Can this requirement be tested?'
Provide students with a poorly written requirement, such as 'The app should be fast.' Ask them to rewrite it as a clear, testable non-functional requirement and explain why their revision is better.
Frequently Asked Questions
How do you teach functional vs non-functional requirements in grade 10 computer science?
What are effective activities for requirements gathering in Ontario CS curriculum?
How to evaluate student requirements specifications for completeness?
How can active learning help students understand requirements gathering?
More in Collaborative Software Development
Problem Identification and User Research
Focus on identifying real-world problems and gathering authentic feedback from potential users to inform design.
2 methodologies
Prototyping and Iterative Design
Learn to create low-fidelity and high-fidelity prototypes and apply iterative design principles.
2 methodologies
Introduction to Version Control (Git)
Learn to manage a group project using iterative cycles and collaborative tools, specifically focusing on Git.
2 methodologies
Agile Methodologies and Team Roles
Understand agile principles and common team roles in a software development project.
2 methodologies
Project Planning and Task Management
Develop skills in breaking down projects into manageable tasks, assigning responsibilities, and tracking progress.
2 methodologies
Testing and Quality Assurance
Implement testing strategies to ensure the quality, reliability, and functionality of software.
2 methodologies