这篇作品简易聊一聊汽车ECU软件的测试。无论你是从事汽车软件工程的哪一个位置,都应当对软件测试的根本观点和流程有肯定的认识。以是我念感兴致的同窗应当会不
这篇作品简易聊一聊汽车ECU软件的测试。无论你是从事汽车软件工程的哪一个位置,都应当对软件测试的根本观点和流程有肯定的认识。以是我念感兴致的同窗应当会不少吧。
(这里众说一句和测试无闭的话,全豹的Techincal Safety Concept都是体系级需求,不是软件需求,口试的光阴别搞混了)
这家车企斗劲怂,它的自合适巡航效用只可正在30公里到120公里每小时之间激活,而且一朝退出后弗成再主动激活。
为了简易起睹,咱们先不管第二条需求了,只看第一条。下面我把这个人系需求写成软件需求(Software Requirement):
好了,这即是个最简易的需求例子。依照这个需求,你写了几行代码来竣工。咱们假设用C代码,正在原有的C文献acc.c中插足了:
有同窗或者会说,你有病啊写成如此,第一个if语句写完了直接写else不就完了嘛。对, 不过我也不晓得客户今后会奈何改这个需求,也许会对其他速率段扩张新的形态,以是我就先写个else if正在这里,简单今后扩展。
写完代码编译告捷今后,先入手下手实行单位测试,也即是图中的“Software Unit Verification”。顾名思义,即是把你这个新编写或者点窜过的单位(独立的C文献,正在本例中是acc.c)与一共工程隔脱离,独立测试其输入输出。
汽车行业呢,最先即是做MISRA 正派测试。MISRA 测试是静态测试的一种,用来考验代码是否适合一系列详细的编程正派。这里咱们假设用的测试器械是QAC。
就我写的这段,估量啊会报出一个warning, 由于 “else” 这个分枝结果上是无法触发的,而MISRA的个中一个正派即是全豹代码都务必可触发,所谓“Accessible”。当然啦,这里我是蓄意为之,以是能够评释一下就放过去了。
下一个方法是动态测试,这里咱们假设选用的器械是Polyspace。Polyspace能够助助判别算法正在谋划历程中,会不会形成诸如数组index超界限、overflow、被除数是零之类的bug 。咱们这个例子中惟有逻辑判别,以是实在不须要做动态测试。
2. 编写一系列的输入信号值,并同时写出这些输入信号值所对应的准确的输出信号值。咱们把这个叫做“测试集”。
3. 以测试会集的输入信号值为输入,运转单位代码。假如输出信号的值和测试会集的准确输出信号值无别,则效用测试通过。
编写测试集的一个根本法则是要把全豹的代码都笼罩到,而且尽量测试全豹判别逻辑。上面所示的例子至极简易,惟有一个输入变量 SafeVehSpd 和一个输出变量 Acc_ActSt。
于是正在这三个Equivalent Class里随机各取一个值,就能测试全豹代码逻辑了。不过实质测试中,咱们往往还进一步请求实行界限测试, 也就取每个Equivalent Class的两头的值来实行测试。这就涉及到精度题目了。假设这段代码是定点运算,车速数值由10bit 显露,前述车速上限是500, 于是车速的精度即是 500/(2^10) = 0.48828125。
须要证明的是,就算实行了美满的效用测试,也并不行确保效用就没有bug….由于实质工程中中百般输入信号的组合是无量无尽的,再加上时序等等成分,效用测试不或者穷尽全豹的实质境况,咱们只是悉力而为。
单位测试完结今后,就要把测试好的软件单位放到一共工程里来测试。这一步对应了图1中的“software verification and integration。
正在单位测试中,咱们通过直接更改SafeVehSpd 的值来实行测试。而结果上,SafeVehSpd 数值的泉源,来自CAN 总线上的车轮轮速数据。
假设如图3所示,从轮速传感器,由CAN总线传来的原始车轮轮速信号WheelSpdRaw 先原委通讯接口模块 COM_IF.c执掌 ,再原委车速谋划模块VehSpd.c谋划今后 ,才取得信号SafeVehSpd 。那么正在集成测试中,咱们须要通过更改WheelSpdRaw这个信号的数值来对acc.c中的代码实行测试。这是为了验证acc.c模块和其他模块的接口是否准确以及各个模块之间是否有冲突。
实行软件集成测试的光阴,图示的三个模块实在兼并正在了一齐变成了一个“黑盒”,咱们只闭切最初的输入信号WheelSpdRaw 和最终的输出信号Acc_ActSt 之间的逻辑。
正在实质工程中,COM_IF.c、VehSpd.c 和 Acc.c 三个模块很或者是由三个工程师正在同时并行开采的,这就或者导致任何一个模块独立实行集成测试都通过不了。这光阴就须要由项目司理或者product owner提进取行疏通谐和,确保全豹效用都更新今后,三个模块一齐实行集成测试。
HIL test也是集成测试的一种。前面说的软件集成测试,是运转正在PC 仿真情况中的,而实质ECU无论是算力、内存、百般硬件职能等等方面和PC情况都有很大的分别,以是无别的效用还要不断正在实质硬件情况中再测试一遍。
也即是说,HIL test与软件集成测试最大的分别正在于,前者运转于实质硬件中,然后者只是运转正在谋划机仿真情况下。
硬件正在环测试的首要器械是实质的零部件。好比测试ACC效用的话能够是ADAS担任器,或者是集成了ACC效用的毫米波雷达、摄像优等。除此除外还要有一个实践台架供应需要的运转情况、电力供应和总线接口。
和软件集成测试雷同,HIL test也是更改原始的CAN信号(例子中的WheelSpdRaw)来实行测试,只不外,这一次不是直接更改WheelSpdRaw正在内存中的数值,而是通过HIL test 台架真的向ECU通过CAN 发送真正的WheelSpdRaw信号。
HIL test的测试集,也即是测试用例(test case)须要和软件需求 Software Requirement 苛刻对应,能够是一对一,一对众或者众对一都能够。全豹的 HIL test case 都务必依照一条对应的Software Requirement 写出,不过要求就没有单位测试光阴那么苛刻了。
汽车测试网-创设于2008年,报道汽车测试身手与产物、趋向、动态等 闭系邮箱 marketing#auto-testing.net (把#改成@)