第2章:场景库架构设计
好,咱们直接进入正题。场景库架构设计,说白了就是给V2X测试场景搭个骨架。我做了这么多年V2X,见过太多团队上来就堆场景,结果后面维护起来想死的心都有。嗯,今天咱们就把这个骨架搭明白。
2.1 场景库分层模型
我个人习惯把场景库分成三层。为什么是三层?你想想看,V2X场景太复杂了,从宏观的交通流到微观的通信延迟,全揉在一起根本没法管理。
第一层:抽象场景层
这一层只描述「发生了什么」,不关心具体参数。比如:
- 前车紧急制动
- 交叉口冲突
- 行人横穿
说白了就是场景的「故事梗概」。我在项目中遇到过,很多测试人员上来就写具体参数,结果场景复用性极差。抽象层就是解决这个问题的。
第二层:逻辑场景层
这一层开始定义参数空间。比如「前车紧急制动」这个抽象场景,在逻辑层我们会定义:
- 车速范围:30-80 km/h
- 减速度范围:3-8 m/s²
- 初始距离:20-100 m
注意,这里给的是范围,不是具体值。逻辑场景就像一张「填空题试卷」,等着具体参数来填。
第三层:具体场景层
这一层就是可执行的测试用例了。每个参数都有确定值:
# 具体场景示例
车速: 60 km/h
减速度: 5 m/s²
初始距离: 50 m
通信延迟: 20 ms
三层模型的好处很明显:抽象层方便讨论,逻辑层方便组合,具体层方便执行。我曾经见过一个团队,抽象层和逻辑层混在一起,结果每次改需求都要改几百个场景文件,那叫一个酸爽。
2.2 元数据定义
元数据是什么?就是「描述数据的数据」。每个场景都需要带上自己的「身份证」。我建议至少包含以下字段:
| 元数据字段 | 说明 | 示例 |
|---|---|---|
| 场景ID | 全局唯一标识 | SCN-2024-001234 |
| 场景名称 | 简短描述 | 前车紧急制动_高速 |
| 创建时间 | ISO 8601格式 | 2024-03-15T10:30:00Z |
| 版本号 | 语义化版本 | v2.1.0 |
| 适用标准 | 引用的标准编号 | ISO 21448, SAE J3168 |
| 测试类型 | 功能/性能/安全 | 功能 |
| 优先级 | P0-P3 | P0 |
2.3 场景分类体系
场景分类,我习惯从三个维度切:功能、性能、安全。这三个维度覆盖了V2X测试的绝大部分场景。
功能场景
功能场景验证「能不能做」。比如:
- 前向碰撞预警(FCW)能否正确触发
- 交叉口碰撞预警(ICW)能否识别冲突车辆
- 紧急车辆预警(EVW)能否正确播报
功能场景是最基础的,也是数量最多的。我建议每个V2X应用至少设计10-20个功能场景。
性能场景
性能场景验证「做得好不好」。比如:
- 通信延迟:端到端延迟是否小于100ms
- 定位精度:GNSS+IMU融合定位误差是否小于1m
- 场景刷新率:场景更新频率是否达到10Hz
性能场景往往需要反复跑,采集统计数据。我记得有一次测试通信延迟,跑了整整三天,才把不同信道条件下的延迟分布摸清楚。
安全场景
安全场景验证「出错了怎么办」。这是最容易忽略的,但也是最重要的。比如:
- 通信中断:V2X链路突然断开,系统如何降级
- 数据篡改:收到恶意伪造的BSM消息,系统能否识别
- 传感器失效:摄像头被遮挡,系统如何切换感知策略
2.4 分类体系的落地实践
光有分类还不够,还得能落地。我推荐用标签系统来管理:
# 场景标签示例
标签1: 功能_FCW_高速
标签2: 性能_延迟_城市
标签3: 安全_通信中断_隧道
每个场景可以打多个标签,方便检索和组合。比如你想跑「所有涉及隧道场景的测试」,直接搜「隧道」标签就行。
另外,我建议场景库和测试用例库分开管理。场景库是「素材」,测试用例库是「成品」。一个场景可以被多个测试用例引用,一个测试用例也可以组合多个场景。这样灵活性最高。
好了,场景库架构设计就聊到这儿。下一章咱们聊聊怎么用这些场景自动生成测试用例。说实话,那才是真正提效的地方。