第2章:系统需求分析:功能需求与非功能需求、需求管理工具、需求追溯矩阵

好,咱们接着聊。上一章我们把变速箱控制软件的架构轮廓画了个大概,这一章得往里面填“肉”了——也就是需求分析。

说实话,我见过太多项目,代码写得飞起,结果最后发现需求压根没对齐。那场面,真是“车都造好了,发现轮子是方的”。所以,需求分析这块,咱们得花点功夫。

2.1 功能需求:变速箱到底要干什么?

功能需求,说白了就是“这软件得能干啥”。对于变速箱控制来说,核心功能其实就那么几大类。

  • 换挡控制:根据车速、油门、发动机转速,决定什么时候升挡、什么时候降挡。这是基本功。
  • 扭矩管理:换挡过程中,发动机扭矩怎么降、怎么恢复,直接影响平顺性。我见过一个项目,扭矩恢复快了,换挡像被人踹了一脚。
  • 故障诊断:传感器坏了、执行器卡了,系统得能检测出来,并且进入安全模式。嗯,这里要注意,故障诊断的覆盖率直接决定了功能安全等级。
  • 通讯管理:跟发动机、ABS、车身稳定系统通过CAN总线聊天。聊崩了,车就得“罢工”。

你可能会问:“这些功能需求怎么描述才够清楚?”我个人习惯用用例图场景描述。比如“升挡”这个功能,我会写:

用例名称:自动升挡
触发条件:车速 > 20km/h,油门开度 < 30%
前置条件:变速箱处于D挡,油温正常
主流程:
1. TCU检测到升挡条件满足
2. 请求发动机降扭
3. 打开换挡电磁阀
4. 同步器动作
5. 关闭电磁阀
6. 请求发动机恢复扭矩
后置条件:挡位+1,扭矩恢复

你看,这样写,开发人员拿到手就知道该干什么,测试人员也知道怎么测。

2.2 非功能需求:跑得快、稳、还省油

功能需求管“能不能”,非功能需求管“好不好”。

我记得有一次,客户反馈说换挡太慢了。我们一查,功能逻辑完全正确,但实时性没达标。这就是非功能需求没写清楚。

常见的非功能需求包括:

  • 实时性:换挡指令从发出到执行,延迟不能超过10ms。我建议把这个指标写进需求文档,不然开发人员可能用100ms的循环周期。
  • 可靠性:MTBF(平均无故障时间)要大于5000小时。说白了,车开到报废,变速箱控制软件不能“死机”。
  • 可维护性:代码要模块化,方便后续升级。我曾经接手过一个项目,所有逻辑写在一个函数里,3000行代码,那叫一个酸爽。
  • 功耗:TCU本身功耗要低,不能把电瓶耗光了。特别是停车时,系统得进入休眠模式。

核心观点:非功能需求往往比功能需求更难量化,但必须量化。比如“响应快”这种描述,等于没写。要写成“从CAN报文接收到换挡指令,到电磁阀动作,不超过5ms”。

2.3 需求管理工具:别再用Excel了

我知道,很多小团队还在用Excel管需求。说实话,Excel不是不能用,但版本一多,你就分不清哪个是最新的了。

我个人推荐几款工具:

工具 适用场景 我的评价
DOORS 大型项目,功能安全要求高 功能强大,但学习曲线陡。我用了两年才玩明白。
Polarion 中型项目,与ALM集成好 界面友好,适合敏捷开发。
Jama 跨团队协作 云端部署,适合多地开发。
Codebeamer 嵌入式开发,与代码关联强 我最近在用的,感觉不错。

你想想看,如果需求变了,你能一键知道哪些代码、哪些测试用例受影响?这就是工具的价值。

小技巧:不管用什么工具,需求一定要有唯一ID。我习惯用“REQ-TCU-001”这种格式,方便追溯。

2.4 需求追溯矩阵:谁是谁的爹?

需求追溯矩阵,听起来高大上,其实就是一张表,告诉你“每个需求对应哪个设计、哪个测试、哪段代码”。

为什么要做这个?

  • 验证覆盖率:每个需求都有对应的测试用例吗?没有?那你怎么知道做对了?
  • 变更影响分析:客户说“我要改换挡逻辑”,你通过矩阵一看,哦,影响3个模块、5个测试用例。改起来心里有底。
  • 功能安全要求:ISO 26262明确要求,ASIL等级高的需求必须双向追溯。说白了,你得能证明“每个安全需求都被实现了,并且被验证了”。

举个例子:

需求ID 需求描述 设计文档 代码模块 测试用例
REQ-TCU-001 升挡延迟 < 10ms DSN-TCU-001 shift_control.c TC-TC-001
REQ-TCU-002 故障诊断覆盖率 > 95% DSN-TCU-002 diag.c TC-DIAG-001

避坑指南:我曾经见过一个项目,需求矩阵里写了1000条需求,但实际代码只实现了800条。剩下的200条,没人知道为什么没做。最后客户验收时,直接拒收。所以,矩阵一定要定期更新,别等到最后才补。

2.5 我的实战建议

好了,理论讲完了,说点实际的。

第一,需求一定要分层。顶层是系统需求,中间是软件需求,底层是单元需求。每一层都要有明确的负责人。

第二,需求评审不能省。我建议至少做两轮:第一轮内部评审,第二轮客户评审。评审时,把开发、测试、系统工程师都叫上。别怕吵架,吵出来的需求才靠谱。

第三,需求变更要走流程。哪怕只是改一个字,也要走变更申请。不然,你永远不知道谁在什么时候改了什么东西。

最后,送你一句话:需求分析花的时间,会在开发阶段十倍地省回来。别急着写代码,先把需求理清楚。

下一章,我们聊聊系统架构设计。到时候,我会拿一个真实的变速箱控制架构出来,咱们一起拆解。