首页> 中国专利> 一种基于bug知识图谱的bug搜索定位方法

一种基于bug知识图谱的bug搜索定位方法

摘要

本发明涉及一种基于bug知识图谱的bug搜索定位方法。本发明将bug报告、commit信息及代码数据,使用自然语言处理工具处理,使用LDA主题模型建立bug报告与commit间关联关系,LDA主题模型和NiCad克隆检测器建立代码数据与commit间对应关系,建立bug及其相关信息的知识图谱,当搜索某一bug问题,并提供要维护的项目代码数据时,以列表和图谱的形式显示相关bug信息,也能根据开发者提供的项目代码,在Nicad克隆检测器的帮助下,结合搜索结果在项目代码中进行相关bug的检测,将该bug进行定位后返回给开发人员。本发明克服了代码及平台未被利用的缺陷。本发明定位开发者提供的项目代码中的bug,帮助软件开发人员定位和解决bug问题,节约维护时间和成本,提高维护效率。

著录项

  • 公开/公告号CN107608732A

    专利类型发明专利

  • 公开/公告日2018-01-19

    原文格式PDF

  • 申请/专利权人 扬州大学;

    申请/专利号CN201710848983.8

  • 发明设计人 孙小兵;王璐;李斌;马正可;李宇;

    申请日2017-09-13

  • 分类号G06F9/44(20180101);

  • 代理机构32226 南京中新达专利代理有限公司;

  • 代理人孙鸥;朱杰

  • 地址 225009 江苏省扬州市大学南路88号

  • 入库时间 2023-06-19 04:21:55

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-08-21

    授权

    授权

  • 2018-02-13

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20170913

    实质审查的生效

  • 2018-01-19

    公开

    公开

说明书

技术领域

本发明属于软件维护领域,特别涉及一种基于bug知识图谱的bug搜索定位方法。

背景技术

软件bug在软件中不可避免,为了保证软件质量就需要软件开发人员对代码中的bug进行定位、排除和修复。然而大部分进行软件bug定位的方法都基于一些复杂的方法(如:基于程序切片的错误定位方法、差分式错误定位方法及基于覆盖率的错误定位方法),且只能对代码中的一个bug进行定位,并不能提供相应的解决方案和相关信息帮助解决该bug问题。而软件历史库中存在着很多有用的信息有待挖掘和整合利用,帮助定位和解决bug问题(如:bug报告、commit及代码信息)。目前已有一些版本控制系统和bug追踪系统(如:Bugzilla@Mozilla) 将软件历史库中的bug报告整合并提供给软件的开发人员进行搜索以便查阅查考,而在GitHub(一个面向开源及私有软件项目的托管平台)中则管理了大量开源软件项目的代码及版本commit信息。这些项目的代码信息及commit信息中有很多有用的信息能够被挖掘并帮助软件开发人员对软件系统进行维护,对定位和解决bug问题也能起到关键作用。

在本发明之前,现在这些开源的软件项目中的代码还未能被利用起来,也没有一个平台将bug报告、commit及代码数据这三方面数据进行整合加以利用帮助搜索和定位bug问题。现有的一些平台只能单一的提供软件历史版本中的bug信息、commit信息,但不能同时提供bug、commit及代码信息,甚至帮助开发者在项目代码中对bug进行定位。开发人员在对代码维护过程中需要花费大量时间对存在bug的代码进行定位,也难以找出所有隐藏的类似的bug。若能将这些bug报告、commit信息及相关代码数据建立一个bug及其相关信息的知识图谱从而构建一个相互关联的bug及其相关信息的知识网络。在此基础上,不仅能为软件开发人员提供较为全面的bug及其相关信息作为参考,同时还能帮助其有针对性的在项目的代码中对要搜索的相关bug进行定位。这大大节约了开发人员维护的时间和成本,能够更高效全面的帮助开发人员解决bug相关的问题。

发明内容

本发明的目的就是要克服上述缺陷,研发出一种基于bug知识图谱的bug搜索定位方法。

本发明技术方法是:

一种基于bug知识图谱的bug搜索定位方法,其主要技术特征在于如下步骤: (1)将软件历史库中的bug报告和commit数据使用自然语言处理工具进行处理,提取出对应的标题描述信息;

(2)使用LDA主题模型对步骤(1)中提取的标题描述信息中的主题词,计算主题词的分布,后匹配并建立bug与commit间对应关系;

(3)从步骤(2)中处理后得到的commit中提取代码片段,并将历史代码数据使用自然语言处理工具进行处理生成代码片段;

(4)使用NiCad克隆检测器工具对步骤(3)中的代码片段进行相似代码的检测,建立commit与代码间对应关系;

(5)使用LDA主题模型提取步骤93)中的代码片段中的类名和方法名作为主题词,并计算其分布,后建立代码间语法调用关系;

(6)使用LDA主题模型提取步骤(3)中的代码片段的注释中的主题词,并计算其分布,后建立代码间语义相似关系;

(7)根据步骤(2)、(4)、(5)、(6)中建立好的bug报告、commit及代码间的相互关系建立bug及其相关信息的知识图谱;

(8)当开发人员搜索bug问题时,使用自然语言处理工具对其搜索内容进行处理,提取其中关键词与知识图谱中的主题词进行匹配,计算相似度得到相关bug报告及commit信息:

(9)对步骤(8)中的相关bug及commit信息按相似度高低进行排序后返回给开发人员;

(10)提取步骤(9)中相关度最高的commit中的代码片段,使用NiCad克隆检测工具将其与开发人员提供的项目代码进行相似检测,并定位出其中与搜索的bug相关的代码位置返回给开发人员。

本发明的优点和效果在于能够挖掘建立bug报告、commit信息及代码数据间的关系,能够可视化显示较为全面的相关bug信息,并在此基础上进一步定位开发者提供的项目代码中的bug,从而帮助软件开发人员定位和解决bug问题,节约了维护时间和成本,提高了维护效率。具体说,主要有如下一些优点:

(1)本方法结合LDA主题模型提取bug报告的描述信息、commit标题信息中的主题词,建立数据间对应关系,不仅使关系更为准确,且通过主题词的匹配能得到更准确的搜索结果,准确也搜索结果也更有利于准确的帮助在项目代码中进行bug定位。

(2)本方法通过整合bug报告、commit及代码三方面信息,生成bug及其相关信息的知识图谱。知识图谱不仅能在对bug问题进行搜索时有助于理解开发人员的搜索目的,为开发人员提供更相关更全面的数据,且提供的数据越相关越准确,则越有利于对项目中的bug问题的定位。

(3)本方法使用NiCad克隆检测器(一种可扩展的灵活的克隆检测工具)进行相似代码的检测,NiCad目前已被广泛使用,具有很高的准确率和召回率。不仅能够检测type1、type2和type3类型的克隆代码且涉及的编程语言较为全面,已成为较为权威的克隆代码检测工具。使用其进行相似代码的检测不仅较为准确,返回结果便于保存,且能通过修改达到自动化检测的效果。

附图说明

图1——本发明流程示意图。

图2——本发明中bug与commit间关系效果图。

图3——本发明bug及其相关信息知识图谱效果图。

图4——本发明中相似代码检测结果示例截图。

图5——本发明中相似代码检测及bug定位的流程示意图。

具体实施方式

本发明的技术思路是:

将bug报告、commit信息及代码数据,分别使用自然语言处理工具进行处理,后使用LDA主题模型建立bug报告与commit间关联关系,使用LDA主题模型和NiCad 克隆检测器(一种可扩展的灵活的克隆检测工具)建立代码数据与commit间对应关系,从而建立bug及其相关信息的知识图谱。当软件开发人员搜索某一bug问题,并提供要维护的项目代码数据时,可分别以列表和图谱的形式显示相关bug信息,也能根据开发者提供的项目代码,在Nicad克隆检测器的帮助下,结合搜索结果在项目代码中进行相关bug的检测,将该bug进行定位后返回给开发人员。

下面具体说明本发明。

如图1所示,其步骤如下:

步骤(1)将软件历史库中的bug报告(如表1,为Bugzilla@Mozilla中历史提交的某一bug报告,其中记录了该bug的ID、提交者、描述信息等属性信息)和commit信息(如表2,为GitHub中历史提交的某一commit信息,其中记录了该commit的标题、提交者、提交时间及包含的代码内容等信息)使用自然语言处理工具进行处理,提取bug报告中的描述信息及commit中的标题信息,并统一成需要的格式。将每条数据的描述信息、标题信息单独提取出来后,便于接下来使用LDA主题模型对其进一步处理,从中提取出主题词。

表1为bug493748内容示例

表2为某commit内容示例

步骤(2)使用LDA主题模型对步骤(1)中提取的标题信息和描述信息分别进行主题词的提取(如某一bug的描述信息为:[SeaMonkey] mochitest-chrome:permanent″test_autocomplete2.xul| [SimpleTest/SimpleTest.js,window.Onerror]An error occurred-...″,我们使用LDA主题模型提取到的主题为:mochitest-chrome, permanent,SimpleTest),将提取到的主题词计算其在主题词集中的分布,按照主题词的分布将数据进行匹配,并建立bug与bug间的相似关系,commit与commit间相似关系,bug与commit间对应关系,此外还根据commit中的bugID建立bug与commit间的对应关系。统计主题词的分布有助于帮助判断和建立bug及commit两大数据源间的可能存在的关联关系(如图2,为bug与commit间关系效果图。图中菱形节点代表 bug,圆形节点代表commit。bug间的关系有:similar关系、dependson 关系、blocks关系、duplicate关系;commit间关系有similar关系; bug与commit间关系有根据bugID建立的对应关系),建立好这些关系便于后面建立bug及其相关信息的知识图谱,并使得在开发人员进行搜索时准确找到对应的数据。

步骤(3)从步骤(2)处理后得到的commit中提取相应的代码片段,并将历史代码数据使用自然语言处理工具进行处理生成代码片段,以标准文本形式存储。由于代码较为复杂,并不能按文本相似度进行相似度匹配,将代码分解生成关键代码片段,便于接下来使用Nicad克隆代码检测工具对代码片段进行相似性检测,从而找出相似的代码片段,建立commit 间相似关系以及代码段与commit间的对应关系。

步骤(4)使用NiCad克隆代码检测工具对步骤(3)中的代码片段进行相似代码的检测,若结果表明两段代码片段为相似的则两段代码对应的commit 为相似的,或者代码与commit间则为对应的,从而能建立commit间的相似关系以及commit与代码间的对应关系。建立好这些关系便于后面建立bug及其相关信息的知识图谱,并有助于在搜索时找到对应的数据。

步骤(5)使用LDA主题模型提取步骤(3)中的代码片段中的类名和方法名,以类名作为实体,方法名作为实体的属性,将代码段中的类名和方法名作为主题词,使用LDA主题模型计算主题词的分布,根据主题词的分布建立类与类之间的语法调用关系,从而建立代码类与类间知识图谱。建立代码中类间知识图谱,便于建立commit与代码间对应关系,也便于后面建立bug及其相关信息的知识图谱,以及当开发人员对bug进行搜索后得到准确相关的结果,从而进一步有助于对bug在项目代码中准确的进行定位。

步骤(6)使用LDA主题模型提取步骤(3)中的代码片段的注释中的主题词,并计算这些主题词的分布,将主题词分布较为密集的定义为相似的主题,并将其对应的代码段定义为相似的代码段,从而建立代码片段间的语义相似关系。建立代码间的相似关系也有助于建立bug及其相关信息的知识图谱及对bug在项目代码中的定位。且使用LDA主题模型建立知识图谱能提高搜索结果的准确性和全面性。

步骤(7)根据步骤(2)、步骤(4)、步骤(5)、步骤(6)中建立好的bug 报告、commit及代码片段间的对应关系建立bug及其相关信息的知识图谱(如图3,为bug及其相关信息的知识图谱效果示例图,其中以bug 报告、commit及代码类名为实体,三者间相互关系作为关系。图中不同形状代表不同种类的实体,其中菱形节点代表bug报告,圆形节点代表 commit信息,方形节点代表代码中的类,节点之间的连线代表实体间关系,实体间距离越近则更相关),以可视化工具显示bug及其相关知识图谱能更直观的为开发人员展示相关bug信息及这些信息间的关系,便于其理解。

步骤(8)当开发人员搜索某一bug问题时,我们使用自然语言处理工具对其搜索内容进行预处理,去除无用信息(如:停用词、空格、定冠词等)提取其中关键词(例如:搜索者输入”Need option key modifier to launch profile manager on Mac OS builds”,使用自然语言处理工具将其处理成”key,build,Mac,TM,OS,manager,use,trunk,swithing”),并将关键词与知识图谱中的主题词进行匹配,通过计算余弦相似度,得到相关bug报告及commit信息。将关键词提取并与主题词匹配有助于从语义的角度理解开发者的搜索内容。因为前面使用LDA主题模型对数据处理并匹配数据间关系,这使得得到相关信息的速度比使用聚类方法的速度提高了2-3倍。这一步能够准确的识别出开发者想要搜索的相关内容,并能快速将其提取出来,使得搜索结果更加准确全面。因为结合知识图谱进行bug搜索,相比于传统的搜索方式,其精确度提高了约40%。

步骤(9)将步骤(8)中的相似bug报告及相关commit信息提取出来,并按相似度高低进行排序,结合可视化工具,分别以列表和部分知识图谱两种形式返回给开发人员。把搜索结果按照步骤8)中计算得到的相似度高低进行排序并将部分知识图谱可视化显示,这使得搜索结果更加直观,减少了开发人员在搜索结果中查看花费的时间,便于开发人员快速准确的找到与搜索结果最相关的信息。

步骤(10)提取步骤(9)中相关度最高的commit中的代码片段,使用NiCad 克隆代码检测工具将其与开发人员提供的项目代码进行相似检测,(检测结果如图4所示,检测结果如下:

其中,检测结果不仅能显示相似代码的起始行、结束行、代码行数还能显示克隆代码所在路径),从而帮助开发人员定位项目代码中与搜索的bug相关的代码位置,并返回给开发人员(如图5,为使用NiCad克隆代码检测工具进行相似代码检测及bug定位的流程示意图。开发人员提供相应的项目代码,在开发人员输入要解决的bug后,得到与该bug最相关的commit信息,使用自然语言处理工具从commit中提取代码片段,同时使用Nicad克隆代码检测工具对项目代码进行处理。首先NiCad对代码进行解析并根据开发者规定的粒度提取代码片段;后对代码片段进行标准化处理,进行重命名、标准化括号、去除声明等操作,得到标准化的代码片段;最后将commit中的代码片段与项目代码片段使用一个最优化的最大共同子序列算法进行代码片段的相似检测,通过参数化比较得出是否为相似的代码片段,并返回相似代码片段的起始行、结束行、代码行数还能显示克隆代码所在路径等信息返回给开发人员,从而完成对bug在代码中的定位)。使用LDA主题模型帮助建立知识图谱,并将知识图谱与克隆检测相结合,根据开发者的搜索信息帮助其对代码中的bug进行定位,不仅能提高搜索结果的准确性和全面性,还有助于准却对bug问题进行定位。这很大程度上节约了开发人员维护代码的时间和成本,与其他建立知识图谱的方法相比,得到搜索结果的时间缩短了2-3倍,且得到的结果更精确。此外,帮助对bug进行定位更是节约了开发者花费在查找代码中bug的时间,提高了效率,能帮助其高效解决bug问题。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号