技术标签: simulink 单元测试 MBD基于模型开发 autosar
1.目标
本文是笔者在实际开发工作中的一般性总结,仅供参考。目前汽车电子软件基于MBD设计开发,遵循Autosar软件构架,按照其架构定义,软件架构的最小管理单元是SWC,故单元验证通常针对SWC级别进行。本文阐述了在完成SWC设计后,如何创建测试框架TestHarness、自动生成Excel格式的测试用例模板、添加输入信号及期望输出、导入测试用例进行测试验证。
2.方案
2.1 方案整体概述
应用于验证SWC软件单元的测试方案有很多,在创建完测试框架TestHarness后,可以有From WorkSpace,Test Sequence,以及Matlab自带的Test Manager,当然也可以开发者自己写脚本,采用面向对象式编程实现单元测试。本文介绍基于Signal Builder的方式,提到Signal Builder,软件开发者可以在Signal Builder 中直接编写测试用例,操作思路也比较简单,但不易于维护,切输入信号非常多时,自动化程度低,自然影响开发效率。
鉴于Signal Builder提供了可导入Excel的功能,切Matlab与Excel之间可以很方便的进行交互。因此编写m脚本,可在测试框架中自动创建TestSuite,针对多验证SWC,尽量在最外层创建Harness(不包含Function-Call输入端口),这样做可以最大程度的验证SWC层级的功能逻辑,让数据流、信号流可以跑通整个模型,避免孤立割裂功能逻辑,也是软件开发低耦合、高内聚的思想体现。当然,如果模块内部逻辑算法过于复杂,也可深入模型内部,针对SubSystem创建Harness进行验证,但必须清晰明白SubSystem-SubSystem之间前后逻辑关系、时序关系。
针对SWC,我们可以定义若干个TestSuite,可以把同一类型或者同一功能的测试用例放在一个TestSuite中,在TestSuite中,可编写m脚本实现从Data Dictionary(数据字典)中导出标定量和枚举量到Excel,从模型中导出当前测试层级的所有输入输出信号到Excel,形成格式固定的TestCase模板。后续便可在自动生成的TestCase模板,输入测试的详细执行信息;编写完成测试用例,可通过m脚本实现将TestSuite导入Signal Builder进行仿真测试;测试完毕后,通过m脚本实现将测试输出结果导出到TestSuite中,与开发者编写的用例期望输出进行对比,一致则测试通过(Pass),否则测试不通过(Fail)。同时在TestSuite中可完成模型的需求追溯,输出需求覆盖率报告,保证测试的完整性。
2.2 测试方案详解
2.2.1 创建测试用例
打开待测试SWC模型,在Simulink-Analysis-TestHarness-Creat for model…路径下创建Harness,本文介绍测试方法需要依赖于保证模型具备以下条件:
1.创建Harness必须保证模型能够运行通过。
2.使用数据字典进行数据管理。
3.文件需采用如下目录结构
如下脚本实现创建Excel测试用例模板:
% Creat sheet1 - Calibration parameters
CreatCalPrmSht(com_vba,x_language);
% Creat sheet - enmu data type
CreatTestCaseEnumSht(com_vba);
% Creat sheet - test case sheet
CreatTestCase1Sht(com_vba,x_language);
将此脚本添加到当前所开发工程路径下,电机运行,可自动生成SWCname_Test Suite固定模板,测试者可保存当前Excel到文件目录test下文件夹下,Excel模板生成后,一般建议TestCase_1保持不动,在其后添加sheet,命名为TestCase_2,将TestCase_1中内容全部copy到TestCase_2中,以此类推,如此可以在TestCase_2中按照时间序列轴添加输入信号和期望输出,完成测试用例编写,针对验证模型,测试者可以在一个TestSuite创建多个TestCase_X,用于验证不同需求。
测试者编写测试用例,为提高测试完整性、维护性、复用性,应当尽量考量满足如下要求:
1.测试用例Step,尽量给出注释,说明清楚测试条件和测试目的,注重测试规范性
2.测试用例编写不宜过长、过于繁琐,针对需求可分别创建TestCase验证,注重复用性,方便维护
3.测试用例编写,需考虑添加输入信号的逻辑性、考虑时序,严格遵守软件需求,避免无意义输入,注重测试的实用性
2.2.2 测试方案详解
在完成测试用例编写后,可进入下一步工作:TestSuite导入Signal Builder,此步依然m脚本实现,脚本框架如下:
function ImportExcel2Sigbuilder( )
.....................;
end
function writeData2SigBuild(test_data)
.....................;
end
function [out1,out2] = ReadExcelTestCase()
.....................;
end
function output = Cells2Range(row, colum)
.....................;
end
function output = FixDataValue(x_value)
.....................;
end
将此脚本添加到工程路径下,点击运行,可自动添加选择的Excel_TestSuite,将其导入Signal Builder
2.2.3 选择测试用例并运行
接着上一步,TestSuite信息已经导入Signal Builder,接下去就是仿真运行,鉴于一个TestSuite中可创建多个TsetCase(根据可验证功能需求而定),在仿真运行时,可通过m脚本实现导入,依次运行。
2.2.4 导出测试结果
仿真运行完毕,可通过m脚本将测试结果写到TestSuite中,并与测试者填写的期望输出进行对比,若测试通过,将自动以颜色和pass标志显示,否则为fail.
3.小结
以上便是基于Signal Builder,采用matlab与Excel交互方式,进行软件单元测试,测试者仅需关注测试用例详细执行信息的填写,关注测试需求是否得以验证。软件单元测试效率较高,并且软件单元测试用例也便于维护管理。
文章浏览阅读1.1k次。UVA - 264Count on CantorTime Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %lluSubmit StatusDescription Count on Cantor _count on cantor
文章浏览阅读1k次。Reducing the Dimensionality of Data with Neural Networks利用神经网络降低数据的维度G. E. Hinton* and R. R. SalakhutdinovHigh-dimensional data can be converted to low-dimensional codes by training a multilayer neural network with a small central layer to reconstruct h_reducing the dimensionality of data with neural networks
文章浏览阅读652次。centos7 使用tar 离线安装mysql5.7_liunx gtid table is not ready to be used. table 'mysql.gtid_executed' cannot
文章浏览阅读2.8k次。Oracle RAC的优势在于利用多个节点(数据库实例)组成一个数据库,这样在保证了数据库高可用性的情况下更充分的利用了多个主机的性能,而且可以通过增加节点进行性能的扩展。实现Oracle RAC需要解决的关键问题就是多节点进行数据访问时如何保证数据的一致性,Oracle是通过各节点间的私有连接进行内存融合(cache fusion)来保证各节点数据访问的一致性。用一个例子来解释一下内存融_rac
文章浏览阅读594次。1. Features支持直接打印数据集合, 如List、Set、Map、数组等全局配置log输出, 个性化设置Tag准确显示调用方法、行,快速定位日志所在文件位置支持android系统复杂对象Intent、Bundle、Message等打印提供空实现 release-no-op版本支持高性能日志写入文件(基于mmap)兼容Android Studio 3.1 日志格式2. screenshot日..._com.apkfuns.log2file
文章浏览阅读181次。<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Do_ntd-child
文章浏览阅读181次。使用tablayout+viewpage+fragment实现滑动页面,参考原文: http://blog.csdn.net/chenguang79/article/details/488041251. 布局文件中添加控件开始之前之前要先添加依赖库compile 'com.android.support:design:25.0.0'添加控件
文章浏览阅读6.5k次,点赞3次,收藏7次。导依赖implementation 'com.android.support:cardview-v7:26.1.0'implementation "android.arch.lifecycle:extensions:1.0.0"implementation "android.arch.persistence.room:runtime:1.0.0"annotationProcessor "an..._android retrofit viewmodel
文章浏览阅读1.7k次。VMware vCenter Server 的内部版本号和版本 (2143838)--2020-10-27 更新Click here to view full documenthttps://kb.vmware.com/articleview?docid=2143838&lang=zh_CNSymptoms 免责声明:本文是Build numbers and versions of VMware vCenter Server (2143838)的翻译版本。尽管我们会不断努..._vcenter 21784236
文章浏览阅读895次。SpringCloudAlibaba整合oss官网示例:https://github.com/alibaba/aliyun-spring-boot/tree/master/aliyun-spring-boot-samples/aliyun-oss-spring-boot-sample首先肯定是开通oss服务了(免费的):然后创建一个bucket:然后新建一个module,作为专门处理第三方服务的微服务:引入依赖:<?xml version="1.0" encoding="UTF-8"?_nacos如何配置oss
文章浏览阅读3.4k次。root 用户无法用 X11 转发的图形界面解决方案
文章浏览阅读7.7k次,点赞3次,收藏8次。1、注释掉~/.bashrc中anaconda相关的环境变量设置2、执行source ~/.bashrc3、重启一个xshell连接,启动vnc4、还原~/.bashrc中注释掉的anaconda相关的环境变量5、执行source ~/.bashrc_could not make bus activated clients aware of xdg_current_desktop=gnome envi