论文研究-基于聚类算法的测试用例排序.pdf


-
在软件开发过程中,回归测试是一项重要而复杂耗时的工作。测试用例排序技术作为提高测试效率的一种有效手段,是近年的研究热点之一。测试用例排序技术根据测试目标对测试用例进行排序,使得最优的测试用例能够优先执行。同时,各种软件信息的底层结构及关联信息有助于提高测试效率。不同的代码单元在测试过程中拥有不同的测试需求。因此,利用聚类算法能够有效地分析测试用例间的结构信息,从而指导测试用例的排序过程。实验结果表明,新的测试用例排序策略有效地提高了测试用例排序的效果,能够更早地检测到软件错误。
蔡景媛,任志磊,胡燕,等:基于聚类算法的测试用例排序 2016,52(5) 1)选出各簇首位测试用例进行排序,若充用例覆盖的软件错误,也无法得知其检测信息。因此 首位则跳过; 移除不被任何测试用例覆盖的语句和软件错误。 2)顺序加入测试川例排序结果,将各簇首42实验算法 位测试用例移除。 本文对比三种算法的测试用例排序效果。 Until各簇均空 A算法为原有的聚类测试用例排序算法。在对测 End 试用例聚类后,利用代码覆盖信息对簇内的测试用例进 对每个簇内的測试用例根据其覆盖的代码单元权行排序,簇间排序随机。 重进行排序,对于已排序的各簇内测试用例进行二次排 B算法为本文收进的聚类测试用例排序算法。在 序。首先对各簇第一位的测试用例进行排序,将排序结对测试用例进行聚类后,利用代码覆盖信息对簇内的测 果直接输出到测试用例的排序结果中。然后对各簇的试用例进行排序,利用本文设计的簇间排序算法对聚类 第二位测试用例进行排序,将排序结果直接输出到洌试后的结果进行排序。 用例的排序结果中,以此类推直至所有簇都为空。排序 C算法为引入代码权重的排序算法。在对测试用 过程如图1所示。 例进行排序后,利用代码权重信息对簇内测试用例进行 瘊1簇2簇3簇4簇 排序,利用本文设计的簇间排序算法,并引入代码单元 1518 16I8"n7T315I6 的权重对簇间测试用例进行排序。 T1 T9 T10 T2 T15 T10 TI T2 T15 T9 4.3评价方式 II111211lT13I12 T14 测试用例排序的目的是尽可能多地检测出被测软 I16 件存在的错误: Rothermel等定义平均错误检测率 测试用例排序结果 (Avcragc Pcrccntagc of Faults Dctcction, APFD )uIF I81713T5 T14116 TF,+TF、+…+TF 图1聚类测试用例排序算法示例 APFD=1 nt 在对簇内和簇间测试用例进行排序时,使用传统的其中,n为测试用例的个数,t为软件错误个数,TF表 测试用例排序算法。已有的研究证明,采用迭代方法对示首个可以检测到软件错误k的测试用例在该执行次 测试用例进行排序的增量贪心算法为简单且高效的测序中所处的位置。APED的值越高,测试用例的排序结 试用例排序算法。因此,本文采用增量贪心算法对簇果能够越早地检测到钦件错误,因而对软件错误的检错 内和簇间的测试用例进行排序。在每次迭代过程中,选能力越强。因此,本文使用APFD作为测试用例排序结 择对未被覆盖的代码单元具有最大代码覆盖信息的测果的总体评价标准。 试用例 为验证算法检测不同软件错误的能力,根据软件错 误被测试用例覆盖的次数定义其难易程度ω。被越少 4实验设计 测试用例检测到的软件错误越困难,被越多测试用例检 4.1数据集 测到的软件错误越简单。 实验中选取 Software Infrastructure Repository(SIR) 中6个经典的回归测试数据集,细节描述如表2所示。实验结果 其中, printtokens schedule tcas tot in0、 replacc个为5 1 APFD实验结果 Siemens数据集。 printtokens为词法分析器, schedule为 在6个SIR数据集上对3个算法进行实验。表3为 优先选择器,tcas为肮空避撞系统, replace为模式匹配测试用例排序结果的APFD平均值 和互换。gzip为广泛使用的Uniⅸx程序 通过对比A和B两种算法的测试用例排序结果,可 表2数据集说明 以验证本文改进的基于聚类测试用例排序算法是否优 于原算法。由表中的APFD值可看出,在6个数据集中, 程序 语句个数软件错误个数测试用例个数 185 4130 本文的算法在5个数据集上都要优于原算法。其中,在 schedule 265( printtokens数据集上A算法稍好于B算法。表屮数据显 tcas 示,改进算法在tas和gzjp数据集上的提高最为明显。 tot info 这是由于tcas数据集的软件锆误数量最大,gzjp数据集 234 29 5542 的代码规模最大。这使得测试用例在排序时的区分程 1359 5 214 度更加明显 对于任何测试用例都不能覆盖的语句,其对测试用 通过对比B和C算法,可以验证引入代码单元的权 例排序的结粜无任何影响;同理,对于没有被任何测试重能否提升测试用例排序算法的效果。由表3中的 14 016,52(5) Computer Engineering and4 pplications计算机工程与应用 APFD数值可以看出,引入代码单元权重的测试用例排集上,A和B两种算法在错误首次检测位詈上:都出现了 序算法明显优于无代码单元权重的算法。在6个数据明显的抖动。在 tot info数据集中第一个最难检测的软 集中,C算法在4个数据集中的表现优于B算法。在tcas件错误上,B算法要优于A算法,在剩余的22个软件错 数据集上,两种算法的效果相当。因为 replace数据集的误:,两种算法的效果相当。在gaip数据集:,B算法 测试用例集相对稳定,所以在该数据集上,C算法的效要明显优于A算法。 果稍弱于B算法。另山表3中数值可知,在 replacc数据 对比B和C两种算法,可以很容易发现C的稳定性 集上,A、B、C三种算法的效果差别不大。 要远远好于B。不过在 printtokens、 schedule和 replace 表3APFD实验结果 三个数据集上,C算法在检测较难的软件错误时花费了 程序 较多的测试用例。在 tot info数据集上,C算法要优于B printtokens0.95160.95010.9742 算法,这种优势在tcas和gzp两个数据集上表现得尤为 schedule 0.9420 明显。 lcas 09217).95230.9523 tot info0.95020.95320.9566 6相关工作 re 0.95840.95980.9596 0.93720.95750.9748 回归测试的测试用例排序问题主要针对的是原有 测试用例集中,可重用测试用例在重新利用时的效率问 通过对比A、B、C三种算法,可以看出C算法对B算题3。针对代码修改导致的部分测试用例失效问 法的改进要高于B算法对A算法的提高因此,代码单题,研究人员提出了测试用例修复这一概念。由于程 元的权重信息在测试用例排序中要比算法的选择更重要。序源码的修改会导致原有测试用例集中的部分测试用 52错误发现位置 例失效叫。针对这部分测试用例,需要对测试用例进行 图2为3个算法在6个数据集上的软件错误首次检修改才能够重新利用。研究工作包括如何衡量程序的 测位置 修改部分发相应测试川例的修改方式5 如图2所示,在同一个数据集上,不同的算法在同 在使用聚类进行测试用例排序的算法中,一般以追 个软件错误上的检测位置不同。整体而言,困难错误求最大化测试用例多样性为目标 Leon等利用 的检测时间要晚于简单错误的检测时间。 代码单元的覆盖信息对测试用例进行聚类分析。Yoo 通过对比A和B两种算法的软件错误首次检测位等在聚类时引入专家知识。通过聚类算法,可以有效 置,可以得知改进的基于聚类测试用例排序算法与原算地减少专家知识的指定关系,从而减少人工工作。实验 法间的差别。总体而言,两种算法在软件错误的首次检结果证明,该方法的排序结果优于传统的机遇代吗覆盖 测位置上效果相当。其中,在 printtokens和 replace数据信息的算法,同时具有铰好的鲁棒性。Ryan等"在对测 集上,两种算法的差异不大。在 schedule数据集上,B算试川例进行聚类时,使川了多种信息作为距离度量,其 法对前两个较难软件错误的检测能力弱于A算法,在剩中包括代码覆盖信息和历史软件错误检测信息等。 余7个软件镨误的检测位置上优于A算法。在tcas数据 在利用代码覆盖信息进行测试用例排序的算法中, rint tokens schedule 800 400 300 A 600 B 300 B 200 4U0 200 0 4567 456 软件错误序号(由难到易) 软件错误序号(由难到易) 软件错误序号(由难到易) 54p A 1400 300 00 200 B C C 150 C 100 400 0 0 0 591317212529 钦件错误序号(由难到易) 钦件错误序号(由难到易) 钦件错误序号(由难到易) 图2错误首次检测位置 蔡景媛,任志磊,胡燕,等:基于聚类算法的测试用例排序 2016,52(5) 15 一般以最大化代码覆盖率为目标n。 Rothermel等首6 Elbaum s, Malisheysky a, Rothermel G Incorporating vary 次提岀测试用例排序问题并给岀其一般性描述,其论文 ing test costs and fault severities into test casc prioriti 比较了贪心类算法在各个代码单元上的实验效果,并证 zation C/International Conference on Software Engineer- 实了代码矍盖信息能够有效地解决测试用例排序问 ing,2001:329-338 题。Ii等根据不同的贪心策略,比较了一系列贪心算 [7 Li Z, Harman M, Hierons R M Search algorithms for regres 法和基于搜索算法的效果。 sion test case prioritization [].IEEE Transactions on Soft- ware Engineering, 2007, 33(4): 225-237 [8 Fang C, Chen 7, Xu B Comparing logic coverage crite- 7结论 ria on test case prioritization[J]. Science China Informa 本文通过对现有的基于聚类的测试用例排序算法 tion sciences,2012,55(12):2826-2840 进行分析提出了改进的基于聚类测试用例排序算法,[9]Yo0s, Harman m, Tonella p, et al. clustering test cases 同时引入代码单元的权重。通过对程序代码的分析,代 to achieve effective and scalable prioritization incorpo 码单元根据测试川例的覆盖次数进行加权。实验结果 rating expert knowledge[C]iNternational Symposium on 表明,改进后的算法优于原算法,提高了测试川例的排 Software Testing and Analysis, Chicago, USA, 2009 序效果,拥有更好的软件错误检测能力。本文的算法能 201-212 够更早地检测到被较少测试用例覆盖的软件错误,因此 Carlson R,DoH, Denton AA clustering approach to 可以使川更少的测试用例检测到所有的软件错误。同 improving test case prioritization: an Industrial case 时,从实验结果可以看出,在较大规馍的数据集上,这种 study [c] /International Conference on Software Mainte nance.20l1:382-391 优势更为明显。在未来工作中,计划研究困难错误的检 [11 Leon D, Podgurski A.A comparison of coverage-based 测代价、测试用例排序问题的目标等内容。 and distribution-based techniques for filtering and prio ritizing test cases[C]proceedings of the IEEE Interna 参考文献: tional Symposium on Software Reliability Enginccring [I]张智佚,陈振宇,徐宝文,等测试用例演化研究进展[J软 2013,22(3):442-456 件学报,2013,24(4):663-674 [12]Do H, Elbaum S, Rothermel Gi Supporting controlled experi [2 Rothermel G, Untch R, Chu C, ct al. Prioritizing test cascs mentation with testing techniques: an infrastructure and for regression testing.IEEE Transactions on Software its patential impact[. Empirical Softwarc Enginccring: Engineering,2001,27(10):929948 An International Journal, 2005,10(4):405-435 [3]陈翔陈继红,鞠小林,等回归测试中的测试用例优先排13] Thomas s w, Hemmati h, Hassan ae,ctal. Static test 序技术述评[]软件学报,2013,24(8):1695-1712 case prioritization using topic models[]. Empirical Soft [4 iang B, Zhang 7, Chan WK, ct al. How well docs test ware Enginccring, 2012, 19(1):182-212 case prioritization integrate with statistical fault localiza- [14 Grechanik M, Xie Q, Fu C Maintaining and evolving GUI tion? []Information and Software Technology, 2012, 54 directed test scripts[C] /International Conference on Sof (7):739-758 ware Engineering, Vancouver, Canada, 2009: 408-418 1 Ma Z, Zhao J, Test case prioritization based on analysis [15 Daniel B, Dig D, Gvero T, et al.ReAssert: a tool for repair- of program structure[C]//Asia-Pacific Software Engineer- ing broken unit tests[C]//International Conference on ing Conference, Beijing, China, 2008: 471-478 Software Engineering, Hawaii, US.A, 2011: 1010-1012

-
2019-09-08
117B
Keil5安装包
2019-05-23Keil5安装包,附带STM31F1、STM32F4支持包以及破解软件。
C语言入门--必须基础17讲
2017-07-28适合没有基础的人群学习C语言,简单的入门教程。帮助小白理解什么是开发,什么是编程。做的很简单,很多细节没有详细讲解,不适合用来深入研究。学了这个,你能理解什么是编程,什么是C语言。
微信小程序开发实战
2016-09-25本套课程使用了元认知教学法,直接实战式教学,摆脱学院派的理论式讲解,对于0基础的学员可以入门编写微信小程序,过程中指导如何学习使用文档查阅接口等,通过两个完整的实战小项目的实例,入手小程序开发。
6.14MB
2019美赛ABCDEF题题目(附C题数据)
2019-01-312019美赛题目,完全是从官网下载,无翻译,可使用有道软件翻译浏览
C/C++程序员实战基础
2019-08-208.14MB
奥特曼大全及关系明细.pdf
2020-03-30此文档有详细奥特曼大全及关系明细
JAVA入门精品课程
2018-12-20课程目标: 1、让初学者从小白开始,善于运用知识点,解脱学习的苦恼 2、能够学习更多的工作中使用技巧,成为编程高手
python入门
2018-12-18您观看课程学习后 免费入群领取【超全Python资料包+17本学习电子书】 帮助与数百万年轻人打开人工智能的学习大门!
2.80MB
Microsoft Visual C++ 14.0(安装包)
2018-05-08安装python依赖包报错信息"microsoft visual c++ 14.0 is required"的解决办法。 具体参考我的博客:https://blog.csdn.net/amoscn/a
C++入门基础视频精讲
2018-09-28本课程讲述了c++的基本语言,进阶语言,以实战为基准,高效率传递干货, 教会学员命令行编译直击底层过程,现场编码 并且掌握各种排错思路
21天通关Python(仅视频课)
2019-05-21本页面购买不发书!!!仅为视频课购买!!! 请务必到https://edu.csdn.net/bundled/detail/49下单购买课+书。 本页面,仅为观看视频页面,如需一并购买图书,请务必到https://edu.csdn.net/bundled/detail/49下单购买课程+图书!!! 疯狂Python精讲课程覆盖《疯狂Python讲义》全书的主体内容。 内容包括Python基本数据类型、Python列表、元组和字典、流程控制、函数式编程、面向对象编程、文件读写、异常控制、数据库编程、并发编程与网络编程、数据可视化分析、Python爬虫等。 全套课程从Python基础开始介绍,逐步步入当前就业热点。将会带着大家从Python基础语法开始学习,为每个知识点都提供对应的代码实操、代码练习,逐步过渡到文件IO、数据库编程、并发编程、网络编程、数据分 析和网络爬虫等内容,本课程会从小案例起,至爬虫、数据分析案例终、以Python知识体系作为内在逻辑,以Python案例作为学习方式,最终达到“知行合一”。
-
下载
Android平台上的物流信息查询软件设计及应用
Android平台上的物流信息查询软件设计及应用
-
下载
slackscot:用Go编写的Slack bot coreframework,支持对消息更新的响应-源码
slackscot:用Go编写的Slack bot coreframework,支持对消息更新的响应-源码
-
下载
基于自动化生产过程中PLC控制系统的设计
基于自动化生产过程中PLC控制系统的设计
-
博客
平衡二叉树
平衡二叉树
-
博客
剪绳子
剪绳子
-
下载
WPF_CommandTest2.rar
WPF_CommandTest2.rar
-
博客
Scanner的next()方法、nextLine()方法、hasNext()方法
Scanner的next()方法、nextLine()方法、hasNext()方法
-
学院
2021-1小时Django和Mysql数据库操作入门教程(新手入门)
2021-1小时Django和Mysql数据库操作入门教程(新手入门)
-
学院
Python零基础入门
Python零基础入门
-
学院
Appium自动化测试套餐
Appium自动化测试套餐
-
学院
微信支付V3版微信小程序支付C#版
微信支付V3版微信小程序支付C#版
-
下载
java项目启动脚本
java项目启动脚本
-
博客
sicp-2.4
sicp-2.4
-
学院
4天玩转JVM训练营
4天玩转JVM训练营
-
博客
C/C++编程学习 - 第13周 ③ 苹果和虫子2
C/C++编程学习 - 第13周 ③ 苹果和虫子2
-
学院
Metabase从入门到精通视频教程
Metabase从入门到精通视频教程
-
下载
dokit:基于Spring Boot2,Jpa,Spring Security,JWT,redis,Vue的前分离分离的后台管理系统开发平台,用户管理,菜单管理,角色管理,字典管理,权限控制的方式为RBAC,操作日志,异常日志,接口限流,项目支持数据权限管理,支持一键生成前代码(支持在线预览及打包下载),支持前端菜单动态路由可一键部署服务器应用,数据库。系统中活跃用户状态监控,监视当前系统CPU,内存,磁盘,磁盘等相关信息,基于元素UI在线表单设计及生成Vue代码-源码
dokit:基于Spring Boot2,Jpa,Spring Security,JWT,redis,Vue的前分离分离的后台管理系统开发平台,用户管理,菜单管理,角色管理,字典管理,权限控制的方式为RBAC,操作日志,异常日志,接口限流,项目支持数据权限管理,支持一键生成前代码(支持在线预览及打包下载),支持前端菜单动态路由可一键部署服务器应用,数据库。系统中活跃用户状态监控,监视当前系统CPU,内存,磁盘,磁盘等相关信息,基于元素UI在线表单设计及生成Vue代码-源码
-
下载
create-discord-bot:使用基于窗口小部件的简单框架创建Discord机器人-源码
create-discord-bot:使用基于窗口小部件的简单框架创建Discord机器人-源码
-
下载
azure-spring-boot:适用于Azure服务的Spring Boot Starters-源码
azure-spring-boot:适用于Azure服务的Spring Boot Starters-源码
-
学院
rabbitmq-stomp服务端推送技术
rabbitmq-stomp服务端推送技术
-
博客
mariadb
mariadb
-
博客
倪文迪陪你学蓝桥杯2021寒假每日一题:1.29日(2019省赛A组第7题)
倪文迪陪你学蓝桥杯2021寒假每日一题:1.29日(2019省赛A组第7题)
-
下载
simplestack.orm:SimpleStack.Orm是Dapper项目之上的一层,可基于lambda表达式生成SQL查询-源码
simplestack.orm:SimpleStack.Orm是Dapper项目之上的一层,可基于lambda表达式生成SQL查询-源码
-
学院
Python专题精讲 日期和时间的使用
Python专题精讲 日期和时间的使用
-
博客
辗转相除法(欧几里得)原理
辗转相除法(欧几里得)原理
-
博客
设计模式----【3】单例模式(抽象工厂模式)
设计模式----【3】单例模式(抽象工厂模式)
-
博客
C/C++编程学习 - 第13周 ② 点和正方形的关系
C/C++编程学习 - 第13周 ② 点和正方形的关系
-
博客
线程并发5.AQS
线程并发5.AQS
-
博客
滑动验证码被破解怎么办?
滑动验证码被破解怎么办?
-
下载
RecQ:RecQ:用于推荐系统的Python框架(基于TensorFlow)-源码
RecQ:RecQ:用于推荐系统的Python框架(基于TensorFlow)-源码