Skip to the content
FixTheRobot Explore Robotics / UAV / Module 8 / M8-T1

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.

  • Lesson 1 of 18
  • Safety, Verification and Flight Testing
  • Established engineering
  • About 5 minutes to read

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:

undefined
PartExampleWhy
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
VerificationVerified by flight test T-100 against a motion-capture referenceHow it will be checked
From mission to verifiable requirementThe mission and operating environment give stakeholder needs; needs are refined into system requirements that are unambiguous, measurable and verifiable; each requirement states a condition, a threshold, a statistic and a verification method.Mission + ConOpswho, where, whenNeeds + hazardswhySystem requirementshall, measurableVerification methodtest, analysisAcceptancecriterion, evidenceA requirement that cannot be verified is a wish.
The chain from mission to acceptance. Each requirement carries its own verification.
Animation of the confidence gained from failure-free trials. The number of trials grows along the horizontal axis; the three curves show the confidence that the true per-flight failure probability is below five, two and one per cent, which is one minus the probability of seeing no failures if the true probability were at that limit. A marker shows where each curve crosses ninety-five per cent, at about 59, 149 and 299 flights.
A requirement that states a failure rate must say how it will be verified. With zero failures in nn independent trials the confidence that the failure probability is below pp is 1−(1−p)n1-(1-p)^{n}, so n=ln⁡(1−C)/ln⁡(1−p)n=\ln (1-C)/\ln (1-p) trials are needed (about 3/p for 95 %). Independence of trials is an assumption that must itself be justified. (Looping, about 5 seconds; drawn and computed for this course with illustrative values.)

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 ≤ LL with probability at least p” holds with confidence CC by nn independent trials with kk failures allowed, the success-run theorem for k=0k=0 gives

Zero-failure demonstration sample size
n≥ln⁡(1−C)ln⁡pn \ge \frac{\ln(1 - C)}{\ln p}
Examples
p=0.95, C=0.90: n≥ln⁡0.10ln⁡0.95=44.9→45 trials;p=0.99, C=0.95: n≥299p = 0.95,\ C = 0.90:\ n \ge \frac{\ln 0.10}{\ln 0.95} = 44.9 \to 45\ \text{trials}; \qquad p = 0.99,\ C = 0.95:\ n \ge 299

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.

pp
required success probability (or percentile level).
CC
confidence level of the demonstration.
nn
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) == 299
A requirements linter and the zero-failure sample size. Illustrative requirements.

Common 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 modes, symptoms and causes
Failure modeHow it shows upLikely cause
Late discovery of ambiguityTwo teams build different thingsRequirement open to interpretation
Untestable requirementNo test can be writtenNo threshold, statistic or condition
Acceptance disputeDisagreement on whether the system passedStatistic or sample unit unstated
Requirement creepScope grows in testNo change control or rationale

Debugging approach

  1. Run the linter on the whole set before each review.
  2. Write the test for each requirement immediately; if you cannot, rewrite the requirement.
  3. Ask a colleague who did not write it to restate it in their own words.
  4. Check the sample size implied by each statistical requirement.

Practical exercises

  1. Rewrite “the UAV shall hover steadily” as a verifiable requirement.
  2. List five conditions that must be stated for a GNSS-denied accuracy requirement.
  3. Compute the number of zero-failure trials for 97 % at 90 % confidence.
  4. 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, n≥ln⁡(0.05)/ln⁡(0.99)≈299n\ge \ln (0.05)/\ln (0.99)\approx 299 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.

What’s next

Mark this lesson

Saved in this browser and synced to your account when you are signed in.

Next lesson

M8-T2: Requirements decomposition

Decompose system requirements into subsystem requirements with allocation, budgets and traceability.