基于嵌入式开发的白盒测试插桩技术研究
兰娅勋+陆璐
摘 要: 以往的白盒测试插桩方法普遍不能精准定位到目标插桩,语句覆盖率不符合要求。为了解决这个现象,提出一种基于嵌入式开发的白盒测试插桩方法。所提方法先对嵌入式开发的插桩技术原理进行介绍,提出使用在线嵌入式测试软件CodeTEST进行自动插桩的理念。设计基于嵌入式开发的白盒测试插桩进程,分程序标准化、插桩顺序划分和覆盖率分析三步进行。并介绍插桩顺序块划分方法、插桩方位提取规则以及插桩信息分析方法。实验结果表明,所提方法拥有很高的语义覆盖率和分支覆盖率。
关键词: 嵌入式技术; 白盒测试; 插桩技术; CodeTEST
中图分类号: TN806?34; TP311 文献标识码: A 文章编号: 1004?373X(2017)14?0049?03
Abstract: The previous white box testing plugging pile method does not precisely position to the target pile, and its statement coverage rate does not meet the requirements. In order to eliminate this phenomenon, a kind of white?box testing plugging pile method based on embedded development is put forward in this paper. The principle of the pile technology based on the embedded development is introduced. A concept that uses the online embedded testing software CodeTEST the to implement the automatic plugging pile is put forward. The progress of white?box testing plugging pile based on embedded development is designed and divided into three steps of program standardization, inserted sequence division and coverage rate analysis. The plugging pile block partition method, plugging pile orientation extraction rules and plugging pile information analysis method are introduced. The experimental results show that the proposed method has high semantic coverage rate and branch coverage rate.
Keywords: embedded technology; white box testing; insert pile technology; CodeTEST
0 引 言
嵌入式技术的应用价值越来越大,目前已经成为热点研究话题。就现阶段而言,嵌入式开发在软件测试中的应用往往过于重视软件调试,随着用户对软件质量要求的不断攀升,软件测试明显已经不能只做表面功夫,需要更深层次的调试支持。
白盒测试是软件测试人员常用的测试方法,以白盒测试为例,以往进行的嵌入式开发代码插桩普遍无法得到结构相对完整的语义信息,语句覆盖率不符合要求。造成这种情况的原因是在嵌入式开发的初期,插桩技术不能自动完成语义覆盖[1],此时一旦涉及到目标测试环境的交互开发,白盒测试就不能精准定位到目标插桩。对此,提供一种新的基于嵌入式开发的白盒测试插桩方法,对以往方法覆盖率低的缺点进行改善,达到提高白盒测试精度的需求。
1 嵌入式开发的插桩技术原理
嵌入式开发将通过动、静态相融合的测试方法取得插桩定位信息,使用在线嵌入式测试软件CodeTEST进行自动插桩[2]。CodeTEST具有在线追踪和展示能力,几乎支持所有嵌入式开发设备软硬件平台。CodeTEST在插桩过程中不用变更原软件程序代码,软件测试人员只需敲定需要进行代码插桩的范围即可。
图1为CodeTEST的软件测试插桩进程,将根据工具鏈的多元组合达成嵌入式插桩。软件源代码在中央控制器的开发环境中通过编译器套件带动Makefile文件进行预处理。预处理文件的代码间隔变宽,更容易向其中插入探测针。同时,预处理过程也会间接修正错误的软件程序代码。插桩器在预处理文件中插入探测针,探测针携带定位标签,测试人员能够通过跟踪定位标签查看软件测试进程。由于CodeTEST不能直接将编译代码写入定位点,因此利用编译器套件将插桩文件汇编并引入编译器,通过构建编译程序和链接程序自动生成可执行代码,以便对源代码文件进行插桩。
2 基于嵌入式开发的白盒测试插桩方法
本文提出的基于嵌入式开发的白盒测试插桩方法先排列好软件程序插桩顺序,再依次进行插桩,对插桩信息进行分析最后达成白盒测试。
2.1 基于嵌入式开发的白盒测试插桩进程
目前,软件程序使用的编译语言主要是C语言,考虑到白盒测试的特殊性,所提出的基于嵌入式开发的白盒测试插桩方法设计了如图2所示的基于嵌入式开发的白盒测试插桩进程。软件程序的预处理进程采用CodeTEST的嵌入式处理方式,先后进行程序标准化以及插桩顺序的划分。插桩进程分为语句覆盖插桩和分支覆盖插桩。对标准化程序进行插桩和编译后,得到可执行代码和插桩信息,进而计算出白盒测试的覆盖率信息[3]。
2.2 顺序块划分
在白盒测试中获取良好的插桩方位是提高覆盖率的有效方式。插桩顺序作为提供插桩方位的前提条件,其原理是在插桩顺序中对顺序块进行划分。顺序块是指单纯的软件程序处理代码,其中不含有循环语句、外部链接以及外部函数,程序的运行是一步到位且不重复,只存在一个入口和一个出口[4],在保证探测针数量最少的情况下,插桩方位也只存在于程序的首端或者尾端,可有效缩短插桩时间,避免语句重复覆盖,减少了白盒测试对源代码的干扰。除以上描述之外,顺序块中也不会含有不可执行代码,这是由嵌入式开发设备内存小的特性决定的[5]。首端代码的宏、声明、定义以及以上代码所占据的行列和标点都归属于不可执行代码的范畴。
对插桩方位进行提取需要应用到四种规则,如表1所示。
2.3 插桩信息分析
白盒测试中插桩信息与静态数据库进行静态连接,以交互模拟语言提取探测针得到软件程序代码特征,进一步生成可执行代码。桩函数负责将插桩信息传送给CodeTEST进行分析,由CodeTEST计算白盒测试覆盖率。使用桩函数还原原有软件程序,返还白盒测试驱动指令[6],使用顺序块驱动桩函数。在白盒测试中,用表示CodeTEST得到的插桩信息,表示CodeTEST对插桩信息的分析顺序,语句覆盖率表示为式(1),分支覆盖率表示为式(2),如下: (1)
式中:是进行白盒测试软件程序的序列,共有个程序;,表示插桩信息中的语句总量和已处理的分支数量;,是仅处理过一个的语句、分支数量;是可执行代码链。
3 实验结果与分析
本次实验的实验地点为某大学的计算机实验室,计算机系统為Windows XP,运存2.21 GHz,内存4 GB。在计算机上使用虚拟机搭建出一个软件测试环境,数据库使用SqlServer(阿里混合云),Web应用服务器使用Apache。实验将针对工程设计软件、在线游戏软件和数据恢复软件进行白盒测试插桩,实时跟踪插桩信息,取整体平均的语句覆盖率与分支覆盖率数据进行对比分析。实验结果如表2所示。
由表2可知,本次实验选用本文提出的基于嵌入式开发的白盒测试插桩方法与基于路径覆盖的白盒测试插桩方法、基于ElcEmma的白盒测试插桩方法进行对比。在所搭建的实验平台中,三种方法均能正常取得语句覆盖率与分支覆盖率数据。其中,基于路径覆盖的白盒测试插桩方法在测试在线游戏软件时取得的效果最好;基于ElcEmma的白盒测试插桩方法的覆盖率偏小,未发挥很大作用;语句覆盖率与分支覆盖率最高的是本文方法,能够很好地对各类软件进行白盒测试插桩。
4 结 论
本文提出一种基于嵌入式开发的白盒测试插桩方法,用CodeTEST整体掌控白盒测试插桩进程,分析白盒测试覆盖率,有效改善了以往插桩技术智能化不足的问题,使其能自动完成语义覆盖。通过实验的证明,本文所提方法取得了很高的语义覆盖率和分支覆盖率,达成了提高白盒测试精度的用户需求。
参考文献
[1] 徐晴,纪峰,田正其,等.基于E2PROM数据读写的智能电能表白盒测试方法[J].电测与仪表,2014,51(3):1?5.
[2] 姚佳瑜.箭载飞控软件系统最差情况执行时间测试研究[J].电脑知识与技术:学术交流,2016,12(3):87?89.
[3] 井靖,蒋烈辉,李轶民,等.基于平台透明化处理的动态信息提取方法[J].计算机应用研究,2015,32(10):3009?3013.
[4] 陈佳丽,陈晓洁.基于ElcEmma工具的代码覆盖软件测试技术研究[J].宜春学院学报,2016,38(6):45?48.
[5] 陈佳丽,陈晓洁.静态代码分析在软件测试中的应用研究[J].嘉应学院学报,2016,34(2):35?39.
[6] 王颖,谷利泽,杨义先,等.EWFT:基于程序执行过程的白盒测试工具[J].电子学报,2014,42(10):2016?2023.
摘 要: 以往的白盒测试插桩方法普遍不能精准定位到目标插桩,语句覆盖率不符合要求。为了解决这个现象,提出一种基于嵌入式开发的白盒测试插桩方法。所提方法先对嵌入式开发的插桩技术原理进行介绍,提出使用在线嵌入式测试软件CodeTEST进行自动插桩的理念。设计基于嵌入式开发的白盒测试插桩进程,分程序标准化、插桩顺序划分和覆盖率分析三步进行。并介绍插桩顺序块划分方法、插桩方位提取规则以及插桩信息分析方法。实验结果表明,所提方法拥有很高的语义覆盖率和分支覆盖率。
关键词: 嵌入式技术; 白盒测试; 插桩技术; CodeTEST
中图分类号: TN806?34; TP311 文献标识码: A 文章编号: 1004?373X(2017)14?0049?03
Abstract: The previous white box testing plugging pile method does not precisely position to the target pile, and its statement coverage rate does not meet the requirements. In order to eliminate this phenomenon, a kind of white?box testing plugging pile method based on embedded development is put forward in this paper. The principle of the pile technology based on the embedded development is introduced. A concept that uses the online embedded testing software CodeTEST the to implement the automatic plugging pile is put forward. The progress of white?box testing plugging pile based on embedded development is designed and divided into three steps of program standardization, inserted sequence division and coverage rate analysis. The plugging pile block partition method, plugging pile orientation extraction rules and plugging pile information analysis method are introduced. The experimental results show that the proposed method has high semantic coverage rate and branch coverage rate.
Keywords: embedded technology; white box testing; insert pile technology; CodeTEST
0 引 言
嵌入式技术的应用价值越来越大,目前已经成为热点研究话题。就现阶段而言,嵌入式开发在软件测试中的应用往往过于重视软件调试,随着用户对软件质量要求的不断攀升,软件测试明显已经不能只做表面功夫,需要更深层次的调试支持。
白盒测试是软件测试人员常用的测试方法,以白盒测试为例,以往进行的嵌入式开发代码插桩普遍无法得到结构相对完整的语义信息,语句覆盖率不符合要求。造成这种情况的原因是在嵌入式开发的初期,插桩技术不能自动完成语义覆盖[1],此时一旦涉及到目标测试环境的交互开发,白盒测试就不能精准定位到目标插桩。对此,提供一种新的基于嵌入式开发的白盒测试插桩方法,对以往方法覆盖率低的缺点进行改善,达到提高白盒测试精度的需求。
1 嵌入式开发的插桩技术原理
嵌入式开发将通过动、静态相融合的测试方法取得插桩定位信息,使用在线嵌入式测试软件CodeTEST进行自动插桩[2]。CodeTEST具有在线追踪和展示能力,几乎支持所有嵌入式开发设备软硬件平台。CodeTEST在插桩过程中不用变更原软件程序代码,软件测试人员只需敲定需要进行代码插桩的范围即可。
图1为CodeTEST的软件测试插桩进程,将根据工具鏈的多元组合达成嵌入式插桩。软件源代码在中央控制器的开发环境中通过编译器套件带动Makefile文件进行预处理。预处理文件的代码间隔变宽,更容易向其中插入探测针。同时,预处理过程也会间接修正错误的软件程序代码。插桩器在预处理文件中插入探测针,探测针携带定位标签,测试人员能够通过跟踪定位标签查看软件测试进程。由于CodeTEST不能直接将编译代码写入定位点,因此利用编译器套件将插桩文件汇编并引入编译器,通过构建编译程序和链接程序自动生成可执行代码,以便对源代码文件进行插桩。
2 基于嵌入式开发的白盒测试插桩方法
本文提出的基于嵌入式开发的白盒测试插桩方法先排列好软件程序插桩顺序,再依次进行插桩,对插桩信息进行分析最后达成白盒测试。
2.1 基于嵌入式开发的白盒测试插桩进程
目前,软件程序使用的编译语言主要是C语言,考虑到白盒测试的特殊性,所提出的基于嵌入式开发的白盒测试插桩方法设计了如图2所示的基于嵌入式开发的白盒测试插桩进程。软件程序的预处理进程采用CodeTEST的嵌入式处理方式,先后进行程序标准化以及插桩顺序的划分。插桩进程分为语句覆盖插桩和分支覆盖插桩。对标准化程序进行插桩和编译后,得到可执行代码和插桩信息,进而计算出白盒测试的覆盖率信息[3]。
2.2 顺序块划分
在白盒测试中获取良好的插桩方位是提高覆盖率的有效方式。插桩顺序作为提供插桩方位的前提条件,其原理是在插桩顺序中对顺序块进行划分。顺序块是指单纯的软件程序处理代码,其中不含有循环语句、外部链接以及外部函数,程序的运行是一步到位且不重复,只存在一个入口和一个出口[4],在保证探测针数量最少的情况下,插桩方位也只存在于程序的首端或者尾端,可有效缩短插桩时间,避免语句重复覆盖,减少了白盒测试对源代码的干扰。除以上描述之外,顺序块中也不会含有不可执行代码,这是由嵌入式开发设备内存小的特性决定的[5]。首端代码的宏、声明、定义以及以上代码所占据的行列和标点都归属于不可执行代码的范畴。
对插桩方位进行提取需要应用到四种规则,如表1所示。
2.3 插桩信息分析
白盒测试中插桩信息与静态数据库进行静态连接,以交互模拟语言提取探测针得到软件程序代码特征,进一步生成可执行代码。桩函数负责将插桩信息传送给CodeTEST进行分析,由CodeTEST计算白盒测试覆盖率。使用桩函数还原原有软件程序,返还白盒测试驱动指令[6],使用顺序块驱动桩函数。在白盒测试中,用表示CodeTEST得到的插桩信息,表示CodeTEST对插桩信息的分析顺序,语句覆盖率表示为式(1),分支覆盖率表示为式(2),如下: (1)
式中:是进行白盒测试软件程序的序列,共有个程序;,表示插桩信息中的语句总量和已处理的分支数量;,是仅处理过一个的语句、分支数量;是可执行代码链。
3 实验结果与分析
本次实验的实验地点为某大学的计算机实验室,计算机系统為Windows XP,运存2.21 GHz,内存4 GB。在计算机上使用虚拟机搭建出一个软件测试环境,数据库使用SqlServer(阿里混合云),Web应用服务器使用Apache。实验将针对工程设计软件、在线游戏软件和数据恢复软件进行白盒测试插桩,实时跟踪插桩信息,取整体平均的语句覆盖率与分支覆盖率数据进行对比分析。实验结果如表2所示。
由表2可知,本次实验选用本文提出的基于嵌入式开发的白盒测试插桩方法与基于路径覆盖的白盒测试插桩方法、基于ElcEmma的白盒测试插桩方法进行对比。在所搭建的实验平台中,三种方法均能正常取得语句覆盖率与分支覆盖率数据。其中,基于路径覆盖的白盒测试插桩方法在测试在线游戏软件时取得的效果最好;基于ElcEmma的白盒测试插桩方法的覆盖率偏小,未发挥很大作用;语句覆盖率与分支覆盖率最高的是本文方法,能够很好地对各类软件进行白盒测试插桩。
4 结 论
本文提出一种基于嵌入式开发的白盒测试插桩方法,用CodeTEST整体掌控白盒测试插桩进程,分析白盒测试覆盖率,有效改善了以往插桩技术智能化不足的问题,使其能自动完成语义覆盖。通过实验的证明,本文所提方法取得了很高的语义覆盖率和分支覆盖率,达成了提高白盒测试精度的用户需求。
参考文献
[1] 徐晴,纪峰,田正其,等.基于E2PROM数据读写的智能电能表白盒测试方法[J].电测与仪表,2014,51(3):1?5.
[2] 姚佳瑜.箭载飞控软件系统最差情况执行时间测试研究[J].电脑知识与技术:学术交流,2016,12(3):87?89.
[3] 井靖,蒋烈辉,李轶民,等.基于平台透明化处理的动态信息提取方法[J].计算机应用研究,2015,32(10):3009?3013.
[4] 陈佳丽,陈晓洁.基于ElcEmma工具的代码覆盖软件测试技术研究[J].宜春学院学报,2016,38(6):45?48.
[5] 陈佳丽,陈晓洁.静态代码分析在软件测试中的应用研究[J].嘉应学院学报,2016,34(2):35?39.
[6] 王颖,谷利泽,杨义先,等.EWFT:基于程序执行过程的白盒测试工具[J].电子学报,2014,42(10):2016?2023.