UAV Systems Engineering · Module 8
M8-T1: System requirements engineering
Good requirements say what, how well, under which conditions, and how it will be checked. Most vague requirements fail on one of those four.
Requirements are where the engineering of a navigation system starts, and where most of its later failures were already decided. “The UAV shall navigate accurately without GNSS” cannot be built or tested. This lesson turns a mission into requirements that a test engineer could verify without asking the author what was meant.
Learning objectives
After this lesson, you should be able to:
- Derive stakeholder needs and hazards from a concept of operations.
- Write requirements that are unambiguous, measurable and verifiable, with condition, threshold, statistic and method.
- Recognise and fix common requirement defects.
- Run a simple automatic lint on a requirements set.
Conceptual explanation
Established The practices follow common systems-engineering guidance (for example the INCOSE guide to writing requirements and the NASA Systems Engineering Handbook). The example requirement values are illustrative, not recommended values for any real system.
Start from the concept of operations (ConOps): who operates the UAV, in which environment (indoor, urban canyon, forest, open field), for how long, with what payload, what failures must be tolerated, and what the vehicle must not do. From the ConOps derive needs (what stakeholders require) and hazards (what can go wrong and hurt people, property or the mission). Requirements are then written to satisfy needs and mitigate hazards.
A well-formed requirement has these parts:
| Part | Example | Why |
|---|---|---|
| Subject and “shall” | The navigation system shall… | One system element, one obligation |
| Quantity | …keep the horizontal position error… | Something measurable |
| Threshold | …below 2.0 m… | A number, not “accurate” |
| Statistic | …at the 95th percentile… | Errors are distributions; say which part must hold |
| Condition | …over a 5-minute interval without GNSS, in daylight, below 8 m/s wind… | Where and when it applies |
| Verification | Verified by flight test T-100 against a motion-capture reference | How it will be checked |

Engineering intuition
Ask of every requirement: could two engineers read it, build independently, and both pass the same test? Words like “fast”, “accurate”, “robust”, “reliable”, “as appropriate” and “etc.” fail that test. Numbers without a statistic fail too: “position error below 2 m” could mean always, on average or in 95 % of samples, which are very different designs and very different amounts of testing.
The condition is where navigation requirements most often hide risk. A GNSS-denied accuracy requirement is meaningless without the duration, the speed, the environment (texture, lighting, dynamic objects) and the sensor set. Writing the condition forces the team to state the limits of the claim, which later becomes the operational limitation (see the last lesson of this module).
Mathematical formulation
Statistical statements need a sample size to verify. To show that a requirement “error ≤ with probability at least p” holds with confidence by independent trials with failures allowed, the success-run theorem for gives
With a failure allowed the binomial bound (Clopper–Pearson) applies. This is why “99.9 % success” cannot be demonstrated by a handful of flights: the requirement writer must decide whether it is to be shown by flight test, by simulation with validated models (many runs), or by analysis, and write that in the requirement’s verification method. Continuous error metrics are usually stated as percentiles of the error over time or over runs; state which, because the sample unit (per sample, per segment, per flight) changes the effective sample size and the correlation between samples.
- required success probability (or percentile level).
- confidence level of the demonstration.
- number of independent trials.
Architecture and data flow
ConOps and hazard analysis → needs list → system requirements (each with ID, text, rationale, verification method, owner, parent need or hazard) in a version-controlled file → allocation to subsystems (next lesson) → test cases (traceability matrix) → results. The requirements file is the input of the traceability checker and of the review. Requirement changes go through the change-control process of the configuration management lesson.
Real-world UAV applications
- Writing the navigation requirements for a GNSS-denied inspection UAV.
- Reviewing a supplier’s specification for a perception sensor.
- Deriving test cases and flight-test cards from requirements.
- Stating the operational envelope in which a claim is made.
Implementation example
This runs as shown. A requirements linter: it flags weak words, missing numbers, missing conditions, missing statistics and missing verification methods, then computes the zero-failure sample size for statistical requirements. The example requirements are illustrative.
import re, math
WEAK = ['accurate', 'accurately', 'fast', 'robust', 'reliable', 'as appropriate', 'etc', 'user-friendly', 'adequate', 'sufficient', 'minimal', 'quickly', 'efficient', 'where possible', 'and/or']
STAT = ['percentile', 'mean', 'maximum', 'rms', 'probability', 'at all times', 'never', 'median']
reqs = {
'R-1': "The UAV shall navigate accurately without GNSS.",
'R-2': "The navigation system shall keep the horizontal position error below 2.0 m at the 95th percentile over any 5-minute interval without GNSS, in daylight, with wind below 8 m/s. Verification: flight test against a motion-capture reference.",
'R-3': "On loss of visual odometry the system shall detect the loss within 0.5 s and transition to a landing or hold behaviour. Verification: fault injection in SIL and HIL, then flight test.",
'R-4': "The system should be robust and respond quickly to failures, etc."}
def lint(text):
t = text.lower(); issues = []
if 'shall' not in t: issues.append("no 'shall' (obligation unclear)")
issues += [f"weak word '{w}'" for w in WEAK if re.search(r'\b' + re.escape(w) + r'\b', t)]
if not re.search(r'\d', t): issues.append('no number (not measurable)')
if re.search(r'error|accuracy', t) and not any(s in t for s in STAT): issues.append('error quantity without a statistic')
if not re.search(r'\b(in|during|over|within|on|with|without|below|above|when)\b', t): issues.append('no condition')
if 'verification' not in t: issues.append('no verification method')
return issues
for k, v in reqs.items(): print(k, lint(v) or 'OK')
assert lint(reqs['R-2']) == [] and lint(reqs['R-3']) == [] and len(lint(reqs['R-1'])) >= 3 and len(lint(reqs['R-4'])) >= 4
n_zero = lambda p, c: math.ceil(math.log(1 - c) / math.log(p))
print("zero-failure trials: 95 % @ 90 % confidence:", n_zero(0.95, 0.90), "; 99 % @ 95 %:", n_zero(0.99, 0.95), "; 99.9 % @ 95 %:", n_zero(0.999, 0.95))
assert n_zero(0.95, 0.90) == 45 and n_zero(0.99, 0.95) == 299Common engineering mistakes
Vague words
“Accurate”, “robust”, “fast” cannot be verified; replace by numbers with statistics.
No conditions
A claim without a duration, speed and environment is unbounded and untestable.
Mixing requirement and design
State what the system must do, not how (“use an EKF” is a design decision).
Several obligations in one sentence
Split so that each can pass or fail independently.
Unverifiable statistical claims
Check the number of trials the claim implies before accepting it.
Failure modes
| Failure mode | How it shows up | Likely cause |
|---|---|---|
| Late discovery of ambiguity | Two teams build different things | Requirement open to interpretation |
| Untestable requirement | No test can be written | No threshold, statistic or condition |
| Acceptance dispute | Disagreement on whether the system passed | Statistic or sample unit unstated |
| Requirement creep | Scope grows in test | No change control or rationale |
Debugging approach
- Run the linter on the whole set before each review.
- Write the test for each requirement immediately; if you cannot, rewrite the requirement.
- Ask a colleague who did not write it to restate it in their own words.
- Check the sample size implied by each statistical requirement.
Practical exercises
- Rewrite “the UAV shall hover steadily” as a verifiable requirement.
- List five conditions that must be stated for a GNSS-denied accuracy requirement.
- Compute the number of zero-failure trials for 97 % at 90 % confidence.
- Derive three needs and two hazards from a ConOps for a warehouse inventory UAV.
Interview questions
Write an answer in your own words, then reveal the model answer. Nothing is sent anywhere.
Question 1
What makes a requirement verifiable?
Model answer
It has a measurable quantity, a numerical threshold, a statistic, the conditions under which it applies and a stated verification method with a pass criterion.
Question 2
Why must a statistic be stated?
Model answer
Errors are random; “below 2 m” means different designs and test efforts if it must hold always, in 95 % of samples or on average, and the claim cannot be verified without it.
Question 3
How many trials show 99 % success at 95 % confidence?
Model answer
With zero failures allowed, independent trials, which is why such claims are often shown by validated simulation or analysis rather than flights alone.
References and further reading
Primary papers, official documentation and standards. Each claim above that is specific to a tool or version points here.