基于VTest的星载嵌入式软件目标码覆盖测试

2018-02-14 12:49左芸张杨
数字技术与应用 2018年10期
关键词:嵌入式软件覆盖率

左芸 张杨

摘要:目标码覆盖测试是星载嵌入式软件测试过程的关键步骤,能够进一步保证软件测试的完整性和充分性。VTest测试工具模拟嵌入式虚拟测试平台,导入被测源代码,VTest自动分析源代码的函数信息,对程序目标码进行插桩,执行目标码程序,统计目标码程序语句和分支覆盖信息,分析目标码的执行情况,进一步提升星载嵌入式软件质量。

关键词:VTest;目标码;覆盖率;嵌入式软件

中图分类号:TP311    文献标识码:A     文章编号:1007-9416(2018)10-0000-00

1引言

近年来我国卫星技术发展迅速,为人类带来了巨大的社会和经济效益。目前使用的導航卫星使用寿命都在十年以上,要求星载软件在太空正常运行时间长,这样对于星载嵌入式软件的可靠性和安全性有着极高的要求,促使航天星载软件在各个开发阶段都需要经过完整严格的测试。软件覆盖测试是验证软件功能、处理流程正确性的一种重要的方法和手段。传统的覆盖率测试是源代码级别的测试执行和覆盖信息统计,但是随着航天技术的发展,航天产品功能越来越强大,航天软件设计也越来越复杂,越来越多的软件采用C语言或高级语言编制,高级语言需要转换成目标码在才能在处理机上运行。随着C语言和其他高级语言编制的软件越来越多,源代码和目标码差异产生的问题的几率也就越来越大。编译器不同、编译选项的不同都会产生不同的目标码程序,因此对高安全等级的星载嵌入式软件进行目标码语句和分支覆盖测试,才能满足完全高安全等级软件测试覆盖的要求。

2虚拟平台构建

嵌入式软件编译器的编译过程和优化技术会导致产生的目标码与源代码之间非100%对应,因此需要借助测试工具插桩和统计。VTest测试工具可以进行目标码覆盖率测试。VTest平台中的各种仿真模型都可以封装成独立的Windows动态链接库,以便于通过“搭建”的方式快速构建虚拟目标系统。VTest中已建立了常用的嵌入式处理器,如80x86、TSC695、TI C3X、ADSP21020/60、8031/32、AT697的CPU模拟器模型库、以及常用的芯片仿真模型库,如8252、CAN总线、1553芯片等。在构建虚拟目标系统时,从已有的仿真模型库中选取所需的模型库,并进行必要的配置连接即可,避免了重复开发工作。

在进行目标码测试之前,需要事先知悉被测的软件的运行芯片、外部接口类型、开始运行地址、主频、内存使用范围等信息。VTest为用户提供图形化方式构建虚拟系统,本次例举的软件为AT697F芯片上运行软件,开发环境为Eclipse,编程语言为C语言。在VTest中新建项目,选择芯片型号“AT697F”,在芯片属性设置中设置主频,项目名,项目版本,检查文件日期,设置目标文件为被测软件的elf,选择解析库,选择全部的源文件路径,保存设置的项目信息。

项目信息设置完成后选择菜单“调试->开始调试/结束调试”进入调试状态,如果前期设置步骤均正确,则可在调试框中查看到“创建虚拟机成功”的提示。如果创建不成功,则提示相应的错误原因。如图1所示。

3目标码覆盖测试过程

在VTest中成功建立AT697F虚拟测试平台后即可开展下一步测试工作。VTest主界面是标准的windows多窗口样式,主界面顶部包含菜单栏、工具栏,界面中间部分是源代码编辑/显示窗口,其它还包括工作区、寄存器、函数调用栈、函数统计、代码追踪、变量显示、信息输出等调试辅助窗口。这些窗口可以根据个人需要打开和关闭,可以自行拖放并调整其显示位置和大小。根据源代码文件路径导入的源程序,VTest自动分析C语言源程序所有的函数信息,并在对应源文件下展现其列表。用户双击函数名称时,工具自动打开源代码文件窗口并将光标定位至相应函数开始的位置。在VTest的项目信息上查看工程的源代码文件,选择被测函数,以Frame_ACK函数为例,右键选择“汇合汇编模式”可以查看目标码,VTest显示窗口以列表形式显示目标软件的反汇编代码,所有目标代码根据地址自小至大进行排列,依次显示目标码地址、目标码数据值以及反汇编字符串。如图2所示。

CPU模拟器处于停止状态时,可对寄存器值进行修改,直接点击需修改的寄存器值,进入文本编辑模式后输入数值并按回车即可。寄存器数值本次执行改变时,窗口中寄存器数值采用红色文本高亮显示。在寄存器中选择NPC,写入下一次需要运行到的地址,这样程序可以快速运行至设置的地址,工具也提供单步运行的方式运行目标码程序。

VTest判断当前正在执行的函数,自动添加函数中的全部局部变量以及函数参数,变量监视窗口中,运行过程中不可删除和添加变量,也不可更改变量值信息,只能显示局部变量信息。运行函数前,根据实际情况分别设置参数值分别运行TRUE分支和FLASE分支,运行完相应分支后,将覆盖信息输出保存为后缀名为.cox的覆盖文件。多次执行可以保存多个覆盖信息文件。如图3所示。

4目标码覆盖率信息查看

使用覆盖统计工具UCA.exe查看覆盖信息文件和覆盖统计报告,查看目标码覆盖信息需要被测软件信息、处理器信息、目标码信息。在UCA工具中打开VTest工程,添加源程序文件,设置主频,添加扩展名为.cox的覆盖文件,统计并输出报告。覆盖率报告生成后,UCA自动打开目标文件覆盖率统计报告。覆盖率报告分4部分组成,第一部分是项目的基本信息,包括项目名称、版本、覆盖率统计时间、所统计的覆盖率文件列表等;第二部分是覆盖率总体情况概述,包括项目总语句分支数及覆盖率表格;第三部分是函数覆盖率统计,使用柱状图显示每个函数的语句分支覆盖率;第四部分是目标码反汇编覆盖率详情。覆盖统计报告显示所有函数的目标码语句和分支的目标码覆盖信息,选择单个函数可以查看单个函数的具体覆盖信息。

已经执行过的目标码语句句首以“EXECUTED”显示,未执行语句句首以红色“NOTEXECU”进行区分,方便用户定位特定目标码地址覆盖率的覆盖原因,以便于用户分析用例的执行情况。进行目标码覆盖率统计时可添加多个后缀名为.cox的覆盖文件,测试工具将统计各个覆盖文件的覆盖信息,并显示最终的目标码覆盖情况。如图4所示。

5 结语

对于星载嵌入式软件要求越来越严格的形势下,对星载嵌入式软件进行目标码覆盖測试是十分必要的。本文描述了VTest测试工具对星载嵌入式软件目标码覆盖测试的过程和方法,采用测试工具虚拟目标平台,加载被测星载嵌入式软件,采用插桩的方法记录程序语句和分支的执行,使用统计工具查看目标码的覆盖信息,查看程序目标码语句和分支的执行情况,对已执行和未执行的目标码进行分析和研究,完成对星载嵌入式软件的目标码覆盖测试。

参考文献

[1]杨芳,贺红卫,谢鹏,饶京宏.嵌入式软件目标码仿真测试平台的研究与设计[J].计算机工程与设计,2009,30(19):4364-4367.

[2]黄晨,董燕,于倩,虞砺琨.基于目标码的测试覆盖不可达分析方法[J].测控技术,2017,(36):100-103+107.

[3]王永孟,马利东.嵌入式软件目标码测试分析[J].科技经济市场,2009,(4):12+11.

[4]乔文军.嵌入式软件测试平台的研究与实现[D].南京航空航天大学,2007.

[5]刘颖,王英,刘漫丹.嵌入式软件测测试覆盖[J].自动化仪表,2012,33(6):63-66

[6]孙陇平.嵌入式软件覆盖率测试的研究与应用[J].现代电子技术,2014,37(18):67-69.

The Spaceborne Embedded Software Object Code Coverage Testing based on VTest

ZUO Yun, ZHANG Yang

(China Electronics Technology Group Corporation Thirty-two Institute, Shanghai 201808)

Abstract: Test coverage based on object code is a key step of spaceborne embedded software testing process, it can ensure the integrity and adequacy of the test. Test tool of VTest can simulate the embedded virtual test platform, it can import the source code, it can automatically analyze the function information of source code, the pile foundation is inserted into object code, execute object code, count the statement and branch coverage based on object code, analysis of object code execution, it can help to further improve the spaceborne embedded software quality.

Key words: VTest; object code; coverage; embedded software

猜你喜欢
嵌入式软件覆盖率
民政部等16部门:到2025年村级综合服务设施覆盖率超80%
我国全面实施种业振兴行动 农作物良种覆盖率超过96%
基于人工智能的模块化嵌入式软件开发研究
实时嵌入式软件的测试技术
全景相机遥控器嵌入式软件V1.0 相关操作分析
基于喷丸随机模型的表面覆盖率计算方法
基于Eclipse的航天嵌入式软件集成开发环境设计与实现
航天嵌入式软件浮点运算误差分析与控制
航空软件代码覆盖率分析的项目管理
基于覆盖率驱动的高性能DSP指令集验证方法