2. 测试基础理论:金字塔、V模型与测试类型
做ADAS测试这几年,我越来越觉得——测试不是最后才做的事。它应该从一开始就参与进来。今天聊的三个概念:测试金字塔、V模型开发流程、还有那些测试类型,说白了就是帮你回答三个问题:测什么?什么时候测?怎么测?
核心观点:测试不是“验证”,而是“设计”。好的测试策略,从需求阶段就已经开始了。
2.1 测试金字塔模型
Mike Cohn提出的测试金字塔,在ADAS领域特别实用。它把测试分成三层,越往下越细、越便宜、越容易自动化。
我个人习惯把金字塔倒过来看——越往上的测试,越接近真实场景,但也越贵、越慢。举个例子,一个AEB功能:
- 单元测试:测单个传感器的目标检测算法,跑一次几毫秒
- 集成测试:测传感器融合模块和决策模块的配合,跑一次几秒
- 系统测试:整车在环测试,跑一个场景可能要几分钟甚至更久
我的经验:很多团队在金字塔尖上花太多时间。其实底层单元测试每发现一个bug,修复成本只有顶层的十分之一。我在一个项目中见过,系统测试阶段才发现一个标定参数错误,改完重新跑整车测试,三天就过去了。如果单元测试能覆盖,十分钟搞定。
2.2 V模型开发流程
V模型在汽车行业用得特别多。它把开发和测试对应起来,左边是设计,右边是验证。你想想看,这其实就是在说:测试计划应该在写代码之前就定好。
V模型的关键在于“对应关系”。系统需求分析阶段,就要开始写验收测试用例。架构设计阶段,系统测试用例就要定下来。这样做的好处是——测试不是事后补的,而是从一开始就参与设计。
避坑指南:我曾经在一个项目中,团队把V模型理解成“先开发完再测试”。结果系统测试阶段发现架构设计有缺陷,改起来几乎等于重做。V模型的精髓是“左移”——测试活动要向左边的开发阶段移动,越早介入越好。
2.3 测试类型详解
测试类型按粒度分,主要有四种。在ADAS领域,每种类型都有它的独特之处。
| 测试类型 | 测试对象 | ADAS典型场景 | 执行频率 |
|---|---|---|---|
| 单元测试 | 函数、类、模块 | 车道线检测算法、卡尔曼滤波 | 每次提交 |
| 集成测试 | 模块间接口 | 传感器融合、CAN信号解析 | 每日构建 |
| 系统测试 | 完整系统 | AEB、ACC、LKA全场景 | 每周/每版本 |
| 验收测试 | 整车/客户需求 | Euro NCAP场景、客户路试 | 每版本/里程碑 |
2.3.1 单元测试
单元测试测的是最小可测试单元。在ADAS里,可能是一个目标跟踪算法、一个信号滤波函数、或者一个状态机转换逻辑。
// 示例:AEB决策模块的单元测试
void test_AEB_trigger_when_TTC_less_than_threshold() {
// 给定:TTC = 1.2s,阈值 = 1.5s
float ttc = 1.2f;
float threshold = 1.5f;
// 执行:判断是否触发AEB
bool result = AEB_decision(ttc, threshold);
// 验证:应该触发
assert(result == true);
}
我的习惯:单元测试要覆盖边界值。比如TTC刚好等于阈值、传感器丢帧、信号跳变这些情况。我在一个项目中,就是因为单元测试没覆盖传感器丢帧场景,导致集成测试阶段才发现一个空指针崩溃。
2.3.2 集成测试
集成测试关注的是模块之间的配合。ADAS系统里,传感器融合模块和决策模块的接口、控制模块和执行器的通信,都是集成测试的重点。
- 数据流测试:检查传感器数据能否正确传递到决策模块
- 时序测试:验证各模块的时钟同步和延迟是否在容忍范围内
- 异常处理:模拟某个模块失效,看系统如何降级
2.3.3 系统测试
系统测试是ADAS测试的重头戏。它要在完整的系统上验证功能、性能和安全性。说白了,就是让车跑起来,看它能不能应对真实世界的各种情况。
系统测试的核心场景:
- 标准场景:Euro NCAP、ISO 26262定义的测试场景
- 边缘场景:恶劣天气、低光照、复杂路口
- 失效场景:传感器遮挡、GPS信号丢失、CAN总线故障
2.3.4 验收测试
验收测试是最后一道关。它回答的问题是:这个系统真的满足客户需求吗?在ADAS领域,验收测试通常包括:
- 功能验收:逐条核对需求规格书中的功能点
- 性能验收:在标准测试场跑一遍性能指标
- 法规验收:满足各国法规要求(比如UN R152对AEB的要求)
- 用户体验验收:让真实驾驶员在典型场景中试驾
我曾经踩过的坑:有一次验收测试时,客户发现AEB在雨天误触发。我们查了很久,发现是单元测试和集成测试都没覆盖雨天场景。从那以后,我要求所有测试类型都必须包含至少一个“恶劣环境”用例。
2.4 三种模型的关系
测试金字塔、V模型、测试类型,这三者不是孤立的。它们共同构成了ADAS测试的策略框架:
- 金字塔告诉你测试的分布比例——底层多、上层少
- V模型告诉你测试的时间点——左移、对应、尽早
- 测试类型告诉你测试的具体内容——单元、集成、系统、验收
我个人习惯把这三者画在一张图上。金字塔的每一层对应V模型的一个阶段,而每个阶段又对应特定的测试类型。这样,整个测试策略就清晰了。
一个实用的建议:刚开始做ADAS测试的团队,先别追求完美。先把单元测试和系统测试做起来,中间层慢慢补。我见过太多团队一上来就想搞全场景系统测试,结果底层bug一堆,跑都跑不通。