CN108021509B - 基于程序行为网络聚合的测试用例动态排序方法 - Google Patents
基于程序行为网络聚合的测试用例动态排序方法 Download PDFInfo
- Publication number
- CN108021509B CN108021509B CN201711449875.XA CN201711449875A CN108021509B CN 108021509 B CN108021509 B CN 108021509B CN 201711449875 A CN201711449875 A CN 201711449875A CN 108021509 B CN108021509 B CN 108021509B
- Authority
- CN
- China
- Prior art keywords
- graph
- test case
- test cases
- program
- test
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/23—Clustering techniques
- G06F18/232—Non-hierarchical techniques
- G06F18/2321—Non-hierarchical techniques using statistics or function optimisation, e.g. modelling of probability density functions
- G06F18/23213—Non-hierarchical techniques using statistics or function optimisation, e.g. modelling of probability density functions with fixed number of clusters, e.g. K-means clustering
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Probability & Statistics with Applications (AREA)
- Computer Hardware Design (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Evolutionary Computation (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开一种基于程序行为网络聚合的测试用例动态排序方法,包括以下步骤:步骤S1:基于动态插桩技术,对执行待测程序的所有测试用例执行过程进行监控;并获得程序调用总图TG;步骤S2:采用图编辑距离度量方法计算每两张子图之间的图编辑距离Dij,随后,利用图编辑距离计算图相似度σij,构建图相似度矩阵Mi,j;步骤S3:采用K‑medoids聚类算法将测试用例划分至n个簇中;步骤S4:利用极大极小距离抽样策略从聚类结果簇中获得所需的测试用例序列T'。本发明在排序性能和时间开销上取得一定的平衡,并且在大规模软件中能够取得性能和时间开销双方面的优势,利用动态方式获取测试数据也能有效避免静态方式的缺点。
Description
技术领域
本发明涉及可信软件及软件回归测试领域,特别涉及一种基于程序行为网络聚合的测试用例动态排序方法。
背景技术
回归测试是软件开发过程中的一个重要组成部分,开发者在开发和维护过程中会因为各种原因修改旧的模块或加入新的模块,为了避免引入新的bug,使用原有测试用例来检测和验证软件更新过程是十分必要的。然而,回归测试是一项开销昂贵的工作,一些研究表示,回归测试可能会占到总测试开销的80%左右。
为了减少回归测试过程开销,人们提出了多种优化方法,其中一种主要方法叫做测试用例排序。测试用例排序旨在对测试用例的执行序列通过特定的方式进行重排,使得错误能被更早地发现,从而减少整体测试开销。然而,传统的测试用例排序方法主要利用静态结构覆盖率进行排序,例如方法覆盖、语句覆盖、分支覆盖等。更细粒度的覆盖方法性能会更好,但是会产生更大的时间开销,如何在性能和时间开销上取得权衡是十分必要的。另外,静态的结构覆盖不仅需要源代码进行分析,也会导致结构数据的缺失。
发明内容
本发明的目的旨在提供一种基于程序行为网络聚合的测试用例动态排序方法,其可以在排序性能和时间开销上取得一定的平衡,并且在大规模软件中能够取得性能和时间开销双方面的优势,利用动态方式获取测试数据也能有效避免静态方式的缺点,以解决上述技术问题。
为了实现上述目的,本发明采用的技术方案是:
基于程序行为网络聚合的测试用例动态排序方法,包括以下步骤:
步骤S1:基于动态插桩技术,对执行待测程序的所有测试用例执行过程进行监控;对每个测试用例对应的栈操作序列Traces进行清洗过滤,将每一个测试用例Ti对应的Tracei转换成一张有向带权的子图CGi,将所有子图进行并集操作,获得程序调用总图TG;
步骤S2:采用图编辑距离度量方法计算每两张子图之间的图编辑距离Dij,随后,利用图编辑距离计算图相似度σij,构建图相似度矩阵Mi,j;
步骤S3:采用K-medoids聚类算法将测试用例划分至n个簇中;
步骤S4:利用极大极小距离抽样策略从聚类结果簇中获得所需的测试用例序列T'。
进一步的,步骤S1中使用动态插桩工具Kieker,在待分析程序的执行代码前后插入监控代码,实现对程序的函数级监控。
进一步的,步骤S1中,对每个测试用例对应的栈操作序列Traces进行清洗过滤,将每一个测试用例Ti对应的Tracei转换成一张有向带权的子图CGi,将所有子图进行并集操作,获得程序调用总图TG,具体包括以下步骤:
步骤S201:记录函数调用记录格式为:
(type,hashcode,mName,SessionID,UserID,TraceID,sTime,eTime,cName,eoi,ess),取其中mName、TraceID、eoi、ess四项用于构图,mName表示函数名及其返回值,传递参数信息;TraceID为Trace编号,同一条Trace拥有同样的hashcode编号;eoi表示栈操作序号;ess表示栈操作深度;
步骤S202:根据eoi和ess构建方法调用图CG=(V,E,w),其中V代表点的集合,点的标签为方法名;E代表边的集合,边的权重w代表两个方法之间的调用频度;
步骤S203:将子图序列{CG1,CG2.....CGn}取交集归并,重复的边权重相加,获得软件调用总图TG。
进一步的,步骤S2中,利用子图序列{CG1,CG2.....CGn}与总图TG,计算图CGi和图CGj之间图编辑距离Dij,图编辑距离公式如下:Dij=VC+EC+RC,VC代表点变换产生的开销,EC代表边变换产生的开销,RC代表点标签名变换产生的开销;随后,利用图编辑距离计算图相似度构建图相似度矩阵Mi,j。
进一步的,步骤S3中,使用改进后的K-means算法,将与周围测试用例相似度最高的测试用例作为核心medoid,具体聚类步骤如下:
步骤S301:选取K个测试用例作为初始核心;
步骤S302:根据图相似度矩阵Mi,j将其余测试用例分配至K个簇中;
步骤S303:重新计算簇的核心测试用例,如果核心发生改动,转入步骤S302,如果核心未发生改动,结束聚类算法,输出K个簇。
步骤S401:将步骤S3获得的各个簇按簇中元素规模排序,将K个核心测试用例置入T'中;
步骤S402:每个簇中,取与已经加入T'的K个核心分别距离最远的测试用例置入T';
步骤S403:步骤S402中,记每个簇中已取得元素集合为k为大于等于1且小于等于n的一个自然数;n为测试用例的个数;测试用例之间距离mindij为簇中某个测试用例与Ci之间最小距离,即minσij,分别取簇中剩余元素mindij为最大值的测试用例加入T'中;如果该簇中不存在剩余元素,跳过;
步骤S404:若剩余簇中还有测试用例未加入T',跳至步骤S403;否则输出T'。
S1中基于动态插桩技术,对执行待测程序的所有测试用例执行过程进行监控,记录所有函数级别调用操作,并记录相关的函数名、参数、返回值、当前调用栈深度相关信息。
步骤S1)中,采用动态插桩技术采集到的方法调用信息比单独的方法覆盖信息量更大,能更好的反映测试过程中的控制流信息,
步骤S2)中,引入图模型的概念,将每一个测试用例转化成一张子图,通过比较图与图之间的结构差异获得的图相似度对测试用例进行排序。
步骤S3)中,目前有不少研究都在质疑传统结构覆盖率是否能够真实反映故障检测率,即覆盖率越高的测试用例检测到bug的几率就越高。本发明引入图相似度的概念,采用基于分布的方法对测试用例进行排序,有效利用结构信息但不仅仅考虑覆盖率。
步骤S4)中,引入聚类算法优化整体排序过程,聚类算法可以将部分相似的测试用例聚集在一个簇中,提高抽样精度。为了适应回归测试环境,本发明选用改进K-means获得的K-medoids,规避K-means质心选取的缺点。
与现有技术相比,本发明的有益效果是:
1)本发明的监控层次位于函数层,但是函数调用轨迹比静态方法覆盖信息量高,监控粒度适中,负载适中,适合作为方法级结构覆盖和语句级结构覆盖中取权衡的替代方法。
2)本发明将图模型、图相似度、图聚类理论引入回归测试用例排序领域中,方法新颖。
3)本发明使用的动态函数调用网络,比起静态获取的信息更加全面,无需源代码即可获取软件在整个测试流程中的所有行为,比起函数级结构信息,函数调用信息甚至能够反映一部分语句级结构信息内容。
4)本发明的回归测试排序效果在大规模软件上与同粒度的方法级结构覆盖相比效果优越,比之更细粒度的语句级结构覆盖部分占优,是一种具有实用价值的新型回归测试用例排序方法。
附图说明
图1为本发明基于程序行为网络聚合的测试用例动态排序方法整体思路示意图;
图2为构建图模型示意图;
图3为本发明具体方法流程图;
图4为Trace构图示意图;其中图4(a)和图4(b)为不同Trace构图示意图。
具体实施方式
下面结合附图和实施例详细说明本发明的实施方式。
如图1和图3所示,图1为本发明基于程序行为网络聚合的测试用例动态排序方法整体思路示意图,图3为本发明具体方法流程图。
本发明基于程序行为网络聚合的测试用例动态排序方法,包括以下步骤:
步骤S1:使用动态插桩工具Kieker,在待分析程序的执行代码前后插入监控代码,实现对程序的函数级监控,该方式的优点是无需源代码仅需要编译后的class文件即可实施插桩,不会对源代码进行二次修改。在使用Junit工具运行程序的测试用例时,会逐条输出栈操作序列Trace,将每个测试用例T对应的Traces进行清洗和过滤,将每一个测试用例Ti对应的Tracei转换成一张有向带权的子图CGi;取并集聚合获得程序调用总图TG。
其中Traces转换为TGi并取并集聚合成总图TG步骤如图2所示,具体包括以下步骤:
步骤S201:记录函数调用记录格式为:
(type,hashcode,mName,SessionID,UserID,TraceID,sTime,eTime,cName,eoi,ess),取其中mName、TraceID、eoi、ess四项用于构图,mName表示函数名及其返回值,传递参数等信息;TraceID为Trace编号,同一条Trace拥有同样的hashcode编号;eoi表示栈操作序号;ess表示栈操作深度。
步骤S202:根据eoi和ess构建方法调用图CG=(V,E,w),其中V代表点的集合,点的标签为方法名;E代表边的集合,边的权重w代表两个方法之间的调用频度。图构建方法如图4所示,图4(a)中eoi和ess标记为(0,0),(1,1),(2,2),(3,1),图4(b)中eoi和ess标记为(0,0),(1,1),(2,1),(3,2),更深的调用结构图以此类推。
步骤S203:将子图序列{CG1,CG2.....CGn}取交集归并,重复的边权重相加,获得软件调用总图TG。
步骤S2:利用子图序列{CG1,CG2.....CGn}与总图TG,计算图CGi和图CGj之间图编辑距离Dij,图编辑距离公式如下:Dij=VC+EC+RC,VC代表点变换产生的开销,EC代表边变换产生的开销,RC代表点标签名变换产生的开销。随后,利用图编辑距离计算图相似度构建图相似度矩阵Mi,j。
步骤S3:为了减少排序开销,先对测试用例集进行聚类操作,将比较相似的测试用例聚集在一个簇中。本发明中使用的是改进后的K-means(称为K-medoids算法),因为K-means算法中的中心点为欧式空间的重心,不是很适用于实体测试用例集,所以本发明中选择K-medoids算法,将与周围测试用例相似度最高的测试用例作为核心即medoid,具体聚类步骤如下:
步骤S301:选取K个测试用例作为初始核心;
步骤S302:根据图相似度矩阵Mi,j将其余测试用例分配至K个簇中;
步骤S303:重新计算簇的核心测试用例,如果核心发生改动,转入步骤S302,如果核心未发生改动,结束聚类算法,输出K个簇;
所求测试用例序列为T'
步骤S401:将步骤S3获得的各个簇按簇中元素规模排序,将K个核心测试用例置入T'中;
步骤S402:每个簇中,取与已经加入T'的K个核心分别距离最远的测试用例置入T'。
步骤S403:步骤S402中,记每个簇中已取得元素集合为k为大于等于1且小于等于n的一个自然数;n为测试用例的个数;测试用例之间距离mindij为簇中某个测试用例与Ci之间最小距离,即minσij,分别取簇中剩余元素mindij为最大值的测试用例加入T'中。如果该簇中不存在剩余元素,跳过。
步骤S404:若剩余簇中还有测试用例未加入T',跳至步骤S403;否则输出T'。
Claims (5)
1.基于程序行为网络聚合的测试用例动态排序方法,其特征在于,包括以下步骤:
步骤S1:基于动态插桩技术,对执行待测程序的所有测试用例执行过程进行监控;对每个测试用例对应的栈操作序列Traces进行清洗过滤,将每一个测试用例Ti对应的Tracei转换成一张有向带权的子图CGi,将所有子图进行并集操作,获得程序调用总图TG;
步骤S2:采用图编辑距离度量方法计算每两张子图之间的图编辑距离Dij,随后,利用图编辑距离计算图相似度σij,构建图相似度矩阵Mi,j;
步骤S3:采用K-medoids聚类算法将测试用例划分至n个簇中;
步骤S4:利用极大极小距离抽样策略从聚类结果簇中获得所需的测试用例序列T';
步骤S1中,对每个测试用例对应的栈操作序列Traces进行清洗过滤,将每一个测试用例Ti对应的Tracei转换成一张有向带权的子图CGi,将所有子图进行并集操作,获得程序调用总图TG,具体包括以下步骤:
步骤S201:记录函数调用记录格式为:
(type,hashcode,mName,SessionID,UserID,TraceID,sTime,eTime,cName,eoi,ess),取其中mName、TraceID、eoi、ess四项用于构图,mName表示函数名及其返回值,传递参数信息;TraceID为Trace编号,同一条Trace拥有同样的hashcode编号;eoi表示栈操作序号;ess表示栈操作深度;
步骤S202:根据eoi和ess构建方法调用图CG=(V,E,w),其中V代表点的集合,点的标签为方法名;E代表边的集合,边的权重w代表两个方法之间的调用频度;
步骤S203:将子图序列{CG1,CG2.....CGn}取交集归并,重复的边权重相加,获得软件调用总图TG。
2.根据权利要求1所述基于程序行为网络聚合的测试用例动态排序方法,其特征在于,步骤S1中使用动态插桩工具Kieker,在待分析程序的执行代码前后插入监控代码,实现对程序的函数级监控。
4.根据权利要求1所述基于程序行为网络聚合的测试用例动态排序方法,其特征在于,步骤S3中,使用改进后的K-means算法,将与周围测试用例相似度最高的测试用例作为核心medoid,具体聚类步骤如下:
步骤S301:选取K个测试用例作为初始核心;
步骤S302:根据图相似度矩阵Mi,j将其余测试用例分配至K个簇中;
步骤S303:重新计算簇的核心测试用例,如果核心发生改动,转入步骤S302,如果核心未发生改动,结束聚类算法,输出K个簇。
步骤S401:将步骤S3获得的各个簇按簇中元素规模排序,将K个核心测试用例置入T'中;
步骤S402:每个簇中,取与已经加入T'的K个核心分别距离最远的测试用例置入T';
步骤S403:步骤S402中,记每个簇中已取得元素集合为k为大于等于1且小于等于n的一个自然数;n为测试用例的个数;测试用例之间距离min dij为簇中某个测试用例与Ci之间最小距离,即minσij,分别取簇中剩余元素min dij为最大值的测试用例加入T'中;如果该簇中不存在剩余元素,跳过;
步骤S404:若剩余簇中还有测试用例未加入T',跳至步骤S403;否则输出T'。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711449875.XA CN108021509B (zh) | 2017-12-27 | 2017-12-27 | 基于程序行为网络聚合的测试用例动态排序方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711449875.XA CN108021509B (zh) | 2017-12-27 | 2017-12-27 | 基于程序行为网络聚合的测试用例动态排序方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108021509A CN108021509A (zh) | 2018-05-11 |
CN108021509B true CN108021509B (zh) | 2020-08-18 |
Family
ID=62071893
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711449875.XA Active CN108021509B (zh) | 2017-12-27 | 2017-12-27 | 基于程序行为网络聚合的测试用例动态排序方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108021509B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109977005B (zh) * | 2019-02-13 | 2022-11-25 | 网易(杭州)网络有限公司 | 端到端测试方法、介质、装置和计算设备 |
CN110245492B (zh) * | 2019-05-22 | 2021-04-20 | 西安交通大学 | 基于张量分解的安卓app重打包检测方法 |
CN110515837B (zh) * | 2019-07-31 | 2022-12-02 | 杭州电子科技大学 | 一种基于efsm模型和聚类分析的测试用例排序方法 |
CN112486738B (zh) * | 2019-09-12 | 2022-04-26 | 阿里巴巴集团控股有限公司 | 负载测试方法、装置、电子设备及计算机可读存储介质 |
CN111367790B (zh) * | 2020-02-14 | 2023-05-12 | 重庆邮电大学 | 一种基于混合模型的元启发式测试用例排序方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102253889A (zh) * | 2011-08-07 | 2011-11-23 | 南京大学 | 一种回归测试中基于分布的测试用例优先级划分方法 |
CN102831055A (zh) * | 2012-07-05 | 2012-12-19 | 陈振宇 | 基于加权属性的测试用例选择方法 |
CN105528289A (zh) * | 2015-12-04 | 2016-04-27 | 中国矿业大学 | 一种基于分支覆盖与相似性的回归测试用例优先排序方法 |
CN107102939A (zh) * | 2016-11-09 | 2017-08-29 | 中国矿业大学 | 一种回归测试用例自动分类方法 |
-
2017
- 2017-12-27 CN CN201711449875.XA patent/CN108021509B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102253889A (zh) * | 2011-08-07 | 2011-11-23 | 南京大学 | 一种回归测试中基于分布的测试用例优先级划分方法 |
CN102831055A (zh) * | 2012-07-05 | 2012-12-19 | 陈振宇 | 基于加权属性的测试用例选择方法 |
CN105528289A (zh) * | 2015-12-04 | 2016-04-27 | 中国矿业大学 | 一种基于分支覆盖与相似性的回归测试用例优先排序方法 |
CN107102939A (zh) * | 2016-11-09 | 2017-08-29 | 中国矿业大学 | 一种回归测试用例自动分类方法 |
Non-Patent Citations (2)
Title |
---|
Malware Classification based on Call Graph Clustering;Joris Kinable et al;《Journal in Computer Virology》;20111231;第7卷(第4期);第233-245页 * |
一种基于K中心点算法的测试用例集约简方法;陈阳梅 等;《计算机科学》;20120615;第39卷(第6A期);第422-424页 * |
Also Published As
Publication number | Publication date |
---|---|
CN108021509A (zh) | 2018-05-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108021509B (zh) | 基于程序行为网络聚合的测试用例动态排序方法 | |
CN110309071B (zh) | 测试代码的生成方法及模块、测试方法及系统 | |
US8694967B2 (en) | User interface inventory | |
CN102662833B (zh) | 一种管理测试用例的方法 | |
TW201941058A (zh) | 異常檢測方法及裝置 | |
CN107239392B (zh) | 一种测试方法、装置、终端及存储介质 | |
US8661125B2 (en) | System comprising probe runner, monitor, and responder with associated databases for multi-level monitoring of a cloud service | |
US9367428B2 (en) | Transparent performance inference of whole software layers and context-sensitive performance debugging | |
CN112214369A (zh) | 基于模型融合的硬盘故障预测模型建立方法及其应用 | |
Las-Casas et al. | Weighted sampling of execution traces: Capturing more needles and less hay | |
CN110750458A (zh) | 大数据平台测试方法、装置、可读存储介质及电子设备 | |
CN108415830A (zh) | 一种软件测试用例的生成方法及装置 | |
CN111045939B (zh) | Weibull分布的故障检测开源软件可靠性建模方法 | |
CN111782532B (zh) | 一种基于网络异常节点分析的软件故障定位方法及系统 | |
CN110489317A (zh) | 基于工作流的云系统任务运行故障诊断方法与系统 | |
CN108595312A (zh) | 一种模拟用户行为的性能自动化方法及装置 | |
CN111913824A (zh) | 确定数据链路故障原因的方法及相关设备 | |
CN110597728A (zh) | 构建测试数据的方法、装置及系统 | |
CN111831545A (zh) | 测试用例生成方法、生成装置、计算机设备和存储介质 | |
CN114610639A (zh) | 一种对图形用户界面测试的方法、装置、设备及存储介质 | |
CN110334001A (zh) | 一种批量自动生成回声测试的方法和装置 | |
CN101398781A (zh) | 一种快速诊断系统软件缺陷的系统及方法 | |
CN115345600B (zh) | 一种rpa流程的生成方法和装置 | |
JP2013077124A (ja) | ソフトウェアテストケース生成装置 | |
CN106776623B (zh) | 一种用户行为分析方法和设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |