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 组合使用
在实际项目中,我通常把等价类和边界值结合起来用。步骤是这样的:
- 先划分等价类(有效、无效)
- 在每个等价类里,取边界值
- 在每个等价类里,取一个中间值
- 组合成测试用例
举个例子,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个用例就覆盖了边界、正常和异常场景。效率非常高。
好,这一章就讲到这里。下一章,我们会深入讲测试环境的搭建,包括HIL台架、CANoe配置、传感器模拟器等。到时候我会分享一些我在搭建环境时踩过的坑,保证实用。