Unit testing SIMULINK中大中型复杂系统模型的单元测试和集成测试 问题

Unit testing SIMULINK中大中型复杂系统模型的单元测试和集成测试 问题,unit-testing,testing,simulink,modeling,large-scale,Unit Testing,Testing,Simulink,Modeling,Large Scale,我有一个相当大的油气系统模型,由大约20-25个不同的子系统组成。然后,每个子系统由数字逻辑、边缘延迟块和外部输出端口网关(真实输出)组成。此外,一些小型构建块是作为S函数导入的遗留C代码,以最大限度地提高成本效益比。每个子系统模型均在SIMULINK中使用基本块集进行设计,即未使用附加商业块集(如航空航天、simscape、simMechanics等) 主要问题是我对SIMULINK中的测试模型没有足够的了解。我知道Mathworks为测试和验证提供了一个定制的单元测试框架。问题是我不太确定这

我有一个相当大的油气系统模型,由大约20-25个不同的子系统组成。然后,每个子系统由数字逻辑、边缘延迟块和外部输出端口网关(真实输出)组成。此外,一些小型构建块是作为S函数导入的遗留C代码,以最大限度地提高成本效益比。每个子系统模型均在SIMULINK中使用基本块集进行设计,即未使用附加商业块集(如航空航天、simscape、simMechanics等)

主要问题是我对SIMULINK中的测试模型没有足够的了解。我知道Mathworks为测试和验证提供了一个定制的单元测试框架。问题是我不太确定这与我的领域有什么关系。此外,我的子系统本身非常复杂,对它们进行单元测试是一场噩梦。但是,如果输入和输出的黑盒测试是唯一的方法,那么就这样吧,我很高兴接受这一点

虽然我的问题是在SIMULINK中测试大型复杂系统,但我的目标是从过去和将来都会大量使用SIMULINK的经验丰富的SIMULINK用户那里获得建议。我以前在SIMULINK中做过单元测试,但所有这些测试都不在我正确设计的附近

任何帮助都将不胜感激

更新自@PHILGODDARD的评论 我忘了在上面提到我熟悉HIL和PIL。然而,只有当您的目标实时平台可用于循环测试时,这些才有效。如果有人想做软实时测试呢

我正等着一两天后参加Mathworks大型系统测试网络研讨会。希望我能从中得到更好的答案/建议

更新自@AM304的评论 为了进一步澄清上下文,我们在软件中对所有交互系统进行建模,而不涉及任何物理设备,即对软件中的所有系统进行建模和仿真,并在操作员/教员终端中显示输出。。。。。e、 我们有电气、空调和油气系统一起工作,但我们用软件对它们进行了建模。因此,当我们对其进行模拟时,所有必要的信号都是从软件模型的行为中产生的,没有实际的硬件/物理设备参与这些行为输出的传递

我会调查和调查。具体来说,它们提供了自动化测试生成和覆盖率分析等功能,我认为这些功能适用于您的问题

作为旁注

关于你在文章中提到的matlab,这基本上是框架的matlab实现。因此,如果您希望能够将xUnit设计模式应用于MATLAB代码的测试,那么它显然很有用


该框架可用于编写Simulink模型的测试,但请记住,您必须能够使用MATLAB代码编写测试。因此,这只意味着使用Simulink命令行界面(例如
set_param
sim
等命令)来设置和练习您的模型,然后使用框架的验证方法(例如
verifyEqual
)比较实际结果和预期结果。

可以使用TPT测试C代码和Simulink模型。在测试开发和测试评估中没有区别,但在测试执行环境中没有区别。对于C代码测试,可以决定是否应在Simulink中以所谓的SiL模式测试C代码,其中C代码作为所谓的S功能嵌入Simulink中。S函数的生成可以由依赖于代码生成器的m脚本自动完成

对于Simulink,编码器可使用以下MATLAB命令强制SiL:

set_param(<testFrameName>,'RTWSystemTargetFile','rtwsfcn.tlc');
set_param(<testFrameName>,'RTWTemplateMakefile','rtwsfcn_default_tmf');
rtwbuild(<subsystem to be tested>); 
set_参数(,'RTWSystemTargetFile','rtwsfcn.tlc');
设置参数(,'RTWTemplateMakefile','rtwsfcn_default_tmf');
rtwbuild();
对于TargetLink,脚本使用TargetLink命令“tl_Build_host”和“tl_set_sim_mode”:

tl_build_host('Model', <testFrameName>, 'TlSubsystems', <subsystem to be tested>);
tl_set_sim_mode('Model', <testFrameName>, 'TlSubsystems', <subsystem to be tested>, 'SimMode', 'TL_CODE_HOST');
tl_build_主机('Model','tlsubsystem',);
tl_设置sim_模式(“模型”、“TLU子系统”、“SimMode”、“tl_代码主机”);
或者,在TPT中,C代码可以通过另外两种方式进行测试,这两种方式不需要Simulink,但需要一些手动编程和编译

第一种选择是使用所谓的EXE平台,其中测试工具是用C代码构建的,由用户自己的编译器编译。TPT中的EXE平台配置对话框支持生成测试线束

第二种选择是所谓的FUSION platform,它是一个联合仿真环境。FUSION是一个开放的体系结构,用户可以使用定义良好且文档化的API在测试C代码下调整自己的系统。c代码与API一起构成了一个所谓的节点,可以在FUISON平台上作为单个节点或与其他节点一起进行模拟。 在自动代码生成的情况下,大多数用户在Simulink中使用MiL和SiL测试,因为它可以完全自动完成,包括MiL和SiL之间的背对背回归测试

为什么要测试C代码而不是模型?原因是,大多数功能开发是以浮点表示法完成的,而目标ECU中的实现是以定点表示法完成的。缩放和定点计算的过程至少在代码生成期间完成。因此,将浮点(MiL)结果与定点实现(SiL)进行比较,因为根据经验,缩放会引入许多错误

如果100%语句或条件覆盖率,则TPT中有一个称为TASMO的功能。TASMO试图自动生成测试用例,以满足一个准则