3. 需求分析(下):非功能性需求与需求文档撰写

上一节我们把车道保持的功能需求聊透了。但说实话,光有功能需求,项目根本跑不起来。

为什么?

你想想看,一个车道保持系统,功能上能识别车道线、能控制方向盘。但如果它每500毫秒才输出一次控制指令,车早就偏到隔壁车道去了。或者,它在雨天就罢工,那这功能等于没有。

这就是非功能性需求要解决的问题。我个人习惯把非功能性需求分成三大块:实时性、安全性、鲁棒性。咱们一个一个来拆。

3.1 实时性:系统必须“快”

车道保持是典型的实时控制系统。从摄像头采集图像,到算法处理,再到输出方向盘转角,整个链路必须在规定时间内完成。

我在项目中遇到过最典型的场景:某次路测,车辆以120km/h行驶。系统突然延迟了200ms。结果呢?车辆已经偏离车道中心线将近7米。嗯,那次测试直接触发了紧急接管。

所以,实时性指标必须量化。不能只说“要快”,要说“多快”。

指标项 典型值 说明
感知端到端延迟 ≤ 50ms 从图像采集到输出车道线
控制周期 ≤ 20ms 方向盘转角更新频率
系统总延迟 ≤ 100ms 从感知到执行器响应
最大抖动 ≤ 10ms 延迟波动范围

核心原则:实时性不是越快越好,而是“可预测的快”。抖动比延迟更可怕。

我曾经吃过这个亏。某个版本优化了平均延迟,从80ms降到了40ms。但抖动从5ms飙到了25ms。结果车辆在高速上开始“画龙”,方向盘来回修正。后来我们花了整整两周,才把抖动压下来。

3.2 安全性:系统必须“稳”

安全是自动驾驶的底线。车道保持系统如果出问题,轻则偏离车道,重则引发事故。

我习惯把安全性需求分成两个层面:功能安全预期功能安全

功能安全,说白了就是系统出故障了怎么办。比如摄像头被遮挡、算法崩溃、执行器卡死。这些都要有对应的降级策略。

预期功能安全,则是系统在正常工作时,会不会因为场景理解错误而做出危险行为。比如把路面积水反光误识别为车道线。

避坑指南:我曾经在项目中只关注了功能安全,忽略了预期功能安全。结果在隧道出口处,强烈的光照变化导致车道线检测短暂失效,系统直接退出了车道保持。虽然没有发生事故,但那次体验非常糟糕。

安全性需求清单,我建议至少包含以下内容:

  • 故障检测:系统必须在10ms内检测到传感器或算法异常
  • 降级策略:检测到故障后,平滑退出车道保持,并发出声光报警
  • 安全状态:降级后,车辆应保持当前车道,减速至安全速度
  • 人机交互:驾驶员接管请求必须在500ms内完成
  • 冗余设计:关键信号(如方向盘转角)应有至少两路独立来源

3.3 鲁棒性:系统必须“扛得住”

鲁棒性,就是系统在各种恶劣条件下还能正常工作。

你想想看,车道保持系统要面对的场景有多复杂:

  • 白天、黑夜、黄昏、黎明
  • 晴天、雨天、雪天、雾天
  • 城市道路、高速公路、乡村小路
  • 车道线清晰、模糊、磨损、被遮挡
  • 弯道半径从50米到5000米

这些场景,每一个都可能让系统失效。

我记得有一次,项目在重庆做路测。那里的道路弯多、坡陡、车道线磨损严重。我们的系统在高速上表现完美,到了重庆直接“翻车”。后来我们花了大量精力,专门针对低质量车道线做了鲁棒性优化。

鲁棒性需求,我一般这样定义:

场景 要求 测试方法
光照变化 在100lux~100000lux范围内正常工作 实验室光照箱测试
天气条件 中雨以下可正常工作 模拟降雨测试
车道线质量 磨损率≤30%时仍可检测 人工磨损车道线测试
弯道半径 ≥50m的弯道可正常控制 封闭场地测试
遮挡情况 单侧车道线被遮挡时,可依靠另一侧维持 实车遮挡测试

个人经验:鲁棒性测试一定要做“边界扫描”。比如光照从1000lux突然跳到100000lux,系统能不能扛住?这种瞬态变化往往最容易暴露问题。

3.4 需求文档撰写:把话说清楚

需求分析完了,怎么把它写下来?

我见过太多需求文档,要么太虚(“系统应具有良好的实时性”),要么太细(直接写代码逻辑)。好的需求文档,应该让开发人员一看就知道要做什么,让测试人员一看就知道怎么测。

我习惯用这个模板:

需求编号:LKA-NFR-001
需求类型:非功能性需求 - 实时性
需求描述:系统从图像采集到输出方向盘转角指令的总延迟应不超过100ms
验收标准:在100次连续测试中,95%以上的测试结果≤100ms,且最大延迟≤120ms
优先级:P0
关联功能:车道线检测、横向控制

这里有几个要点:

  • 可量化:所有指标必须有具体数值,不能模糊
  • 可测试:验收标准要明确,测试人员能直接执行
  • 有优先级:P0是必须满足的,P1是尽量满足的
  • 有关联:标注这个需求影响了哪些功能模块

我的习惯:每个非功能性需求,我都会写一个“失败场景”。比如“如果延迟超过100ms,车辆在120km/h时可能偏离车道0.5米”。这样大家就知道这个需求为什么重要了。

嗯,到这里,需求分析的部分就告一段落了。下一节,我们会进入系统设计阶段,看看怎么把这些需求转化成具体的架构和模块划分。

记住一句话:需求分析做得越细,后面踩的坑就越少。我在这个行业干了十年,这句话从来没骗过我。