2、测试覆盖度概念:覆盖度的定义、为什么覆盖度重要、常见的覆盖度类型

好,咱们正式开始聊覆盖度。

说实话,我见过不少测试工程师,一上来就闷头写用例。写了几百条,自我感觉良好。结果项目一跑,关键问题没发现。为什么?因为覆盖度不够。你想想看,你测试了100个点,但系统有1000个点,那漏掉的那900个点,就是定时炸弹。

2.1 覆盖度的定义

覆盖度,说白了就是——你的测试到底测了多大范围

用公式表达就是:

覆盖度 = (已测试项 / 总需测试项) × 100%

举个例子。一个ECU有50条需求,你写了用例覆盖了40条。那需求覆盖度就是80%。

嗯,这里要注意。覆盖度不是越高越好。100%覆盖度有时候是伪命题。我在项目中遇到过,客户要求需求覆盖度必须100%。结果团队为了凑数,写了很多“假用例”——测了等于没测。这其实是在自欺欺人。

核心观点:覆盖度是衡量测试完整性的尺子。但它不是目标,而是手段。

2.2 为什么覆盖度重要

我经常跟团队讲一句话:没有覆盖度,你就是在盲测

为什么这么说?三个原因:

  1. 风险控制——覆盖度低,意味着风险高。你漏掉的那部分,可能就是出问题的地方。我以前做过一个BMS项目,接口覆盖度只做了60%。结果量产前发现一个CAN信号没测,导致过压保护没触发。差点召回。
  2. 资源分配——覆盖度数据能告诉你,哪里测够了,哪里还缺。我习惯在每个测试阶段结束时,拉一张覆盖度热力图。红色区域就是薄弱环节,重点补。
  3. 质量信心——客户问“你们测全了吗?”你不能说“我觉得差不多了”。你得拿出数据。覆盖度报告,就是你的底气。

个人经验:我建议每个项目都设一个覆盖度基线。比如需求覆盖度不低于95%,接口覆盖度不低于90%。低于这个线,不允许进入下一阶段。这招很管用。

2.3 常见的覆盖度类型

覆盖度不是只有一种。我把它分成三类,也是HIL测试中最常用的:

2.3.1 需求覆盖度

这是最基础的。每个需求对应至少一条测试用例。

怎么做?我习惯用需求追溯矩阵。把需求ID和用例ID一一对应起来。

需求ID 需求描述 用例ID 覆盖状态
REQ-001 车速超过120km/h时报警 TC-001, TC-002 已覆盖
REQ-002 电池温度超过60°C时降功率 TC-003 已覆盖
REQ-003 故障码存储功能 未覆盖

你看,一眼就能看出REQ-003还没测。这就是需求覆盖度的价值。

避坑指南:我曾经犯过一个错——只关注正向需求,忽略了负向需求。比如“系统不应该在XX情况下触发报警”。这种需求也要覆盖。否则,你测的都是“正常情况”,异常场景全漏了。

2.3.2 代码覆盖度

这个在HIL测试里,很多人觉得没必要。其实不然。

代码覆盖度看的是:你的测试用例,执行到了多少代码路径。

常见的有:

  • 语句覆盖——每行代码至少执行一次
  • 分支覆盖——每个if-else分支都走到
  • MC/DC覆盖——每个条件独立影响结果

我举个例子。有一段代码:

if (车速 > 120 && 安全带未系) {
    报警();
} else {
    不报警();
}

如果你只测了“车速>120且安全带未系”的情况,那语句覆盖是100%。但分支覆盖呢?else分支没走到。MC/DC呢?安全带系了但车速超了的情况也没测。

所以,代码覆盖度能帮你发现“你以为测了,其实没测”的盲区。

我的习惯:在HIL测试中,我一般要求语句覆盖不低于90%,分支覆盖不低于80%。MC/DC看项目复杂度,安全关键功能必须做。

2.3.3 接口覆盖度

这个在HIL测试里,我个人觉得是最容易被忽视的。

接口覆盖度,测的是:所有输入输出信号,是否都被测试到了

包括:

  • 数字输入(DI)——高低电平、PWM、频率
  • 模拟输入(AI)——电压、电流、电阻
  • CAN/LIN信号——报文ID、信号值、周期、校验
  • 输出信号——驱动负载、故障注入

我做过一个项目,接口覆盖度只有70%。结果发现有一个模拟输入通道从来没被激励过。那个通道是油位传感器。后来实车测试,油位显示不准。查了半天,原来是HIL测试时根本没测那个通道。

关键点:接口覆盖度要关注“每个引脚、每个信号、每个报文”。不是测了CAN通信就算覆盖了。你得确认每个信号值都变过、每个故障模式都注入过。

2.4 三种覆盖度的关系

你可能会问:这三种覆盖度,哪个更重要?

我的答案是:都重要,但层次不同

  • 需求覆盖度——告诉你“该测的测了没”
  • 代码覆盖度——告诉你“测得到底深不深”
  • 接口覆盖度——告诉你“硬件通道通不通”

我习惯这样用:先保证需求覆盖度达标,再用接口覆盖度确认硬件通道全通,最后用代码覆盖度查漏补缺。三步走,基本不会出大问题。

一个小技巧:我每次做完一轮测试,都会生成一张“覆盖度三合一报告”。把需求、代码、接口的覆盖度放在一张图上。哪里是短板,一目了然。这招在项目评审会上特别有用,客户看了也放心。

好了,覆盖度的概念就聊到这儿。下一章咱们聊聊怎么具体提升覆盖度,有哪些实操方法。到时候我会分享一些我踩过的坑和总结的技巧。