CN102968375B - 基于关联规则挖掘的不可达路径检测方法 - Google Patents
基于关联规则挖掘的不可达路径检测方法 Download PDFInfo
- Publication number
- CN102968375B CN102968375B CN201210501664.7A CN201210501664A CN102968375B CN 102968375 B CN102968375 B CN 102968375B CN 201210501664 A CN201210501664 A CN 201210501664A CN 102968375 B CN102968375 B CN 102968375B
- Authority
- CN
- China
- Prior art keywords
- node
- branch
- algorithm
- rule
- association rule
- 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.)
- Expired - Fee Related
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
<b>本发明涉及一种基于关联规则挖掘的不可达路径检测方法,该基于关联规则挖掘的不可达路径检测方法包括获取数据集、基于关联规则挖掘的分支相关性的确定及不可达路径的检测。该检测方法有效地将静态分析方法和动态分析技术的优势结合起来,既避免了使用纯静态分析方法分支节点覆盖率低、复杂度高的缺陷,又弥补了使用动态分析方法收集动态信息花费代价大的问题,该方法能够准确地检测出不可达路径,有效地提高了软件测试的效率。</b><b /><b />
Description
技术领域
本发明涉及一种软件测试中的不可达路径检测方法,尤其是基于关联规则挖掘的不可达路径检测方法。
背景技术
软件测试是提高软件质量和可靠性的重要手段,同时也是一项昂贵的、乏味的、耗费人力的工作,它在软件开发中占据了50%左右的耗费。如果这个过程能够被自动地执行,这势必会缩短软件的开发时间,同时也会提高软件的质量,从而增强软件的市场竞争力。
很多软件测试问题都可以归结为面向路径测试数据生成的问题,而不可达路径的存在是面向路径测试数据生成中的一个具有挑战性的问题,没有输入数据能经过这些不可达路径,它会导致测试数据生成阶段大量人力、财力的浪费,给测试带来很大的困难。实验结果表明,在一个复杂的程序中存有一定数量的不可达路径,不可达路径的检测是一个不可判定的问题,路径的可达性直接影响着测试的效率和充分性,有效地检测到这些不可达路径不仅能够节约测试资源,而且能提高测试效率。
分支相关性的存在是不可达路径的主要起因,确定分支的相关性在不可达路径的检测中发挥着十分重要的作用,对其进行深入研究具有十分重要的意义。然而,分支相关性的确定是一项困难的工作,现有的方法大多无法及时、准确地得到分支语句间的相互关系,其中,静态分析方法复杂度高,分支节点覆盖率低,无法与实际工程相结合,而动态分析方法则花费代价大。
发明内容
为了解决现有的不可达路径检测方法不能有效检测不可达路径的问题,本发明提供一种基于关联规则挖掘的不可达路径检测方法,该检测方法有效地将静态分析方法和动态分析技术的优势结合起来,既避免了使用纯静态分析方法分支节点覆盖率低、复杂度高的缺陷,又弥补了使用动态分析方法收集动态信息花费代价大的问题,将关联规则挖掘用于分支相关性的确定有着较大的优势和较高的效率,该方法能够准确地检测出不可达路径,有效地提高了软件测试的效率。
本发明解决其技术问题所采用的技术方案是:该基于关联规则挖掘的不可达路径检测方法包括获取数据集、基于关联规则挖掘的分支相关性的确定及不可达路径的检测。
(1)获取数据集
首先采用静态分析技术,利用Soot对程序进行预处理,构建程序的控制流图、控制树及蕴含树,然后设计搜索算法找出具有控制关系的分支节点序列集U。对于采用动态分析技术,通过JDI监听序列ui中各个分支节点ni1,ni2,…,nik的执行情况,在输入域内随机获取N个抽样输入向量,要求当程序输入每个抽样向量时ni1,ni2,…,nik全部执行,若存在某节点nim不执行,则换取其它抽样值,直到所有的分支节点都执行。
对于为了提升算法的效率,我们仅记录并分析各分支节点的信息,通过soot分析当程序输入抽样值Iij时各分支节点的取向(T/F),从而得到抽样值Iij对应的分支取值序列pij,依此类推,获取N个抽样值的分支取值序列集Si。最终分支序列集U将得到一个分支取值序列集的集合S,即
其中,pij是当程序输入抽样值Iij时ui中各分支节点的取值序列,pij中的每个元素取值为T/F。
在介绍本步的具体算法之前,先给出如下定义:
循环节点:对于节点n,若且m在蕴含树和控制树中皆是N的子孙节点,则可认为节点n为循环节点。
控制树主干:由出口节点及其在控制树中的所有祖先节点构成的序列。
本步算法如图2所示,图2所示的算法对分支取值序列集进行了查找,该算法采用逆向遍历并结合递归算法来实现。算法首先从出口节点开始,对控制树主干上的节点序列进行逆向的遍历分析,并对当前节点及其子节点进行分析,遍历分析当前节点的子节点,根据循环节点的定义判定当前节点是否是循环节点,若当前节点为循环节点,则将该节点记录下来,并结合递归算法递归当前子节点,递归结束后再次记录当前节点;若当前节点为分支节点,则直接递归当前子节点,递归完成后,再根据其兄弟节点的存储情况来选择当前节点的记录方式;若当前节点为叶子节点,则直接返回空值,无需记录。当对控制树主干上的所有节点遍历完成后,可得到由具有控制关系的各个分支节点序列组成的序列集合U,依次对U中的每条序列进行抽样执行分析,最终得到各个序列的分支取值序列集的集合S,算法结束。
得到了分支取值序列集的集合S,在对其实施关联规则挖掘之前,我们需要将其转换为关联规则所需的数据集。对于按如下方式将Si转化为关联规则挖掘所需的数据集Di,即
其中
(2)基于关联规则挖掘的分支相关性的确定
在本部分中,我们将对其进行关联规则挖掘,从而确定分支的相关性。对于首先从数据集Di中找出所有的频繁项集,然后再由频繁项集产生关联规则。
公式为:
1.从Di中找出所有的频繁项集
从数据集Di中,找出所有满足支持度大于等于最小支持度min_support的频繁项集。为了提升算法的效率,我们采用FP-Growth算法进行挖掘。以2-项集{A,B}为例,其支持度可由公式得到;使用FP-Growth算法生成频繁项集,首先需要读取数据集Di,构造频繁1-项集及FP-Tree,然后根据图3所示的算法2在FP-Tree上进行频繁项集的挖掘。算法2采用分而治之的方法,它将FP-Tree分解成一些条件模式库CPB,每个CPB和一个频繁1-项集相关联,我们根据CPB构造其相应的条件FP-tree,然后再采用递归算法分别对这些条件FP-tree进行挖掘,从而得到所有的频繁项集F(Di,min_support)。
2.由频繁项集产生关联规则
利用上一步得到的频繁项集F(Di,min_support)来产生规则,如果某一规则的置信度大于等于最小置信度(min_confidence),则该规则为关联规则。以频繁项集{A,B}为例,它产生的规则其置信度可由公式 得到
每个关联规则的生成步骤如下:
①对于 产生f的所有非空子集;
②对于f的每一个非空子集v,若
其中P(f)表示f发生的概率,P(v)表示v发生的概率,则规则为关联规则。
设数据集为:
首先,对Di进行挖掘,找出满足支持度≥0.25的频繁项集,可得到频繁项集:{{n1=T,n4=F support(0.25)},{n1=F,n4=Tsupport(0.5)},{n1=T,n4=T support(0.25)}};
然后,由频繁项集产生关联规则,找出满足置信度≥1的关联规则,可得到关联规则:
因为在控制流图中n1控制n4,我们只需考虑n1对n4产生的影响,所以在得到的关联规则中,我们仅需即(n1,n4)有F→T的相关性。
(3)不可达路径的检测
得到分支节点间的相关性后,我们可根据下面的方法检测出程序中的不可达路径。
设ni和nj是程序中的两个条件语句,如果经关联规则挖掘后得到(ni,nj)有T→T相关性,则ni的真分支和nj的假分支构成冲突子路径;如果经关联规则挖掘后得到(ni,nj)有T→F相关性,则ni的真分支和nj的真分支构成冲突子路径。同样地,如果(ni,nj)有F→T相关性,则ni的假分支和nj的假分支构成冲突子路径;如果(ni,nj)有F→F相关性,则ni的假分支和nj的真分支构成冲突子路径。对于任何一条路径,若该路径包含冲突子路径,则它为不可达路径。
本发明的有益效果是,该检测方法有效地将静态分析方法和动态分析技术的优势结合起来,既避免了使用纯静态分析方法分支节点覆盖率低低、复杂度高的缺陷,又弥补了使用动态分析方法收集动态信息花费代价大的问题,该方法能够准确地检测出不可达路径,有效地提高了软件测试的效率。
附图说明
下面结合附图和实例对本发明作进一步说明。
图1是本发明的整体流程原理示意图。
图2是分支取值序列集的获取算法的示意图。
图3是频繁项集的挖掘算法的示意图。
具体实施方式
在图中,该基于关联规则挖掘的不可达路径检测方法包括获取数据集、基于关联规则挖掘的分支相关性的确定及不可达路径的检测。
(1)获取数据集
首先采用静态分析技术,利用Soot对程序进行预处理,构建程序的控制流图、控制树及蕴含树,然后设计搜索算法找出具有控制关系的分支节点序列集U。对于采用动态分析技术,通过JDI监听序列ui中各个分支节点ni1,ni2,…,nik的执行情况,在输入域内随机获取N个抽样输入向量,要求当程序输入每个抽样向量时ni1,ni2,…,nik全部执行,若存在某节点nim不执行,则换取其它抽样值,直到所有的分支节点都执行。
对于为了提升算法的效率,我们仅记录并分析各分支节点的信息,通过soot分析当程序输入抽样值Iij时各分支节点的取向(T/F),从而得到抽样值Iij对应的分支取值序列pij,依此类推,获取N个抽样值的分支取值序列集Si。最终分支序列集U将得到一个分支取值序列集的集合S,即
其中,pij是当程序输入抽样值Iij时ui中各分支节点的取值序列,pij中的每个元素取值为T/F。
在介绍本步的具体算法之前,先给出如下定义:
循环节点:对于节点n,若且m在蕴含树和控制树中皆是N的子孙节点,则可认为节点n为循环节点。
控制树主干:由出口节点及其在控制树中的所有祖先节点构成的序列。
本步算法如图2所示,图2所示的算法对分支取值序列集进行了查找,该算法采用逆向遍历并结合递归算法来实现。算法首先从出口节点开始,对控制树主干上的节点序列进行逆向的遍历分析,并对当前节点及其子节点进行分析,遍历分析当前节点的子节点,根据循环节点的定义判定当前节点是否是循环节点,若当前节点为循环节点,则将该节点记录下来,并结合递归算法递归当前子节点,递归结束后再次记录当前节点;若当前节点为分支节点,则直接递归当前子节点,递归完成后,再根据其兄弟节点的存储情况来选择当前节点的记录方式;若当前节点为叶子节点,则直接返回空值,无需记录。当对控制树主干上的所有节点遍历完成后,可得到由具有控制关系的各个分支节点序列组成的序列集合U,依次对U中的每条序列进行抽样执行分析,最终得到各个序列的分支取值序列集的集合S,算法结束。
得到了分支取值序列集的集合S,在对其实施关联规则挖掘之前,我们需要将其转换为关联规则所需的数据集。对于按如下方式将Si转化为关联规则挖掘所需的数据集Di,即
其中
(2)基于关联规则挖掘的分支相关性的确定
在本部分中,我们将对其进行关联规则挖掘,从而确定分支的相关性。对于首先从数据集Di中找出所有的频繁项集,然后再由频繁项集产生关联规则。
公式为:
1.从Di中找出所有的频繁项集
从数据集Di中,找出所有满足支持度大于等于最小支持度min_support的频繁项集。为了提升算法的效率,我们采用FP-Growth算法进行挖掘。以2-项集{A,B}为例,其支持度可由公式得到;使用FP-Growth算法生成频繁项集,首先需要读取数据集Di,构造频繁1-项集及FP-Tree,然后根据图3所示的算法2在FP-Tree上进行频繁项集的挖掘。算法2采用分而治之的方法,它将FP-Tree分解成一些条件模式库CPB,每个CPB和一个频繁1-项集相关联,我们根据CPB构造其相应的条件FP-tree,然后再采用递归算法分别对这些条件FP-tree进行挖掘,从而得到所有的频繁项集F(Di,min_support)。
2.由频繁项集产生关联规则
利用上一步得到的频繁项集F(Di,min_support)来产生规则,如果某一规则的置信度大于等于最小置信度(min_confidence),则该规则为关联规则。以频繁项集{A,B}为例,它产生的规则其置信度可由公式 得到
每个关联规则的生成步骤如下:
①对于 产生f的所有非空子集;
②对于f的每一个非空子集v,若
其中P(f)表示f发生的概率,P(v)表示v发生的概率,则规则为关联规则。
设数据集为:
首先,对Di进行挖掘,找出满足支持度≥0.25的频繁项集,可得到频繁项集:{{n1=T,n4=F support(0.25)},{n1=F,n4=Tsupport(0.5)},{n1=T,n4=T support(0.25)}};
然后,由频繁项集产生关联规则,找出满足置信度≥1的关联规则,可得到关联规则:
因为在控制流图中n1控制n4,我们只需考虑n1对n4产生的影响,所以在得到的关联规则中,我们仅需即(n1,n4)有F→T的相关性。
(3)不可达路径的检测
得到分支节点间的相关性后,我们可根据下面的方法检测出程序中的不可达路径。
设ni和nj是程序中的两个条件语句,如果经关联规则挖掘后得到(ni,nj)有T→T相关性,则ni的真分支和nj的假分支构成冲突子路径;如果经关联规则挖掘后得到(ni,nj)有T→F相关性,则ni的真分支和nj的真分支构成冲突子路径。同样地,如果(ni,nj)有F→T相关性,则ni的假分支和nj的假分支构成冲突子路径;如果(ni,nj)有F→F相关性,则ni的假分支和nj的真分支构成冲突子路径。对于任何一条路径,若该路径包含冲突子路径,则它为不可达路径。
Claims (2)
1.基于关联规则挖掘的不可达路径检测方法,该基于关联规则挖掘的不可达路径检测方法包括获取数据集、基于关联规则挖掘的分支相关性的确定及不可达路径的检测,其特征在于,获取数据集,首先采用静态分析技术,利用Soot对程序进行预处理,构建程序的控制流图、控制树及蕴含树,然后设计搜索算法找出具有控制关系的分支节点序列集U,对于采用动态分析技术,通过JDI监听序列ui中各个分支节点ni1,ni2,…,nik的执行情况,在输入域内随机获取N个抽样输入向量,要求当程序输入每个抽样向量时ni1,ni2,…,nik全部执行,若存在某节点nim不执行,则换取其它抽样值,直到所有的分支节点都执行;基于关联规则挖掘的分支相关性的确定,从数据集Di中,找出所有满足支持度大于等于最小支持度min_support的频繁项集,我们采用FP-Growth算法进行挖掘,首先需要读取数据集Di,构造频繁1-项集及FP-Tree,然后根据算法2在FP-Tree上进行频繁项集的挖掘,算法2采用分而治之的方法,它将FP-Tree分解成一些条件模式库CPB,每个CPB和一个频繁1-项集相关联,我们根据CPB构造其相应的条件FP-tree,然后再采用递归算法分别对这些条件FP-tree进行挖掘,从而得到所有的频繁项集F(Di,min_support);利用上一步得到的频繁项集F(Di,min_support)来产生规则,如果某一规则的置信度大于等于最小置信度(min_confidence),则该规则为关联规则,频繁项集{A,B}产生的规则 每个关联规则的生成为,对于 产生f的所有非空子集;对于f的每一个非空子集v,若 其中P(f)表示f发生的概率,P(v)表示v发生的概率,则规则为关联规则;不可达路径的检测,设ni和nj是程序中的两个条件语句,如果经关联规则挖掘后得到(ni,nj)有T→T相关性,则ni的真分支和nj的假分支构成冲突子路径;如果经关联规则挖掘后得到(ni,nj)有T→F相关性,则ni的真分支和nj的真分支构成冲突子路径;同样地,如果(ni,nj)有F→T相关性,则ni的假分支和nj的假分支构成冲突子路径;如果(ni,nj)有F→F相关性,则ni的假分支和nj的真分支构成冲突子路径;对于任何一条路径,若该路径包含冲突子路径,则它为不可达路径。
2.基于关联规则挖掘的不可达路径检测方法中的分支取值序列集的获取算法,其特征在于,该算法采用逆向遍历并结合递归算法来实现;算法首先从出口节点开始,对控制树主干上的节点序列进行逆向的遍历分析,并对当前节点及其子节点进行分析,遍历分析当前节点的子节点,根据循环节点的定义判定当前节点是否是循环节点,若当前节点为循环节点,则将该节点记录下来,并结合递归算法递归当前子节点,递归结束后再次记录当前节点;若当前节点为分支节点,则直接递归当前子节点,递归完成后,再根据其兄弟节点的存储情况来选择当前节点的记录方式;若当前节点为叶子节点,则直接返回空值,无需记录;当对控制树主干上的所有节点遍历完成后,可得到由具有控制关系的各个分支节点序列组成的序列集合U,依次对U中的每条序列进行抽样执行分析,最终得到各个序列的分支取值序列集的集合S,算法结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210501664.7A CN102968375B (zh) | 2012-11-30 | 2012-11-30 | 基于关联规则挖掘的不可达路径检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210501664.7A CN102968375B (zh) | 2012-11-30 | 2012-11-30 | 基于关联规则挖掘的不可达路径检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102968375A CN102968375A (zh) | 2013-03-13 |
CN102968375B true CN102968375B (zh) | 2015-10-28 |
Family
ID=47798527
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210501664.7A Expired - Fee Related CN102968375B (zh) | 2012-11-30 | 2012-11-30 | 基于关联规则挖掘的不可达路径检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102968375B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104965674B (zh) * | 2015-06-08 | 2018-01-19 | 暨南大学 | 一种基于块关联的低能耗磁盘调度方法及系统 |
CN106095661B (zh) * | 2015-09-29 | 2018-12-28 | 中国矿业大学 | 类集成测试中的环路破除方法 |
CN105335785B (zh) * | 2015-10-30 | 2017-12-19 | 西华大学 | 一种基于向量运算的关联规则挖掘方法 |
CN107291716B (zh) * | 2016-03-30 | 2020-07-21 | 阿里巴巴集团控股有限公司 | 一种链路数据校验方法及装置 |
CN105868079B (zh) * | 2016-04-21 | 2019-02-26 | 中国矿业大学 | 一种基于内存使用传播分析的Java内存低效使用检测方法 |
CN106294617A (zh) * | 2016-07-29 | 2017-01-04 | 浪潮软件集团有限公司 | 一种高效挖掘关联规则中频繁项集的方法 |
CN107844408B (zh) * | 2016-09-18 | 2021-02-12 | 中国矿业大学 | 一种基于层次聚类的相似执行路径生成方法 |
CN109189823B (zh) * | 2018-08-08 | 2021-10-22 | 鞍钢股份有限公司 | 一种基于连铸坯缺陷分析的数据挖掘方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101901188A (zh) * | 2010-07-23 | 2010-12-01 | 哈尔滨工程大学 | 一种基于可达路径的软件测试方法 |
CN102073587A (zh) * | 2010-12-27 | 2011-05-25 | 北京邮电大学 | 一种程序中不可达路径的静态检测方法 |
CN102789420A (zh) * | 2012-07-24 | 2012-11-21 | 中国矿业大学 | 基于程序执行轨迹的动态切片系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9747187B2 (en) * | 2010-10-27 | 2017-08-29 | International Business Machines Corporation | Simulating black box test results using information from white box testing |
-
2012
- 2012-11-30 CN CN201210501664.7A patent/CN102968375B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101901188A (zh) * | 2010-07-23 | 2010-12-01 | 哈尔滨工程大学 | 一种基于可达路径的软件测试方法 |
CN102073587A (zh) * | 2010-12-27 | 2011-05-25 | 北京邮电大学 | 一种程序中不可达路径的静态检测方法 |
CN102789420A (zh) * | 2012-07-24 | 2012-11-21 | 中国矿业大学 | 基于程序执行轨迹的动态切片系统 |
Non-Patent Citations (1)
Title |
---|
一种基于动态依赖关系的类集成测试方法;张艳梅等;《计算机学报》;20110630;第34卷(第6期);第1075-1089页 * |
Also Published As
Publication number | Publication date |
---|---|
CN102968375A (zh) | 2013-03-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102968375B (zh) | 基于关联规则挖掘的不可达路径检测方法 | |
CN103116540B (zh) | 基于全局超级块支配图的动态符号执行方法 | |
CN105022691B (zh) | 一种基于uml图的高度自动化软件测试方法 | |
CN109739755B (zh) | 一种基于程序追踪和混合执行的模糊测试系统 | |
CN102508780B (zh) | 一种用于软件测试的交叉式动态法和装置 | |
CN103559122A (zh) | 基于程序行为切片的测试案例约减方法 | |
CN106294156A (zh) | 一种静态代码缺陷检测分析方法及装置 | |
Bento et al. | Automated analysis of distributed tracing: Challenges and research directions | |
CN102708045A (zh) | 一种缓解路径爆炸的动态符号执行方法 | |
CN105809942A (zh) | 一种用电信息采集系统的数据处理方法及装置 | |
CN112783786B (zh) | 测试案例的生成方法、装置、设备、介质和程序产品 | |
CN110175085A (zh) | 一种利用图分析的Hadoop系统异常原因诊断方法及装置 | |
Maisikeli et al. | Aspect mining using self-organizing maps with method level dynamic software metrics as input vectors | |
CN105487983A (zh) | 基于智能路径引导的敏感点逼近方法 | |
CN105630678B (zh) | 一种智能电能表软件的可靠性检测仪及其检测方法 | |
CN106294136A (zh) | 并行程序运行期间性能变化的在线检测方法和系统 | |
CN101930398B (zh) | 基于Fuzzing技术的变异多维输入的软件脆弱性分析方法 | |
CN105528296B (zh) | 一种面向对象软件的类簇测试方法 | |
Zhang et al. | Test sequencing problem arising at the design stage for reducing life cycle cost | |
CN110554952B (zh) | 一种基于搜索的分层回归测试数据生成方法 | |
CN109815108A (zh) | 一种基于权重的组合测试用例集优先化排序方法及系统 | |
Ye et al. | Regression test cases generation based on automatic model revision | |
Qian et al. | A strategy for multi-target paths coverage by improving individual information sharing | |
Ye et al. | An open data cleaning framework based on semantic rules for Continuous Auditing | |
CN109754159B (zh) | 一种电网运行日志的信息提取方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20151028 Termination date: 20161130 |