[发明专利]基于程序行为网络聚合的测试用例动态排序方法有效
申请号: | 201711449875.X | 申请日: | 2017-12-27 |
公开(公告)号: | CN108021509B | 公开(公告)日: | 2020-08-18 |
发明(设计)人: | 刘烃;池剑磊;贺安成;郑庆华;屈宇 | 申请(专利权)人: | 西安交通大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06K9/62 |
代理公司: | 西安通大专利代理有限责任公司 61200 | 代理人: | 田洲 |
地址: | 710049 陕*** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 程序 行为 网络 聚合 测试 动态 排序 方法 | ||
本发明公开一种基于程序行为网络聚合的测试用例动态排序方法,包括以下步骤:步骤S1:基于动态插桩技术,对执行待测程序的所有测试用例执行过程进行监控;并获得程序调用总图TG;步骤S2:采用图编辑距离度量方法计算每两张子图之间的图编辑距离Dij,随后,利用图编辑距离计算图相似度σij,构建图相似度矩阵Mi,j;步骤S3:采用K‑medoids聚类算法将测试用例划分至n个簇中;步骤S4:利用极大极小距离抽样策略从聚类结果簇中获得所需的测试用例序列T'。本发明在排序性能和时间开销上取得一定的平衡,并且在大规模软件中能够取得性能和时间开销双方面的优势,利用动态方式获取测试数据也能有效避免静态方式的缺点。
技术领域
本发明涉及可信软件及软件回归测试领域,特别涉及一种基于程序行为网络聚合的测试用例动态排序方法。
背景技术
回归测试是软件开发过程中的一个重要组成部分,开发者在开发和维护过程中会因为各种原因修改旧的模块或加入新的模块,为了避免引入新的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:记录函数调用记录格式为:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安交通大学,未经西安交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201711449875.X/2.html,转载请声明来源钻瓜专利网。