基于神经网络的回归测试用例优化研究

2015-10-22 21:08黄伟杨金凤
现代电子技术 2015年19期
关键词:测试用例神经网络

黄伟 杨金凤

摘 要: 回归测试是指修改了源代码后,重新进行测试以确认已发现的缺陷是否修复和检测修改是否引入了新的错误或导致其他代码产生错误,在测试过程中占有很大的工作量比重。通过分析神经网络的基本原理,并将BP算法的思想引入到回归测试的用例集选取中,介绍了回归测试用例包选取的算法,通过样本训练,筛选出代码改动后可能影响到的功能,从而可以筛选出优先级别较高的用例。最后,通过测试实践的积累,总结了一套高效易行的回归测试策略。

关键词: 回归测试; 测试用例; 神经网络; BP网络

中图分类号: TN711?34 文献标识码: A 文章编号: 1004?373X(2015)19?0114?03

Abstract: Regression testing means after modifying the source code, re?testing to confirm whether the discovered defect is repaired, and whether detection and modification have brought in a new bug or caused the errors in other codes which possesses a large proportion of the workload during testing procedure. The fundamental principle of neural network is analyzed, and the thought of BP algorithm is introduced into the case set selection of regression testing. The algorithm to select regression testing case package is presented. The functions which may be influenced by code modification are screened out by samples training, and the higher priority use case can be screened out. A set of regression testing strategy with high efficient and easy operation was summed up through the accumulation of testing practice.

Keywords: regression testing; testing case; neural network; BP network

0 引 言

软件分析,设计过程中难免有各种各样的错误,需要通过测试查找错误,以保证软件的质量。软件测试是由人工或计算机来执行或评价软件的过程,验证软件是否满足规定的需求或识别期望的结果和实际结果之间有无差别。大量统计资料表明,软件测试工作量往往占软件开发总量的40%以上。而回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。在渐进和快速迭代开发中,新版本的连续发布使回归测试变得更加频繁,而在极端编程方法中,更是要求每天都进行若干次回归测试。因此,研究回归测试方法,尽可能地将软件存在的问题找出来,对保证软件质量和提升测试工作效率都是非常有意义的。

1 相关工作

1.1 回归测试

回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。对于一个软件开发项目来说,项目的测试组在实施测试的过程中会将所开发的测试用例保存到“测试用例库”中,并对其进行维护和管理。当得到一个软件的基线版本时,用于基线版本测试的所有测试用例就形成了基线测试用例库。在需要进行回归测试时,就可以根据所选择的回归测试策略,从基线测试用例库中提取合适的测试用例组成回归测试包,通过运行回归测试包实现回归测试。

在软件生命周期中,即使一个得到良好维护的测试用例库也可能变得相当大,这使每次回归测试都重新运行完整的测试包变得不切实际。一个完全的回归测试包括每个基线测试用例,时间和成本约束可能阻碍运行这样一个测试,有时测试工作不得不选择一个缩减的回归测试包来完成回归测试。

1.2 相关技术的研究

测试用例的优化技术旨在以小的运行代价尽可能多地发现系统Bug。假设测试用例是能发现缺陷的;测试用例的运行效率是一样的。测试用例的集合的选取不仅是减少用例的数目,降低用例的执行代价,也需要考虑测试覆盖能力,即缺陷发现能力。在测试用例选择优化的问题上,已有很多文献对此进行了研究,如配对测试法[1]、关系树模型[2]、蚁群模拟退火算法[3]及一些其他新的理论和方法[4?7]。

2 回归测试用例集生成方法

2.1 基本原理

神经网络是通过对人脑的基本单元——神经元的建模和联接,探索模拟人脑神经系统功能的模型,并研制一种具有学习、联想、记忆和模式识别等智能信息处理功能的人工系统。

神经网络的一个重要特性是它能够从环境中学习,并把学习的结果分布存储于网络的突触连接中。神经网络的学习是一个过程,在其所处环境的激励下,相继给网络输入一些样本模式,并按照一定的规则(学习算法)调整网络各层的权值矩阵,待网络各层权值都收敛到一定值,学习过程结束,从而以新的方式响应环境。

2.2 BP神经网络

Back?Propagation Network,由于其权值的调整采用反向传播(Back Propagation)的学习算法,因此被称为BP网络。网络中心思想是梯度下降法,通过梯度搜索技术,使网络实际输出值与期望输出值的误差均方值最小。网络的学习过程是一种误差边向后传播边修正权系数的过程。一般分三层:输入层(Input Layer),隐层(Hide Layer),输出层(Out Layer),也可以有2层或更多个隐层。层与层之间采用全互联方式,同一层单元之间不存在相互连接,如图1所示。endprint

由于神经网络具有自学习、自组织和并行处理等特征,并具有很强的容错能力和联想能力,因此,神经网络具有模式识别能力。在神经网络识别中,根据标准的输入输出模式对,采用神经网络学习算法,以标准的模式作为学习样本进行训练,通过学习调整神经网络的连接权值。当训练满足要求后,得到知识库,如图2所示。

BP算法的具体步骤如下:

(1) 用小的随机数对每一层的权值[W]初始化,以保证网络不被大的加权输入饱和;

(2) 计算网络各层输出矢量以及网络误差[E;]

(3) 计算各层反传的误差变化并计算各层权值的修正值以及新权值;

(4) 再次计算权值修正后误差的平方和;

(5) 检查误差是否小于给定误差,若是,训练结束;否则继续。

输入信号[Xi]通过中间节点(隐藏层节点)作用于输出节点,经过非线性变换,产生输出信号[Yk,]网络训练的每个样本包括输入向量[X]和期望输出量[t](类别),网络输出值[Y]和期望输出值(真值)[t]之间的偏差,通过调整输入节点与隐藏层节点的连接强度取值和隐藏层节点与输出节点之间的连接强度以及阈值,使误差沿梯度的方向下降,经过反复学习训练,确定与最小误差项对应的网络参数(权值和阈值),训练即告停止。学习样本的数量和质量影响学习效果和学习速度。

为了训练一个BP网络,需要计算网络加权输入矢量以及网络输出和误差矢量,然后求得误差平方和。当所训练矢量的误差平方和小于误差目标,训练则停止;否则在输出层计算误差变化,且采用反向传播学习规则调整权值,并重复此过程。当网络完成训练后,对网络输入一个不是训练集合中的矢量,网络将给出输出结果。

2.3 回归测试用例包选取

基于全量的测试用例库,回归测试包的选择策略可遵循下述基本算法进行:

(1) 识别出软件中被修改的部分。

(2) 从原基线测试用例库[T]中,排除所有不再适用的测试用例,确定那些对新的软件版本依然有效的测试用例,其结果是建立一个新的基线测试用例库[T0。]

(3) 依据一定的策略从[T0]中选择测试用例测试被修改的软件。

(4) 如果必要,生成新的测试用例集[T1,]用于测试[T0]无法充分测试的软件部分。

(5) 用[T1]执行修改后的软件。

在上述步骤中,第(2)和第(3)步测试验证修改是否破坏了现有的功能,第(4)和第(5)步测试验证修改工作本身。第(3)步中,将神经网络知识结合到测试领域,通过对样本的学习,确认修改没有引入新的错误或导致其他代码产生错误。

其主要思想为:对于[q]个输入学习样本:[P1,P2,…,Pq,]已知与其对应的输出样本为:[T1,T2,…,Tq。]通过网络的实际输出[A1,A2,…,Aq]与目标矢量[T1,T2,…,Tq]之间的误差来修改其权值,使[Al (l=1,2,…,q)]与期望的[Tl]尽可能地接近,使网络输出层的误差平方和达到最小。

3 回归测试实践的优化

在项目测试过程中,不仅需要应用高新的测试技术,也要从宏观上制定可行的测试策略,解决在有限的时间中使测试覆盖率最优化。本文从项目实践角度出发,提出以下的回归测试策略:

(1) 对所有已修复Bug进行验证;

(2) 对新增功能进行全量重点测试;

(3) 对原有功能,按优先级进行测试。基于一定的风险标准从基线测试用例库中选择回归测试包。首先运行最重要、关键和可疑的测试,而跳过那些非关键、优先级别低或者高稳定的测试用例,这些用例即便可能测试到缺陷,这些缺陷的严重性也较低,不影响系统的功能。一般而言,测试从主要特征到次要特征。

(4) 对修复的Bug可能会引入新的Bug的功能模块重点测试,可采用本文介绍的神经网络进行样本训练和用例筛选。将回归测试局限于被改变的模块和它的接口上。通常,一个回归错误一定涉及一个新的、修改的或删除的代码段。在允许的条件下,回归测试尽可能覆盖受到影响的部分。

(5) 如果情况允许,测试全部用例的策略是最安全的策略。但已经运行过许多次的回归测试不太可能揭示新的错误,而且很多时候,由于时间、人员、设备和经费的原因,不允许选择再测试全部用例的回归测试策略,此时,可以选择适当的策略进行缩减的回归测试。

4 结 语

将神经网络知识引入到测试领域是一个比较新的研究,本文就此方向进行了研究,并给出了实例说明。然而,BP神经网络需要大量的样本数据用来训练和测试,当样本数量不够时,预测的误偏差可能会较大,回归测试开始时,由于数据样本不足,可能会存在预测的偏差,所以下一步的研究方向将是如何克服这一问题。

参考文献

[1] 廖剑锋,蔡贤涛.组合测试中用例集的选择策略[J].计算机工程与应用,2012,48(11):65?70.

[2] 钮鑫涛,聂长海,CHAN Alvin.组合测试故障定位的关系树模型[J].计算机学报,2014,37(12):2505?2518.

[3] 聂长海,徐宝文,史亮.一种基于组合测试的软件故障诊断方法[J].东南大学学报:自然科学版,2003,33(6):681?684.

[4] 徐宝文,聂长海,史亮,等.一种基于组合测试的软件故障调试方法[J].计算机学报,2006,29(1):132?138.

[5] YILMAZ C. Covering arrays for efficient fault characterization in complex configuration space [J]. IEEE Transaction on Software Engineering, 2006, 32(1): 20?34.

[6] 郑燕妮,李志蜀,李奇.蚁群模拟退火算法在测试用例约简中的应用[J].计算机工程,2009,35(2):197?199.

[7] 于秀山,于洪敏.软件测试新技术与实践[M].北京:电子工业出版社,2006.endprint

猜你喜欢
测试用例神经网络
基于SmartUnit的安全通信系统单元测试用例自动生成
神经网络抑制无线通信干扰探究
基于MBD模型自动生成测试用例的软件测试方法
基于混合遗传算法的回归测试用例集最小化研究
基于需求模型的航天软件测试用例生成方法
基于神经网络的拉矫机控制模型建立
复数神经网络在基于WiFi的室内LBS应用
基于依赖结构的测试用例优先级技术
基于支持向量机回归和RBF神经网络的PID整定
基于神经网络分数阶控制的逆变电源