Requirements and success criteria
UAT 493 Unmanned Aircraft Systems and Automation Technology Capstone Project I
Lesson
By the end of this module you will be able to
- Turn stakeholder needs into verifiable system requirements
- Check requirement quality against characteristics C1–C9 of the INCOSE Guide to Writing Requirements
- Prioritise with MoSCoW and check the effort share of the Must group
- Assign each requirement a verification method of inspection, analysis, demonstration or test
Why this matters
“The system must detect cracks well” sounds clear, but on delivery day the team and the user may argue about what “well” means. A well-written requirement works like a contract: it says what must be built, how it will be measured and when it counts as done. ISO/IEC/IEEE 29148 and the INCOSE guidance give the principles for writing requirements that are used worldwide.
From needs to requirements
Requirements are usually written in the pattern “[system] shall [do what] [under what condition] [measurable criterion]”, for example “The system shall identify canal bank cracks 5 cm wide or more with a recall of at least 0.90 on a test image set approved by the user.”
The INCOSE Guide to Writing Requirements, version 4 (2023), defines nine characteristics of an individual requirement: necessary, appropriate, unambiguous, complete, singular, feasible, verifiable, correct and conforming, plus a separate group of characteristics for a set of requirements, such as being complete and consistent.
Example 1. A first automated requirements check
The program looks for common symptoms: vague words, no numbers and several requirements in one (it can check only some characteristics; people still have to review the rest)
import re
VAGUE = ["user-friendly", "fast", "quickly", "adequate", "sufficient", "easy", "approximately",
"as appropriate", "etc", "and/or", "good", "robust"]
requirements = {
"R1": "The system shall detect canal bank cracks of 5 cm width or more with recall of at least 0.90.",
"R2": "The system shall be user-friendly.",
"R3": "The drone shall fly fast and take good photos.",
"R4": "The system shall complete one 2 km inspection round in at most 15 minutes of flight.",
"R5": "The system shall store images and send reports and alert the office.",
"R6": "The system shall mark each defect with coordinates accurate to within 3 m.",
}
for rid, text in requirements.items():
words = text.lower()
issues = [f"vague '{w}'" for w in VAGUE if re.search(r"\b" + re.escape(w) + r"\b", words)]
if not re.search(r"\d", text):
issues.append("no measurable value")
if words.count(" and ") >= 2 or words.count(" shall ") > 1:
issues.append("several requirements in one")
print(f"{rid}: {'ok' if not issues else '; '.join(issues)}")
R1: ok
R2: vague 'user-friendly'; no measurable value
R3: vague 'fast'; vague 'good'; no measurable value
R4: ok
R5: no measurable value; several requirements in one
R6: ok
R2 and R3 use words that cannot be measured. R5 combines three things in one requirement, so they cannot be verified separately; it should be split into three. R1, R4 and R6 pass this first check, but we still have to ask whether they are really necessary and feasible, which a program cannot answer.
Prioritising with MoSCoW
A project has limited time, so the team must know what it must have and what it can cut. The Agile Business Consortium’s MoSCoW method uses four groups:
- Must have: the minimum set that must be delivered; without it the project has failed
- Should have: important, but the system is still usable without it
- Could have: desirable; this is the contingency when time runs short
- Won’t have this time: agreed not to be done in this round, and recorded clearly
The guidance is that Must effort should not exceed 60%. Above that the project is at risk of failure because there is no contingency when problems arise.
Example 2. Checking the MoSCoW shares
effort = { # requirement: (priority, estimated person-weeks)
"R1 crack detection": ("Must", 6), "R4 round time": ("Must", 3), "R6 coordinates": ("Must", 2),
"R5a store images": ("Should", 2), "R5b send report": ("Should", 3),
"R5c alert office": ("Could", 2), "R7 night flight": ("Won't", 0), "R8 web dashboard": ("Could", 2),
}
total = sum(e for _, e in effort.values())
for group in ("Must", "Should", "Could"):
share = sum(e for g, e in effort.values() if g == group) / total
print(f"{group:<6} {share:.0%}")
must = sum(e for g, e in effort.values() if g == "Must") / total
print("Must share OK" if must <= 0.60 else "Must share too high: move items or cut scope")
Must 55%
Should 25%
Could 20%
Must share OK
Verifying requirements
The NASA handbook lists four verification methods. Every requirement must have its method chosen when it is written; if you cannot think of a way to verify it, the requirement is not good enough yet.
| Method | Used when | Example |
|---|---|---|
| Inspection | checked visually or from documents | registration marking on the airframe |
| Analysis | calculated or simulated | endurance from the energy budget |
| Demonstration | operation shown without detailed measurement | the user can open the report unaided |
| Test | values measured under controlled conditions | coordinate accuracy against reference points |
Module lab
Project deliverable: requirements document
- Turn the needs from module 1 into 15–25 system requirements in “shall” form, each with a measurable criterion
- Run Example 1 on your team’s requirements, fix those that are flagged, then have another team review them against C1–C9
- Prioritise with MoSCoW, estimate the effort and check that the Must group is no more than 60%
- Assign a verification method to every requirement (inspection, analysis, demonstration, test)
- Have stakeholders confirm the Must requirements, and record any changes
Common mistakes
Watch out
- Using words that cannot be measured, such as fast, good or easy to use
- Combining several things in one requirement
- Writing a solution instead of a need, such as naming a camera model in a system-level requirement
- Making everything a Must, leaving no contingency
- Not choosing a verification method until test day
Summary
- Requirements turn needs into “shall” statements with measurable criteria
- Good requirements have INCOSE characteristics C1–C9, such as being unambiguous, singular and verifiable
- MoSCoW sets priorities, and the Must group should not take more than 60% of the effort
- Every requirement needs a verification method: inspection, analysis, demonstration or test
Check your understanding
- Which characteristic does “The system shall send reports quickly” violate, and how should it be fixed?
- A requirement uses “and” to join three actions. Which characteristic does it violate?
- Must work is 7 person-weeks out of a total of 10. Does it meet the MoSCoW guidance?
- Which verification method is used to check that the registration marking is on the airframe?
- What does “Won’t have this time” mean?
Answers
- It is not unambiguous and cannot be verified; it should state a time, such as “within 2 hours after landing”
- Singular; it should be split into three requirements
- No, because 70% is above 60%
- Inspection
- It is agreed not to be done in this round, and it is recorded so that the scope is clear
Key formulas
| Effort share of the Must group |
Key references
- INCOSE Requirements Working Group. (2023). Guide to writing requirements (Version 4, INCOSE-TP-2010-006-04). INCOSE. link
- International Organization for Standardization. (2018). Systems and software engineering — Life cycle processes — Requirements engineering (ISO/IEC/IEEE 29148:2018). link
- National Aeronautics and Space Administration. (2016). NASA systems engineering handbook (NASA/SP-2016-6105 Rev 2). link
- Agile Business Consortium. MoSCoW prioritisation. DSDM project framework. link
- INCOSE. (2023). INCOSE systems engineering handbook: A guide for system life cycle processes and activities (5th ed.). Wiley. link
Further reading
Study the assigned knowledge units in advance, review media and take the module quiz
In class / field
Team project work, advisor meetings and progress presentations
Learning evidence: Project milestone deliverables