资讯详情

资讯详情

车载仪表功能点测试:从功能树拆解到HIL自动化实践

车载仪表的功能点测试做起来比大多数人想象中要细碎得多。一块仪表盘既要保证车速、转速、油量这些基础指示的准确性又要处理报警灯、文字提示、多媒体交互、ADAS警示等一大堆逻辑任何一个显示错位、点亮时机偏差或者响应延迟放到实车上都是实打实的品质问题。这篇内容就围绕“车载仪表的功能点测试”展开把我平时梳理功能点、拆分测试用例的思路以及踩过的一些坑完整地整理一遍。这套内容更适合刚接触汽车电子测试、准备做仪表HMI测试或者要从零搭一套仪表测试用例库的工程师。已经跑了好几年台架的同行也可以参考里面的边界值策略和问题排查思路看有没有能补进自己用例库的地方。1. 车载仪表测试的思路与范围界定1.1 为什么仪表测试要从功能点拆解入手很多测试工程师上手仪表项目时第一反应是拿需求文档从头看到尾然后照着文档上的描述一条条写用例。这种做法不是不行但很容易出现三个问题第一需求文档是产品语言不是测试语言文档里写“油量低时提醒用户”具体低到多少升、什么颜色、闪不闪、伴随不伴随声音通通要靠测试自己去倒推第二仪表功能之间存在大量联动单独看一条需求往往发现不了联动逻辑里的漏洞第三没有功能点维度的话用例写出来基本是平铺的测试优先级、覆盖深度根本体现不出来。我习惯的做法是先拉一张功能树把仪表按功能域拆开再在每个功能域下面细分功能点。拆到最小可验证的颗粒度之后再开始写用例。这个环节看着费时间实际上是把后期返工的成本前移用例写的速度和准头反而会提升不少。以常见的全液晶仪表为例功能树至少包含这几个一级维度指示表类、报警灯类、文字提示类、信息显示类、交互类、声音与背光类、异常处理类。二级以下再继续拆比如“指示表类”下面分车速表、转速表、油量表、水温表每个表再继续拆出显示范围、分辨率、刷新率、阈值告警、信号丢失策略等细项。1.2 测试需求的获取与功能树搭建功能树不是拍脑袋拍出来的来源主要有三个产品需求文档、系统需求规格、设计规范。三者互相对照着看经常会发现不一致的地方。我就遇到过仪表硬件支持最高车速显示到260但HMI规格里只画到了240那就得确认到底按哪个走。另一个容易漏掉的信息源是诊断规范。仪表作为CAN网络上的节点诊断相关的功能往往藏在单独的文档里比如故障码置位后的显示策略、UDS服务的交互表现。很多仪表功能是诊断触发后才有表现的如果只看HMI文档这一整块就漏掉了。功能树搭好之后还需要对每个功能点做来源追溯。就是说这个功能点是从哪条需求来的、哪条设计约束了它的行为。这样一来需求变更的时候能迅速判断影响范围这也是后面做回归测试时的重要依据。1.3 测试优先级与策略选择功能点排优先级这件事我的判断依据是“失效影响度×使用频率”。失效影响度指的是这个功能出问题后对安全和使用体验的影响有多大使用频率则比较好理解常用功能和不常用功能在同样的bug等级下处理优先级显然不一样。我一般把功能点分成三层P0层是涉及安全的核心项车速显示、安全气囊状态灯、制动系统报警、ADAS相关警示都归在这一层这类功能出了问题整车可能都不允许放行P1层是高频使用项比如多媒体信息显示、续航里程估算、界面切换响应P2层是低频或者舒适性功能像主题切换、部分个性化设置。优先级定了之后测试排期紧张的时候就知道先保哪一块了。有些测试团队会用风险分析矩阵把功能重要度和失效概率两个维度结合起来决定测试深度。我个人觉得在仪表这种和安全性强相关的产品上功能重要度的权重应该比失效概率更高。2. 核心功能域拆解与测试要点2.1 指示表类车速、转速、油量、水温指示表是仪表最基础也是最不能出错的功能域。先说车速表测试时要关注的可不止“指针跟着车速走”这么简单。一个是显示范围和精度。车速表一般要覆盖0到最高显示车速整个量程内的显示误差必须满足国标和企标要求常见的要求是显示值不低于实际值而且误差在某一范围内。测试用例要覆盖低速、中速、高速、超速几个区间还要针对车型的最高车速边界去测。另一个是分辨率数字式车速表的步进一般是多少公里每小时指针式仪表的每一小格代表多少这些在UI规范里都有定义用例里必须写清楚。油量表的测试比很多人想的麻烦。油箱里的油位传感器输出是非线性的油量表本身也会做阻尼处理防止车辆晃动时指针乱摆。这块的用例重点不是标定数学模型的准确性而是“显示行为是否符合预期”。比如加满油后指针是否快速到顶跑一段后指针是否按正常速率下降油量报警阈值触发时剩余续航里程有没有联动变成0或者显示“---”。水温表相对简单一些主要关注低温区、正常区、高温区的显示表现以及水温过高时仪表有没有同步触发报警灯和文字提示。这个联动逻辑是重点仪表和发动机控制器之间信号链路一旦有一点延迟高温报警可能就跟着晚了很久。转速表测试的核心逻辑和车速表类似区别在于转速信号的变化率更快测试时要特别关注指针的跟随性在急加速、急减速、换挡瞬间指针不能出现明显卡顿或者大幅过冲。2.2 报警灯与文字提示类报警灯类功能测试的颗粒度取决于故障和状态的区分。仪表的报警灯大致分三类上电自检灯、实时报警灯、指示状态灯。这三类的点亮逻辑完全不同混在一起测会测得很乱。上电自检灯的逻辑是点火挡位切到ON之后一部分报警灯会全部点亮做自检几秒后自动熄灭。测试点包括自检灯列表是否完整、点亮持续时间是否符合规范、发动机启动之后该灭的是否全部熄灭。这块有一个很常见的bug就是某个灯在自检时能亮但点火后因为和环境灯的逻辑叠加反而不会正常熄灭或者出现闪烁。实时报警灯测的是故障状态下的真实点亮行为。这里要模拟真实的信号条件比如把发动机控制器的故障信号置位观察仪表报警灯在多少毫秒内点亮熄灭条件又是什么。文字提示和报警灯同时存在的时候还要确认优先级和显示位置多个报警同时发生时是轮播显示还是分区域固定显示轮播间隔是多少秒都得有实测值。指示状态灯的逻辑相对简单比如远光灯指示、转向灯指示、安全带未系指示。但这块容易出现与真实开关状态不一致的bug尤其在组合开关信号和仪表内部逻辑存在多路输入竞争的时候所以用例要覆盖快速反复切换的场景。2.3 信息显示与交互界面全液晶仪表普及之后信息显示和交互成了功能点数量最多的区域。菜单结构、多级界面跳转、信息优先级抢占、软按键操作响应每一项拆出来都能写一批用例。菜单测试的重点是状态保存和路径逻辑。比如在A界面设置了某项功能退出后重新进入设置是否还在从主动能菜单逐级进入子菜单再一层层返回路径是否和设计一致某个界面在超时无操作后是否自动跳回跳回的规则又在哪一层生效。这些用例看起来简单做起来特别容易发现逻辑死角。信息抢占是仪表交互里最考验逻辑的部分。导航提示来了要砍掉一部分媒体信息来电界面弹出要压住导航地图倒车影像要覆盖掉其他所有内容。这块测试要把抢占源和被打断内容做成矩阵逐项测过去否则很容易出现某些组合下界面元素重叠或者信息丢失。触摸式和按键式仪表的用例设计思路也有差别。触摸屏要多测手势的识别边界比如左滑右滑在屏幕上操作时有没有误触按压力度和响应速度的感受是否达标按键式仪表要重点测旋钮的步进逻辑、长按连续翻页的触发时间阈值以及按键在快速连按时会不会丢事件。2.4 ADAS与安全类警示现在新车基本都标配ADAS功能仪表作为ADAS信息的主要呈现窗口承担了大量显示和警示任务。这部分功能点的测试要结合ADAS域控制器的输入信号来做单一测仪表自身逻辑是不够的。盲区监测、车道偏离预警、前碰撞预警这几个功能的显示位置、图标形状、颜色变化、声音提示都要逐项对照设计规范。更关键的是场景时序比如车辆偏离车道时仪表什么时候弹提示驾驶员打转向灯之后提示是否马上消失后车持续处于盲区内时提示是常亮还是周期性闪烁。安全类警示里还有一个测试重点是紧急情况下的显示降级和优先级。当同时出现FCW报警、车道偏离振动、多媒体来电等多路信息时仪表的显示资源怎么分配哪个展示在视觉重心、哪个被压缩到底部这个判定逻辑必须测细。实际上车路测的时候有些场景下驾驶员根本来不及看屏幕所以这类警示还会配合声音测试时还要关注声音的类型、响度、是否可被打断。2.5 声音、背光与硬件交互声音测试是仪表功能点里经常被低估的一块。倒车雷达距离越近提示音越急促这个大家都很熟悉但提示音和多媒体声音、语音提示之间的混音策略往往要到实车环境里才能发现问题。指示灯闪烁和提示音同步的节奏开关门提示音的触发和停上条件这些功能特点不复杂但每一项都要单独验证。背光测试重点关注自动亮度调节的响应速度和对环境光的跟随性以及手动亮度调节范围在白天和夜晚是否有区分。液晶屏和指针式仪表都有背光问题要测到亮度调节菜单调至最低时仪表信息和报警灯是否仍然清晰可辨。硬件交互方面方向盘按键拨轮是否和仪表菜单联动反馈是否有延迟按压回馈的阻尼手感是否一致。液晶仪表还要关注屏幕在强光下的反射、可视角度和贴膜状态下有没有波纹。这类问题功能逻辑上没有错但主观体验不好很容易在样车评审阶段被打回。3. 从功能点到测试用例的落地流程3.1 功能点提取的颗粒度判断从功能树细化到功能点颗粒度把握是最难的。拆太粗一条功能点里塞满了不同分支的测试条件写到用例阶段还要返工拆太细又会让用例数量爆炸维护成本直线上升。我自己的判断标准是一个功能点必须对应一个相对独立的行为或规则而且这个行为可以通过唯一的前置条件和预期结果来验证。如果一条描述里既有“油量低时点亮报警灯”又有“油量耗尽时显示---”就应该拆成两条因为前置条件和预期都不相同。反过来如果两个行为共享完全相同的前置条件和状态路径只是显示位置不同那就可以合并成一条功能点在用例里备注差异性即可。实际拆解的时候我会拿着需求文档逐条过把“应该”“如果”“同时”“之后”这些连接词单独划出来分析。出现“同时”这个词通常意味着这里至少有两个独立功能点。3.2 测试用例设计方法与实例功能点确定之后写测试用例的方法论和常规功能测试没有本质区别等价类、边界值、场景法、判定表、因果图、状态迁移这些方法在仪表测试里全都能用上。等价比划分最典型的场景就是车速表区间。把车速按显示区域和报警阈值分成若干个等价类每个等价类内部的行为是一致的因此只需要抽取代表值来测。边界值是仪表测试的重中之重车速报警阈值两侧的极值、油量报警的临界点、水温过高报警的临界温度都必须贴着边界做测试。这里有一个很容易犯的错误只看数值边界的上升沿忽略了下降沿。很多报警功能在故障发生后需要等到信号回落到一个比触发阈值更低的滞后区间才会熄灭这个滞后值如果没设计好就会出现报警灯反复闪烁的问题。场景法适合用来测状态联动。比如“车辆启动之后”这一个状态场景里面包含自检灯全亮、系统初始化、界面从开机动画切到主界面、多媒体恢复上次记忆状态等一系列动作。场景用例更接近用户真实操作虽然单个用例的覆盖点不如数据驱动型用例精准但对发现整体联动问题非常有帮助。下面用一个实际的例子说明从功能点到用例的落地过程。需求原文车速大于120km/h时仪表显示超速报警图标并伴随文字提示车速回落到120km/h以下时报警消失。这个需求拆出来的功能点包括编号功能点用例设计要点FP-01超速报警图标点亮阈值车速超过120km/h的临界值用121、120.5、120.1、120分别测FP-02超速报警图标熄灭阈值车速回落临界值用119.9、119、120、120.1分别测FP-03报警提示音行为图标点亮时是否伴随声音提示音持续多久会不会重复FP-04文字提示内容与位置文字内容是否和规范一致位置是否和图标重叠FP-05与限速设置功能联动用户自定义限速值低于120时以哪个阈值生效FP-06报警状态记忆报警中直接熄火断电重新上电后报警是否恢复还是等下一次超速再触发每个功能点再补上前置条件和具体的操作步骤就变成一条可直接执行的用例了。写用例的时候前置条件能不能精确描述直接影响执行效率。好的前置条件必须包含具体的信号值或状态比如“将车速信号通过总线模拟工具置为121km/h并持续2秒”这种描述执行人员可以无损复现。我见过很多前置条件写的是“模拟车辆高速行驶工况”这种话对执行来说几乎等于没写。3.3 用例评审与基线化的管理用例写完之后评审环节不能省。仪表测试用例的评审我建议至少拉两类人HMI产品经理和系统的软硬件开发工程师。产品经理能确认操作逻辑和视觉效果是否符合预期开发工程师能判断用例里要求的信号条件在真实环境里是否拉得到、拉不到的话需要怎么搭Mock。评审重点看这三处一是用例覆盖是否和功能树一一对应有没有漏功能点二是预期结果是否明确到可以直接判断题三是用例之间的逻辑有没有冲突比如一条用例要求报警灯常亮而另一条用例要求同一状态下报警灯熄灭那就说明有一方的预期结果写错了。基线化之后测试用例就进入了变更管理流程。只要需求有变化必须评估影响的功能点范围更新对应用例标签打上版本号。仪表产品迭代很快如果用例不跟着版本走过两个版本之后用例库基本就废了。3.4 测试执行、报告与回归测试执行阶段我提倡先做冒烟测试再做全量回归。冒烟用例从P0功能点里挑出最核心的二三十条跑一遍如果挂掉超过一定比例就直接打回开发不用浪费全量执行的时间。执行记录要事无巨细地留痕。每条用例执行完都要记录实际结果、失败截图/录像、当时的信号条件、软件版本号、硬件版本号。车载仪表这类嵌入式产品的bug复现很依赖环境信息的完备性日志里缺一条CAN信号记录可能就让开发多排查一整天。测试报告的粒度建议到“功能域”级别。报告里除了通过率和失败用例清单还要给出每个功能域的风险等级判断。P0功能域如果遗留未关闭的bug报告结论应该直接定为不能发版。这个判断标准不需要妥协仪表涉及安全的功能出问题放行是对用户不负责。回归测试不能只回归bug修复点本身还要回归和修复点有耦合关系的相邻功能。比如改了车速报警阈值的判断逻辑哪怕诊断文档只说了这一处改动我也建议把超速报警、限速报警、续航计算里用到车速信号的用例全部过一遍。这个习惯帮我拦住过好几个隐藏的回归bug。4. 实测中的高频问题与排查思路4.1 显示与实际不符的典型原因车速表显示值和实际车速不符这类问题在台架测试里其实比实车路测更容易定位。台架环境下总线报文里的车速信号是仿真工具发的理论上模拟什么值仪表就该显示什么值如果有偏差多数情况下是仪表的标定表或者换算逻辑出了问题。但实车环境下情况就复杂了。车轮半径、传感器脉冲数、减速比这些参数都会影响实际车速和CAN信号之间的换算关系。遇到显示值比实际车速偏高或偏低时先区分是台架能复现还是只能实车复现。如果台架复现不了优先怀疑不是仪表本身的问题而是上游信号源头就偏了。排查手段上用CANoe或者PCAN抓总线报文对比发给仪表的车速信号值和仪表屏幕显示值之间的差值如果差值固定多半是换算系数标定错误如果差值随车速变化要怀疑仪表内部的线性化拟合分段点有问题。处理这类问题的时候要沉住气不要一上来就想着改仪表程序先把数据证据抓齐。4.2 信号抖动与指针/数字跳动仪表指针在怠速或者等红灯时出现小幅度抖动这个现象在实车上比台架多因为台架信号源相对稳定而实车的CAN信号在复杂电磁环境下会有干扰。数字式车速显示跳动的话问题更明显比如车速稳定在60km/h但显示在59到61之间跳。排查思路是先看信号源头。总线报文里的车速值如果一直在跳那仪表只是如实反映输入问题不在仪表。这可以通过总线分析工具的统计功能确认信号值的分布范围如果信号本身就跳接下来查传感器或者线束。如果信号很稳定而显示依然跳再往仪表内部查软件滤波算法和显示刷新周期。有一个细节容易被忽略仪表在做信号失效处理时如果判定条件设置得过于敏感某一路信号偶发超时一次就直接甩默认值也会表现为显示跳变。测试时要特别关注CAN信号的超时门限和默认值替换策略门限值设得不够大就容易误判。4.3 休眠唤醒与上下电时序问题仪表的休眠唤醒是问题高发区域而且这类问题往往不是每次复现给排查增加不少难度。典型表现是车辆熄火锁车后仪表没有进入黑屏状态或者黑屏之后过一会又自己亮起来另一种情况是解锁车门准备上车时仪表应该亮屏却没亮。这类时序问题的根因几乎都在软件状态机的设计上。仪表的电源管理涉及多个触发源点火开关状态、门状态、远程控制指令、网络管理报文。状态机之间的转换条件如果存在竞态比如两个事件同时到达而软件对事件的处理顺序没有做严格约束就会出现偶发的休眠唤醒异常。排查这类问题靠一次两次复现基本没用一定要做长时间的循环测试。用自动化工具反复执行“上电-启动-熄火-锁车-休眠-唤醒”这个状态循环把每次循环的仪表电流、屏幕状态、总线报文记录下来挂掉的那次就去看时序基本都能找到是哪个事件抢占导致的。4.4 测试环境与工具链带来的干扰台架测试的结论不能无条件移植到实车上去这一条我踩过的坑太多。台架供电用的是直流电源实车用的是蓄电池叠加发电机输出母线电压的波动特性完全不同。做仪表亮度调节测试的时候台架环境稳定叠加谐波几乎为零但是实车开大灯、升降车窗、开空调风机母线电压都会出现跌落和毛刺如果仪表电源模块的纹波抑制能力不足屏幕亮度就会闪烁。再就是总线的终端电阻匹配问题。台架上CAN网络节点少如果终端电阻没有正确接入信号反射会带来偶发的通信故障这种情况下仪表屏幕上可能跳出一些莫名其妙的通信报警。先核对测试环境的终端电阻和线束连接再决定是不是要往仪表的问题方向查。还有一个常见的工具链干扰是总线报文周期和真实网络不一致。台架仿真工具默认的报文周期如果和实际整车网络定义不一致仪表对信号超时的处理就会和实车不一样。做仪表测试之前最好先核对一遍仿真数据库里的报文周期和DBC定义确保和实车网络一致否则用例跑得再全也只是测了个假环境。5. 车载仪表测试的进阶工具与思路5.1 HIL与仿真环境的使用HIL台架是目前车载仪表测试的主流工具链。通过HIL可以模拟整车总线网络环境向仪表发送各路传感器和控制器的真实信号同时采集仪表的CAN输出、视频输出、电流状态等数据。用HIL做自动化测试重点是构建场景库。把上电开机、启动、行驶、报警、休眠唤醒这些常用场景做成标准化的测试序列执行的时候一键触发整条链路自动跑。HIL环境下做回归测试的效率优势很明显过去手工执行一遍全量回归要好几天写好脚本之后一个晚上就能跑完而且每次执行的一致性远高于人工操作。HIL台架搭配故障注入模块之后能做很多故障模拟测试。比如把某一路CAN信号切断、把车速信号叠加随机抖动、把传感器信号拉到异常范围这些在实车上很难复现的场景在台架上要多少有多少。做过一轮完整的故障注入测试之后仪表软件的健壮性水平基本就能看清楚了。5.2 自动化测试与脚本辅助车载仪表的自动化测试分两个层面第一层是信号级的自动化用CAPL或者Python脚本通过总线工具给仪表发信号、判断响应第二层是UI级的自动化通过图像识别或者仪表输出的视频流来判断屏幕显示是否正确。信号级自动化适合做逻辑类测试。比如超速报警的边界值测试写一段脚本控制车速信号从100开始每秒加1一直加到130同时用摄像头或者显示缓冲区抓取报警灯点亮时的准确车速值。这种测试方式比人工靠眼睛盯仪表再读数值要精确得多也能把临界值反复拖出来验。UI级自动化适合做显示一致性检查。仪表屏幕显示的内容通过采集卡输出到电脑端测试脚本用像素比对的方式判断图标是否点亮、文字是否和预期一致、界面元素的位置是否正确。做这类自动化的时候要额外注意屏幕色彩校准和区域截取的稳定性环境光一变像素比对结果就可能出现大量误报。另外自动化用例的维护成本要提前算进去。车载仪表软件的迭代周期相对较短UI规范一变自动化脚本可能就要跟着改。我建议自动化的范围优先覆盖稳定度高的P0功能UI细节变化频繁的功能点保留手工用例避免把时间花在不断重写脚本上。5.3 多版本迭代中的维护策略仪表软件的版本迭代节奏通常不慢尤其是和新的ADAS功能联调时一两个月就要出一个新版本。测试用例库如果不能跟着版本走很快就会失真。我的做法是为每个版本建立一张功能增量表记录这个版本新增了哪些功能点、修改了哪些已有行为、删除了哪些模块。回归用例集就是“全量P0 增量功能相关用例 受影响功能域的完整用例”。这张增量表如果维护得及时回归测试的针对性和效率都会提高很多。还有一个容易被忽视的工作是历史缺陷库的维护。每关闭一个bug对应的测试用例、根因、修复方案都归档好。下一个版本测试的时候把历史缺陷相关的用例单独拎出来重点回归。仪表这类嵌入式产品的回归测试里历史bug回归的价值往往比新功能测试还高毕竟一个新功能挂掉只影响体验一个历史缺陷复发可能直接影响安全。版本管理上还要注意软件件和硬件件的匹配关系。同一套用例跑的仪表硬件如果换了批次或者改了印制板版本测试结果可能就不一致用例执行记录里务必备注具体的硬件版本号否则出了问题回溯起来非常痛苦。我个人现在做仪表测试复盘的时候已经习惯把“功能点拆解-用例设计-自动化选择-回归策略”当成一套完整的流程来看而不是把它们割裂成几个独立的环节。功能树拆得清楚后面所有环节的效率都跟着受益功能树拆得含糊后面再补维护成本会成倍增长。对于刚入行的测试工程师我建议先花时间把自家仪表的完整功能树建出来再把P0功能点的用例写透这两件事做完仪表功能点测试的地基就扎实了。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →