基于切片技术的应用软件集成测试方法研究

2022-06-14 10:06
计算机仿真 2022年5期
关键词:测试方法软件测试切片

张 彤

(成都理工大学工程技术学院,四川 乐山 614000)

1 引言

普遍应用的软件测试方法可分为模块测试、系统测试和集成测试。模块测试主要是测试软件模块的功能,属于最低层次的测试。系统测试主要是对软件、硬件和其它影响因素的功能测试。集成测试又称组装测试,是在模块测试的基础上,对各个模块接口进行检测的一种测试方法,主要是为证明模块组合后能够正确且稳定地对接和交互,起到承上启下的作用,是软件测试的重要部分。

谢肖飞等人[1]提出基于符号执行与模糊测试的混合测试方法,运用模糊测试方法生成可以大量覆盖的待测试数据,基于得到的覆盖信息进行全局搜索,选取标准程序集和实际项目作为评测对象,进行有效性验证。通过构建虚拟设备的软件测试环境证明了该方法的可行性,但是该方法在测试的准确度方面还有所欠缺。姜苹等人[2]提出了一种基于正交试验法的故障诊断软件测试方法,该方法对故障诊断软件测试过程中需要考虑的特征因素进行分析,同时对正交检测法的理论依据进行了阐述。在软件测试过程运用正交实验法来提取代表性推理规则,并且对提取出的规则信息进行测试。根据测试效果可知,该方法解决了测试耗时过长的问题,但测试的可信度较低。

因此,本文提出基于切片技术的应用软件集成测试方法,在获取切片的过程中,将可信度和节点同时当作切片生成指标,通过定义网络拓扑带权图、权值矩阵、资源可信判定函数、切片可信度等相关因素,获得切片数据自动生成器框架。并采用结构驱动集成测试模式,实现应用软件测试。对比实验表明,本文方法具有较强的可行性,且测试速度和准确率与现有方法相比具有明显优势性。

2 软件测试范围与数据选取

程序切片技术是通过程序依赖图获取切片的技术,该技术通过程序分解成不同的切片来缩小测试范围,从而提高软件测试速度。软件切片[3]的构造大致可分为三部分,其结构框架如下图1所示。

定义程序P中的切片S为一个可执行程序。对于S处的变量v而言,S由可能影响变量数值的全部语句构成。可执行程序和程序P具有等效功能。以软件中数据依赖和控制依赖为基础,去除无用或重复语句后,获得切片。则定义集Def(s)和引用集Ref(s)分别为:Def(s)={m},Ref(s)={n}。

变量v满足v∈def(m)∩ref(n),节点m到节点n的路径p上的其它节点表示为m′∈p·{m,n},其中v∉def(m′)。路径p上的其它节点表示为m′∈p·{m,n},当n是m的后必经点,n不是m的后必经点时,n控制依赖于m。

在获取切片的过程中,将可信度[4]和节点同时作为切片生成指标,在构造可信切片时,对各个相关因素作如下定义:

定义1:拓扑带权图G=(V,E),其中,V表示节点,E为链路。则E的权值w表示m到n之间的链路代价,可以表示为

(1)

定义2:权值矩阵[5]M,该矩阵表示带全无向图的权值分布。则M可以表示为

(2)

定义3:切片NS={VN,VL.PN,PL},VN={vn1,vn2,…,vnn}代表虚拟节点集合;VL={vl1,vl2,…,vln}代表虚拟链路[6]集合;PN={pn1,pn2,…,pnn}代表实际节点集合;PL={pl1,pl2,…,pln}代表实际链路集合的映射。

定义4:资源可信判定函数judge_ns_pre(x,y,t)如式(3),其中x是待判定资源集合,y是资源集合可信度,t为切片的可信需求。

(3)

(4)

将切片技术运用到软件测试的过程中,重点关注程序中特定路径上的兴趣点[7,8],便可以提高测试效率。程序切片测试的基本流程如下:

1)通过黑盒测试确定输出结果,并检查是否产生错误,对产生的错误进行定位,确定其影响区域,从而对错误进行排除。

2)在不同层次上对依赖关系进行分析。

3)利用切片算法确定错误根源。

4)进行回归测试排除和修复程序,直到不再发生错误为止。

5)生成模块自动测试数据报告。

其测试数据生成系统框架如图2所示。

图2 切片数据自动生成器框架

图2中,切片获取模块主要用于计算软件中的各类切片,该过程包括对词法和语法进行分析,检测软件中词法或语法错误,并生成抽象语法树,根据语法树构建依赖关系图,最后利用切片生成器产生切片;测试模块是基于切片结果的测试过程,其中包括测试用例生成模块、静态分析模块和动态测试模块。静态分析主要的方法如下:对数据流和控制流的分析和研究;对程序中各种依赖关系的分析;对函数的静态调用关系及全局变量的分析;动态测试模块主要是通过程序动态切片技术,根据程序的数据结构合理性来测试各个模块的实际功能性,从而检测模块组合形成后的较大模块;错误处理主要是从各个模块中发现错误、然后通过后向切片技术将错误定位,最后利用前切片技术判定错误会影响的范围,将错误排除并且对程序进行修复[9]。

以上述步骤为基础,实现回归测试。回归测试是在程序修改后进行的,由于在程序修改过程中,很可能又发生了新的错误,用前期使用的测试用例对软件程序进行回归测试更有利于检测出修改后产生的新错误。反复进行回归测试,直至检测不出错误为止[10]。

3 软件集成测试实现

切片测试只保证了软件局部的准确性,但是组装后不能保证其整体协调性,影响软件的正常运行。因此,在程序切片测试后,需要根据设计要求对软件进行集成测试,来检测各模块接口之间的故障。传统的集成测试方法把模块结合后的程序作为一个整体来进行测试。但是当在检测中发现错误时,难以准确定位具体的错误位置,由于在改正错误的同时可能会出现新的错误,导致新旧错误混合,增加了判定错误位置和原因的难度,因此不被广泛应用。

针对该问题,本文根据获取的软件测试范围和数据,对软件进行集成测试[11,12]。对软件进行集成测试的最终目的是能够保证各个单元组合后能够按设计要求运行,并且保证在运行过程中存在正常的增量运行。软件测试模型如图3所示。

图3 软件测试模型

集成测试的主要针对内容为各单元间的接口和软件集成后的功能性。在测试过程中,首先度量软件的动态复杂度,运用式(5)进行描述

(5)

式中,∂表示软件组件的失效概率;f表示组件复杂度总和。通过软件的动态复杂度衡量软件组件之间的动态耦合度,得到下式

(6)

式中,q表示软件组件的使用频率;Ia表示使用频较高的组件;Ir表示使用频较低的组件。对软件中的组件进行层次划分,并对每个组件进行排序,从使用概率最高的组件开始集成测试,并在集成测试之前将已经集成过的组件进行剔除,具体可以通过下面的公式实现

(7)

式中,c0表示高风险组件;p表示剔除无效组件后的测试集;t表示时间变量。

在结构驱动模式下,软件组件的集成是建立在固定功能线程基础上的。因为软件中各个模块的质量和开发周期会有明显的差异,导致集成测试是一个漫长的渐进过程。为了减少测试时间,本文将集成测试与切片测试同时进行。测试过程中,需要人员和机器同时运作,程序员需要对检测过程中出现的错误类型和数量进行分析,总结出发生错误的原因和具体位置,提高应用软件集成测试结果的精准度。

4 实验分析

实验以软件版本升级测试为例,以分析软件实际问题、问题的修改以及其它关联性问题为基础,验证基于符号执行与模糊测试的混合测试方法(方法1)、基于正交试验法的故障诊断软件测试方法(方法2)和基于切片技术的应用软件集成测试方法的性能。

4.1 实验环境与软件测试特征分析

实验环境为MATLAB R2012a,计算机配置为:32位Windows7系统,Pentium双核2.8GHz,运行内存8GB。软件基本规模为124M字节,在升级过程中,修改和新增功能约占软件的10%,测试组需要修改的测试大纲大约占总体的13%。表1给出了各测试版在测试周期中产生的错误数量分布。

表1 软件问题分类及其数量

由于软件修正问题的延迟时间与问题数量、问题修改用时、问题提交密度等成正比。因此,想要对软件进行有效的测试,不仅需要明确软件问题分类及其数量,还必须有效解决测试中存在的大量程序错误问题。

在测试过程中,软件的稳定性和问题及时间曲线的波峰成反比,主要有以下几点:

1)软件升级后新加功能的起始集成时间离散度。

2)软件的测试过程和产品开发过程的并行度。

3)被检测的各项功能域检测时间的离散度。该因素与测试计划相关,常规的操作方法会产生较多问题的功能域,对其进行优先强化测试。

4)修改程序的波及效应。测试组测试时应及时发现程序引入的修改错误,并将其拒绝,从而防止产品质量发生波动。

在本实验中,解决软件问题的平均延迟时间如图4所示。

图4 软件问题发现及解决曲线

回归测试的总时长受问题曲线波峰和平均周期长度影响,并且与二者成正比。由图4可以看出在回归测试的过程中,每个测试周期发现的程序错误数量普遍较低,改正问题的延迟时间较短。

4.2 实验结果分析

为了验证本文软件集成测试的有效性,将程序的响应时间和测试准确率作为评价指标,对比不同方法的响应时间,对比结果如图5所示。

图5 不同方法的响应时间对比

从图5可以看出,针对不同的拓扑结构,本文方法的响应时间均低于基于符号执行与模糊测试的混合测试方法和基于正交试验法的故障诊断软件测试方法,其最高用时不到6ms,说明该方法测试运行速度较快,能够做到测试结果的及时获取。这是由于该方法为了减少测试时间,通过切片技术缩小测试范围,并将集成测试与切片测试同时进行,从而达到了提升测试效率的目的。

三种方法的数据丢包率对比结果如图6所示。

图6 数据丢包率测试结果对比图

分析图6可知,本文方法在应用软件集成测试过程中的数据丢包率明显低于现有方法,其最高值仅为22%,而当实验次数达到200次时,方法1的数据丢包率达到了最高值,为90%,方法2的数据丢包率达到了最高值,为70%。上述数据说明本文方法有效抑制了数据丢包率,提升了软件测试的可信度。得出的测试结果更加可靠,准确性更高。这是由于该方法在考虑节点的同时将可信度作为切片的生成指标,从而提高降低了数据丢包率。

上述实验证明了本文方法测试结果更准确,检测速度较快,具有较强的可行性。

5 结论

为解决现有方法存在的检测效率不高和结果可信度不高的问题,本文提出的一种基于切片技术的应用软件集成测试方法,该方法通过切片技术缩小测试范围、提高应用软件集成测试效率。通过将可信度作为切片的生成指标,提高测试结果的准确性。在实验条件下,首先进行测试的特征分析,然后通过与现有方法的集成测试对比结果分析可知,本文方法的测试速度和测试结果准确度比传统方法更高,可以广泛用于应用软件的集成测试中。

虽然该方法有效提升了应用软件的测试效果,但是存在持续性不足的问题,同时,在面向路径的测试数据自动生成方面同样存在不足,因此需要进一步优化该方法,为软件测试研究领域提供更全面的测试方法。

猜你喜欢
测试方法软件测试切片
沥青混合料沥青用量测试方法研究
软件测试方向人才培养“1+X”融合研究
大数据背景下软件测试技术的发展
新局势下5G网络切片技术的强化思考
5G网络切片技术增强研究
网络切片标准分析与发展现状
浅析5G网络切片安全
关于 Web 应用系统的软件测试的研究
无人驾驶车辆认知能力测试方法
一种嵌入式数控系统的体系结构与系统设计