当前位置: 首页 > 专利查询>扬州大学专利>正文

一种面向缺陷定位的代码搜索方法技术

技术编号:20763500 阅读:28 留言:0更新日期:2019-04-03 14:11
本发明专利技术公开了一种面向缺陷定位的代码搜索方法,包括以下步骤:首先构建软件历史库中bug报告对应的源代码文件抽象语法树;之后提取所有与bug相关的codediff文件,并将codediff文件中连续的代码修改行定义为一个chunk,建立每个codediff文件的chunk关系图;之后获取chunk关系图中每个节点的重要性分值degree;然后建立bug报告与chunk之间的关系;之后利用知识库建立工具建立bug‑chunk知识库;接着针对新的bug报告,获取新的bug报告与bug‑chunk知识库中bug报告的相似度sim;最后结合chunk的重要性分值degree和相似度sim生成chunk列表,实现缺陷的定位。本发明专利技术的处理对象以chunk为单位,面向的是一个连续代码块,不仅降低了处理数据量,且chunk本身为修改的代码行,在计算过程中更具有针对性,提高了bug定位的针对性、准确性。

【技术实现步骤摘要】
一种面向缺陷定位的代码搜索方法
本专利技术属于软件维护领域,特别是一种面向缺陷定位的代码搜索方法。
技术介绍
在软件开发和维护的过程中,许多项目每天要面临大量bug,例如Mozilla平均每天接收152条新的bug报告,IBMJazz项目平均每天接收105条新的bug报告,开发维护人员需要花费大量的时间在bug定位和解决上,因此越来越多的bug定位工具被开发用来辅助开发者快速解决bug相关问题。目前,有许多基于信息检索模型的bug定位器被广泛使用,这些检索模型有VectorSpaceModel(VDM)、LatentSymanticIndexing、LatentDirichletAllocation(LDA)等。其中,Lukis等人运用LDA模型来进行bug定位,基于Mozilla上bug报告数据,他们使用LSI和LDA模型,在源代码的标识符和注释上构建两个分类器,使用余弦和条件概率相似性计算bug报告和源代码实体之间的相似性,进而推荐与bug报告最为相似的源代码实体。但是,该方法只是从语义和特征两方面来处理代码,代码和bug报告之间的联系局限于语义层面,这种处理方式比较依赖于分类器行为参数(例如如何处理代码、如何给主题词加权)的定义,由于参数的范围很大,很难准确决定哪些参数是否要被忽略。另外,该工作中代码处理对象是整个代码文件,巨大的数据处理数量降低了工作的针对性及准确率。
技术实现思路
本专利技术所解决的技术问题在于提供一种面向缺陷定位的代码搜索方法。实现本专利技术目的的技术解决方案为:一种面向缺陷定位的代码搜索方法,包括以下步骤:步骤1、对软件历史库中的bug报告进行自然语言预处理,并构建bug报告对应的源代码文件抽象语法树;步骤2、提取所有与bug相关的codediff文件,并将codediff文件中连续的代码修改行定义为一个chunk;在步骤1源代码文件抽象语法树的基础上建立每个codediff文件的chunk关系图;步骤3、遍历chunk关系图,获取chunk关系图中每个节点v的重要性分值degree,并对degree进行标准化处理;步骤4、根据bug报告与codediff文件之间的一对多关系以及每个codediff文件的chunk关系图,建立bug报告与chunk之间的关系;步骤5、结合步骤1的bug报告和步骤4建立的bug报告和chunk之间的关系,利用知识库建立工具建立bug-chunk知识库;步骤6、针对新的bug报告,获取新的bug报告与bug-chunk知识库中bug报告的相似度sim;步骤7、结合bug-chunk知识库中各个chunk的重要性分值degree和相似度sim生成chunk列表,根据chunk列表即可获取与新的bug报告中bug相关的代码,实现缺陷的定位。本专利技术与现有技术相比,其显著优点为:1)本专利技术简化了对代码文件的处理,并且以图的形式表示代码文件,便于开发者理解处理流程;2)本专利技术的处理对象是以chunk为单位,面向的是一个连续代码块,不仅降低了处理数据量,而且chunk本身的意义在于是修改的代码行,在计算过程中更具有针对性,提高了bug定位的针对性和准确性,且处理效率大大提升。下面结合附图对本专利技术作进一步详细描述。附图说明图1为本专利技术面向缺陷定位的代码搜索方法的流程图。图2为本专利技术中codediff文件chunk标记示意图。图3为本专利技术中源代码文件抽象语法树中chunk节点示意图。图4为本专利技术中chunk关系示意图。图5为本专利技术实施例中构建的源代码文件抽象语法树示意图。图6为本专利技术实施例中源代码文件抽象语法树中chunk节点示意图。图7为本专利技术实施例中chunk关系示意图。具体实施方式结合图1,本专利技术一种面向缺陷定位的代码搜索方法,包括以下步骤:步骤1、对软件历史库中的bug报告进行自然语言预处理,并构建bug报告对应的源代码文件抽象语法树。自然语言预处理包括文本规范化、去停词和词干化。其中,构建bug报告对应的源代码文件的抽象语法树,具体为:步骤1-1、利用软件开发工具包构建代码文件解析工具;步骤1-2、提取bug报告对应的源代码文件,并将该源代码文件作为所述代码文件解析工具的输入,从而解析出源代码文件的抽象语法树。步骤2、提取所有与bug相关的codediff文件,并将codediff文件中连续的代码修改行定义为一个chunk如图2所示,规定第1、2行为chunk1,10、11、12、13行为chunk2、26、27行为chunk3。在步骤1源代码文件抽象语法树的基础上建立每个codediff文件的chunk关系图,具体为:对于每个codediff文件,将源代码文件抽象语法树上与该codediff文件中chunk相关的节点保留,并将代码文件抽象语法树上的节点用chunk表示,如图3所示,抽象语法树上可能多个节点被包含在一个chunk里,其中Ci表示各个chunk,由此建立每个codediff文件的chunk关系图如图4所示。步骤3、遍历chunk关系图,获取chunk关系图中每个节点v的重要性分值degree,并对degree进行标准化处理。其中,重要性分值degree的公式为:degree=BC+CC式中,BC为经过节点v的某一对节点之间的最短路径数目与该对节点之间所有最短路径的数目的比值,CC为节点v与其他节点之间最短路径之和。对degree进行标准化处理,具体为:对degree进行归一化处理,即将degree的值限定于区间(0,1)内,假设chunk关系图获得的degree数据集为{d1,d2,d3,…,dn},则对其进行标准化处理后为其中sum=d1+d2+d3+…+dn。步骤4、根据bug报告与codediff文件之间的一对多关系以及每个codediff文件的chunk关系图,建立bug报告与chunk之间的关系。步骤5、结合步骤1的bug报告和步骤4建立的bug报告和chunk之间的关系,利用知识库建立工具建立bug-chunk知识库。步骤6、针对新的bug报告,对其进行文本规范化、去停词和词干化等自然语言预处理,之后获取新的bug报告与bug-chunk知识库中bug报告的相似度sim,获取相似度sim具体为:将bug报告表示为向量式中,tfb(tn)为单词tn在bug报告中出现的次数,idf(tn)为包含单词tn的文件数量的倒数;假设新的bug报告与bug-chunk知识库中bug报告的向量表示分别为求取间的标准余弦相似度即为两个报告之间的相似度sim。步骤7、结合bug-chunk知识库中各个chunk的重要性分值degree和相似度sim生成chunk列表,根据chunk列表即可获取与新的bug报告中bug相关的代码,实现缺陷的定位。其中生成chunk列表具体为:步骤7-1、将相似度sim分别与每个chunk节点的重要性分值degree相乘;步骤7-2、将步骤7-1相乘的结果进行降序排列,其顺序依次对应的chunk即构成chunk列表。下面结合实施例对本专利技术作进一步详细的说明。实施例结合图1,本专利技术面向缺陷定位的代码搜索方法,包括以下内容:步骤1、利用APACHE项目中bug报告信息,提取出bug报告对应的源代码文件,创建ASTpas本文档来自技高网...

【技术保护点】
1.一种面向缺陷定位的代码搜索方法,其特征在于,包括以下步骤:步骤1、对软件历史库中的bug报告进行自然语言预处理,并构建bug报告对应的源代码文件抽象语法树;步骤2、提取所有与bug相关的codediff文件,并将codediff文件中连续的代码修改行定义为一个chunk;在步骤1源代码文件抽象语法树的基础上建立每个codediff文件的chunk关系图;步骤3、遍历chunk关系图,获取chunk关系图中每个节点v的重要性分值degree,并对degree进行标准化处理;步骤4、根据bug报告与codediff文件之间的一对多关系以及每个codediff文件的chunk关系图,建立bug报告与chunk之间的关系;步骤5、结合步骤1的bug报告和步骤4建立的bug报告和chunk之间的关系,利用知识库建立工具建立bug‑chunk知识库;步骤6、针对新的bug报告,获取新的bug报告与bug‑chunk知识库中bug报告的相似度sim;步骤7、结合bug‑chunk知识库中各个chunk的重要性分值degree和相似度sim生成chunk列表,根据chunk列表即可获取与新的bug报告中bug相关的代码,实现缺陷的定位。...

【技术特征摘要】
1.一种面向缺陷定位的代码搜索方法,其特征在于,包括以下步骤:步骤1、对软件历史库中的bug报告进行自然语言预处理,并构建bug报告对应的源代码文件抽象语法树;步骤2、提取所有与bug相关的codediff文件,并将codediff文件中连续的代码修改行定义为一个chunk;在步骤1源代码文件抽象语法树的基础上建立每个codediff文件的chunk关系图;步骤3、遍历chunk关系图,获取chunk关系图中每个节点v的重要性分值degree,并对degree进行标准化处理;步骤4、根据bug报告与codediff文件之间的一对多关系以及每个codediff文件的chunk关系图,建立bug报告与chunk之间的关系;步骤5、结合步骤1的bug报告和步骤4建立的bug报告和chunk之间的关系,利用知识库建立工具建立bug-chunk知识库;步骤6、针对新的bug报告,获取新的bug报告与bug-chunk知识库中bug报告的相似度sim;步骤7、结合bug-chunk知识库中各个chunk的重要性分值degree和相似度sim生成chunk列表,根据chunk列表即可获取与新的bug报告中bug相关的代码,实现缺陷的定位。2.根据权利要求1所述的面向缺陷定位的代码搜索方法,其特征在于,步骤1中所述自然语言预处理包括文本规范化、去停词和词干化。3.根据权利要求1或2所述的面向缺陷定位的代码搜索方法,其特征在于,步骤1所述构建bug报告对应的源代码文件的抽象语法树,具体为:步骤1-1、利用软件开发工具包构建代码文件解析工具;步骤1-2、提取bug报告对应的源代码文件,并将该源代码文件作为所述代码文件解析工具的输入,从而解析出源代码文件的抽象语法树。4.根据权利要求3所述的面向缺陷定位的代码搜索方法,其特征在于,步骤2所述在步骤1源代码文件抽象语法树的基础上建立每个codediff文件的chunk关系图,具体为:对于每个codediff文件,将源代码文件...

【专利技术属性】
技术研发人员:孙小兵常建明张庆辉
申请(专利权)人:扬州大学
类型:发明
国别省市:江苏,32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1