Simulink自动化单元测试方案概述

Simulink自动化单元测试方案概述


摘要:软件单元测试作为汽车电子软件V流程开发中的重要一环,再完成软件单元构建后,需要验证软件逻辑是否符合功能需求。做好单元测试会极大的提高开发效率。单元测试做的全面也能避免后期台架测试及实车测试中出现非预期现象。本文基于此介绍一种Simulink自动化的单元测试方案,涉及如何创建测试框架,如何自动生成Excel格式的测试用例模板,如何添加输入信号及期望输出。容

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交互方式,进行软件单元测试,测试者仅需关注测试用例详细执行信息的填写,关注测试需求是否得以验证。软件单元测试效率较高,并且软件单元测试用例也便于维护管理。

  • 9
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值