3、覆盖度度量方法:如何量化覆盖度、覆盖度计算公式、覆盖度报告的解读

好,咱们接着聊。前面两章我们讲了覆盖度的概念和策略,那问题来了——你怎么知道你做的覆盖度到底够不够?

说白了,你得有个尺子去量。这个尺子,就是覆盖度度量方法。

我见过不少工程师,测试做了一大堆,报告也出了,但一问覆盖度多少,支支吾吾说不清楚。嗯,这就是我们今天要解决的问题。

3.1 覆盖度量化:从定性到定量的跨越

我个人习惯,做任何事之前先想清楚怎么衡量。HIL测试也一样。

覆盖度量化,就是把「测得好不好」这个模糊概念,变成具体的数字。你想想看,没有数字,你怎么跟项目经理汇报?怎么跟客户证明你的测试是充分的?

常见的量化维度有这么几个:

  • 需求覆盖度:每个功能需求是否都有对应的测试用例
  • 信号覆盖度:所有IO信号、总线信号是否都被测试到
  • 工况覆盖度:各种驾驶工况、环境条件是否都覆盖了
  • 故障覆盖度:故障注入的测试是否全面

我在项目中遇到过,有个同事只盯着需求覆盖度,结果信号覆盖度只有60%。后来实车测试时,有个没测到的信号出了问题,返工成本高得吓人。所以,这几个维度一个都不能少。

3.2 覆盖度计算公式:别怕,其实很简单

很多人一看到公式就头疼。别担心,覆盖度的计算没那么复杂。

最基本的公式就一个:

覆盖度 = (已覆盖项数量 / 总需覆盖项数量) × 100%

就这么简单。但关键在于「总需覆盖项」怎么定义。

我给大家拆解一下几个常用公式:

覆盖度类型 计算公式 说明
需求覆盖度 已测试需求数 / 总需求数 × 100% 最基础,但不够
信号覆盖度 已测试信号数 / 总信号数 × 100% 注意区分输入输出
工况覆盖度 已测试工况数 / 总工况数 × 100% 工况矩阵要提前定义好
边界覆盖度 已测试边界值数 / 总边界值数 × 100% 这个容易被忽略

举个例子。假设一个BMS项目,总共有120个功能需求,你写了100个测试用例覆盖了这些需求。那需求覆盖度就是:

需求覆盖度 = 100 / 120 × 100% = 83.3%

看起来还行?别急,这只是最基础的。

避坑指南:我曾经犯过一个错误——只算需求覆盖度,觉得83%差不多了。结果发现,每个需求只测了一个典型工况,边界条件全没测。后来被评审专家问住了,那个尴尬啊...所以,一定要多维度计算。

3.3 加权覆盖度:更科学的度量方式

你想想看,所有需求的重要性是一样的吗?当然不是。

安全相关的需求,比如刹车、转向,肯定比娱乐系统的需求重要得多。所以,我建议用加权覆盖度。

公式长这样:

加权覆盖度 = Σ(单项覆盖度 × 权重) / Σ权重 × 100%

举个例子:

需求类别 需求数 已测试 覆盖度 权重 加权得分
安全类 30 30 100% 5 500
功能类 60 50 83.3% 3 250
舒适类 30 20 66.7% 1 66.7
加权覆盖度 = (500 + 250 + 66.7) / (30×5 + 60×3 + 30×1) × 100%
            = 816.7 / 360 × 100%
            = 88.5%

你看,安全类全测了,加权后整体覆盖度就上去了。这才是真实反映了测试的侧重点。

我的习惯:权重怎么定?我一般和系统工程师、功能安全工程师一起开会定。安全类权重5,功能类3,舒适类1。这个比例可以根据项目调整,但一定要达成共识。

3.4 覆盖度报告解读:别只看数字

报告出来了,数字摆在那。然后呢?

我见过太多人,看一眼覆盖度90%,就觉得万事大吉了。其实,报告里藏着很多信息。

解读报告,我一般看这几个点:

  1. 整体覆盖度:先看大数,心里有个底
  2. 各维度分布:需求、信号、工况、故障,哪个低了要重点关注
  3. 未覆盖项分析:为什么没覆盖?是漏了还是测不了?
  4. 趋势变化:和上一轮测试比,覆盖度是升了还是降了?

举个例子,我最近看的一份报告:

整体覆盖度:92.3%
- 需求覆盖度:95.1%
- 信号覆盖度:88.7%
- 工况覆盖度:91.2%
- 故障覆盖度:85.6%

未覆盖项分析:
- 信号覆盖:3个CAN信号未测试(原因:测试环境未配置)
- 故障覆盖:2个传感器短路故障未测试(原因:故障注入设备不支持)

你看,整体92.3%看起来不错。但仔细一看,故障覆盖度只有85.6%,而且有2个故障根本测不了。这说明什么?说明测试环境有缺陷,需要升级设备或者找替代方案。

重点:覆盖度报告不是终点,而是起点。它告诉你哪里还有坑,下一步该往哪使劲。

3.5 实战中的度量陷阱

做了这么多年HIL,我总结几个常见的度量陷阱:

  • 陷阱一:只算数量不算质量——100个用例测同一个功能,覆盖度100%,但其他功能全漏了。这有什么意义?
  • 陷阱二:忽略重复覆盖——多个用例覆盖同一个点,算覆盖度时重复计算。我建议去重后再算。
  • 陷阱三:边界条件不纳入计算——很多工具默认只算功能覆盖,边界值、异常值不算。你得手动加上。
  • 陷阱四:静态覆盖度代替动态——用例写好了,但没执行或者执行失败了,也算覆盖?当然不算。

嗯,这里要注意。我见过一个项目,报告上覆盖度98%,结果实车测试时出了大问题。后来一查,那98%里有一半的用例根本没执行成功,只是用例写好了而已。你说坑不坑?

3.6 我的度量流程建议

最后,分享一个我常用的度量流程:

  1. 定义度量维度:和团队一起确定要量哪些维度
  2. 建立基线:明确总需覆盖项有哪些
  3. 自动化采集:用工具自动统计,别手动算
  4. 定期生成报告:我习惯每周出一份覆盖度报告
  5. 评审与改进:针对低覆盖度项,制定改进计划

说白了,覆盖度度量不是一次性工作,而是持续改进的过程。你每次迭代都看看覆盖度有没有提升,哪里还有短板,这样才能真正把HIL测试做好。

好,这一章就到这里。下一章我们聊聊如何通过测试用例设计来提升覆盖度,那才是真正的硬功夫。