CN107844408B - 一种基于层次聚类的相似执行路径生成方法 - Google Patents
一种基于层次聚类的相似执行路径生成方法 Download PDFInfo
- Publication number
- CN107844408B CN107844408B CN201610827861.6A CN201610827861A CN107844408B CN 107844408 B CN107844408 B CN 107844408B CN 201610827861 A CN201610827861 A CN 201610827861A CN 107844408 B CN107844408 B CN 107844408B
- Authority
- CN
- China
- Prior art keywords
- path
- item
- node
- statement
- distance
- 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
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
- 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/3676—Test management for coverage analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/23—Clustering techniques
- G06F18/231—Hierarchical techniques, i.e. dividing or merging pattern sets so as to obtain a dendrogram
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Quality & Reliability (AREA)
- Computer Hardware Design (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Evolutionary Computation (AREA)
- Evolutionary Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Bioinformatics & Computational Biology (AREA)
- Artificial Intelligence (AREA)
- Life Sciences & Earth Sciences (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种基于层次聚类的相似执行路径生成方法,包括下列步骤:1)路径条件分析;2)聚类数据构造;3)层次聚类计算;4)相似路径生成。本发明解决了目前的路径测试执行之前难以识别程序中不可达路径的问题,该发明不仅可以识别出程序中的不可达路径,还极大的提高了路径可达性的检测效率,有效避免了路径测试过程中测试资源的浪费,从而提高软件测试的效率,最终更好的控制了软件产品的质量。
Description
技术领域
本发明属于软件测试技术领域,且特别是有关于一种基于层次聚类的相似执行路径生成方法。
背景技术
随着科技的发展,社会的进步,软件已经被广泛应用到各个领域。在很多领域的应用场景中,软件的质量与可靠性至关重要。软件测试是保证软件质量和可靠性的重要手段。软件测试可以分为功能测试和结构测试两大类。前者又称为黑盒测试,旨在通过特定的测试用例验证软件的功能是否达到设计要求或者是否可以正常运作。后者又被称为白盒测试,根据特定的准则对软件的代码进行测试,其中常见的准则包括语句覆盖,路径覆盖,条件覆盖,分支覆盖等。基于路径覆盖的测试是常用的软件测试技术之一。路径覆盖旨在通过执行特定的测试用例,使得软件按照测试人员期望的路径执行。路径覆盖测试可以发现程序中某条执行路径中的错误。路径覆盖测试存在两个关键问题:一是测试用例的生成问题,二是不可达路径的检测问题。如果测试人员期望覆盖的路径是一条不可达路径,则针对该路径做测试用例生成工作是徒劳的,浪费大量的时间和精力,然而却达不到预期的覆盖目标。因此准确识别不可达路径是路径覆盖测试的重要前提。
大型程序一般采用Java,C++等面向对象编程语言编写。与面向过程编程语言相比,面向对象编程语言语法复杂,此外,大型程序功能众多,包含大量的子模块,模块间关系错综复杂,因此大型程序通常包含数量庞大的路径。然而由于大型程序中软件设计不规范,开发人员水平参差不齐等原因,大型程序往往还包含有较多的不可达路径,可见,针对大型程序的路径覆盖测试面临着严峻的挑战。
发明内容
本发明目的在于提供一种基于层次聚类的相似执行路径生成方法,解决了目前的路径测试执行之前难以识别程序中不可达路径的问题,进而大幅度提高了路径测试的效率,同时保证了较高的准确性与可用性。
为达成上述目的,本发明提出一种基于层次聚类的相似执行路径生成方法。方法包括下列步骤。
1) 路径条件分析:对待测程序进行静态分析,构建并分析程序的控制依赖树,并根据路径条件分析方法分析出控制依赖树中每个语句节点的路径条件;
2) 聚类数据构造:分析控制依赖树中每个语句节点的路径条件,对复合的路径条件进行拆分,并对路径条件进行归一化处理,构造聚类数据;
3) 层次聚类计算:根据第2部分构造的聚类数据,计算路径条件之间的分支距离,并根据距离计算公式计算数据对象之间,簇之间的距离,然后进行层次聚类计算;
4) 相似路径生成:遍历第3部分的聚类结果中每一个簇的每一个数据对象,根据相似执行路径生成算法生成相似的执行路径。
进一步,其中上述步骤1)的具体步骤如下:
步骤1)-1:初始状态;
步骤1)-2:对待测程序进行静态分析;
步骤1)-3:生成待测程序的控制流图;
步骤1)-4:生成待测程序的控制依赖树;
步骤1)-5:根据路径条件分析方法遍历待测程序的控制依赖树,完成路径条件分析;
进一步,其中上述步骤2)的具体步骤如下:
步骤2)-1:对程序中语句的路径条件进行拆分;
步骤2)-2:对程序中语句的路径条件进行化简;
步骤2)-3:对程序中语句的路径条件进行归一化,完成聚类数据构造;
进一步,其中上述步骤3)的具体步骤如下:
步骤3)-1:初始情况下将所有的数据对象各视为一个簇;
步骤3)-2:计算簇间距离,更新距离矩阵;
步骤3)-3:遍历距离矩阵,合并簇间距离最小的两个簇;
步骤3)-4:重新计算簇间距离,更新距离矩阵;
步骤3)-5:重复步骤3)-3与步骤3)-4,直至达到聚类终止条件,完成层次聚类计算;
进一步,其中上述步骤4)的具体步骤如下:
步骤4)-1:遍历层次聚类计算结果中每一个簇中的每一个数据对象;
步骤4)-2:根据相似执行路径生成方法,生成相似执行路径,完成相似路径生成。
附图说明
图1为本发明实施例的一种基于层次聚类的相似执行路径生成方法的流程图。
图2为图1中路径条件分析的流程图。
图3为图1中聚类数据构造的流程图。
图4为图1中层次聚类计算的流程图。
图5为图1中相似路径生成的流程图。
具体实施方式
为了更了解本发明的技术内容,特举具体实施例并配合所附图式说明如下。
图1为本发明实施例的一种基于层次聚类的相似执行路径生成方法的流程图。
一种基于层次聚类的相似执行路径生成方法,其特征在于,包括下列步骤:
S1路径条件分析,路径条件的提取可以采用两种方式。第一种方式是遍历程序控制流图中的所有语句节点,并提取路径条件。第二种方式是遍历程序控制依赖树中的所有语句节点,并提取路径条件。控制依赖树可以完整保存程序中的控制依赖关系,可以方便的计算语句节点的路径条件,因此本文采用第二种方式。控制依赖树中的节点一般为程序中的语句或基本块。为了表述方便,本文统一把程序中的语句作为控制依赖树中的节点。假定已经获得程序的控制依赖树,则子节点是直接控制依赖于父节点的语句节点,同时子节点间接控制依赖于上层的父节点。对控制依赖树中的语句节点进行遍历,可以提取路径条件;
S2聚类数据构造,层次聚类将数据对象依据相似度划分到不同的簇中。在聚类计算之前,需要构造合适的聚类数据对象。路径条件是决定路径特征的重要因素。同时路径条件也决定了路径的可达性。因此将程序中的每个语句节点作为独立的聚类数据对象,将与语句节点相对应的路径条件作为数据对象的属性;
S3层次聚类计算,路径条件的相似程度可以使用数值来表示,采取基于矩阵理论的层次聚类算法。层次聚类计算中核心的部分是簇之间的距离计算。簇之间距离的计算依赖于数据对象之间距离的计算,数据对象之间距离的计算由分支距离计算结果所决定。初始情况下有n个数据对象,则将每个数据对象视为一个簇,使用n*n大小的矩阵表示簇与簇之间的距离,不断合并簇间距离最小的两个簇并更新距离矩阵,直至达到聚类计算的终止条件;
S4相似路径生成,针对路径条件的层次聚类计算结束后,可以得到聚类结果。聚类结果簇中的数据对象是程序的语句节点。聚类计算得到的每个簇中的语句节点的路径条件差异比较小,相似度比较高。相似执行路径生成步骤旨在从簇内的数据对象,即语句节点入手,通过相似执行路径生成方法生成相似执行路径;
图2为路径条件分析的流程图,对待测程序进行静态分析,完成路径条件分析;具体步骤如下:首先对待测程序进行静态分析,获得控制流图,然后获得控制依赖树,最后通过遍历控制依赖树完成路径条件分析;
图3为聚类数据构造的流程图,对路径条件进行处理,完成聚类数据构造;具体步骤如下:首先对路径条件进行拆分,然后对路径条件进行化简,得到最弱前置条件,最后对路径条件进行归一化处理,完成聚类数据构造;
图4为层次聚类计算的流程图,将程序中每个语句视为一个数据对象,将语句节点对应的路径条件视为数据对象的属性,完成层次聚类计算;具体步骤如下:采用基于矩阵理论的层次聚类计算方法,使用距离矩阵表示簇间距离,通过不断合并簇间距离较小的簇,直至达到聚类计算终止条件为止,完成层次聚类计算;
图5为相似路径生成的流程图,遍历层次聚类结果,生成相似路径;具体步骤如下:遍历层次聚类结果中每一个簇内的每一个数据对象,通过相似执行路径生成方法生成相似执行路径,完成相似路径生成;
综上所述,本发明解决了目前的路径测试执行之前难以识别程序中不可达路径的问题,该发明不仅可以识别出程序中的不可达路径,还极大的提高了路径可达性的检测效率,有效避免了路径测试过程中测试资源的浪费,从而提高软件测试的效率,最终更好的控制了软件产品的质量。
Claims (1)
1.一种基于层次聚类的相似执行路径生成方法,其特征在于,首先对程序进行静态分析,构建程序的控制依赖树并抽取程序中语句的路径条件,然后以路径条件中的分支距离判断路径的相似度,从而对程序中的语句进行层次聚类计算,最后根据得到的聚类结果生成相似执行路径,该方法包含下列步骤:
1) 路径条件分析
定义1:路径,路径是程序中顺序执行的一组语句序列,即程序P中一组语句的集合{s1,s2,... sn},可以构成控制流图中从入口节点到出口节点的一个单方向遍历序列,则称{s1,s2,... sn}是程序P中的一条路径;
定义2:相关变量,程序中分支语句谓词P一般可以表示为两种形式,v1 op1 v2或v3 op2c,其中v1,v2与v3是变量,c是常量,op1与op2代表判定符号,则称v1,v2与v3是谓词P的相关变量,其中c是谓词P的相关常量;
定义3:变量定值点,程序中变量v的定值语句节点称为变量定值点,如果变量v是谓词P的相关变量,则称为相关变量定值点,记为dp(v);
定义4:控制依赖树,控制依赖树可以描述程序中的控制依赖关系,根据控制依赖关系的传递性,树中的子节点直接控制依赖于父节点,间接控制依赖于上层的父节点;
定义5:路径条件,程序中,存在一个方程组或不等式组e,方程组或不等式组e的任何一组解x,均满足在x作为程序输入条件时,程序的执行路径为p,则称方程组或不等式组e为路径p的路径条件;
路径条件分析步骤:首先遍历控制依赖树中的所有语句节点,针对每一个节点,取出该节点的父节点,并递归的取出树的上层父节点,直至没有父节点为止,然后得到的递归访问路径起点为node节点,终点为控制依赖树的根节点,如果访问路径中包含分支语句节点,则将分支语句节点的判断谓词取出,作为node节点的路径条件,并存入路径条件表,最后遍历结束后获得控制依赖树中所有语句节点的路径条件,使用key-value形式的路径条件表存储所有节点的路径条件,表中key为语句节点,value为该语句节点的路径条件集合;
2) 聚类数据构造
层次聚类将数据对象依据相似度划分到不同的簇中,在聚类计算之前,需要构造合适的聚类数据对象,路径条件是决定路径特征的重要因素,同时路径条件也决定了路径的可达性,因此将程序中的每个语句节点作为独立的聚类数据对象,将与语句节点相对应的路径条件作为数据对象的属性;
如果语句节点仅包含简单路径条件,即不含与或关系,则此路径条件为数据对象的一个属性;
如果语句节点包含复合路径条件,即包含与或关系,则对路径条件进行拆分,拆分出的每一个简单路径条件作为数据对象的一个属性;
如果拆分出的简单路径条件如果有重复,不做去重处理,保留重复的路径条件,作为数据对象的一个属性;
因为程序中语句节点的路径条件的数目可能存在差异性,因此构造出的数据对象的属性数目可能是不一致的,需要对其进行归一化,在归一化过程中,以所有数据对象中包含的所有属性的并集作为基准,对属性数目不足的数据对象进行属性填充,填充内容为0,即无任何含义的空路径条件;
3) 层次聚类计算
路径条件的相似程度可以使用数值来表示,采取基于矩阵理论的层次聚类算法,层次聚类计算中核心的部分是簇之间的距离计算,簇之间距离的计算依赖于数据对象之间距离的计算,数据对象之间距离的计算由分支距离计算结果所决定,因此依次说明分支距离的计算,数据对象之间距离的计算,簇之间距离的计算,使用C代表簇,item代表数据对象,a,b...等字母代表数据对象中的属性;
分支距离的计算:归一化过程结束后,每个数据对象包含的属性数目是一致的,即每个语句节点包含的路径条件的个数是一致的,路径条件中包含的相关变量也是一致的,假设有两个语句节点statement 1 与statement 2 ,分别对应数据对象item 1 与item 2 ,语句节点statement 1 的路径条件p 1 对应item 1 .a 1 ,语句节点statement 2 的路径条件p 2 对应item 2 .a 1 ,其中路径条件p 1 与p 2 包含相同的相关变量a,则路径条件p 1 与p 2 的分支距离,即数据对象属性item 1 .a 1 与item 2 .a 1 之间的距离d_branch(item 1 .a 1 ,item 2 .a 1 )的计算方式如下:
如果item 1 .a 1 或item 2 .a 1 是聚类数据构造步骤中归一化过程填充的数据0,即无任何含义的空路径条件,则d_branch(item 1 .a 1 ,item 2 .a 1 ) = 0;
如果item 1 .a 1 与item 2 .a 1 分别包含相关常数item 1 .a 1 .c 1 与item 2 .a 1 .c 2 ,若路径条件判断符号相同,则d_branch(item 1 .a 1 ,item 2 .a 1 ) = abs(item 1 .a 1 .c 1 - item 2 .a 1 .c 2 ),若路径条件判断符号不同,则d_branch(item 1 .a 1 ,item 2 .a 1 ) = abs(item 1 .a 1 .c 1 + item 2 .a 1 .c 2 );
如果item 1 .a 1 与item 2 .a 1 仅包含一个相关常数c,则d_branch(item 1 .a 1 ,item 2 .a 1 ) =abs(c);
如果item 1 .a 1 与item 2 .a 1 不包含相关常数,则d_branch(item 1 .a 1 ,item 2 .a 1 ) = 0;
从簇之间的距离计算策略可知,距离d为非负数,d越小,相似度越高;
数据对象之间距离计算公式如下:
簇间距离计算公式如下:
采用基于矩阵理论的层次聚类计算算法:
第1步把每个数据对象各视为一个簇,每个簇包含且仅包含一个数据对象,计算每个簇之间的距离d_cluster(C i ,C j ),并得到初始的距离矩阵d_matrix;
第2步遍历距离矩阵d_matrix,把簇之间距离最小,即d_cluster(C i ,C j )最小的两个簇C i 与C j 合并为一个新的簇;
第3步重新计算新得到的簇与其他簇之间的距离d_cluster(C i ,C j ),并更新距离矩阵d_ matrix;
第4步重复第2步与第3步,直到距离最小的d_cluster(C i ,C j )超过某一个阈值或剩余簇数量少于相关变量的数量,结束聚类计算;
4) 相似路径生成
相似执行路径生成方法的主体是双层嵌套循环,外层循环遍历层次聚类结果中的每一个簇,内层循环遍历层次聚类结果中每一个簇中的每一个数据对象,外层循环取出层次聚类结果中的某个簇cluster,内层循环初始遍历时,初始化path为空,内层循环取出簇cluster中的数据对象element,如果数据对象element代表的语句节点可以并入path且与控制依赖树中的某一条从根节点到叶子节点的深度优先遍历路径相符合,则说明数据对象element代表的语句节点可以与path相结合,生成长度更长的路径,长度增加一个语句节点,即数据对象element代表的语句节点,如果path是包含控制依赖树的根节点与最底层叶子节点的完整的深度优先遍历路径,则说明path是一条完整的路径,将path并入path_set集合中,同时初始化path为空,否则将数据对象element与path相结合,并继续下一个数据对象的遍历,如果簇中的数据对象element不可以并入path或不能与控制依赖树中的某一条从根节点到叶子节点的深度优先遍历路径相符合,则从控制依赖树中查找可以与path相结合的语句节点node,并将该语句节点并入path,最后把path存入path_set,并初始化path为空。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610827861.6A CN107844408B (zh) | 2016-09-18 | 2016-09-18 | 一种基于层次聚类的相似执行路径生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610827861.6A CN107844408B (zh) | 2016-09-18 | 2016-09-18 | 一种基于层次聚类的相似执行路径生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107844408A CN107844408A (zh) | 2018-03-27 |
CN107844408B true CN107844408B (zh) | 2021-02-12 |
Family
ID=61657037
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610827861.6A Expired - Fee Related CN107844408B (zh) | 2016-09-18 | 2016-09-18 | 一种基于层次聚类的相似执行路径生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107844408B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101430708A (zh) * | 2008-11-21 | 2009-05-13 | 哈尔滨工业大学深圳研究生院 | 一种基于标签聚类的博客层次分类树构建方法 |
CN105893848A (zh) * | 2016-04-27 | 2016-08-24 | 南京邮电大学 | 一种基于代码行为相似度匹配的Android恶意应用程序防范方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101901188B (zh) * | 2010-07-23 | 2012-02-01 | 哈尔滨工程大学 | 一种基于可达路径的软件测试方法 |
CN102968375B (zh) * | 2012-11-30 | 2015-10-28 | 中国矿业大学 | 基于关联规则挖掘的不可达路径检测方法 |
US20150127323A1 (en) * | 2013-11-04 | 2015-05-07 | Xerox Corporation | Refining inference rules with temporal event clustering |
US9589045B2 (en) * | 2014-04-08 | 2017-03-07 | International Business Machines Corporation | Distributed clustering with outlier detection |
CN105139035A (zh) * | 2015-08-31 | 2015-12-09 | 浙江工业大学 | 基于密度的聚类中心自动确定的混合属性数据流聚类方法 |
CN105204997B (zh) * | 2015-09-30 | 2018-10-19 | 首都师范大学 | 软件缺陷检测方法及装置 |
-
2016
- 2016-09-18 CN CN201610827861.6A patent/CN107844408B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101430708A (zh) * | 2008-11-21 | 2009-05-13 | 哈尔滨工业大学深圳研究生院 | 一种基于标签聚类的博客层次分类树构建方法 |
CN105893848A (zh) * | 2016-04-27 | 2016-08-24 | 南京邮电大学 | 一种基于代码行为相似度匹配的Android恶意应用程序防范方法 |
Non-Patent Citations (1)
Title |
---|
谓词相关编译技术和深层代码优化;芦运照;《中国博士学位论文全文数据库 信息科技辑》;20070215(第02期);I138-69 * |
Also Published As
Publication number | Publication date |
---|---|
CN107844408A (zh) | 2018-03-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10025696B2 (en) | System and method for equivalence class analysis-based automated requirements-based test case generation | |
Medeiros et al. | DEKANT: a static analysis tool that learns to detect web application vulnerabilities | |
US11144817B2 (en) | Device and method for determining convolutional neural network model for database | |
CN111460450B (zh) | 一种基于图卷积网络的源代码漏洞检测方法 | |
KR101719278B1 (ko) | 비주얼 콘텐츠기반 영상 인식을 위한 딥러닝 프레임워크 및 영상 인식 방법 | |
WO2018121531A1 (zh) | 一种生成测试用例脚本的方法和装置 | |
CN111966817B (zh) | 基于深度学习及代码上下文结构和文本信息的api推荐方法 | |
CN105786715A (zh) | 一种程序静态自动分析方法 | |
CN101576850B (zh) | 一种改进的面向宿主的嵌入式软件白盒测试方法 | |
CN110750297B (zh) | 一种基于程序分析和文本分析的Python代码参考信息生成方法 | |
CN107153610A (zh) | 一种程序语句错误检测方法和装置 | |
US10324829B2 (en) | Application testing | |
CN101727451B (zh) | 信息提取方法和装置 | |
CN107844408B (zh) | 一种基于层次聚类的相似执行路径生成方法 | |
Zhou et al. | Deeptle: Learning code-level features to predict code performance before it runs | |
Komendantskaya et al. | Proof mining with dependent types | |
CN110895529B (zh) | 结构化查询语言的处理方法及相关装置 | |
CN113760700A (zh) | 程序死循环检测方法、装置、电子设备及存储介质 | |
CN109710538A (zh) | 一种用于大规模系统中状态相关缺陷的静态检测方法 | |
CN116467220B (zh) | 一种面向软件静态分析的循环代码处理方法和装置 | |
CN110308387B (zh) | 一种形式验证断言空泛性的测试和自动纠正方法、存储介质和终端 | |
CN105426464A (zh) | 一种识别命名实体的方法及装置 | |
CN116149972A (zh) | 一种深度学习模型的测试方法、装置、电子设备和存储介质 | |
Pang | Deep Learning for Code Repair | |
CN116974946A (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 | ||
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: 20210212 Termination date: 20210918 |