C++Test在无操作系统下的软件仿真方法

文档序号:6338064阅读:169来源:国知局
专利名称:C++Test在无操作系统下的软件仿真方法
技术领域
本发明涉及电站控制领域,具体涉及ー种利用C++Test实现无操作系统环境下对测试对象实现软件仿真,从而得到単元测试的静态分析和动态测试的跟踪调试的方法。
背景技术
目前核电站的应用上,常常需要根据不同的客户要求,安装或増加一些新的设备, 这些设备需要使用相应的软件,此类软件都是在相应的工程软件环境下编写的,软件完成后需要首先进行测试,以验证是否能够驱动相应设备或是否达到驱动要求,但此类实际运行环境比较难以实现,因此就采用仿真的方法来验证和测试软件的正确性。现有技术中,核电站领域都是采用C++Test —类软件来运行wind river prober进行硬件环境下的仿真测试,wind riverprober能够仿真代码在硬件环境下的执行情況,从而查找代码中存在的问题,wind river probe在使用时需要搭建硬件环境(变压器ー个,wind river probe, 板卡),搭建好环境后,然后编译测试对象,加载到仿真环境中,执行编译生成文件,观察仿真器wind river probe指示灯,然后选择刚刚执行过的测试用例,进行跟踪调试,每调试完一个功能项,要重新启动硬件仿真器,执行步骤比较繁琐,静态分析和动态测试都存在这样的问题。而且wind river probe的采购周期长,成本高,很多单位即使有数量也很少,当有多个项目人员需要使用吋,往往就会出现无法同时兼顾的情況,影响工作进度。另一方面,wind riverprobe在进行硬件仿真时,开发人员编写的代码必须已经开发完整,不完整的情况下,很难让测试人员运行在wind riverprober的硬件仿真环境里,如开发人员寄存器没有初始化的情况下,测试人员就无法进行测试,需要重起硬件wind river probe,更改寄存器的值,很不便利。目前多数行业开始采用软件仿真来代替硬件仿真,软件仿真需要的运行环境相对硬件仿真的运行环境要少得多,而且软件仿真可以方便实现测试程序某个部分、某个功能、某个方向的部分输出,而且可以随时中止测试程序,随时提出测试过程中的数据,这些都是硬件仿真所实现不了的。因此需要在C++Test环境下来执行软件仿真程序, 但是由于C++Test本身仅为硬件仿真所开发,其无法直接运行软件仿真程序,因此,如何在核电站领域中克服C++Test不能运行软件仿真程序的问题,是当前需要解决的问题。

发明内容
为解决现有技术中,C++Test环境里无法实现软件仿真环境下的测试对象的静态分析和动态测试的跟踪调试的问题,本发明提供ー种利用C++Test环境下调入仿真软件实现无操作系统测试软件的静态分析和动态跟踪调试的技术方案,具体方案如下C++Test 在无操作系统下的软件仿真方法,包括如下步骤步骤1、在工程软件中編译测试对象并生成测试脚本,利用测试脚本生成测试中间文件;步骤2、在C++test中利用仿真环境执行测试中间文件;步骤3、以C++test环境下得到仿真环境下的测试结果和覆盖率统计信息;
其特征在于所述步骤2包括如下步骤步骤21、在C++test中配置工程软件的使用环境;步骤22、在C++test中调用测试脚本所用到的工程软件的运行时库;步骤23、在C++test中编译调用程序来调用软件仿真程序;步骤23、在C++test环境下的工程软件中执行软件仿真程序与测试中间文件进行交互测试。本发明的另ー优选方案所述步骤3得到的测试结果包括中间测试结果或根据需要得到的部分测试結果。本发明的另ー优选方案所述步骤23编译调用的软件仿真程序是Windiss软件仿
ζΜ^ ο本方案充分解决无硬件仿真环境支持的情况下,进行单元测试静态分析和动态测试的跟踪调试的难题,同时提供测试覆盖率数据支持。使软件仿真直接运行在C++Test环境下,不必等到先做出硬件板卡再进行测试,缩短了エ期,提高了工作效率。达到降低技术难度、克服资源短缺、降低成本的效果。将原嵌入式动态单元测试执行流程3个步骤合并成一个执行步骤,简化了执行过程。将C++Test与wind river probe进行交互的动作,全部替换为调用软件仿真代码,同时加上了编译动态运行时库的操作,以提供测试对象在编译过程中调用的相关库稳健,C++test采用软件仿真程序(windiss)后相对硬件仿真(wind river probe)大约提高工作效率25% .。本发明可以节约成本,减少对硬件资源的依赖,通过编代码脚本可以使用测试工具C++Test进行软调试,可以方便进行代码定位。


图1本发明执行步骤示意框图。图2本发明在C++Test里中配置测试对象执行环境示意图。图3是图2基础上插桩配置示意图。图4是图3基础上运行选项示意图。图5是图4基础上配置调试窗ロ示意图。图6是图5基础上设置断点示意图。图7是图6基础上处理断点示意图。
具体实施例方式本方案的无操作系统是指测试对象本身就是可执行的操作系统,没有运行在其它的操作系统环境下,它含有main函数,可无限循环调用。本方案重新编写C++test的脚本命令,将原调用硬件仿真的代码编写成调用软件仿真的代码,采用直接在C++test中调用工程软件的时序库,使软件仿真完全运行在C++test环境下,实现了 C++test环境下对单元测试的静态分析、动态测试的跟踪调试,同时可以提供测试覆盖率数据支持。在实现wind river prober所有功能的情况下,还克服了 wind river prober需要重新启动才能得到单元测试的中间执行結果,随时可以根据需要输出中间某部的测试結果,大大提高了编程人员的工作效率。如图1所示,此为本方案的工作过程如下
101 在工程软件中編译测试对象并生成测试脚本,利用测试脚本生成测试中间文件;此为利用相应的工程软件按用户要求编译测试对象,编译好后生成测试脚本,在测试脚本中添加各个桩点生成测试中间文件,添加桩点是为了输出各种效果以验证此段脚本的功能。102 在C++test环境下配置工程软件的使用环境;在C++test环境中为步骤1中所使用的工程软件配置运行环境。103 在C++test中调用测试脚本所用到的工程软件的运行时库;在C++test配置好的工程软件环境中,将当前测试中间文件所用到的工程软件里的运行时库调进来,以支持当前测试中间文件的运行。104 在C++test中编译调用程序并调用软件仿真程序;在C++test环境里,启动配置好的工程软件,同时编写测试脚本,进行测试配置, 调用软件仿真程序的运行环境,利用本方案編制的程序将软件仿真程序调入工程软件中, 与工程软件进行交互,达到而测试目的。105 在C++test环境下的工程软件中执行软件仿真程序与测试中间文件进行交互测试。在C++test环境下的工程软件中启动仿真软件,利用仿真软件运行包含桩点的测试中间文件,同时在屏幕上输出桩点的效果,最终生成可执行文件,在此过程中,C++Test可以随时控制软件仿真的运行过程,以得到想要的結果。106 在C++test中得到工程软件的仿真环境下的测试结果和覆盖率信息;在C++test环境中,随时可以得到仿真软件的测试結果、动态测试的跟踪调试信息及覆盖率信息,特别是能够随时得到中间测试結果,避免了硬件仿真需要重启当前环境才能得到中间结果的繁琐过程。
104中本方案所編制的程序内容如下 本方案首先将C++test执行的下述步骤合在ー个程序中执行。
(1)BuildVxfforks Test Module-DKM(PassFS)配置仿真程序运行环境
(2)LoadAnd Run Vxfforks Test Object(DKM)与仿真程序进行交互操作。
(3)LoadTestResult:C+test从仿真程序环境中读取测试结果和覆盖率统计信 肩、ο合并后的程序如下将原调用wind river prober的代码修改为调用windiss,同时增加windiss的时序库,く? xml version = “ 1.0〃 encoding = “ UTF-8" ? ><FlowRecipeTemplate toolName = “ C++test" formatVersion = “ 1. 0" ><Name>Build Vxfforks Test Module-DKM(PassFS)</Name><RunnaoleExecution>< ! —SetProperty key = " nm〃 value = " nmpentium" /—> < ! —GNU toolchain—>......</RunnableExecution>
<ConditionaIExecution value = '‘ $ {cpptest os) “ equals =“windows“ ノ<SetProperty key = “ host_prefix" value = “ host: “ /><SetProperty key = " wrsh" value = " windsh" /><SetProperty key=" wrsh" value = " $ {cpptestproperty: wrsh}. bat" /></ConditionalExecution><RunnableExecution>......<PrecompileSt 印/><AppendIncludedTestCases/><HarnessInstrumentationStep symbolsOptimization =" false" /><ReadStaticCoverageStep/><SendStaticCoverageStep/><UserStubsInstrumentationStep/><ReadSymbolsDataStep/>......<CompileSt 印/><BuiIdRuntimeLibStep /><Name>Load And Run Vxfforks Test 0bject (DKM)</Name)......<Compi IeStep file = " $ {cpptest: testware_loc} /ctdt. c" addToExtSources =" true" /><LinkStep result =" ${cpptest:testware_loc}/${project_name} Test, out" /><ClearTempCoverageData/>〈CustomSt印id = " ReadCoverage "......<Name>调用软件仿真环境windiSS</Name> :本方案采用的软件仿真程序为 windiss。commandLine = “ windiss. exe$ {cpptest testware_ loc}\${project_name}Test, out"/><Name>Load Test Results</Name><ReadStaticCoverageStep/><SendStaticCoverageStep/>...... </FlowRecipeTemplate>
本方条避免 J C++Test 与 wind river prober 父互时,wina river prober 曾先要将单元测试编译后,生成.elf(可执行链接文件),再将该.elf文件通过JTAG传输协议传入到wind riverprobe中,并由wind river probe和板卡交互执行,其执行的结果和覆盖率统计信息再通过JTAG传输协议传回C++Test,然后,在C++Test里显示的繁琐步骤。在C++Test和windiss交互时,C++Test将单元测试编译后的文件.o,调用windiss, 用windiss直接执行.ο,即直接生成测试结果和测试对象。本方案在执行吋,需要对C++test环境进行配置,以保持执行过程中使用的工程软件属性一致性,保障测试环境不被破坏。以下以C++test环境下调用windiss举例说明本方案的工作过程和配置过程。1、执行测试用例,设置断点,进行跟踪调试。2、运行测试用例3、选择测试用例;4> Α τΙ Α τ Bui 1 d and run test module for None_0PS module unit testing-FileChannel,其中Build and run test module for None_0PS module unit testing-FileChannel是本发明为使C++test能够兼容软件仿真所开发的脚本。5、建立与仿真环境一致的交互对象,新建Connection object,选处理器为5200B, 连接该对象,选Reset and download选项,将执行测试用例生成的.OUT文件,用AddFiles 按钮加入到当前面板。如图2所示。6、配置 Instruction pointer,如图 3 所示。7、配置 Run options->Run Options,如图 4 所示。8、点debug按钮,进入动态单元测试调试窗ロ,如图5所示。9、点击测试用例,设置断点点击Resume按钮,如图6所示。10、光标直接运行到,断点处,如图7所示。以此类推,即可以跟踪调试所需的测试代码了。
权利要求
1.C++Test在无操作系统下的软件仿真方法,包括如下步骤步骤1、在工程软件中編译测试对象并生成测试脚本,利用测试脚本生成测试中间文件;步骤2、在C++test中利用仿真环境执行测试中间文件;步骤3、以C++test环境下得到仿真环境下的测试结果和覆盖率统计信息;其特征在于所述步骤2包括如下步骤步骤21、在C++test中配置工程软件的使用环境;步骤22、在C++test中调用测试脚本所用到的工程软件的运行时库;步骤23、在C++test中编译调用程序来调用软件仿真程序;步骤23、在C++test环境下的工程软件中执行软件仿真程序与测试中间文件进行交互测试。
2.如权利要求1所述的C++Test在无操作系统下的软件仿真方法,其特征在干,所述步骤3得到的测试结果包括中间测试结果或根据需要得到的部分测试結果。
3.如权利要求1所述的C++Test在无操作系统下的软件仿真方法,其特征在干,所述步骤23编译调用的软件仿真程序是windiss软件仿真。
全文摘要
本发明涉及C++Test在无操作系统下的软件仿真方法,属于计算机仿真领域,包括在C++test中配置工程软件的使用环境;在C++test中调用测试脚本所用到的工程软件的运行时库;在C++test中编译调用程序并调用软件仿真程序;在C++test环境下的工程软件中执行软件仿真程序与测试中间文件进行交互测试;以C++test环境下得到仿真环境下的测试结果和覆盖率统计信息。本方案利用C++test在无硬件仿真环境支持的情况下,进行单元测试静态分析和动态测试的跟踪调试,同时提供测试覆盖率数据支持,减少了硬件需求,缩短了工期,提高了工作效率。
文档编号G06F11/36GK102541615SQ201010579998
公开日2012年7月4日 申请日期2010年12月7日 优先权日2010年12月7日
发明者刘军利, 孟广国, 张宓, 张海滨 申请人:中国广东核电集团有限公司, 北京广利核系统工程有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1