Software Dev Process Lecture Notes - Part 1 Lesson 5 and Part 2 Lesson 1 - Requirements
Requirements Gathering
- Very difficult task. Business people don’t wanna.
- Brainstorming tasks. example requirement, user wants tool to find average length of sentences in an essay
- good example questions would be
- What OSes should it run on?
- How will the user specify input?
- good example questions would be
- avoid implementation-specific questions
- avoid OS-specific code where possible (platform independent is better)
- Example questions from interview
- How many students?
- 40-45 per class, 3 classes
- What kind of computers are students using?
- Doesn’t know, probably several.
- How tech savvy are the students?
- Wide range
- What are the students submitting?
- Raw text files via email
- What constitutes a word?
- Only wants larger words, guesses 3 letters?
- Need flexibility here
- What do you consider a sentence?
- Ends in period, exl point, etc.
- Seems to be unsure, e.g. about commas counting
- Need flexibility here
- How many students?
- Concludes CLI java-based tool with good documentation. Lots of little error messages to help less tech savvy students with CLI usage
- Core metric is avg number of words per sentence
- Configurability about threshold word length
- Configurability about what counts as a sentence
- Results are avg number of words per sentence
- Help messages if tool used incorrectly
Assignment 3 Requirements
- must use vanilla Java 1.6 or later, no libraries
- must compile with javac, no options
- executable from command line
- user specifies file path
- user specifies delimiters with -d
- user specifies word length lower limit with -l
- output must be average sentence length in words, rounded to two decimal places **
Requirements Engineering
- What are software requirements?
- A description of what a system has to do.
- Functionalty and features
- Represented formally as text / shall statements
- Represented non-textually as user stories or diagrams, etc.
- A description of what a system has to do.
- What is requirements engineering?
- Working with stakeholders to elicit their requirements for the system
- Analyzing those requirements to understand tradeoffs
- Specification
- Validation
- Requirements management
- Change management, feature adds, etc.
- Why is it important?
- Failed projects if you screw this up.
- If you don’t understand requirements, you’re going to build the wrong system
- Need to ask all the right stakeholders.
- Gets the project off on the right foot.
- The process of establishing the services that the customer requires of the system, and the constraints under which the system operates
- Focus on what the system needs to do, not how it will do so
- Software intensive system = softare + hardware + context
- Software quality is not just a function of the software, but of the combination of the software and its purpose.
- Software can be of low quality not only because it doesn’t work well, but also because it does not fulfill its needed purpose.
- Completeness and Pertinence
- Very difficult to gain a complete picture of the purpose of the softare. Often incomplete requirements are gathered
- Pertinance = relevance. Often include unneeded functionality. Can also rake in conflicting requirements
Best Practices
Typical bad practice
- Devs list off requirements, stakeholders review/edit/approve
- Often stakeholders don’t bother / can’t make time, so just skip to approving
- SOUND FAMILIAR?
How to avoid?
- RE is a set of activities concerned with identifying and communicating the purpose of a software-intensive system, and the context in which it will be used. Hence, RE acts as the bridge between the real-world needs of users, customers, and other constituencies affected by a software system, and the capabilities and opportunities afforded by software-intensive technologies
-
Requirements are:
- Functional and non-functional requirements
- functional = well-defined, system shall do X
- non-functional = system’s qualities e.g. security, re-usability, speed, etc. squishier.
- non-functional must be refined to be verifiable
- User vs System Requirements
- user requirements are written for customers. often in natural language, no technical details
- system requirements are written for developers, contain detailed functional and non-functional requirements. clearly and more rigorously specified
- Where do requirements come from?
- Stakeholders - users want stuff
- Application Domain - constraints applied here. E.G. regulations for banking software
- Documentation
- Elicitation Problems
- Thin spread of domain knowledge. Hard to run down all the people who know what all you need to know.
- Knowledge is tacit. Stuff as actually done rarely matches exactly to what people describe.
- Limited observability - hard to shadow enough to get clear requirements.
- Bias. People may not want to, or be able to, accurately relay to you the way things actually work.
- Traditional techniques for requirement elicitation
- Background reading - collecting information by reading existing documents. Especially good when not familiar with the org. Saves time spent interviewing actual people. However docs are often bad or out of date.
- Hard data and samples
- Interviews - this is very common. Structured or open-ended. Can collect rich set of information. However, require special skills to do well.
- Surveys - very useful and allow casting a broader net. However, only good at capturing expected information of certain types.
- Meetings - fundamental that clear agenda is set.
- Other techniques
- collaborative techniques - brainstorming,
- social approaches,
- ethnographic techniques (observe stakeholders in original environment)
- cognitive techniques
- Modeling requirements
- modeling enterprises
- goals and objecticves
- organizational structure
- tasks and dependencies
- agents, roles, intentionality
- modeling information and behaviors
- information structure
- behavioral view
- scenarios and use cases
- state machine models
- sequence diagrams
- information flow
- time/sequencing requirements
- modeling system qualities (NFRS)
- robustness, reliability, etc
- after deciding what to model, must decide how you want to model it
- there are tons of different models you can choose for each different thing you want to model. frequently they’re complementary, they can reinforce and aid each other
- modeling enterprises
- For this course, we’ll use either natural language or UML diagrams for our requirements
- goal modeling is very popular. start with main goal of system, then refine by decomposing into nested subgoals until you get to units of functionality
- Analyzing requirements
- Verification
- check whether they’re correct, complete, and pertinent, consistent, testable, etc.
- Validation
- assess whether collected requirements describe the system the stakeholders actually want
- sometimes done by allowing stakeholders to interact with a prototype
- Risk analysis
- aims to identify and analyze main risks involved with development of the system being built
- Verification
- Requirements prioritization
- how to handle limited resources?
- prioritize by classifying
- mandatory
- nice to have
- superfluous
Recap
- 3 main steps
- elicitation
- modeling
- analysis
- 4th kinda step - negotiation between stakeholders and devs
- Iterative process between all 4 stages until you are happy, then you stop.
- Requirements shoudl be simple, not compount
- Requirements should be testable
- Requirements should be organized, grouped, nested, prioritized
-
Requirements should be numbered (for traceability)
- Software requirement specification (SRS) (document)
- way to communicate requirements to others - common ground between analysts and stakeholders
- different projects require different SRS
- For this class we’ll use modified version of the IEEE standard SRS document