常见

image.png

MIL

MIL(模型级别)测试是在软件开发的早期阶段进行的,测试的是嵌入式系统中的模型和算法的正确性,验证模型是否正确。都是在Matlab 环境中跑的,没有其他的硬件环境。

SIL

SIL(软件级别)测试是在软件开发的中期阶段进行的,测试模型生成代码的执行结果,如果不是模型开发的方式,是没有 SIL 测试的。SIL 测试是在模型开发完成后,将模型生成代码,代码进行编译,对编译后的可执行文件进行测试,可以与 MIL 测试复用相同的测试用例,验证等效性。

PIL

PIL(硬件级别)测试是在软件与硬件集成前进行的,测试嵌入式软件与硬件集成后的正确性、稳定性、兼容性。测试使用的是嵌入式软件运行在开发机器上,与模拟器或模型连接交互,模拟与硬件之间的接口。
PIL 测试需要特定的硬件,因为还需要将模型作为被控对象,需要把板子的输入输出信号跟电脑 Matlab 连接起来。比如 Auduno,或者是 DSPACE 之类的。

HIL

HIL 测试需要购买机柜,机柜是可以选择不同的配置,还有不同的被控对象的模型,一般都是几十万起步。

RCP

RCP(快速控制原型)是需要购买特定的硬件,可以支持将早期的验证模型(比如说包含 Matlab Function,S-Function 等非量产方法的模型)生成代码下载到板子里进行与真实车辆的交互。

动态测试与静态测试

静态测试就是不运行模型或者代码,只针对模型或者代码的书写规则进行检查
动态测试是需要运行模型或者代码,给定测试输入用例,查看后出结果与期望结果的对比,测试需求是否正确

模型的静态测试 ModelAdvisor

Model Advisor 对模型进行建模规范的检查,它可以检查模型的命名规范,模块的规范,MISRA,ISO-26262,AUTOSAR 等。

代码的静态测试

QAC

使用 QAC 检查代码的编码规范,比如 MISRA-C,不对代码进行编译,只检查编写的规范

Polyspace

Polyspace 做代码的运行时错误检查(编译没问题),运行时错误就是编码没有问题,没有语法错误,但是可能在程序执行的过程中发生错误,比如数组越界,除零等。但是 Polyspace 是需要编译的,因为它使用的数学方法去计算变量的范围。Polyspace 被 MathWorks 收购了,它可以集成在 Simulink 里面在模型搭建好后直接测试模型的代码

模型的动态测试

模型的动态测试其实就是仿真测试,根据测试用例测试模型的执行结果。

代码的动态测试 Tessy

使用 Tessy 进行代码的动态测试,Tessy 可以对某个函数进行动态测试,给定输入用例,看输出结果,可以自动生成测试用例,但是自动生成的测试用例是不能测试需求的,只针对覆盖率测试。对函数进行测试的时候,可以对全局变量进行赋值,对输入的参数进行赋值,还可以对调用的函数进行打桩等。

黑盒白盒测试

从被测试对象的角度分类,测试方法可以分为黑盒测试、白盒测试、灰盒测试三种。

黑盒测试

黑盒测试指的是测试人员对被测试软件系统的内部结构和实现原理一无所知,只从外部接口进行测试,主要测试功能、接口、性能等表现。这种测试更加关注软件系统是否符合客户需求和用户期望。

白盒测试

白盒测试是指测试人员对被测试软件系统的内部结构和实现原理有一定了解,可以访问系统代码和其他内部信息。测试人员使用这些信息来测试系统,主要测试软件的内部运行逻辑、代码覆盖率、安全性等。这种测试更加关注软件系统内部实现是否正确、有效、安全。

覆盖率测试

需求覆盖率

需求覆盖率是指软件产品中实际实现的功能需求占总需求数的比例。它是评估测试进展和产品质量的一种指标。通过计算测试人员已经测试的功能点和产品需求中存在的总功能点之比,可以得到需求覆盖率。在软件测试中,达到高的需求覆盖率可以提高产品质量,减少潜在的缺陷和故障,并确保足够的测试覆盖面。

代码覆盖率

分为语句覆盖率条件覆盖率决策覆盖率MCDC 覆盖率等,测试的是模型或者代码的执行的程度。巨大的工程,需要编写特别多的测试用例,虽然 Matlab 和 Tessy 都提供了自动生成测试用例的方式,但是仍然有些用例需要我们自己编写。
image.png

语句覆盖率

语句覆盖率(Statement Coverage,SC),程序中每一个语句至少能被执行一次。这是要求最低的覆盖率指标。
特点:
1、程序中每一个语句执行一次
2、对程序执行逻辑的覆盖率低,属于最弱的覆盖方式
3、无需测试程序的分支情况
4、无需测试程序分支判断的输入值以及输入值的组合
5、无需测试程序执行的不同路径

判定覆盖率

判定覆盖(Decision Coverage,DC。也可以叫分支覆盖 Branch Coverage,BC),程序中每个判定至少有一次为真值,有一次为假值,使得程序中每个分支至少执行一次.
特点:
1、满足判定覆盖的测试用例一定满足语句覆盖。
2、对整个判定的最终取值(真或假)进行度量,但判定内部每一个子表达式的取值未被考虑

条件覆盖率

条件覆盖率(Condition Coverage,CC),程序各判定中的每个条件获得各种可能的取值至少满足一次
特点:
1、弥补了判定覆盖的不足——对整个判定的最终取值(真或假)进行度量
2、条件覆盖不一定能满足判定覆盖
3、条件覆盖不一定能满足语句覆盖
“条件覆盖”通常比“判定覆盖”强,因为它使一个判定中的每一个条件都取到了两个不同的结果,而判定覆盖则不保证这一点。但如对语句 IF(A AND B)THEN S 设计测试用例使其满足”条件覆盖”,即使 A 为真并使 B 为假,以及使 A 为假而且 B 为真,但是它们都未能使语句 S 得以执行。

MCDC

修订的条件/判定覆盖(Modified Condition/Decision Coverage,MCDC),程序中每个判定至少有一次为真值,有一次为假值,使得程序中每个分支至少执行一次,且使得各判定中的每个条件获得各种可能的取值至少满足一次。简单点讲就是,每个判定真假各一次,每个判定中的条件各取一次。
特点:
1、综合了条件覆盖和判定覆盖的特点
2、满足条件判定覆盖的用例一定满足语句覆盖
3、满足条件判定覆盖的用例一定满足条件覆盖
4、满足条件判定覆盖的用例一定满足判定覆盖