【ECU-HIL 嵌入式车载软件测试学习路线和面试描述方式(1)】

ECU-HIL 嵌入式车载软件测试零基础学习路线和面试描述方式(1)

  • 目标岗位:ECU-HIL 嵌入式车载软件测试
  • 可用条件:一台电脑
  • 每天时长:3-4小时
  • 最终产出:BCM 车身控制器 HIL 测试项目(简历可直接引用)+ 30 条用例 + 6 个 Bug 案例 + 正式测试报告 + CAPL 脚本

学习路线

# 精华 来源
1 BCM 项目贯穿 14 天 + 全虚拟环境实操 + 简历直接产出 第三版核心:边学边做完整项目,工具链 CANoe → DBC → CAPL → VEOS → Linux → Jira 全覆盖
2 UDS 诊断补充 + CAN 帧结构加深 + 通信专业差异化答题 第一版 + 建议:你是通信工程专业,CAN 是天然优势,面试碾压竞争者
3 每天闭环(知识点 → 练习题 → 话术 → 复盘)+ D11 同步投简历 第二版 + 建议:面试导向学习,边投边面,面试本身就是最好的模拟

CANoe / VEOS License 风险预案

方案 工具 说明
Plan A(首选) CANoe 14 试用版 + VEOS Demo Vector 官网申请 30 天试用,确认 Virtual CAN 可用
Plan B(备选) python-can + cantools + can-utils Python 库解析 DBC、收发虚拟报文,功能等价,面试同样能说"用过"

面试话术(License 问题): "我在学习阶段用 BUSMASTER + python-can 搭建了虚拟总线环境,导入 DBC 文件完成报文收发和信号解析,入职后可以快速切换到 CANoe 正式环境。"


BCM需求文档(贯穿全周期的项目背景)

需求编号 功能描述 CAN 报文 信号 逻辑
REQ-01 上锁 0x120 Lock_Sig=1 四门落锁,近光灯关闭
REQ-02 解锁 0x120 Lock_Sig=0 四门解锁,近光灯点亮 30s 后熄灭
REQ-03 车速保护 0x120 - 车速>30 km/h 时,拒绝解锁指令
REQ-04 雨刮间歇 0x135 Wiper_Mode=1 每 3 秒摆动 1 次
REQ-05 低压保护 0x120 - 电压<9V 时,上锁报文可能丢失
REQ-06 UDS诊断 0x7DF SID=0x22 读取BCM版本信息(新增,练习UDS用)

阶段一:基础 + CAN 核心(Day1-Day5)

Day1:测试理论 + BCM 需求拆解 + 首批用例(3-4h)

核心知识点(3个,不贪多):

  1. 车载测试标准流程(面试必背)
    • 需求分析 → 测试方案 → 用例设计 → 搭建 HIL/实车环境 → 执行测试 → Bug 提交 → 回归测试 → 测试报告

为什么需要测试方案?

测试方案有很多图示,便于测试用例的设计,后续执行也方便,执行测试和路测 的时候设计用例看不懂,也可以参考测试方案。

场景举例:

ADAS(先进驾驶辅助系统)- LKA (车道保持辅助)

  1. 4 个黑盒方法(重点边界值)
  • 等价类划分:有效/无效输入分组

什么是等价类划分法?

一种用例设计方法。指所有可能的输入数据分成若干个集合,每个集合中都是对于揭露软件错误等效的少数具有代表性的数据。核心是清楚出现 bug,是哪条规则的问题。

有效:对程序需求说明有意义、合理的、正确的输入数据所构成的集合。

无效:指不合理的或无意义的输入数据所构成的集合。

"无效等价类每条只能覆盖一个"------原因是:如果一条用例同时测了"密码为空"和"密码含特殊字符",两个都报错,你分不清是哪个触发的。

如何使用等价类划分设计用例?

总结:按数据范围、数据类型、为空、需求规则约束角度划分等价类,并规定唯一编号

设计测试用例,每一条尽可能多的覆盖有效等价类,直到覆盖所有有效等价类

设计测试用例,每一条只能覆盖一条无效等价类,直到覆盖所有无效等价类

举例:以密码的有效等价类测试为例:

口述 :根据需求,定义类型,之后逐个划分有效和无效等价类集合,并编号。每个集合内取代表性例子,设计有效等价类,尽可能多的覆盖有效等价类,直到覆盖完全。设计无效等价类每一个只能覆盖一条无效等价类,直到覆盖完全为止。无效等价类类似于控制变量法,每次只引入一个变量,实现判断是哪一个输入导致的问题。我之前做光栅解调仪测试,温度区间在

0-90 摄氏度,小于 0 或者大于 100,则是无效,在此区间内则是有效。分别设计验证场景。方法类似。

复制代码
    车载软件测试的例子,车速大于 30,BCM 车门自动上锁。设计有效条件为 1 车速处于 0-30,车门不上锁。2 大于 30。车门上锁。无效条件为,3 小于 0,4 空格信号丢失或非数字信号。之后分别设计测试用例。
    **记忆口诀:有效就是有意义,只要能触发某个事件就行。无效是无法触发任何事件。**
  • 边界值分析:车速 30km/h 临界点(29.9 / 30.0 / 30.1)
复制代码
什么是边界值分析法?
是对等价划分法的一个补充,对于有范围值或者个数的限制的需求下,针对边界情况设计测试用例。

举例:

提示,对于车载测试速度方面对精度要求比较高,往往会选取29.9,30,30.1。

面试模拟问题:

给你一个车载场景:BCM雨刮间歇模式,每3秒摆动1次,允许设置间隔1~5秒。用边界值分析法,你测哪些值?

0.9、1、1.1、4.9、5、5.1

记忆口诀:所有边界,以及边界上下各选择一个,不关心中间的任何值。

  • 场景法:模拟整车真实工况(上电→行驶→停车→锁车)

    定义:多用于冒烟测试中,模拟用户在真实的使用中的各种情况。分为基本流和备选流(出现问题)。

    打开车载空调

    基本流:打开中控大屏---点击开空调---空调打开

    备选流:电量不足无法打开空调 没有联网无法打开空调 车机未上电无法打开空调

  • 错误推测法:低压9V、总线负载过高、掉电重启

    定义:人员自身的经验,结合给出的场景。

  1. Bug四要素 + Jira字段
    • 标题、复现步骤、预期结果、实际结果、附件(CAN报文截图、ECU日志)

实操任务:

  • 按BCM需求编写8条测试用例(覆盖REQ-01~04)
  • 格式:用例ID | 模块 | 前置条件 | 测试步骤 | 预期结果 | 优先级

Day1 面试模拟题(6 道)


1. 车载软件测试和普通互联网 APP 测试有什么区别?

(面试开篇必问,至少说3点)

--- 安全性要求不一样,车载要求高,互联网测试只是影响用户体验感。

车载需要软硬件结合,需要ECU+执行器+总线+传感器。还需要HIL台架。

通信协议不同,互联网用HTTP/JSON;车载用CAN/LIN/UDS诊断协议

周期不同,互联网迭代快(天/周);车载周期长(2-4年),发布后不可OTA全改。

面试的时候可以简单回答:车载测试要考虑硬件耦合、总线通信、电压波动、高低温等物理环境因素,安全优先级最高

2. 给你一个BCM 车窗控制功能:车速 > 30 km/h 时禁止一键升降,请用边界值分析法设计测试用例,说出你测哪些速度值?


设计测试用例:

29.9 一键升降可用

30 一键升降禁止

30.1 一键升降可用

3. 一条完整的测试用例包含哪些必要字段?

八个要素,编号、所属模块、标题、重要级别、预设条件、测试数据、测试步骤、预期结果。


4. 车载测试标准流程是什么?从需求到报告,按顺序说出来。

需求分析--测试计划--测试方案--测试用例--测试环境搭建--测试执行--缺陷管理--测试报告

① 需求分析(理解需求,提取测试点)

② 测试计划(资源、时间、范围)

③ 测试方案设计(策略、方法选择)

④ 测试用例设计(等价类/边界值)

⑤ 测试环境搭建(台架、CAN工具、DBC)

⑥ 测试执行(跑用例、记录结果)

⑦ 缺陷管理(提Bug、跟踪、回归验证)

⑧ 测试报告(覆盖率、遗留Bug、结论)

5. 你提交一个 Bug,开发说"我这里复现不了,不是 Bug",你怎么处理?

我会先自己多次复现,记录详细的步骤、日志和环境信息,然后带着证据和开发当面沟通。如果确实是偶发问题,我会标记为待观察,记录触发概率和条件,持续跟踪,不会直接关闭。

6. 你没有车载测试经验,凭什么能胜任这个岗位?

我有三个优势:

**软硬件联调经验:**做过FBG光纤光栅解调系统调试,涉及传感器+上位机+数据传输,和车载ECU+传感器+总线的架构是同一思路

**测试方法论扎实:**系统学过等价类、边界值、V模型,能独立从需求设计测试用例

**学习能力强:**两周内掌握了BUSMASTER和python-can工具链,能独立完成CAN报文收发和DBC解析

口头作答,每题控制在1分钟内。答完发我,我逐题批改打分。

面试话术(背诵):

"车载测试和互联网测试最大的区别是:车载测试要考虑硬件耦合、总线通信、电压波动、高低温等物理环境因素,安全优先级最高。我之前做 FBG 光纤光栅传感器调试时,也要考虑信号采样异常和硬件干扰,和车载测试的思维是一致的。。"

当日收尾: 8条用例写完。

BCM 需求回顾

编号 需求描述
REQ-01 收到 Lock_Sig=1 → 车门上锁
REQ-02 收到 Lock_Sig=0 → 车门解锁,灯光亮 30s 后自动灭
REQ-03 车速 > 30 km/h 时,拒绝解锁请求
REQ-04 雨刮拨杆切到间歇档 → 雨刮以 3s 间隔工作

8 条测试用例

TC-01:正常上锁

字段 内容
用例编号 BCM-TC-01
所属模块 车门锁控制
用例标题 收到上锁信号,车门正常上锁
优先级 P0
前置条件 车门处于解锁状态,车速=0
测试数据 Lock_Sig=1
测试步骤 ① 启动BCM ② 发送 Lock_Sig=1
预期结果 车门上锁,Lock_Status=1

TC-02:正常解锁+灯光

字段 内容
用例编号 BCM-TC-02
所属模块 车门锁控制
用例标题 收到解锁信号,车门解锁并亮灯30s
优先级 P0
前置条件 车门处于上锁状态,车速=0
测试数据 Lock_Sig=0
测试步骤 ① 启动BCM ② 发送 Lock_Sig=0 ③ 等待30s
预期结果 车门解锁,灯光亮起,30s后自动熄灭

TC-03:车速 30.1 时解锁被拒(边界值)

字段 内容
用例编号 BCM-TC-03
所属模块 车门锁控制
用例标题 车速>30km/h时解锁请求被拒绝
优先级 P0
前置条件 车门处于上锁状态
测试数据 车速=30.1 km/h,Lock_Sig=0
测试步骤 ① 设置车速=30.1 ② 发送 Lock_Sig=0
预期结果 解锁被拒绝,车门保持上锁,灯光不亮

TC-04:车速 30 时解锁允许(边界值)

字段 内容
用例编号 BCM-TC-04
所属模块 车门锁控制
用例标题 车速=30km/h时解锁请求正常执行
优先级 P1
前置条件 车门处于上锁状态
测试数据 车速=30 km/h,Lock_Sig=0
测试步骤 ① 设置车速=30 ② 发送 Lock_Sig=0
预期结果 解锁正常执行(30不满足>30),灯光亮30s

TC-05:车速 29.9 时解锁允许(边界值)

字段 内容
用例编号 BCM-TC-05
所属模块 车门锁控制
用例标题 车速=29.9km/h时解锁请求正常执行
优先级 P1
前置条件 车门处于上锁状态
测试数据 车速=29.9 km/h,Lock_Sig=0
测试步骤 ① 设置车速=29.9 ② 发送 Lock_Sig=0
预期结果 解锁正常执行,灯光亮30s

TC-06:雨刮间歇模式

字段 内容
用例编号 BCM-TC-06
所属模块 雨刮控制
用例标题 间歇档雨刮3s周期工作
优先级 P1
前置条件 雨刮处于关闭状态
测试数据 Wiper_Switch=INTERMITTENT
测试步骤 ① 启动BCM ② 拨杆切到间歇档 ③ 观察雨刮动作3个周期
预期结果 雨刮每 3s 刮一次,周期稳定

TC-07:无效锁信号

字段 内容
用例编号 BCM-TC-07
所属模块 车门锁控制
用例标题 收到无效Lock_Sig信号不执行动作
优先级 P2
前置条件 车门处于上锁状态
测试数据 Lock_Sig=0xFF(无效值)
测试步骤 ① 启动BCM ② 发送 Lock_Sig=0xFF
预期结果 车门保持原状态,不执行上锁/解锁,无灯光响应

TC-08:已上锁重复上锁

字段 内容
用例编号 BCM-TC-08
所属模块 车门锁控制
用例标题 上锁状态再次发送上锁信号(幂等性)
优先级 P2
前置条件 车门已处于上锁状态
测试数据 Lock_Sig=1
测试步骤 ① 确认车门已上锁 ② 再次发送 Lock_Sig=1
预期结果 车门保持上锁,无异常报错,无重复执行声

8 条用例覆盖方法一览

用例 覆盖方法 覆盖需求
TC-01 等价类(有效) REQ-01
TC-02 等价类(有效) REQ-02
TC-03 边界值(30.1) REQ-03
TC-04 边界值(30) REQ-03
TC-05 边界值(29.9) REQ-03
TC-06 等价类(有效) REQ-04
TC-07 等价类(无效输入) 异常处理
TC-08 状态转换(幂等) REQ-01

面试话术:这8条用例覆盖了正常流程(TC-01/02/06)、边界值(TC-03/04/05)、异常输入(TC-07)和状态幂等(TC-08),符合V模型中需求级测试的设计要求。

相关推荐
kdxiaojie2 小时前
Linux 驱动研究 —— I2C (5)
linux·运维·笔记·学习
坐而论道_2 小时前
兼容低版本 Android:让现代 Web 应用在旧 WebView 上稳定运行
前端·面试
ssshooter2 小时前
Promise 和 async/await 被 try-catch 包裹时的行为差异
前端·javascript·面试
茯苓gao3 小时前
机器人产业的三级火箭:卖电机、卖模组与卖整机,三种商业模式的终局推演
笔记·学习·机器人
mm9954204 小时前
PMI三大证书:PMP、PgMP、PfMP证书对比
学习·职场和发展·项目管理·学习方法·pmp
ricardo19734 小时前
SSR / SSG 性能对比:Next.js 三种渲染模式实测数据
前端·面试
兰令水4 小时前
hot100【acm版】【2026.7.13打卡-java版本】
java·开发语言·数据结构·算法·leetcode·面试
铅笔侠_小龙虾4 小时前
Rust 学习(4)-函数与注释
开发语言·学习·rust
猪头少年不会遇见算法学姐5 小时前
Makefile快速上手笔记
linux·学习