CN107608732B - 一种基于bug知识图谱的bug搜索定位方法 - Google Patents
一种基于bug知识图谱的bug搜索定位方法 Download PDFInfo
- Publication number
- CN107608732B CN107608732B CN201710848983.8A CN201710848983A CN107608732B CN 107608732 B CN107608732 B CN 107608732B CN 201710848983 A CN201710848983 A CN 201710848983A CN 107608732 B CN107608732 B CN 107608732B
- Authority
- CN
- China
- Prior art keywords
- bug
- code
- commit
- information
- developer
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及一种基于bug知识图谱的bug搜索定位方法。本发明将bug报告、commit信息及代码数据,使用自然语言处理工具处理,使用LDA主题模型建立bug报告与commit间关联关系,LDA主题模型和NiCad克隆检测器建立代码数据与commit间对应关系,建立bug及其相关信息的知识图谱,当搜索某一bug问题,并提供要维护的项目代码数据时,以列表和图谱的形式显示相关bug信息,也能根据开发者提供的项目代码,在Nicad克隆检测器的帮助下,结合搜索结果在项目代码中进行相关bug的检测,将该bug进行定位后返回给开发人员。本发明克服了代码及平台未被利用的缺陷。本发明定位开发者提供的项目代码中的bug,帮助软件开发人员定位和解决bug问题,节约维护时间和成本,提高维护效率。
Description
技术领域
本发明属于软件维护领域,特别涉及一种基于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问题。
Claims (1)
1.一种基于bug知识图谱的bug搜索和定位方法,其特征在于,包括如下步骤:
(1)将软件历史库中的bug报告和commit数据使用自然语言处理工具进行处理,提取出对应的标题描述信息;
(2)使用LDA主题模型对步骤(1)中提取的标题描述信息中的主题词,计算主题词的分布,后匹配并建立bug与commit间对应关系;
(3)从步骤(2)中处理后得到的commit中提取代码片段,并将历史代码数据使用自然语言处理工具进行处理生成代码片段;
(4)使用NiCad克隆检测器工具对步骤(3)中的代码片段进行相似代码的检测,建立commit与代码间对应关系;
(5)使用LDA主题模型提取步骤( 3)中的代码片段中的类名和方法名作为主题词,并计算其分布,后建立代码间语法调用关系;
(6)使用LDA主题模型提取步骤(3)中的代码片段的注释中的主题词,并计算其分布,后建立代码间语义相似关系;
(7)根据步骤(2)、(4)、(5)、(6)中建立好的bug报告、commit及代码间的相互关系建立bug及其相关信息的知识图谱;
(8)当开发人员搜索bug问题时,使用自然语言处理工具对其搜索内容进行处理,提取其中关键词与知识图谱中的主题词进行匹配,计算相似度得到相关bug报告及commit信息;
(9)对步骤(8)中的相关bug及commit信息按相似度高低进行排序后返回给开发人员;
(10)提取步骤(9)中相关度最高的commit中的代码片段,使用NiCad克隆检测工具将其与开发人员提供的项目代码进行相似检测,并定位出其中与搜索的bug相关的代码位置返回给开发人员。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710848983.8A CN107608732B (zh) | 2017-09-13 | 2017-09-13 | 一种基于bug知识图谱的bug搜索定位方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710848983.8A CN107608732B (zh) | 2017-09-13 | 2017-09-13 | 一种基于bug知识图谱的bug搜索定位方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107608732A CN107608732A (zh) | 2018-01-19 |
CN107608732B true CN107608732B (zh) | 2020-08-21 |
Family
ID=61061122
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710848983.8A Active CN107608732B (zh) | 2017-09-13 | 2017-09-13 | 一种基于bug知识图谱的bug搜索定位方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107608732B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109165155B (zh) * | 2018-06-20 | 2021-06-22 | 扬州大学 | 一种基于聚类分析的软件缺陷修复模板提取方法 |
CN109255029A (zh) * | 2018-09-05 | 2019-01-22 | 大连海事大学 | 一种采用加权优化训练集增强自动Bug报告分配的方法 |
CN109299381B (zh) * | 2018-10-31 | 2020-04-24 | 哈尔滨工程大学 | 一种基于语义概念的软件缺陷检索和分析***及方法 |
CN111124487B (zh) * | 2018-11-01 | 2022-01-21 | 浙江大学 | 代码克隆检测方法、装置以及电子设备 |
CN110765836B (zh) * | 2019-08-28 | 2022-04-29 | 云知声智能科技股份有限公司 | 一种基于自然语言理解的文本定位方法和*** |
CN111241307A (zh) * | 2020-01-23 | 2020-06-05 | 复旦大学 | 面向软件***的软件项目及第三方库知识图谱构造方法 |
CN111339272A (zh) * | 2020-02-21 | 2020-06-26 | 南方科技大学 | 代码缺陷报告检索方法及装置 |
CN111638901A (zh) * | 2020-05-11 | 2020-09-08 | 紫光云技术有限公司 | 一种针对云产品bug自动定位的处理装置及方法 |
CN111913874B (zh) * | 2020-06-22 | 2021-12-28 | 西安交通大学 | 一种基于语法结构变更分析的软件缺陷溯源方法 |
CN112115362B (zh) * | 2020-09-21 | 2022-01-11 | 中山大学 | 一种基于相似代码识别的编程信息推荐方法及装置 |
CN113360677A (zh) * | 2021-07-08 | 2021-09-07 | 北京明略昭辉科技有限公司 | 基于知识图谱的快速定位方法及*** |
CN114138330B (zh) * | 2021-12-07 | 2024-07-26 | 中国人民解放军国防科技大学 | 基于知识图谱的代码克隆检测优化方法、装置和电子设备 |
CN118194308B (zh) * | 2024-05-17 | 2024-07-30 | 中国电子产品可靠性与环境试验研究所((工业和信息化部电子第五研究所)(中国赛宝实验室)) | 一种智能化数据库安全测试平台及方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050288920A1 (en) * | 2000-06-26 | 2005-12-29 | Green Edward A | Multi-user functionality for converting data from a first form to a second form |
CN105760495A (zh) * | 2016-02-17 | 2016-07-13 | 扬州大学 | 一种基于知识图谱针对bug问题进行探索性搜索方法 |
CN106202203A (zh) * | 2016-06-23 | 2016-12-07 | 扬州大学 | 基于终身主题模型的bug知识库的建立方法 |
CN106407113A (zh) * | 2016-09-09 | 2017-02-15 | 扬州大学 | 一种基于Stack Overflow和commit库的bug定位方法 |
-
2017
- 2017-09-13 CN CN201710848983.8A patent/CN107608732B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050288920A1 (en) * | 2000-06-26 | 2005-12-29 | Green Edward A | Multi-user functionality for converting data from a first form to a second form |
CN105760495A (zh) * | 2016-02-17 | 2016-07-13 | 扬州大学 | 一种基于知识图谱针对bug问题进行探索性搜索方法 |
CN106202203A (zh) * | 2016-06-23 | 2016-12-07 | 扬州大学 | 基于终身主题模型的bug知识库的建立方法 |
CN106407113A (zh) * | 2016-09-09 | 2017-02-15 | 扬州大学 | 一种基于Stack Overflow和commit库的bug定位方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107608732A (zh) | 2018-01-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107608732B (zh) | 一种基于bug知识图谱的bug搜索定位方法 | |
CN109697162B (zh) | 一种基于开源代码库的软件缺陷自动检测方法 | |
CN108460014B (zh) | 企业实体的识别方法、装置、计算机设备及存储介质 | |
CN104461578B (zh) | 代码自动合并方法和*** | |
CN111459799B (zh) | 一种基于Github的软件缺陷检测模型建立、检测方法及*** | |
US20170139806A1 (en) | Automated Anomaly Detection Service on Heterogeneous Log Streams | |
Alrubaye et al. | On the use of information retrieval to automate the detection of third-party java library migration at the method level | |
CN108932218B (zh) | 一种实例扩展方法、装置、设备和介质 | |
US20230195728A1 (en) | Column lineage and metadata propagation | |
CN107016018B (zh) | 数据库索引创建方法及装置 | |
CN109492106B (zh) | 一种文本代码相结合的缺陷原因自动分类方法 | |
US20130238610A1 (en) | Automatically Mining Patterns For Rule Based Data Standardization Systems | |
US9990268B2 (en) | System and method for detection of duplicate bug reports | |
CN113760891B (zh) | 一种数据表的生成方法、装置、设备和存储介质 | |
Stephan et al. | Using mutation analysis for a model-clone detector comparison framework | |
CN111127068A (zh) | 一种工程量清单自动组价方法和装置 | |
CN113487211A (zh) | 核电装备质量追溯方法、***、计算机设备及介质 | |
CN114398069B (zh) | 一种基于交叉指纹分析的公共组件库精确版本识别方法及*** | |
CN117873905B (zh) | 一种代码同源检测的方法、装置、设备及介质 | |
CN105354224A (zh) | 知识数据的处理方法和装置 | |
CN112699018A (zh) | 基于软件缺陷关联分析的软件缺陷定位方法 | |
CN114201757A (zh) | 一种基于软件漏洞识别的置信度标识方法、信息存储介质 | |
CN114237588A (zh) | 一种代码仓库选择方法、装置、设备及存储介质 | |
CN114065762A (zh) | 一种文本信息的处理方法、装置、介质及设备 | |
US11727059B2 (en) | Retrieval sentence utilization device and retrieval sentence utilization method |
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 |