4、系统需求规范(SRS):需求编写原则、需求属性定义、需求追溯矩阵、需求评审流程

好,咱们进入第四讲。系统需求规范,也就是SRS。这玩意儿说白了,就是整个制动系统的“宪法”。

我见过太多项目,最后出问题,往回一查,根子都在需求上。要么写得不清楚,要么需求本身就有矛盾。你想想看,地基没打好,上面盖的房子能稳吗?

4.1 需求编写原则

写需求不是写小说,不能有文学色彩。我个人的习惯是,一条需求拿出来,要让一个刚毕业的工程师也能看懂,而且只有一种理解方式。

核心原则就三条:

  • 唯一性: 每条需求只有一个编号,且只描述一个功能。别把“制动响应时间小于200ms且踏板力小于500N”写成一条,拆开!
  • 可验证: 写完之后问自己一句:“这玩意儿我怎么测?” 如果答不上来,那就是废纸。比如“制动感觉良好”这种话,千万别写。要写成“在0.3g减速度下,踏板行程在30mm-50mm之间”。
  • 无歧义: 避免“大概”、“可能”、“通常”这类词。我记得有一次评审,看到一条需求写“制动液位低时报警”,结果大家吵了半天——多低算低?是低于MIN线,还是低于某个百分比?后来改成了“当制动液位低于主缸储液罐MIN刻度线2mm时,点亮红色报警灯”。

避坑指南:

我曾经吃过一次亏。一条需求写“系统应具备故障诊断功能”。结果开发团队只做了被动诊断,而测试团队认为需要主动诊断。最后扯皮了两个月。所以,一定要把“诊断”的具体行为写清楚——是上电自检,还是周期性检测,还是两者都要?

4.2 需求属性定义

光把需求写出来还不够,你得给每条需求贴上“标签”。这些标签就是属性。我习惯把属性分成两类:核心属性和管理属性。

核心属性(必须要有):

属性名 说明 举例
需求ID 唯一标识,建议用层级编码 SRS-BRAKE-001
需求类型 功能/性能/接口/安全/约束 性能需求
优先级 高/中/低 或 1/2/3 高(影响安全)
来源 来自哪个上层文档或客户 客户需求文档第3.2节
状态 草稿/已评审/已批准/已变更 已批准

管理属性(建议加上):

  • 责任人: 谁写的这条需求?出了问题找谁?
  • 版本号: 需求改过几次?每次改了什么?
  • 关联风险: 这条需求如果没实现,会有什么风险?

我的小技巧:

我习惯在需求属性里加一个“验证方法”字段。比如“台架测试”、“实车测试”、“仿真分析”。这样在写测试用例的时候,直接照着这个字段来就行,省得再分析一遍。

4.3 需求追溯矩阵

需求追溯矩阵,英文叫RTM。说白了,就是一张“谁是谁的爹”的表格。

为什么要做这个?我举个例子。有一次项目后期,客户突然说要改一个制动辅助功能。我打开RTM一看,好家伙,这条需求关联了3条系统需求、5条软件需求、2条测试用例。如果没有RTM,你根本不知道这一刀砍下去会伤到谁。

RTM的核心作用:

  • 正向追溯: 从客户需求出发,能找到对应的系统需求、子系统需求、测试用例。确保每个客户要求都被覆盖了。
  • 反向追溯: 从测试用例出发,能找到它验证的是哪条需求。确保没有“无源之水”。
  • 变更影响分析: 改一条需求,立刻知道哪些设计文档、代码、测试用例需要跟着改。

RTM的格式,我一般这样写:

客户需求ID 系统需求ID 子系统需求ID 测试用例ID 验证状态
CR-001 SRS-BRAKE-001 SSR-BRAKE-001 TC-BRAKE-001 已通过
CR-001 SRS-BRAKE-002 SSR-BRAKE-002 TC-BRAKE-002 待测试
CR-002 SRS-BRAKE-003 SSR-BRAKE-003 TC-BRAKE-003 未通过

注意:

RTM不是一次性写完就完事的。它是个活文档。每次需求变更,都要同步更新RTM。我见过最惨的情况是,项目验收时发现RTM里20%的测试用例对应的需求已经删了,但测试用例还在跑。白白浪费了人力物力。

4.4 需求评审流程

需求写完了,别急着往下走。先评审。评审不是走过场,是真刀真枪地找问题。

我习惯的评审流程分三步:

  1. 个人预审: 评审会之前,把文档发给大家。每个人自己看,把问题记下来。我要求至少提前3天发,别搞“当天发当天审”这种把戏。
  2. 正式评审会: 会上不读文档,只讨论问题。作者先过一遍主要变更点,然后逐条讨论预审时收集的问题。注意,会上只做决策——这个需求改还是不改?不改的理由是什么?改的话谁负责?什么时候改完?
  3. 问题跟踪与闭环: 评审会开完,会有一堆Action Item。必须有人跟踪,直到所有问题都关闭。我一般用一张表来跟踪:
问题编号 问题描述 提出人 责任人 解决措施 状态
#001 需求SRS-BRAKE-001中“响应时间”定义不明确,未说明是从哪个信号开始计时 张三 李四 修改为“从制动踏板开关信号有效到制动主缸压力达到目标值的10%” 已关闭
#002 需求SRS-BRAKE-005与SRS-BRAKE-010存在矛盾,一个要求延时1s,一个要求立即响应 王五 李四 与客户确认后,删除SRS-BRAKE-005,统一按SRS-BRAKE-010执行 已关闭

评审时最容易踩的坑:

我曾经遇到过一个项目,评审会上大家都很客气,没人提问题。结果到了测试阶段,发现需求里漏了一条关键的性能指标——高温环境下的制动响应时间。最后只能紧急补需求,导致整个项目延期了一个月。所以,评审时一定要有人唱黑脸,专门挑刺。我建议评审组里至少有一个“毒舌”角色,专门负责找茬。

嗯,关于SRS,今天就聊这么多。记住,需求写得越清楚,后面的开发、测试、维护就越省心。别怕在需求阶段花时间,这其实是整个项目里性价比最高的投入。