开篇:润墨网以专业的文秘视角,为您筛选了一篇回归测试中机器挑选用例方法研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
【摘要】随着测试的发展,这个领域产生了两个大的趋势。趋势一,智能化。传统的自动化方法:首先转自动化测试代码的过程费时费力,并且在测试执行过程中,需要反复的人工干预。趋势二,小规模测试替代大规模测试。测试规模越来越小,测试活动对发现bug的有效性越来越高;在传统的方式下,全体测试用例执行的方法,逐步的为针对代码变动而开展的小型测试活动所代替。本文的主要工作是:提出对于回归测试,使用机器挑选的方法。
【关键词】机器学习;回归测试;测试用例
1.引言
机器学习(Machine Learning, ML)是一门交叉型学科,它涉及到了多个领域,包括:概率与统计学、高等数学、逼近和凸分析等。机器学习人类的学习过程和学习行为,并且加以计算机的模拟或实现。在机器学习过程中,机器本身了获取新的知识或技能。
在机器学习和人工智能的壮大发展的时代背景,对传统的测试工作提出了一些新的挑战。研究通过机器学习的方法,提升传统的测试工作的效率,进一步的提高整个软件开发活动的劳动生产率。
2.软件测试工程的研究综述
软件测试是用于分析是否程序出现错误的过程,测试使用人工操作或者软件自动运行的方式。每个不同的软件有对自身错误的定义方式:通常是软件需求规格中定义了预期结果。
软件测试分类
1、从是否要变异/执行被测试软件分类,分为静态测试和动态测试。如基于代码审查的单元测试,以及相关代码审查工具,都属于静态测试的范畴。
2、从是否要针对软件结构、算法进行覆盖分类,分为白盒测试和黑盒测试。
3、从测试活动在软件开发过程中所处的不同阶段分类,分为单元测试、集成测试、系统测试、验收测试。
我们这里讨论的“回归测试”是属于系统测试的最后一个阶段。
在修改了旧代码后,需要对这部分子都进行测试,以确保这个代码修订没产生新的错误。在大多数情况下,回归测试占测试周期和测试自由的50%。因此,如果能够制定更有效的回归测试用例,将极大的提升整个测试的效率。
回归测试的流程如下:
(1)找出程序中因为新增需求或者故障解决,而被修改的代码
(2)从总的用例库中,去除掉不再合适的测试用例:这部分用例可能是修改没涉及的功能,也可能是一些系统性稳定性的低优先级的测试用例
(3)针对修改的影响部分,增加一部分相关模块的测试用例
(4)搜索出最基本的测试用例,纳入到测试计划:这部分测试用例保证软件不出现意外的基本功能错误
(5)用上述2~4的测试用例集合,形成回归测试的测试范围
3.现有回归测试用例选择方法
对于一个软件开发项目来说,项目的测试组在实施测试的过程中会将所开发的测试用例保存到“测试用例库”中,并对其进行维护和管理。当得到一个软件的基线版本时,用于基线版本测试的所有测试用例就形成了基线测试用例库。在需要进行回归测试的时候,就可以根据所选择的回归测试策略,从基线测试用例库中提取合适的测试用例组成回归测试包,通过运行回归测试包来实现回归测试。保存在基线测试用例库中的测试用例可能是自动测试脚本,也有可能是测试用例的手工实现过程。
针对修改部分的测试是我们希望改进的内容
当前是优秀的高级工程师逐一的查看开发提交的各个修改点,根据自己对相关部分的理解,以及对开发修改点的学习。整理出需要回归的测试点:这种方法的主要问题是:
需要优秀的工程师参与,这位工程师必须同时具备:既了解测试组的全部测试用例库,也需要能够理解开发提供的修订说明。
每一轮测试完成后,就需要人工干预,从而产生下一轮的测试用例
替代人工的方法是,为每一轮测试,执行类型level 0/1/2这样的测试用例等级。这样同样会带来冗余的测试用例执行,拉长了测试进度。
4.机器选择测试用例的方法
用机器来模拟和替代人工的挑选测试用例:是在回归测试中引入智能化方法的先决条件。整体按照如下的流程:
首先进行的是为每一条测试用例,生成不同的特征向量。在这个步骤中,将原始的测试用例转变成为“记录每个词出现的频率”的数学符号。最后生成如下表格:
其中行代表不同的测试用例,列代表不同的词语描述,数字代表不同的词语在不同测试用例中出现的词频。
然后,根据TFIDF算法将测试用例生成的文本特征向量,转换成为最终的文本特征向量。
这样,表一通过TFIDF算法最终转化的向量表示如下:
完成了特征词语的选择后,就要给选出的特征词语赋以权重。比如“测试”一词,在每个测试用例中都有出现,那么这个词虽然词频很高:但是“权重为零”――也就是说这个词对于描述不同测试用例的不同特征,无任何帮助。对于本研究方案而言,我们使用TF*IDF算法,计算出精确的统计量,以描述特征词语对于中文内容的重要性。
最后,将代码变更说明收集起来,计算特征向量。同时将测试用例库中的内容也做成特征向量。逐个的拿代码变更的特征向量,与用例库中的特征向量进行对比:选出与代码变更特征向量相识程度最高的。这个特征向量所代表的测试用例,既为下一轮回归测试的输入。在这个模块中,我们选择KNN算法,KNN算法也叫K最近邻算法。抽取测试用例库中的每个文本,逐一的与被测试的向量进行比较,每个比较完成后相似度被计算出来。下一步:找出K个最相似的测试用例。并在此基础上给每个被选出的测试用例打分,取分值大者作为比较结果。具体计算公式为:
其中:d为待测文本(开发提交的代码变更说明)向量,q为训练集中文本(原始的测试用例描述)向量。
这里给出一个具体实践:
开发提交了一个代码变更说明如下
最后机器推荐的相关性最紧密的四个用例,如下表:
可以看出,这四个被挑出来的点,都是对ACL重定向的测试:并且测试覆盖了物理端口、AP端口、SVI端口三种不同的端口类型。
进一步的,对这部分的测试进行基于代码覆盖率的验证,可以证明机器挑选出的四个测试用例,确实的有测试覆盖到开发修订的代码。
5.结束语
让机器来自主选择回归测试用例,然后将这个方法融入到自动化测试框架中。让自动化测试框架具有一定智能,能够“自主的产生回归测试用例的变化集合”。譬如整个ACL模块测试用例个数达到300,如果全部回归费时费力,而人工参与分析则会打断持续的自动化测试过程。新方法使用四个测试用例,就可以对开发修订提交的代码进行覆盖;这样一方面我们减少了回归测试的测试用例个数,另外一方面开发修订的代码,也被完整的测试了。
参考文献
[1]米歇尔(Mitchell,T.M.).机器学习.机械工业出版社,2008-03-01
[2]卢苇,彭雅.几种常用文本分类算法性能比较与分析.湖南大学学报(自然科学版), 2007.
[3]JOACHIMST.A probabilistic analysis of the rocchio algorithm with TFIDF for text categorization Nashville:1997:143-151.
[4]http:///wiki/回归测试.维基百科全书,internet