PDF下载
一种嵌入式软件逻辑测试方法

王城松

550000,江南机电设计研究所,贵州贵阳

摘要: 本文描述了逻辑测试的基本原理,针对嵌入式软件测试的特点,分析了嵌入式软件逻辑测试的难点,详细介绍了一种可行的基于Vxworks的逻辑测试方法,可有效应用于对实时性要求提高,硬件资源有限的嵌入式软件测试中。
关键词: 嵌入式软件;逻辑测试;Vxworks
DOI:10.12721/ccn.2023.157068
基金资助:
文章地址:

1 引言

随着嵌入式实时系统的应用越来越广泛,嵌入式实时操作系统和应用软件也越来越多,广泛地应用在医疗、通信、电器、军事、航空、航天等高精尖技术及实时性和安全性要求极高的领域。其中以VxWorks应用最具有代表性,运用在各种信号处理机、大型飞机和各类控制系统上。逻辑测试是软件测试的一个重要类型,不仅能够检测软件的逻辑错误,而且能够清晰地反映软件测试工作的充分性和全面性。对于嵌入式软件系统而言,通常软硬件联系紧密,且常规的逻辑测试方法和技术在嵌入式软件系统中难以奏效。因此,如何对这些实时性和安全性要求很高的嵌入式软件进行逻辑测试成为一个极具挑战性的课题。

2 逻辑测试概念

逻辑测试需要访问测试代码本身并对代码进行插装,并以程序的内部结构为基础来设计测试案例,因此它是白盒测试的一种方法。逻辑测试的基本准则是测试用例要尽可能多地覆盖程序的内部逻辑结构,以发现其中的错误和问题。同时,检验软件测试工作的充分性和全面性,必要时补充测试用例,以使相关的逻辑测试指标得以满足。逻辑测试的工作流程如图1所示。

图片10.png

图1 逻辑测试的工作流程

3 逻辑测试基本原理

逻辑测试一种基于路径的白盒测试方法。通过分析执行的测试用例履行过的路径,统计所覆盖到的代码数量,衡量测试覆盖率是否满足既定的要求,同时也是判断测试用例是否充分的标准。逻辑覆盖测试往往能帮助人们找到隐藏最深的缺陷以及不可达代码,是软件测试中非常重要的一种测试类型。逻辑测试包括语句覆盖、分支覆盖、条件覆盖、条件组合覆盖等常见类型。

逻辑覆盖测试的基本原理是通过测试工具分析源代码的分支结构,然后对源代码进行“插装”,也就是添加一些用于记录路径信息的代码。将“插装”后的源代码进行编译链接后装载至目标机环境中运行,通过分析“插装”后的程序运行结果即可得到测试覆盖率情况。该测试过程通常是一个迭代的过程,直到测试结果满足了既定的要求为止。工作原理可参见图2。

图片11.png

图1 逻辑测试的基本原理图

但嵌入式软件逻辑覆盖测试往往是比较难以实现的,这是因为在对源代码进行“插装”操作时会导致源代码膨胀,而且嵌入式软件通常对实时性要求非常高,且可用硬件资源有限,因此导致“插装”后的软件无法达到原有的技术性能要求甚至无法正常运行,从而导致逻辑覆盖测试失败。

要取得准确真实的软件覆盖效果,仅凭人力难以完成,这就需要借助专业的测试工具。对嵌入式系统进行覆盖测试的关键就是如何获取测试所产生的覆盖数据。大部分覆盖分析测试工具都需要对代码插装,而当在目标环境下运行经过代码插桩的可执行程序时,就会有覆盖分析数据产生,这些数据是分析覆盖数据报告的重要输入条件。所以,本文将介绍一种行之有效的基于VxWorks的逻辑覆盖测试方法。

4 一种基于VxWorks的逻辑覆盖测试方法

这种逻辑测试方法基于Vxworks操作系统,主要利用Tornado开发环境提供的强大功能,再结合LDRA Testbed的插装技术。该方法的原理是通过使用专用的插装模版和LDRA Testbed的BITMAP技术,插装后的代码在目标机运行的时候将相应的特征值信息放到一个大小固定的数组中。当测试进行到一定阶段,需要对覆盖率信息进行分析时,通过Tornado的shell将该数组的内容读取回主机进行分析即可。

利用Testbed进行插装获取覆盖率的基本实现途径是:插装后的代码在目标机运行时将相应的特征值信息放到一个大小固定的数组中;当测试进行到一定阶段,需要对覆盖率信息进行分析时,可通过宿主机上Tornado集成开发环境的shell界面将该数组的内容读取回主机进行分析,即可获得代码的语句或分支覆盖率,且多次测试的覆盖率数据可以进行累加统计。

根据实际情况,宿主机、目标机之间可以通过网络、串口等方式进行连接。通过这种连接将在宿主机上产生的可执行文件下载到目标机上,并在目标机上运行。运行时在目标机上产生的覆盖测试数据町以通过网络由宿主机进行获取。并在主机平台上用测试工具LDRA Testbed进行覆盖率数据分析。

这种基于VxWorks的逻辑覆盖测试方法具体操作步骤如下:

1)打开Testbed测试工具,创建一个CoverageTest的工程,将被测试的软件中.c或*.cpp文件加入工程中;

2)选中Configure菜单下的Instrumentation Option选项,然后点击Start Analysis按钮进行插装,将会在和源文件同目录下产生inszt_*.c或inszt_*.cpp文件;

3)将这些插装后产生的文件更名为原被插装文件,即去掉前面的”inszt_“标识,然后跟其它的源文件一起编译链接,产生可执行的目标文件;

4)将该可执行文件下载到同标机,在日标机上运行执行测试用例或输入测试数据,即可产生带有覆盖率信息的数据。

5)在宿主机上打来Tornado的shell界面,将该文件的内容读取同主机用Testbed进行分析,即可获得相应的代码或分支覆盖率。

5 结论

嵌入式软件逻辑测试不仅能够检测程序的逻辑错误,而且能够提供衡量测试的充分性、完备性和有效性的标准。本文介绍了逻辑覆盖测试方法基本概念,提出改进的逻辑覆盖测试方法已在多个不同的VxWorks应用软件测试中应用,相对于其它方法,操作更为简便,效率较高,对系统实时性影响较小,可以作为嵌入式软件开发或测试工程师进行覆盖率测试的有效方法。同时,通过对插装模板的更改,可以将该方法应用到其它嵌入式实时操作系统平台的软件测试中。

参考文献

[1]朱少民.软件测试方法和技术[J].清华大学出版社,2005.

[2]郭洋.基于VxWorks的逻辑覆盖测试方法[J].电子质量,2007.

[3]肖永健.一种嵌入式逻辑覆盖测试方法研究[J].自动化测试技术,2015.

[4]李易.智能车路系统网络化嵌入式软件测试平台研究[D].长安大学,2020.

[5]陶金龙.嵌入式软件虚拟化仿真测试环境构建技术[J].航天科工集团第十届软件评测学术交流会,2019.