3. 需求追溯体系的基本概念

在汽车电子与 CANoe 测试项目中,需求追溯体系解决的核心问题是:每一个需求是否被测试覆盖、每一次测试执行对应哪条需求、每一个缺陷又回落到哪条需求或哪个测试用例。如果缺少这条链路,测试报告只能证明“测过”,却无法证明“需求被验证过”。追溯体系就是把需求、测试用例、测试结果、缺陷四类对象用可双向查询的关系连接起来,使覆盖率和影响分析可计算、可审计。

四类追溯对象及其关键属性

追溯体系中的四类对象并不是简单的文档,而是带有唯一标识和属性的可管理条目。在 CANoe 项目中,它们通常以需求管理工具(如 DOORS、Polarion、Jama)与测试管理工具(如 CANoe Test Feature Set、vTESTstudio、TestRail)之间的映射形式存在。

  • 需求(Requirement):唯一 ID(如 REQ-BCM-012)、需求文本、验收准则、优先级、版本、所属变体。验收准则是判断测试通过与否的最终依据。
  • 测试用例(Test Case):唯一 ID(如 TC-BCM-012-01)、前置条件、测试步骤、期望结果、关联需求 ID、执行环境(CANoe 配置、DBC、节点仿真)。
  • 测试结果(Test Result):一次执行的记录,包含用例 ID、执行时间、结果状态(Pass/Fail/Blocked/Not Run)、实测值、日志路径、CANoe 报告引用。
  • 缺陷(Defect):唯一 ID(如 BUG-2043)、发现该缺陷的测试结果、关联需求或测试用例、严重度、状态、修复版本。

四类对象之间的追溯链路可以概括为:需求 → 测试用例 → 测试结果 → 缺陷,并且缺陷可以反向指回需求或测试用例。正向追溯回答“这条需求被哪些用例覆盖、执行结果如何”;反向追溯回答“这个缺陷影响哪条需求、需要补测哪些用例”。

需求追溯链路与追溯矩阵(正向 / 反向) 需求 Requirement REQ-BCM-012 验收准则 / 优先级 版本 / 变体 状态:已评审 测试用例 Test Case TC-BCM-012-01 前置条件 / 步骤 期望结果 CANoe 配置 / DBC 测试结果 Test Result 执行时间 / 环境 状态:Pass / Fail 实测值 / 日志路径 CANoe 报告引用 缺陷 Defect BUG-2043 严重度 / 状态 关联需求 / 用例 修复版本 覆盖 执行 Fail 触发 反向追溯:影响需求 回指用例 追溯矩阵(RTM)片段 需求 ID 测试用例 ID 最近结果 缺陷 ID 覆盖状态 REQ-BCM-012 TC-BCM-012-01 Fail BUG-2043 已覆盖

追溯链路的建立方式

追溯链路不是事后补写的表格,而是在需求评审通过后、测试用例设计阶段就同步建立的。以一条车身控制器需求为例:REQ-BCM-012 要求“车速大于 20 km/h 时,车门未关报警应在 200 ms 内触发”。测试工程师据此设计用例 TC-BCM-012-01,在 CANoe 中通过 CAPL 脚本模拟车速信号从 0 阶跃到 25 km/h,并监测报警信号的响应时间。

用例设计完成后,在测试管理工具中把 TC-BCM-012-01 与 REQ-BCM-012 建立“验证”关系。执行测试时,CANoe 生成测试报告,报告中的用例 ID 与结果状态被回写到测试结果对象。如果结果为 Fail,则创建缺陷 BUG-2043,并在缺陷中填写“发现于 TC-BCM-012-01”和“影响 REQ-BCM-012”。这样,从需求出发可以查到用例、结果、缺陷;从缺陷出发也可以反查到需求和用例。

追溯关系的方向约定:本文统一采用“需求 → 测试用例 → 测试结果 → 缺陷”为正向追溯,缺陷指回需求或用例为反向追溯。在工具中建立链接时,应保持方向一致,避免同一关系被重复记录为两条相反方向的链接。

追溯矩阵的字段与填写规则

追溯矩阵(RTM,Requirement Traceability Matrix)是追溯链路的表格化呈现。它的每一行通常对应一条需求,列则展开该需求关联的用例、结果、缺陷和覆盖状态。一个可用的 RTM 至少应包含以下字段:

字段 含义 填写规则
需求 ID 需求唯一标识 与需求管理工具一致,不手工改写
需求版本 需求当前基线版本 需求变更后必须更新,并触发用例复审
测试用例 ID 覆盖该需求的用例 一条需求可对应多个用例,一行拆多行或用逗号分隔
最近结果 最近一次执行状态 Pass / Fail / Blocked / Not Run,取最新执行记录
缺陷 ID 由该用例发现的缺陷 仅填未关闭缺陷;已关闭缺陷可保留但标注状态
覆盖状态 需求是否被有效验证 已覆盖 / 部分覆盖 / 未覆盖,依据用例执行结果判定

填写 RTM 时最容易出现的问题是“只填用例 ID,不填结果和缺陷”。这样矩阵只能证明用例存在,不能证明需求被验证。正确的做法是:每次测试执行后,用脚本或工具接口把测试结果回写到 RTM 的“最近结果”列;当结果为 Fail 时,同步在“缺陷 ID”列填入缺陷编号。覆盖状态则根据结果自动计算:全部关联用例最近结果为 Pass 记为“已覆盖”;存在 Fail 或 Blocked 记为“部分覆盖”;无用例或全部 Not Run 记为“未覆盖”。

追溯体系在 CANoe 项目中的落地要点

在 CANoe 环境中落地追溯体系,需要把测试用例的标识与 CANoe 报告中的用例名称对齐。常见做法是在 vTESTstudio 或 CANoe Test Feature Set 中,把用例名称命名为与测试管理工具一致的 ID,例如 TC-BCM-012-01,这样生成的 XML/HTML 报告可以直接被解析并回写到 RTM。CAPL 脚本中也可以通过 TestReportAddExtendedInfo 之类的接口写入需求 ID,使报告本身携带追溯信息。

// CAPL 示例:在测试报告中写入需求追溯信息
testcase TC_BCM_012_01()
{
  TestReportAddExtendedInfo("Requirement", "REQ-BCM-012");
  TestReportAddExtendedInfo("TestCase", "TC-BCM-012-01");

  // 模拟车速从 0 阶跃到 25 km/h
  sysvar::VehicleSpeed = 0;
  testWaitForTimeout(100);
  sysvar::VehicleSpeed = 25;

  // 监测报警信号响应时间
  if (testWaitForSignalEvent(DoorAlarm, 1, 200) == 1)
  {
    TestStepPass("报警在 200 ms 内触发");
  }
  else
  {
    TestStepFail("报警未在 200 ms 内触发");
  }
}

这段脚本执行后,CANoe 报告会同时包含用例 ID、需求 ID 和 Pass/Fail 结果。测试工程师只需把报告解析结果导入 RTM,即可完成一次追溯闭环。若结果为 Fail,则创建缺陷并填写关联需求与用例,缺陷修复后重新执行同一用例,RTM 中的“最近结果”和“缺陷 ID”随之更新。

需求变更后,必须检查 RTM 中该需求关联的用例是否仍然有效。如果需求验收准则发生变化,旧用例可能不再覆盖新准则,此时应把覆盖状态改为“部分覆盖”,并补充或修改用例,而不是直接沿用旧结果。

追溯链路的价值:从覆盖率到影响分析

建立追溯链路后,项目可以获得两类关键能力。第一是覆盖率计算:按需求统计“已覆盖 / 总需求”,得到需求覆盖率;按用例统计“已执行 / 总用例”,得到测试执行率。两者结合可以判断项目是否具备交付条件。第二是影响分析:当某条需求变更或某个缺陷修复时,沿追溯链路可以快速定位受影响的用例、需要重测的结果以及可能受牵连的其他需求。

例如,REQ-BCM-012 的响应时间从 200 ms 收紧到 150 ms,沿正向链路可以查到 TC-BCM-012-01 需要修改期望值并重测;沿反向链路可以查到 BUG-2043 是否与该需求相关,避免遗漏回归验证。追溯体系的意义正在于此:它让测试报告从“结果记录”升级为“需求验证证据”,让缺陷从“孤立问题”变成“可定位、可回归、可审计的追溯节点”。