CN109165155B - 一种基于聚类分析的软件缺陷修复模板提取方法 - Google Patents
一种基于聚类分析的软件缺陷修复模板提取方法 Download PDFInfo
- Publication number
- CN109165155B CN109165155B CN201810637180.2A CN201810637180A CN109165155B CN 109165155 B CN109165155 B CN 109165155B CN 201810637180 A CN201810637180 A CN 201810637180A CN 109165155 B CN109165155 B CN 109165155B
- Authority
- CN
- China
- Prior art keywords
- modification
- multiple set
- bug
- modification mode
- mode multiple
- 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/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- 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/362—Software debugging
- G06F11/3628—Software debugging of optimised code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于聚类分析的软件缺陷修复模板提取方法,属于软件维护领域,步骤如下:首先定义bug的细粒度修改模式,并识别出每个bug相关的细粒度修改模式;接着对每个bug相关的细粒度修改模式的程序元素进行捕获;之后获取每个bug的顶层修改模式多重集,然后进行层次聚类分析,获得聚类后的多个顶层修改模式多重集;之后获取每个顶层修改模式多重集对应的新的修改模式多重集;再根据程序元素之间的关系获取修改模式多重集图;然后对修改模式多重集图进行分割优化,获得修改模式聚类;最后根据修改模式聚类构建软件缺陷修复模板。本发明的方法获得的修复模板具有语义特征,其普适性和通用性更强,提高了缺陷修复的效率和精度。
Description
技术领域
本发明属于软件维护领域,特别是一种基于聚类分析的软件缺陷修复模板提取方法。
背景技术
由于软件产品的规模和复杂性爆炸式增长,开发高质量软件变得越来越具有挑战性,所以软件系统中的错误不可避免。通过研究软件缺陷模式,测试人员可以在测试过程中更快地对缺陷进行修复;开发人员也可以在开发过程中考虑采用什么样的开发技术预防这些缺陷模式的再次出现,从而提高软件开发和测试团队的整体水平。因此,对软件缺陷修复模式的研究越来越重要。
目前针对软件缺陷修复模式有很多技术,包括补丁产生和动态程序状态恢复。一系列的技术均围绕“基于测试套件的修复”这个主题,其目的是产生一个补丁,使错误的测试集能通过并且其他的测试集也能满足测试。但在真实的项目中通过所有的测试并不一定意味着该程序是正确的,而且如果修复系统的精度较低,开发人员仍需手动审查补丁,而目前的基于测试的修复技术精度都不高。针对基于测试的修复技术精度低的问题,很多学者对此有大量的研究,发现修复系统很难从大量合理的补丁中识别出正确的程序补丁。而解决这一问题的方法是根据补丁的正确概率对补丁进行排序,并以最高的可能性返回可能的补丁,但是此方法的精度还不令人满意。基于细粒度的修复方式能够更准确、更高效率得完成软件修复,在实际的软件维护过程中,缺陷的类型及修复模式往往有很多,而目前提出的基于细粒度的修复模式技术只限于解决特定项目中的特定缺陷代码,普适性差,不能适用于任意软件缺陷修复的需求。
发明内容
本发明所解决的技术问题在于提供一种基于聚类分析的软件缺陷修复模板提取方法。
实现本发明目的的技术解决方案为:一种基于聚类分析的软件缺陷修复模板提取方法,包括以下步骤:
步骤1、定义bug的细粒度修改模式,之后对bug缺陷库中的bug进行文本分析处理,识别出每个bug相关的细粒度修改模式;
步骤2、利用代码分析技术对每个bug相关的细粒度修改模式的程序元素进行捕获;
步骤3、确定步骤2捕获的每个bug中程序元素之间的关系,然后将同一类型的顶层程序元素归为该bug的一个顶层修改模式多重集;之后对所有bug的顶层修改模式多重集进行层次聚类,获得聚类后的多个顶层修改模式多重集;
步骤4、根据顶层修改模式多重集对应的程序元素,获取每个顶层修改模式多重集对应的新的修改模式多重集;
步骤5、根据程序元素之间的关系,确定步骤4获得的多个新的修改模式多重集之间的关系,之后对新的修改模式多重集进行连接,获得修改模式多重集图;
步骤6、利用频繁模式挖掘技术对步骤5获得的修改模式多重集图进行分割优化,获得修改模式聚类;
步骤7、根据步骤6获得的修改模式聚类构建软件缺陷修复模板。
本发明与现有技术相比,其显著优点为:(1)本发明的方法依据bug的细粒度修改模式,通过语义、上下文及依赖关系对bug修改模式进行聚类分析,获得的修复模板具有语义特征,其普适性和通用性更强;(2)本发明的方法获得的修复模板更全面,对缺陷模式的研究以及缺陷分类具有指导意义,提高了缺陷修复的效率;(3)本发明的方法获得的修复模板,建立了bug之间的关系,提高了缺陷修复的精度。
下面结合附图对本发明作进一步详细描述。
附图说明
图1为本发明方法的流程示意图。
图2为本发明中程序模型的元模型图。
图3为本发明方法中聚类分析示意图。
图4为本发明实施例中获得的修改模式多重集图。
图5为本发明实施例中获得的软件缺陷修复模板示意图。
具体实施方式
结合图1,本发明的一种基于聚类分析的软件缺陷修复模板提取方法,步骤如下:
步骤1、定义bug的细粒度修改模式,之后对bug缺陷库中的bug进行文本分析处理,识别出每个bug相关的细粒度修改模式。其中,对bug缺陷库中的bug进行文本分析处理,识别出每个bug相关的细粒度修改模式,具体为:通过解析数据、搜索检索、文本挖掘,识别出每个bug的条件语句、赋值语句、接口、变量方面的细粒度修改模式。
步骤2、利用代码分析技术对每个bug相关的细粒度修改模式的程序元素进行捕获。其中,程序元素包括类、接口、方法和字段。
步骤3、利用自顶向下的方法确定步骤2捕获的每个bug中程序元素之间的关系,并将顶层程序元素记为该bug的顶层修改模式多重集,之后利用代码相似性和启发式规则对所有bug的顶层修改模式多重集进行层次聚类,获得聚类后的多个顶层修改模式多重集。其中所述程序元素之间的关系包括声明、扩展、调用、实现和读取。其中代码相似性为代码的相似程度,其是通过代码相似度衡量,而代码相似度是由杰卡德相似系数来表示,杰卡德相似系数为:
式中,s1、s2分别为第一源代码块、第二源代码块。
为了提高层次聚类精度,定义以下规则:程序元素类与接口之间的相似度、类与超类之间的相似度均为0,即无相似性。
步骤4、根据顶层修改模式多重集对应的程序元素,获取每个顶层修改模式多重集对应的新的修改模式多重集。具体为:
若顶层修改模式多重集对应的程序元素为方法、字段,则将该顶层修改模式多重集直接作为其对应的新的修改模式多重集;
若顶层修改模式多重集对应的程序元素为类、接口,利用声明规则对该顶层修改模式多重集进行递归,直至获得仅包含方法、字段的修改模式多重集,将递归过程中的所有修改模式多重集作为该顶层修改模式多重集对应的新的修改模式多重集。
步骤5、根据程序元素之间的关系,确定步骤4获得的多个新的修改模式多重集之间的关系,之后对新的修改模式多重集进行连接,获得修改模式多重集图。
步骤6、利用频繁模式挖掘技术对步骤5获得的修改模式多重集图进行分割优化,获得修改模式聚类。具体为:
步骤6-1、对修改模式多重集图进行过滤,将修改模式多重集图中每个修改模式多重集的超集、与该修改模式多重集具有相同支持的修改模式多重集过滤;
步骤6-2、根据修改模式多重集之间的依赖性对步骤6-1过滤后剩余的修改模式多重集进行排序,获得修改模式聚类。
步骤7、根据步骤6获得的修改模式聚类构建软件缺陷修复模板,该软件缺陷修复模板包括名称、参数。
实施例
结合图1,本发明基于聚类分析的软件缺陷修复模板提取方法,包括以下步骤:
步骤1、定义bug的细粒度修改模式,之后对bug缺陷库中的bug进行文本分析处理,识别出每个bug相关的细粒度修改模式。本实施例中定义的bug的细粒度修改模式如下表1所示。
表1bug的细粒度的修改模式
本实施例中对某一bug缺陷库中的bug进行文本分析处理,识别出每个bug相关的细粒度修改模式如下表2所示。
表2bug细粒度修改模式分析
步骤2、利用代码分析技术对每个bug相关的细粒度修改模式的程序元素进行捕获。本实施例中以bug语句“private ImageButton getEditCancelButton(){return(ImageButton)getToolbarView().findViewById(R.id.edit_cancel);}”为例,该bug对应的修复语句为“private View getEditCancelButton(){return getToolbarView().findViewById(R.id.edit_cancel);}”,由此获得该bug相关的细粒度修改模式的程序元素(ImageButton,getToolbarView,findViewById,R.id.edit_cancel)和(View,getToolbarView,findViewById,R.id.edit_cancel)。
步骤3、利用自顶向下的方法确定步骤2捕获的每个bug中程序元素之间的关系,并将同一类型的顶层程序元素归为该bug的一个顶层修改模式多重集,之后利用代码相似性和启发式规则对所有bug的顶层修改模式多重集进行层次聚类,获得聚类后的多个顶层修改模式多重集。本实施例中,将步骤2中获得的bug的程序元素(ImageButton,getToolbarView,findViewById,R.id.edit_cancel)和(View,getToolbarView,findViewById,R.id.edit_cancel)中的ImageButton、View归为该bug的一个顶层修改模式多重集A={ImageButton,View},getToolbarView、getToolbarView归为该bug的另一个顶层修改模式多重集B={getToolbarView,getToolbarView}。其中,利用代码相似性和启发式规则对所有bug的顶层修改模式多重集进行层次聚类,假设相似性阈值为h,将相似度即杰卡德相似系数大于h的顶层修改模式多重集聚类为一类,0≤h≤1,h的具体取值根据需求、缺陷修复的严格程度随机自由选取。本实施例中,只有一种bug,因此不需要对顶层修改模式多重集进行层次聚类。
步骤4、根据顶层修改模式多重集对应的程序元素,获取每个顶层修改模式多重集对应的新的修改模式多重集。本实施例步骤3获得的顶层修改模式多重集对应的程序元素为类、接口,因此利用声明规则对顶层修改模式多重集进行递归,直至获得仅包含方法、字段的修改模式多重集,由此获得该bug顶层修改模式多重集对应的新的修改模式多重集为C={findViewById,findViewById}、D={R.id.edit_cancel、R.id.edit_cancel}、E={ImageButton.init(),View.init()}。
步骤5、根据程序元素之间的关系,确定步骤4获得的多个新的修改模式多重集之间的关系,之后对新的修改模式多重集进行连接,获得修改模式多重集图。本实施例中,获得的修改模式多重集图如图4所示。
步骤6、利用频繁模式挖掘技术对步骤5获得的修改模式多重集图进行分割优化,获得修改模式聚类。本实施例中获得的修改模式聚类为{A},{B},{C,D,E}。
步骤7、根据步骤6获得的修改模式聚类构建软件缺陷修复模板,如图5所示,其中名称为函数类型,参数为type。
本发明的方法依据bug的细粒度修改模式,通过语义、上下文及依赖关系对bug修改模式进行聚类分析,获得的修复模具有语义特征,其该模板更全面,对缺陷模式的研究以及缺陷分类具有指导意义,其普适性和通用性更强,提高了缺陷修复的效率和精度。
Claims (9)
1.一种基于聚类分析的软件缺陷修复模板提取方法,其特征在于,包括以下步骤:
步骤1、定义bug的细粒度修改模式,之后对bug缺陷库中的bug进行文本分析处理,识别出每个bug相关的细粒度修改模式;
步骤2、利用代码分析技术对每个bug相关的细粒度修改模式的程序元素进行捕获;
步骤3、确定步骤2捕获的每个bug中程序元素之间的关系,然后将同一类型的顶层程序元素归为该bug的一个顶层修改模式多重集;之后对所有bug的顶层修改模式多重集进行层次聚类,获得聚类后的多个顶层修改模式多重集;
步骤4、根据顶层修改模式多重集对应的程序元素,获取每个顶层修改模式多重集对应的新的修改模式多重集;
步骤5、根据程序元素之间的关系,确定步骤4获得的所有新的修改模式多重集之间的关系,之后对新的修改模式多重集进行连接,获得修改模式多重集图;
步骤6、利用频繁模式挖掘技术对步骤5获得的修改模式多重集图进行分割优化,获得修改模式聚类;
步骤7、根据步骤6获得的修改模式聚类构建软件缺陷修复模板。
2.根据权利要求1所述的基于聚类分析的软件缺陷修复模板提取方法,其特征在于,步骤1中所述对bug缺陷库中的bug进行文本分析处理,识别出每个bug相关的细粒度修改模式,具体为:通过解析数据、搜索检索、文本挖掘,识别出每个bug的条件语句、赋值语句、接口、变量方面的细粒度修改模式。
3.根据权利要求1所述的基于聚类分析的软件缺陷修复模板提取方法,其特征在于,步骤2中所述程序元素包括类、接口、方法和字段。
4.根据权利要求1所述的基于聚类分析的软件缺陷修复模板提取方法,其特征在于,步骤3具体为:
步骤3-1、利用自顶向下的方法确定步骤2捕获的每个bug中程序元素之间的关系,并将同一类型的顶层程序元素归为该bug的一个顶层修改模式多重集;其中所述程序元素之间的关系包括声明、扩展、调用、实现和读取;
步骤3-2、利用代码相似性和启发式规则对所有bug的顶层修改模式多重集进行层次聚类,获得聚类后的多个顶层修改模式多重集。
6.根据权利要求5所述的基于聚类分析的软件缺陷修复模板提取方法,其特征在于,步骤3-2所述利用代码相似性和启发式规则对步骤2获得的顶层程序元素进行层次聚类,定义以下规则:程序元素类与接口之间的相似度、类与超类之间的相似度均为0,即无相似性。
7.根据权利要求1所述的基于聚类分析的软件缺陷修复模板提取方法,其特征在于,步骤4所述根据顶层修改模式多重集对应的程序元素,获取每个顶层修改模式多重集对应的新的修改模式多重集,具体为:
若顶层修改模式多重集对应的程序元素为方法、字段,则将该顶层修改模式多重集直接作为其对应的新的修改模式多重集;
若顶层修改模式多重集对应的程序元素为类、接口,利用声明规则对该顶层修改模式多重集进行递归,直至获得仅包含方法、字段的修改模式多重集,将递归过程中的所有修改模式多重集作为该顶层修改模式多重集对应的新的修改模式多重集。
8.根据权利要求1所述的基于聚类分析的软件缺陷修复模板提取方法,其特征在于,步骤6所述利用频繁模式挖掘技术对步骤5获得的修改模式多重集图进行分割优化,获得修改模式聚类具体为:
步骤6-1、对修改模式多重集图进行过滤,将修改模式多重集图中每个修改模式多重集的超集、与该修改模式多重集具有相同支持的修改模式多重集过滤;
步骤6-2、根据修改模式多重集之间的依赖性对步骤6-1过滤后剩余的修改模式多重集进行排序,获得修改模式聚类。
9.根据权利要求1所述的基于聚类分析的软件缺陷修复模板提取方法,其特征在于,步骤7所述软件缺陷修复模板包括名称、参数。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810637180.2A CN109165155B (zh) | 2018-06-20 | 2018-06-20 | 一种基于聚类分析的软件缺陷修复模板提取方法 |
PCT/CN2018/104075 WO2019242108A1 (zh) | 2018-06-20 | 2018-09-05 | 一种基于聚类分析的软件缺陷修复模板提取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810637180.2A CN109165155B (zh) | 2018-06-20 | 2018-06-20 | 一种基于聚类分析的软件缺陷修复模板提取方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109165155A CN109165155A (zh) | 2019-01-08 |
CN109165155B true CN109165155B (zh) | 2021-06-22 |
Family
ID=64897173
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810637180.2A Active CN109165155B (zh) | 2018-06-20 | 2018-06-20 | 一种基于聚类分析的软件缺陷修复模板提取方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN109165155B (zh) |
WO (1) | WO2019242108A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109918100B (zh) * | 2019-01-25 | 2022-05-17 | 扬州大学 | 一种面向版本缺陷的基于修复模式的修复推荐方法 |
CN113590167B (zh) * | 2021-07-09 | 2023-03-24 | 四川大学 | 一种面向对象程序中条件语句缺陷补丁生成与验证方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103559025A (zh) * | 2013-10-21 | 2014-02-05 | 沈阳建筑大学 | 一种采用聚类方式进行软件重构的方法 |
CN103729197A (zh) * | 2014-01-22 | 2014-04-16 | 扬州大学 | 一种基于lda模型的多粒度层次软件聚类方法 |
CN106598850A (zh) * | 2016-12-03 | 2017-04-26 | 浙江理工大学 | 一种基于程序失效聚类分析的错误定位方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6092189A (en) * | 1998-04-30 | 2000-07-18 | Compaq Computer Corporation | Channel configuration program server architecture |
CN105653444B (zh) * | 2015-12-23 | 2018-07-13 | 北京大学 | 基于互联网日志数据的软件缺陷故障识别方法和系统 |
CN107329770A (zh) * | 2017-07-04 | 2017-11-07 | 扬州大学 | 针对软件安全性bug修复的个性化推荐方法 |
CN107608732B (zh) * | 2017-09-13 | 2020-08-21 | 扬州大学 | 一种基于bug知识图谱的bug搜索定位方法 |
-
2018
- 2018-06-20 CN CN201810637180.2A patent/CN109165155B/zh active Active
- 2018-09-05 WO PCT/CN2018/104075 patent/WO2019242108A1/zh active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103559025A (zh) * | 2013-10-21 | 2014-02-05 | 沈阳建筑大学 | 一种采用聚类方式进行软件重构的方法 |
CN103729197A (zh) * | 2014-01-22 | 2014-04-16 | 扬州大学 | 一种基于lda模型的多粒度层次软件聚类方法 |
CN106598850A (zh) * | 2016-12-03 | 2017-04-26 | 浙江理工大学 | 一种基于程序失效聚类分析的错误定位方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2019242108A1 (zh) | 2019-12-26 |
CN109165155A (zh) | 2019-01-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106909510B (zh) | 一种获取测试用例的方法以及服务器 | |
CN109144882B (zh) | 一种基于程序不变量的软件故障定位方法及装置 | |
US20190138731A1 (en) | Method for determining defects and vulnerabilities in software code | |
Kapser et al. | Supporting the analysis of clones in software systems | |
US8151248B1 (en) | Method and system for software defect management | |
Roy | Detection and analysis of near-miss software clones | |
CN107391369B (zh) | 一种基于数据筛选和数据过采样的跨项目缺陷预测方法 | |
Halkidi et al. | Data mining in software engineering | |
CN106227654B (zh) | 一种测试平台 | |
CN102054100B (zh) | 一种基于静态分析的rtl设计错误检测方法和系统 | |
Fioravanti et al. | A study on fault-proneness detection of object-oriented systems | |
Sandhu et al. | A model for early prediction of faults in software systems | |
CN111966665B (zh) | 数据迁移测试方法及装置 | |
CN109165155B (zh) | 一种基于聚类分析的软件缺陷修复模板提取方法 | |
Efendioglu et al. | Bug prediction of systemc models using machine learning | |
Baker et al. | Detect, fix, and verify TensorFlow API misuses | |
Gao et al. | Research on software defect classification | |
CN112199295B (zh) | 一种基于频谱的深度神经网络缺陷定位方法及系统 | |
CN108897678B (zh) | 静态代码检测方法和静态代码检测系统、存储设备 | |
Motwani | High-quality automated program repair | |
CN117217163A (zh) | 一种基于脚本的soc芯片的测试方法 | |
CN116627804A (zh) | 基于人工智能的测试方法、系统、电子设备及存储介质 | |
Ramler et al. | Noise in bug report data and the impact on defect prediction results | |
Horst et al. | Precise definition of software component specifications | |
CN111078193A (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 |