3、测试策略与计划制定:基于风险的测试策略、测试计划模板、测试用例设计方法(等价类、边界值)

好,我们进入第三章。这一章讲的是测试策略与计划制定。说实话,很多工程师觉得这步是「虚的」,不如直接写代码、跑测试来得实在。但我做了这么多年项目,可以负责任地告诉你:测试策略没想清楚,后面全是坑

尤其是ABS这种安全关键系统。你想想看,一个轮速传感器信号异常,可能导致制动压力误调节。这种问题如果在路试阶段才发现,改起来成本高得吓人。所以,咱们得从一开始就把测试策略定好。

3.1 基于风险的测试策略

什么叫基于风险的测试策略?说白了就是:把有限的测试资源,花在最容易出问题、出了问题最要命的地方

ABS系统里,哪些地方风险高?我列几个典型的:

  • 轮速信号处理:信号抖动、丢帧、毛刺,这些在实车上太常见了。我在项目中遇到过,一个轮速传感器因为线束屏蔽层接地不良,导致信号偶尔跳变,ABS在干燥路面上莫名其妙介入。查了整整两周。
  • 液压调节单元控制:电磁阀的开关时序、PWM占空比精度,直接影响制动压力调节的平顺性。
  • 故障诊断与降级策略:系统检测到故障后,能不能安全降级?降级后制动性能还能不能保证?
  • 通信接口:CAN总线上的报文周期、信号超时、校验错误处理。

我个人的习惯是,先做一个风险矩阵。横轴是「发生概率」,纵轴是「影响严重度」。每个功能模块打一个分,然后按分数高低排优先级。

风险等级 描述 测试策略
高(H) 发生概率高,影响严重 全覆盖测试 + 自动化回归
中(M) 发生概率中等,影响可控 关键场景测试 + 抽样
低(L) 发生概率低,影响轻微 冒烟测试 + 人工抽检

嗯,这里要注意:风险等级不是一成不变的。随着测试的深入,你可能会发现新的高风险区域。所以,我建议每轮测试结束后,重新评估一次风险矩阵。

3.2 测试计划模板

测试计划这东西,每个公司都有自己的模板。但核心要素其实就那几个。我分享一个我常用的模板结构,你可以直接拿来改:

# ABS系统级软件集成测试计划

## 1. 测试范围
- 包含的功能模块:轮速信号采集、液压调节控制、故障诊断、CAN通信
- 不包含:硬件在环(HIL)测试、整车路试

## 2. 测试环境
- 软件:Simulink模型、TargetLink代码、Vector CANoe
- 硬件:TC277开发板、轮速传感器模拟器、液压单元负载箱

## 3. 测试策略
- 基于风险:高风险模块全覆盖,中风险关键场景,低风险冒烟
- 测试类型:功能测试、接口测试、边界测试、异常测试

## 4. 测试用例清单
- 用例编号:TC-ABS-001 ~ TC-ABS-200
- 用例管理工具:TestRail

## 5. 测试执行计划
- 第一轮:功能验证(2周)
- 第二轮:边界与异常测试(1周)
- 第三轮:回归测试(1周)

## 6. 通过/失败准则
- 所有高风险用例通过率100%
- 中风险用例通过率≥95%
- 无严重或致命缺陷

## 7. 交付物
- 测试报告(含缺陷清单)
- 测试日志
- 测试环境配置说明

这个模板看起来简单,但够用。我建议你根据项目实际情况调整。比如,如果你们用Jira管理缺陷,那就在「缺陷管理」那一节写清楚流程。

小技巧: 测试计划里一定要写清楚「不测试什么」。我在项目中吃过亏,客户以为我们测了整车级功能,其实我们只测了软件集成。后来在验收时闹了误会。所以,明确边界比明确范围更重要

3.3 测试用例设计方法

测试用例设计,是测试工作的核心。方法很多,但最常用、最实用的就是等价类划分边界值分析。这两个方法,说白了就是帮你「偷懒」——用最少的用例,覆盖最多的场景。

3.3.1 等价类划分

等价类的思想很简单:把输入域分成若干「等价类」,每个等价类里的值,对程序的行为影响是一样的。你只需要从每个等价类里选一个代表值来测试就行了。

举个例子,ABS系统的轮速信号输入范围是0~300 km/h。我们可以这样划分:

  • 有效等价类:0 ~ 300 km/h(正常车速范围)
  • 无效等价类:< 0 km/h(负值,不可能出现)
  • 无效等价类:> 300 km/h(超出传感器量程)

那测试用例就可以设计成:

  • 输入50 km/h(有效类)
  • 输入-10 km/h(无效类)
  • 输入350 km/h(无效类)

你看,三个用例就覆盖了所有情况。如果不做等价类划分,你可能要测0、1、2、3……一直到300,那得测到什么时候?

注意: 等价类划分的前提是,你必须理解程序的逻辑。我曾经见过一个同事,把轮速信号按「奇数和偶数」划分等价类,结果测了半天,发现程序根本不区分奇偶。这就是典型的「为了划分而划分」,没有意义。

3.3.2 边界值分析

边界值分析,是等价类划分的「好搭档」。经验告诉我们,程序最容易在边界处出错。比如,轮速信号在0 km/h附近,或者刚好300 km/h时,处理逻辑可能有问题。

边界值分析的原则是:取每个等价类的边界值,以及边界值两侧的值。还是用轮速信号的例子:

  • 下边界:0 km/h
  • 下边界内侧:1 km/h
  • 下边界外侧:-1 km/h
  • 上边界:300 km/h
  • 上边界内侧:299 km/h
  • 上边界外侧:301 km/h

这样,我们就能设计出6个边界测试用例。再加上等价类的中间值,总共7个用例,就能把轮速信号输入这个功能测得很透了。

我记得有一次,测试ABS的液压调节单元控制。电磁阀的PWM占空比范围是0%~100%。我们用边界值法测了0%、1%、99%、100%,结果发现占空比在100%时,电磁阀驱动芯片会过热保护。这个问题,如果只测中间值,根本发现不了。

3.3.3 组合使用

在实际项目中,我通常把等价类和边界值结合起来用。步骤是这样的:

  1. 先划分等价类(有效、无效)
  2. 在每个等价类里,取边界值
  3. 在每个等价类里,取一个中间值
  4. 组合成测试用例

举个例子,ABS系统的制动压力控制,输入是目标压力(0~200 bar)和实际压力(0~200 bar)。我们可以这样设计:

用例编号 目标压力 (bar) 实际压力 (bar) 预期结果
TC-ABS-101 0 0 不调节
TC-ABS-102 0 100 减压
TC-ABS-103 200 0 增压
TC-ABS-104 200 200 保压
TC-ABS-105 100 50 增压
TC-ABS-106 -10 50 错误处理

你看,6个用例就覆盖了边界、正常和异常场景。效率非常高。

核心总结: 基于风险的测试策略帮你「选对方向」,等价类和边界值帮你「高效执行」。两者结合,才能做出高质量的ABS系统级软件集成测试。

好,这一章就讲到这里。下一章,我们会深入讲测试环境的搭建,包括HIL台架、CANoe配置、传感器模拟器等。到时候我会分享一些我在搭建环境时踩过的坑,保证实用。