C++Test针对Codewarrior的软件仿真方法

文档序号:6338063阅读:1120来源:国知局
专利名称:C++Test针对Codewarrior的软件仿真方法
技术领域
本发明涉及电站控制领域,具体涉及一种在C++I~est环境下对Codewarrior的测试对象进行软件仿真,从而得到单元测试的静态分析、动态测试的跟踪调试及覆盖率支持的方法。
背景技术
目前核电站的应用上,常常需要根据不同的客户要求,安装或增加一些新的设备, 这些设备需要使用相应的软件,此类软件都是在相应的工程软件环境下编写的,软件完成后需要首先进行测试,以验证是否能够驱动相应设备或是否达到驱动要求,但此类实际运行环境比较难以实现,因此就采用仿真的方法来验证和测试软件的正确性。现有技术中,核电站领域多是利用Codewarrior来进行软件的编程和测试,Codewarrior是一个完整的用于编程应用中的硬件集成开发环境,其本身自带有硬件仿真程序,可以实现测试对象的仿真调试工作。Codewarrior在使用时需要搭建硬件环境,搭建好环境后,然后编译测试对象, 加载到仿真环境中,执行编译生成文件,观察仿真器指示灯,然后选择刚刚执行过的测试用例,进行跟踪调试,每调试完一个功能项,要重新启动硬件仿真器,执行步骤比较繁琐,静态分析和动态测试都存在这样的问题,且不能实现覆盖率统计信息。另一方面,Codewarrior 在进行硬件仿真时,开发人员编写的代码必须已经开发完整,不完整的情况下,很难让测试人员运行在Codewarrior的硬件仿真环境里,如开发人员寄存器没有初始化的情况下,测试人员就无法进行测试,需要重起硬件、更改寄存器的值,很不便利。目前多数行业开始采用软件仿真来代替硬件仿真,软件仿真需要的运行环境相对硬件仿真的运行环境要少得多,而且软件仿真可以方便实现测试程序某个部分、某个功能、某个方向的部分输出,而且可以随时中止测试程序,随时提出测试过程中的数据,这些都是硬件仿真所实现不了的。因此,如何在核电站领域中使用软件仿真程序来提高工作效率,是当前需要解决的问题。

发明内容
为解决现有技术中Codewarrior的测试对象无法应用在软件仿真程序中的问题,本发明提供一种利用C++Test环境下调入软件仿真程序实现Codewarrior的测试对象的静态分析、动态跟踪调试及覆盖率统计信息的技术方案,具体方案如下C++Test针对 Codewarrior的软件仿真方法,步骤1、在Codewarrior中编写测试对象;其特征在于,依次执行下述步骤步骤2、将在Codewarrior中编写的测试对象中的非C语言进行剥离;步骤3、在Workbench中配置Codewarrior的执行环境;步骤4、然后导入剥离后的测试对象;步骤5、对Workbench中的〔++!"est进行配置Codewarrior的执行环境;步骤6、在C++Test中执行测试对象,生成测试用例;
步骤7、在Worlibench中运行测试用例,生成测试中间文件;步骤8、得到C++Test环境下的测试对象的测试结果和覆盖率信息。本发明的另一优选方案所述步骤1中剥离的非C语言由相应功能的C语言进行替换。本发明的另一优选方案所述步骤3中包括调用Codewarrior中针对此测试对象所用到的运行时库。本发明的另一优选方案所述步骤5中包括编译调用程序,所述调用程序包括如下步骤步骤51、编译可链接执行文件;步骤52、加载软件仿真程序并执行可链接执行文件;步骤53、读取测试结果进行显示输出。本方案充分解决Codewarrior的测试对象无法应用在软件仿真程序下的问题,同时提供测试覆盖率数据支持。使Codewarrior的测试对象软件脱离硬件仿真的环境而应用在软件仿真程序下,不必等到先做出硬件板卡再进行测试,缩短了工期,提高了工作效率。 达到降低技术难度、克服资源短缺、降低成本的效果。将原嵌入式动态单元测试执行流程 3个步骤合并成一个执行步骤,简化了执行过程。将C++Test与WoriAench结合,克服各自的缺陷,实现Codewarrior的测试对象在软件仿真程序下生成测试用例、测试中间文件,输出各种测试结果的有益效果,同时加上了编译动态运行时库的操作,以提供测试对象在编译过程中调用的相关库稳健,本方案采用软件仿真程序后相对硬件仿真大约提高工作效率 25% .,并且节约成本,减少对硬件资源的依赖。


图1本发明的执行步骤示意框图。图2本发明在C++Test环境下调用windiss时配置符号库示意图。图3是图2基础上配置工程属性窗口示意图。图4是图3基础上配置执行环境示意图。图5是图4基础上插桩示意图。图6是图5基础上执行示例示意图。
具体实施例方式本方案重新编写C++Test环境下的调用程序,调用程序自动执行软件仿真程序的调用、执行和回馈测试结果,不但克服了原C++Test不能调用Codewarrior的问题,还将原分为三个程序执行的步骤合成一个程序,大大减少了处理过程,也为各种不同程序的结合提供了一个新的思路。以Worlibench为基础环境,同时执行C++I~est和windiss软件仿真程序,使得Codewarrior的测试对象不但能够运行在Worlibench的软件仿真程序下,还使整个测试对象的测试过程受到C++Test的监控,实现了 C++Test环境下对测试脚本的静态分析、动态测试的跟踪调试,同时可以提供测试覆盖率数据支持。而且在C++Test下随时可以根据需要输出中间某部的测试结果,大大提高了编程人员的工作效率。如图1所示,此为本方案的工作过程如下
101 在Codewarrior中编写测试对象;此步利用Codewarrior按用户的要求编译好测试对象。102 将在Codewarrior中编写的测试对象中的非C语言进行剥离;由于在核电领域编写测试对象时,常常是多种语言组合成测试对象,在常用的C 语言情况下,还包括汇编语言,而在软件仿真时这些汇编语言就需要剥离或是屏敝,或是利用C语言重新缩写相应汇编语言所代表的功能以进行测试。因此需要在调入和配置前对测试对象中的非C语言程序进行处理,在测试执行的过程中要进行插桩操作,以满足测试需求,达到测试目标。103 在 Workbench 中配置 Codewarrior 的执行环境;Workbench是一个协同仿真环境,但是与Codewarrior之间并不兼容,因此需要首先对Worlibench进行环境配置和修改,以便能够执行Codewarrior的测试脚本。同时在 Workbench中调用此测试脚本要用到的在Codewarrior里的进行时库,以便于支撑测试脚本的独立运行。104 然后导入剥离后的测试对象;在Worlibench环境下将经过剥离或是添加了新编C语言的Codewarrior的测试对象调入。105 对 Workbench 中的 C++Test 进行配置 Codewarrior 的执行环境。C++Test作为一个插件安装在Worlibench中,要使C++Test作为一个中间控制程序首先需要对整个仿真执行环境进行配置,以便能够同时兼容Codewarrior和Worlibench里的软件仿真程序执行。此处的配置还包括发明人重新编译的可链接执行文件,可链接执行文件将原Codewarrior下硬件仿真分成三个程序执行的步骤,合成一个程序执行,并且能够随时监控软件仿真程序的执行过程和随时输出软件仿真程序的中间测试结果。106 在C++Test中执行测试对象,生成测试用例;在C++Test环境中将Codewarrior下的测试对象生成Workbench下可以使用的测试用例。107、在Worlibench中运行测试用例,生成测试中间文件;利用Worlibench的软件仿真程序Windiss将C++Test生成的测试用例调入并执行,生成各种需要的测试过程中的中间文件。108、得到C++Test环境下的测试对象的测试结果和覆盖率信息;在C++Test的环境下输出测试用例的各种测试结果,包括实时的测试过程和最终的静态分析、动态测试的跟踪调试及覆盖率支持等各种信息。在102发明人所编写的调用程序示例如下本方案首先将C++Test执行的下述步骤合在一个程序中执行。(I)Build Vxfforks Test Module-DKM(PassFS)配置仿真程序运行环境(2)LoadAnd Run Vxfforks Test Object(DKM)与仿真程序进行交互操作。(3)Load Test Result :C+test从仿真程序环境中读取测试结果和覆盖率统计信息。合并后的程序如下编写自己的脚本来调用winder shell。这里将脚本命名为 Codewarriorr_Runffithout0perationSys_Diab5. 6. 1_((PassFS)_A1IinOneStep(build_ load_run_clollect_results)-Release。脚本内容为
〈? xml version=" 1.0" encoding=" UTF-8" ? ><FlowRecipeTemplate toolName='' C++Test" formatVersion =/r 1.0" ><Name>Build test module for Codewarrior VxWorks(DKM)-File Channel on PassFS(licenserequired) </Name><RunnableExecution>......〈一编译成可链接执行文件><PrecompileStep/><AppendIncludedTestCases/><HarnessInstrumentationStep symboIsOptimization =〃 false" /><ReadStaticCoverageStep/><SendStaticCoverageStep/>〈UserStubsInstrumentationStep/><ReadSymbolsDataStep/>〈LsiStep IibSymFile = " ${cpptest:testware_loc}/libSym. xml“ /><ReadLsiConfigStep/><AnalyzeMissingDefinitions generateStubs =〃 false" /><ConfigureStubs/><CreateStubConfigHeader/><PrepareDataSources type 二" array “ />〈TestRunnerGenerationSteptestSuiteConfigFile =" ${cpptest:testware_loc}/testsuites. xml“testrunnerCFile = " ${cpptest:testware_loc}/cpptest_ ttestrunner. c"testrunnerCppFile = " $ {cpptest:testware_loc}/cpptest_ testrunner. cpp“testLogFile =” ${cpptest:testware—loc}/cpptest—results, tlog"covLogFile = " ${cpptest:testware_loc}/cpptest—results, clog"appendLogs = “ false“/><CompileStep/><BuildRuntime LibStep/><-加载并运行链接执行文件>commandLine = “ windiss. exe${cpptest:testware_Ioc}\$ {project_ name} Test, out “<-读区测试结果覆盖率信息和测试结果><ReadStaticCoverageStep/><SendStaticCoverageStep/>
....../FlowRecipeTemplate>以下以C++Test环境下调用windiss举例说明C++Test的配置过程。1、配置符号库,由于使用DKM模式,必须将库符号标识模式设置为关闭。如图2所不。2、配置工程属性窗口,将TGT_FLAG后的选项改为_tMGT5200FH:windiss。如图3 所示。3、新建 Connection object,选处理器为 5200B,连接该对象,选 Reset and download选项,将执行测试用例生成的.out文件,用AddFiles按钮加入到当前面板。此步是在执行步骤102后,生成了测试用例,在执行时的配置。如图4所示。4、Instruction pointer。如图 5 所示。5、配置 Run options->Run Options。如图 6 所示。6、然后点击debug按钮,进入动态单元测试调试窗口,点击测试用例,设置断点点击Resume按钮,光标直接运行到断点处。以此类推,即可以跟踪调试目标测试代码了。这里需要说明,在执行测试用例前需要将C++Test生成的测试用例E)(CLEUDE掉。 理由为C++Test生成的测试用例并不是和WORKBENCH —个系统的。在Workbench Build的过程中,识别不了 C++Test生成的测试用例的路径。
权利要求
1.C++Test针对Codewarrior的软件仿真方法, 步骤1、在Codewarrior中编写测试对象; 其特征在于,依次执行下述步骤步骤2、将在Codewarrior中编写的测试对象中的非C语言进行剥离; 步骤3、在Workbench中配置Codewarrior的执行环境; 步骤4、然后导入剥离后的测试对象;步骤5、对Workbench中的〔++!"est进行配置Codewarrior的执行环境; 步骤6、在C++Test中执行测试对象,生成测试用例; 步骤7、在Worlibench中运行测试用例,生成测试中间文件; 步骤8、得到C++Test环境下的测试对象的测试结果和覆盖率信息。
2.如权利要求1所述的C++Test针对Codewarrior的软件仿真方法,其特征在于,所述步骤2中剥离的非C语言由相应功能的C语言进行替换。
3.如权利要求1所述的C++Test针对Codewarrior的软件仿真方法,其特征在于,所述步骤3中包括调用Codewarrior中针对此测试对象所用到的运行时库。
4.如权利要求1所述的C++Test针对Codewarrior的软件仿真方法,其特征在于,所述步骤5中包括编译调用程序,所述调用程序包括如下步骤步骤51、编译可链接执行文件;步骤52、加载软件仿真程序并执行可链接执行文件;步骤53、读取测试结果进行显示输出。
全文摘要
本发明涉及C++Test针对Codewarrior的软件仿真方法,涉及计算机仿真领域。包括在Codewarrior中编写测试对象;将在Codewarrior中编写的测试对象中的非C语言进行剥离;配置Workbench、C++Test运行Codewarrior的执行环境;在Workbench中运行测试用例,生成测试中间文件;得到C++Test环境下的测试对象的测试结果和覆盖率信息。本方案利用C++Test实现Codewarrior的测试对象在软件仿真程序里的运行,实现了测试对象的静态分析和动态测试的跟踪调试,同时提供测试覆盖率数据支持,减少了硬件需求,缩短了工期,提高了工作效率。
文档编号G06F9/455GK102567069SQ20101057999
公开日2012年7月11日 申请日期2010年12月7日 优先权日2010年12月7日
发明者刘军利, 孟广国, 钱升华, 黄太新 申请人:中国广东核电集团有限公司, 北京广利核系统工程有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1