3. 软件需求验证实战

在航空嵌入式软件研制中,需求验证不是“读一遍需求文档”,而是对需求集合进行系统性的质量审查。DO-178C 将需求质量视为后续设计、编码和测试能否成立的前提:如果一条需求本身写错了、漏了、前后矛盾或无法判定,那么再严格的测试也只能证明“实现符合了一条错误的需求”。本节围绕四个核心属性——正确性、完整性、一致性、可验证性——展开分析,并给出缺陷分类与案例演练方法。

四个属性的判定标准

正确性(Correctness)关注需求是否真实反映系统意图与上层约束。判定依据不是“读起来合理”,而是能否追溯到系统需求、接口控制文档(ICD)、适航规章或安全性分析结论。例如某飞控软件需求写“当空速超过 250 kn 时点亮超速告警”,若系统需求规定阈值来自大气数据计算机且为 260 kn,则该需求不正确。

完整性(Completeness)关注需求集合是否覆盖了所有输入条件、状态、边界和异常路径。常见缺口包括:只写了正常分支未写故障分支、只写了有效输入未写无效输入、未定义初始化状态、未定义超时行为。完整性审查常用“条件—响应矩阵”检查:把每个输入条件与预期响应交叉列出,空格处即为潜在遗漏。

一致性(Consistency)关注需求之间是否冲突或重复定义。典型问题包括:两条需求对同一参数给出不同阈值;同一状态在不同需求中命名不同;接口数据方向相反;时序约束互相矛盾。一致性缺陷往往在集成阶段才暴露,代价很高,因此必须在需求阶段用交叉引用矩阵主动排查。

可验证性(Verifiability)关注需求能否通过分析、评审或测试给出明确的通过/失败判据。不可验证的典型表述是“系统应快速响应”“应具有良好的人机界面”“应尽可能降低延迟”。可验证的需求必须包含可观测的触发条件、可测量的输出和明确的容差,例如“从接收到有效指令到输出更新,延迟不超过 50 ms”。

需求验证四属性分析框架 输入:需求条目 + 系统需求 + ICD + 安全性分析结论 正确性 是否反映真实意图? 追溯系统需求/ICD 核对阈值、方向、单位 安全性分析结论比对 完整性 条件与响应是否全覆盖? 条件—响应矩阵 正常/异常/边界分支 初始化与超时定义 一致性 需求之间是否冲突? 交叉引用矩阵 参数/命名/方向统一 时序约束无矛盾 可验证性 能否判定通过/失败? 触发条件可观测 输出可测量+容差 避免“快速/良好”表述 需求缺陷分类与记录 类型 / 严重度 / 位置 / 证据 / 建议 错误型 阈值/方向/单位错误 与上层需求不符 遗漏型 异常分支缺失 边界/超时未定义 冲突型 参数/命名矛盾 时序约束互斥 模糊型 无量化判据 “快速/良好”类表述 冗余型 重复定义 可合并条目 输出:需求缺陷报告 + 修改建议 + 回归验证

缺陷分类:让问题可统计、可追踪

把发现的问题按类型归档,才能判断需求质量趋势并分配修改优先级。建议采用五类划分:错误型(内容与上层依据不符)、遗漏型(条件或响应缺失)、冲突型(需求之间矛盾)、模糊型(不可验证)、冗余型(重复定义)。每条缺陷记录至少包含:缺陷编号、需求条目号、类型、严重度、证据来源、建议修改、责任人、状态。严重度可按“是否影响安全性/是否阻塞下游”分为高、中、低三级。

案例演练:一条超速告警需求

假设某大气数据软件需求原文为:

REQ-AD-021:当空速超过阈值时,系统应快速输出超速告警,
并保证告警的及时性和可靠性。

逐属性审查:正确性——阈值未给出具体数值,无法与系统需求核对,需追溯至系统需求 SYSR-045 确认阈值为 260 kn、来源为 ADC 通道 A;完整性——未定义空速从超阈值恢复到阈值以下时告警如何清除,也未定义 ADC 数据无效时的行为;一致性——需检查是否存在另一条需求 REQ-AD-033 使用 250 kn 阈值,若存在则冲突;可验证性——“快速”“及时性”“可靠性”均无量化判据,无法设计测试用例。

修改后的需求示例:

REQ-AD-021(修订):当 ADC 通道 A 输出的校正空速 CAS 连续 3 个
采样周期(周期 20 ms)大于 260 kn 且数据有效位为 1 时,软件应在
检测到第 3 个超阈值采样后 60 ms 内将 OVERSPEED_WARN 置为 1。
当 CAS 连续 3 个周期小于 255 kn 时,应在 60 ms 内将
OVERSPEED_WARN 置为 0。当数据有效位为 0 时,
OVERSPEED_WARN 保持前一有效状态并置 DATA_INVALID 标志。

修订后,触发条件(CAS > 260 kn、连续 3 周期、有效位为 1)、输出(OVERSPEED_WARN)、时序(60 ms 内)、迟滞(255 kn 清除)、异常处理(数据无效)均可观测、可测量,测试用例可以直接据此设计:注入 CAS 序列 258→261→262→263,检查第 3 个超阈值采样后 60 ms 内输出翻转;再注入 254→253→252,检查清除;最后将有效位置 0,检查保持与标志置位。

需求审查会议建议采用“逐条走查 + 检查单”方式:每条需求由作者朗读,审查者按四属性提问,记录员实时登记缺陷。单条需求审查时间控制在 3~5 分钟,避免陷入设计讨论。

可验证性的量化改写规则

把模糊需求改写为可验证需求,可遵循“触发—响应—判据”三段式:触发条件必须是可观测的输入或状态;响应必须是软件可产生的输出或状态变化;判据必须包含测量点、目标值和容差。例如“应快速响应”改为“从输入事件到输出更新不超过 X ms”;“应具有良好容错”改为“当输入超出 [a,b] 范围时,输出保持上一有效值并置故障标志”。容差和测量点需与验证方法匹配:若用目标机测试,测量点应选在可观测的接口或总线消息上。

审查结果如何闭环

审查结束后,缺陷报告应进入配置管理,每条缺陷关联到具体需求条目和版本。修改后的需求必须重新走查,确认修改未引入新的不一致。对于影响安全性或接口的需求变更,还需评估对下游设计、代码和测试用例的影响范围,并触发相应的回归验证。只有缺陷状态关闭且需求基线更新后,本轮需求验证才算完成。