第二章:追溯矩阵基础概念
什么是追溯矩阵?
追溯矩阵,说白了就是一张“谁跟谁有关系”的表格。
我习惯把它想象成一个大型项目的通讯录。你想想看,一个汽车电子系统里,有需求、有设计文档、有代码、有测试用例……这些东西之间不是孤立的。需求A催生了设计B,设计B又变成了代码C,代码C被测试用例D验证。追溯矩阵就是把这些关系一一记录下来。
举个例子,我参与过一个车身控制模块的项目。当时客户提了个需求:“车窗防夹功能要在10毫秒内响应”。这个需求必须追溯到对应的软件设计、代码实现、还有测试用例。如果没有追溯矩阵,你根本不知道哪个测试用例是专门验证这个需求的。
所以,追溯矩阵本质上是一个关系映射表。它告诉你:
- 每个需求对应哪些设计元素
- 每个设计元素对应哪些代码模块
- 每个代码模块对应哪些测试用例
- 反过来,每个测试用例验证了哪个需求
为什么需要它?
这个问题我经常被问到。有人觉得追溯矩阵是“形式主义”,是给审核员看的。嗯,我以前也这么想过,直到踩了坑。
我曾经负责一个ADAS(高级驾驶辅助系统)的项目。项目做到一半,客户突然说:“这个功能的需求变了,你们得改。” 当时团队里一片混乱。因为没有追溯矩阵,我们根本不知道这个需求影响了哪些设计、哪些代码、哪些测试。结果呢?改了一个地方,漏了三个地方。最后测试阶段才发现问题,返工成本高得吓人。
所以,追溯矩阵的核心价值在于:
- 变更影响分析:需求变了,你能立刻知道哪些地方要跟着改
- 覆盖率检查:确保每个需求都被实现了,每个实现都被测试了
- 合规性证明:ASPICE审核时,审核员会直接问:“你的追溯矩阵在哪?”
- 问题定位:测试失败了,你能顺着追溯链找到是哪个需求或设计出了问题
核心观点:没有追溯矩阵的项目,就像没有地图的旅行。你可能会到终点,但过程一定充满不确定性。
核心术语:工件、链接、覆盖度
追溯矩阵里有三个核心概念,我一个个说。
1. 工件(Artifact)
工件就是你在开发过程中产生的任何“东西”。说白了,就是文档、代码、模型、测试用例等等。
常见的工件包括:
- 系统需求规格书
- 软件需求规格书
- 软件架构设计文档
- 详细设计文档
- 源代码文件
- 单元测试用例
- 集成测试用例
- 系统测试用例
每个工件都有一个唯一的标识符。我习惯用“项目名_类型_编号”的格式,比如“BCM_SRS_001”表示车身控制模块的系统需求第1条。
小技巧:给工件命名时,尽量保持简洁且有意义。别用“需求1”、“需求2”这种名字,项目大了根本分不清。
2. 链接(Link)
链接就是工件之间的关系。它告诉你“A跟B有关系”。
链接的类型通常有:
- 正向追溯:从需求到设计,再到代码,再到测试。比如“需求R1 → 设计D1 → 代码C1 → 测试T1”
- 反向追溯:从测试往回找,看它验证了哪个需求。比如“测试T1 → 代码C1 → 设计D1 → 需求R1”
- 水平追溯:同一层级之间的关联,比如需求之间的依赖关系
我记得有一次审核,审核员问我:“这个测试用例到底验证了哪个需求?” 我打开追溯矩阵,顺着反向链接一查,3秒钟就给出了答案。审核员当场就满意了。
链接的表示方式也很简单,通常就是一张表:
| 源工件 | 链接类型 | 目标工件 |
|---|---|---|
| SRS_001 | 正向追溯 | SDD_001 |
| SDD_001 | 正向追溯 | CODE_001 |
| CODE_001 | 正向追溯 | TEST_001 |
| TEST_001 | 反向追溯 | SRS_001 |
3. 覆盖度(Coverage)
覆盖度是个量化指标。它告诉你“追溯得够不够全”。
常见的覆盖度指标有:
- 需求覆盖度:有多少需求被追溯到了设计和测试?理想情况是100%
- 测试覆盖度:有多少代码或功能被测试用例覆盖了?
- 双向覆盖度:每个需求都有对应的测试,每个测试都对应某个需求
注意:覆盖度不是越高越好,但低于80%基本就是不合格。我曾经见过一个项目,需求覆盖度只有60%,结果审核时被开了严重不符合项。
覆盖度的计算其实很简单。比如你有100条需求,其中95条找到了对应的测试用例,那需求覆盖度就是95%。
但这里有个坑:覆盖度只告诉你“有没有”,不告诉你“好不好”。也就是说,即使覆盖度是100%,也不代表你的测试用例写得足够好。这一点我在项目中深有体会——有一次覆盖度报表显示100%,但实际测试时还是漏了一个边界条件。
总结一下
追溯矩阵不是什么高深的东西。它就是一张关系表,记录了工件之间的链接,然后用覆盖度来衡量是否完整。
我个人建议,项目一开始就要建立追溯矩阵。别等到快审核了才临时抱佛脚。那时候你会发现,很多链接已经找不到了,很多关系已经模糊了。
嗯,下一章我会讲怎么实际搭建一个追溯矩阵,包括工具选择和具体步骤。到时候咱们再细聊。