CN109597747A - 一种基于多目标优化算法nsga-ⅱ推荐跨项目关联缺陷报告的方法 - Google Patents
一种基于多目标优化算法nsga-ⅱ推荐跨项目关联缺陷报告的方法 Download PDFInfo
- Publication number
- CN109597747A CN109597747A CN201710932159.0A CN201710932159A CN109597747A CN 109597747 A CN109597747 A CN 109597747A CN 201710932159 A CN201710932159 A CN 201710932159A CN 109597747 A CN109597747 A CN 109597747A
- Authority
- CN
- China
- Prior art keywords
- project
- defect
- defect report
- degree
- item
- 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.)
- Pending
Links
- 230000007547 defect Effects 0.000 title claims abstract description 272
- 238000004422 calculation algorithm Methods 0.000 title claims abstract description 40
- 238000000034 method Methods 0.000 title claims abstract description 38
- 238000005457 optimization Methods 0.000 title claims abstract description 20
- 238000012545 processing Methods 0.000 claims abstract description 6
- 239000013598 vector Substances 0.000 claims description 19
- 230000002068 genetic effect Effects 0.000 claims description 12
- 230000006870 function Effects 0.000 claims description 9
- 230000035772 mutation Effects 0.000 claims description 9
- 230000003044 adaptive effect Effects 0.000 claims description 7
- 230000008676 import Effects 0.000 claims description 6
- 230000009471 action Effects 0.000 claims description 5
- 241001223907 Uranoscopidae Species 0.000 claims description 3
- 230000000295 complement effect Effects 0.000 claims description 3
- 239000000284 extract Substances 0.000 claims description 3
- 238000005259 measurement Methods 0.000 claims description 3
- 238000012552 review Methods 0.000 claims description 3
- 238000013139 quantization Methods 0.000 claims 1
- 238000004364 calculation method Methods 0.000 abstract description 5
- 230000008439 repair process Effects 0.000 abstract description 5
- 230000029305 taxis Effects 0.000 abstract 1
- 230000008569 process Effects 0.000 description 9
- 239000011159 matrix material Substances 0.000 description 7
- 230000008859 change Effects 0.000 description 6
- 238000005070 sampling Methods 0.000 description 6
- 230000018109 developmental process Effects 0.000 description 4
- 238000011144 upstream manufacturing Methods 0.000 description 4
- 239000004744 fabric Substances 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 230000004083 survival effect Effects 0.000 description 2
- 238000012935 Averaging Methods 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 230000004069 differentiation Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000012804 iterative process Methods 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 238000013179 statistical model Methods 0.000 description 1
- 230000033772 system development Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/279—Recognition of textual entities
- G06F40/289—Phrasal analysis, e.g. finite state techniques or chunking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/30—Semantic analysis
Abstract
本发明提供一种基于多目标优化算法NSGA‑II推荐跨项目关联缺陷报告的方法,主要包含以下步骤:1)获取与查询缺陷报告所在项目关联的其他项目,主要基于缺陷所在项目的信息以及项目参与人的信息;2)计算项目之间的关联度:主题相似度、项目重要程度、项目之间的距离,对项目的关联度排序;3)对于关联度较大的项目,计算其中的缺陷与查询缺陷报告之间的主题相似性以及将要修改的源代码文件之间的距离;4)根据缺陷报告的主题相似性、源文件距离、项目的关联度计算适应值函数;5)利用多目标优化算法NSGA‑II产生相关联程度最大的跨项目缺陷报告。本发明主要解决目前缺乏对查询缺陷报告推荐相关联的跨缺陷报告问题,能够有效定位、修复跨项目缺陷,提高处理跨项目缺陷报告的效率。
Description
技术领域
本发明属于计算机技术领域,涉及到软件缺陷报告的收集以及分析、项目之间相关联程度的分析、缺陷报告之间相似度的计算,是一种基于多目标优化算法NSGA-II推荐跨项目关联缺陷报告的方法。
背景技术
软件缺陷是计算机程序或系统中存在的、会破坏软件正常运行能力的问题或错误,是系统所需要实现的某种功能的失效或违背。在软件开发和维护过程中,由于各种因素的影响,软件缺陷很难避免,而且会经常出现。
在软件系统开发中,开发者往往需要调用项目内的其它模块甚至其它项目已实现的功能模块。在这个场景中,我们称调用其它项目模块的项目为下游项目,被调用的项目为上游项目。随着软件规模的不断增长,跨项目的模块调用越来越常见。这种跨项目的模块调用也给软件质量保证,特别是缺陷的定位和修复带来了新的问题。
上游项目和下游项目的缺陷可能不是独立存在的,它们之间存在某些联系。例如,上游项目的缺陷可能会影响多个下游模块的正常使用,下游项目缺陷的修复可能依赖于上游项目缺陷的修复。在复杂软件系统的开发中,上游和下游项目都可能有多个,其中的缺陷可能与多个项目的多个缺陷相关联。我们称这些项目之间存在依赖关系,相应的缺陷称为跨项目关联缺陷。跨项目关联缺陷间既可能有直接关系(例如一个缺陷是造成另一个缺陷的根源),也可能因其他缺陷相关而产生间接联系。
当软件开发者或使用者遇到一个缺陷时,通常会撰写一份缺陷报告来描述所遇到的问题以及相关信息,并反馈给项目开发人员。通常,开发者会根据缺陷报告在项目内进行定位,找到缺陷并修复缺陷。然而,在跨项目关联缺陷的场景下,这样的流程也发生了巨大变化。
本发明关注著名的代码托管平台GitHub上的跨项目关联缺陷的定位与修复过程。在GitHub上,缺陷报告被称为Issue。例如先考虑一个例子,一个开发者在pip项目中提出一个Issue(id为#1488,记作pip#1488,下同)。在该Issue的讨论过程中有开发者发现它与requests项目中的requests#749以及urllib3中的urllib3#257相关。进一步的,requests的开发者又发现requests#749与urllib3项目的urllib3#89、urllib3#128、urllib3#156、urllib3#140相关,其他项目的开发者也发现有更多的Issue(例如github3.py#142)与requests#749相关。多个不同项目的开发者对关联的多个报告进行了讨论,最后共同修复了这几个缺陷。这个例子表明,关联的缺陷报告有助于开发者定位问题,有助于他们协作修复缺陷。本发明正是基于这样的事实,提出了一种跨项目关联缺陷报告的推荐方法。
近年来,有不少人对缺陷报告的推荐展开了研究,比较典型的有重复缺陷报告的推荐和相似缺陷报告的推荐。所谓的重复缺陷报告,是指在同一个项目中,针对同一个缺陷有多个缺陷报告被提出。自动识别出某个缺陷报告是否为重复缺陷报告,可以节约开发者时间,提高开发效率。相似缺陷报告则是指在同一个项目中,为修复相应的缺陷要修改的代码重叠率超过50%的缺陷报告。在重复和相似缺陷报告的推荐中,主要采用一种标准的信息检索技术,是将缺陷报告的文本信息向量化,然后计算缺陷报告之间的主题相似性。这种方法的优点是考虑了缺陷报告中的产品和组件信息,但是并未考虑到利用与缺陷相关的源代码文件相关信息。在这方面的研究中,Lukins等人将潜在狄利克雷分配模型(latentDirichlet allocation,简称LDA)应用到缺陷定位中,能够计算到缺陷报告与源代码文件之间的相关性,并且取得很好的效果。
在跨项目关联缺陷的定位和修复场景下,许多关联的缺陷报告既不是重复缺陷报告,也不是相似缺陷报告,且分布于多个不同的项目中,已有的推荐方法均不能适用。本发明提出一种基于多目标优化算法NSGA-II推荐跨项目相关联缺陷报告的方法。
在本发明中,首先需要找到与缺陷报告所在项目相关的其他项目;然后在这些项目中查找与待查询缺陷报告相关联的缺陷报告;最后利用多目标优化方法NSGA-II推荐关联度最大的缺陷报告。在查找相关的项目时,可以根据项目的源代码文件确定该项目引入了哪些其他的项目以及项目参与人关注的其他的项目来确定。这时往往会找到很多相关的其他项目,因此需要计算这些项目与待查询缺陷报告所在项目之间的关联程度。主要利用项目的主题相似度、项目的重要程度、项目之间的距离(将这些项目以网络图的形式组织起来,计算在图中的距离)衡量项目间的关联程度,得到其中关联程度最大的项目。对于这些项目,查找其中与待查询缺陷报告之间关联的缺陷报告,主要用缺陷报告之间的主题相似性、与缺陷相关的源代码文件之间的相关性来衡量缺陷报告之间的关联度。最后利用NSGA-II算法结合项目之间的关联度以及缺陷报告之间的关联度来推荐关联的缺陷报告。
发明内容
本发明主要解决的问题是:在软件开发过程中,一个软件的开发往往需要引入现存的包或者框架来实现软件中的某一功能,因此也极有可能将包或者框架中的一些缺陷引入到开发者的软件中。由于开发者往往缺乏足够多的有效信息或者相关项目开发者的帮助,因此在定位以及修复这些跨项目缺陷时会非常困难。所以本发明提出用于推荐与查询缺陷报告相关联的缺陷报告的方法。
本发明的技术方案为:一种基于多目标优化算法NSGA-II推荐跨项目关联缺陷报告的方法。首先需要获取与查询缺陷报告所在项目关联的其他项目,主要是基于待查询缺陷的项目源代码和项目参与人的信息;然后对于得到的关联项目,计算其与待查询缺陷所在的项目之间的关联度,主要有三个方面的因素:项目之间的主题相似性、项目之间的距离(将这些项目以网络图的形式组织起来,计算在图中的距离)、项目的重要程度。得到关联度较大的关联项目;对于些关联项目,计算项目中的缺陷报告与待查询缺陷报告之间的相关度,主要有两个因素:缺陷报告之间的文本相似度、与缺陷相关的源代码文件之间的距离;对于上述项目之间关联度以及缺陷报告之间的关联度,最后利用多目标优化算法NSGA-II推荐得到跨项目关联缺陷报告。
本发明主要包含以下步骤:
1)收集python项目中的查询缺陷报告信息,从Github上提取查询缺陷报告的文本信息、该项目的源代码和主题信息以及该项目的参与人的信息。其中缺陷报告的信息主要有id(拥有者/包名#issue.number)、标题、描述信息、参与者、时间(创建、更新、关闭时间),并且获取项目的参与人(Contributors、Owners、Watchers、Stargazers)的相关信息以及项目的源代码文件;
2)根据缺陷报告所在项目的源代码文件,从中获取相关项目;根据源代码文件中的语句抽取该项目所引用的其他项目,在python项目的源代码文件中往往会出现类似于“import***”等这样的语句用来导入其他项目。因此,可以得到该项目在源代码中所引入的其他项目。利用正则式匹配可能会出现一些不正确的项目,例如导入的项目内的模块等,因此需要对这些项目进行人工审查;
3)获取缺陷报告所在项目的Contributors的活动信息,获取相关项目;在Github上,查询缺陷报告的项目中的Contributors往往会关注(Watch/Star、Follow)其他的相关项目或者其他开发者,因此可以利用Github提供的接口获取每个Contributor所关注的开发者或者项目;
4)根据步骤2)和步骤3)中得到的与查询缺陷所在的项目有关联的其他项目,并且可以计算查询缺陷所在的项目与其他关联项目之间的关联程度,按照关联度进行排序;
41)根据项目的主题信息,计算这些关联项目与查询缺陷所在的项目之间的主题相似度;
42)根据每个项目Owner之间的关注信息或者每个项目Contributors的关系建立项目之间的网络图。其中Owner的关注信息主要是Owner之间的follow关系,以及项目Owner关注(Star)另外一个项目;Contributors的关系主要是任意两个项目之间是否有共同的Contributor;
43)利用上一步中建立的网络图,能够计算的到项目的重要程度以及这些关联项目与查询缺陷所在的项目之间的距离;
44)结合计算得到的项目之间的主题相似度、项目重要程度、项目之间的距离,可以按照这些信息对项目之间的相关联程度进行排序;
5)对于得到的与查询缺陷报告所在项目相关联程度较高的其他项目,分析这些项目中的缺陷,获取这些缺陷报告中的文本信息;其中文本信息主要包括缺陷的标题和描述信息;
6)对于步骤5)中的到的缺陷报告的文本信息和查询缺陷报告中的文本信息进行相关处理,主要包括以下几个步骤:
61)利用python中的NLTK包对所有缺陷报告的文本信息(标题和描述信息)进行分词,需要去除其中的停词以及词形还原;
62)对于所有的缺陷报告中的标题以及描述信息根据TF-IDF、Word Embedding进行向量化;
63)采用余弦相似度分别计算TF-IDF相似度(TS)、Word Embedding词向量相似度(WS),因为TS和WS是互补的,因此考虑使用两者只和计算得到两个缺陷报告之间的主题相似性;
7)根据步骤5)中得到的缺陷报告的文本信息以及源代码,利用LDA模型进行缺陷定位,然后计算得到源文件距离,主要包括以下几个步骤:
71)对于缺陷报告文本信息以及源代码进行简单的文本处理,去除其中的停词以及词根;
72)使用基于Gibbs抽样的参数推理方法得到LDA模型中最重要的两个参数;
73)使用LDA模型得到缺陷报告以及源代码的文章-主题分布和主题-词语分布,得到词语在主题维度的分布;
74)计算两个文本的相似度,使用KL(Kullback-Leibler)距离作为相似度度量标准;
75)得到与缺陷报告相关度最大的三个源文件路径,计算其与对应的查询缺陷报告相似的源文件之间的距离;
8)根据步骤6)和步骤7)中得到的缺陷报告之间的关联度以及步骤4)中计算得到的项目之间的关联度,可以计算得到适应值;
9)根据步骤8)得到的适应值,在利用NSGA-II算法时,需要先计算得到遗传算法中的三个算子:选择算子、交叉算子、变异算子,然后使用多目标优化算法NSGA-II推荐得到与查询缺陷报告相关联的跨项目缺陷报告;
本发明考虑到影响跨项目缺陷报告之间关联程度的多种因素:项目之间的关联程度(主要考虑项目的Topic相似度、项目的重要程度、与查询缺陷所在项目之间的相关度)、缺陷报告之间的主题相似性、缺陷报告需要修改的源代码文件之间的距离。利用多目标优化算法NSGA-II之后可以得到与查询缺陷报告相关联的跨项目缺陷报告。在开发者进行软件维护过程中,尤其是在定位以及修复软件中存在的缺陷时,可以减少开发者的检索时间,节省大量的成本。
附图说明
图1为本发明的总体概况图。
图2为本发明实施的一种基于多目标优化算法NSGA-II推荐跨项目关联缺陷报告的方法的具体流程图。
图3为图1中在计算机项目之间关联程度时,利用项目Topic计算项目之间主题相似性的流程图
图4为图1中计算缺陷报告主题相似性的流程图。
图5为图1中获取与缺陷报告相关的源文件信息的流程图。
图6为图3中LDA方法的图模型。
图7为图1中计算缺陷报告源代码文件之间距离的流程图。
图8为图1中使用多目标优化算法NSGA-II的具体流程图。
具体实施方式
为了更好地说明本发明的技术内容,特结合所附图式作如下说明。
图2为本发明实施例的一种基于多目标优化算法NSGA-II推荐跨项目关联缺陷报告的方法的流程图。首先需要获取与查询缺陷报告所在项目关联的其他项目,主要是基于待查询缺陷的项目源代码和项目参与人的信息;然后对于得到的关联项目,计算其与待查询缺陷所在的项目之间的关联度,主要有三个方面的因素:项目之间的主题相似性、项目之间的距离(将这些项目以网络图的形式组织起来,计算在图中的距离)、项目的重要程度。得到关联度较大的关联项目;对于些关联项目,计算项目中的缺陷报告与待查询缺陷报告之间的相关度,主要有两个因素:缺陷报告之间的文本相似度、与缺陷相关的源代码文件之间的距离;对于上述项目之间关联度以及缺陷报告之间的关联度,最后利用多目标优化算法NSGA-II推荐得到跨项目关联缺陷报告。
1)收集python项目中的查询缺陷报告信息,从Github上提取查询缺陷报告的文本信息、该项目的源代码和主题信息以及该项目的参与人的信息。其中缺陷报告的信息主要有id(拥有者/包名#issue.number)、标题、描述信息、参与者、时间(创建、更新、关闭时间),并且获取项目的参与人(Contributors、Owners、Watchers、Stargazers)的相关信息以及项目的源代码文件;
2)根据缺陷报告所在项目的源代码文件,从中获取相关项目;根据源代码文件中的语句抽取该项目所引用的其他项目,在python项目的源代码文件中往往会出现类似于“import***”等这样的语句用来导入其他项目。因此,可以得到该项目在源代码中所引入的其他项目。利用正则式匹配可能会出现一些不正确的项目,例如导入的项目内的模块等,因此需要对这些项目进行人工审查;
3)获取缺陷报告所在项目的Contributors的活动信息,获取相关项目;在Github上,查询缺陷报告的项目中的Contributors往往会关注(Watch/Star、Follow)其他的相关项目或者其他开发者,因此可以利用Github提供的接口获取每个Contributor所关注的开发者或者项目;
4)根据步骤2)和步骤3)中得到的与查询缺陷所在的项目有关联的其他项目,并且可以计算查询缺陷所在的项目与其他关联项目之间的关联程度,按照关联度进行排序;
41)根据项目的主题信息,计算这些关联项目与查询缺陷所在的项目之间的主题相似度;
42)根据每个项目Owner之间的关注信息或者每个项目Contributors的关系建立项目之间的网络图。其中Owner的关注信息主要是Owner之间的follow关系,以及项目Owner关注(Star)另外一个项目;Contributors的关系主要是任意两个项目之间是否有共同的Contributor;
43)利用上一步中建立的网络图,能够计算的到项目的重要程度以及这些关联项目与查询缺陷所在的项目之间的距离;
44)结合计算得到的项目之间的主题相似度、项目重要程度、项目之间的距离,可以按照这些信息对项目之间的相关联程度进行排序;
5)对于得到的与查询缺陷报告所在项目相关联程度较高的其他项目,分析这些项目中的缺陷,获取这些缺陷报告中的文本信息;其中文本信息主要包括缺陷的标题和描述信息;
6)对于步骤5)中的到的缺陷报告的文本信息和查询缺陷报告中的文本信息进行相关处理,主要包括以下几个步骤:
61)利用python中的NLTK包对所有缺陷报告的文本信息(标题和描述信息)进行分词,需要去除其中的停词以及词形还原;
62)对于所有的缺陷报告中的标题以及描述信息根据TF-IDF、Word Embedding进行向量化;
63)采用余弦相似度分别计算TF-IDF相似度(TS)、Word Embedding词向量相似度(WS),因为TS和WS是互补的,因此考虑使用两者只和计算得到两个缺陷报告之间的主题相似性;
7)根据步骤5)中得到的缺陷报告的文本信息以及源代码,利用LDA模型进行缺陷定位,然后计算得到源文件距离,主要包括以下几个步骤:
71)对于缺陷报告文本信息以及源代码进行简单的文本处理,去除其中的停词以及词根;
72)使用基于Gibbs抽样的参数推理方法得到LDA模型中最重要的两个参数;
73)使用LDA模型得到缺陷报告以及源代码的文章-主题分布和主题-词语分布,得到词语在主题维度的分布;
74)计算两个文本的相似度,使用KL(Kullback-Leibler)距离作为相似度度量标准;
75)得到与缺陷报告相关度最大的三个源文件路径,计算其与对应的查询缺陷报告相似的源文件之间的距离;
8)根据步骤6)和步骤7)中得到的缺陷报告之间的关联度以及步骤4)中计算得到的项目之间的关联度,可以计算得到适应值;
9)根据步骤8)得到的适应值,在利用NSGA-II算法时,需要先计算得到遗传算法中的三个算子:选择算子、交叉算子、变异算子,然后使用多目标优化算法NSGA-II推荐得到与查询缺陷报告相关联的跨项目缺陷报告;
在具体操作的第4步中,需要计算得到项目之间的关联程度,主要是基于项目主题相似度、项目的重要程度以及项目与查询项目之间的关联程度。
图3是在计算项目的主题相似度时的流程图,具体实施过程如下:
第1步,对于项目的主题信息利用自然语言处理的方法进行分词、去除停用词、去词根操作。
第2步,对于处理后的主题信息进行TF-IDF向量化。
采用TF-IDF(Term Frequency-Inverse Document Frequency)来对一份文档向量化,然后采用余弦相似度来计算相似度。其主要思想是:如果某个词或短语在一份文档中出现的频率TF高,并且在其它项目Topic中很少出现,则认为此词或者短语具有很好的区分辨别能力。计算TF-IDF的公式表示如下:
TF-IDF(t,d)=TF(t,d)×IDF(t)
其中,Numt,d表示词语t在文档d中出现的次数,Numd表示文档d中词语的数目,N表示语料库中所有文档的数。
第3步,利用余弦相似度计算项目之间的主题相似度。
余弦相似度:算法中计算相似度采用的是余弦相似度,基于查询缺陷和历史缺陷报告的标题和描述信息建立的向量来计算它们的余弦相似度。计算公式如下:
在计算项目的重要程度以及项目与查询缺陷所在项目的相关度时,主要采用建立项目之间的网络图,然后根据项目在网络图中度、介数中心性、紧密中心性、PageRank的值衡量项目的重要程度;根据网络图计算项目与查询缺陷的项目之间的距离。
在建立网络图时,主要建立Owner Follow Network和Owner Star Network。在Owner Follow Network中,如果一个项目的Owner follow另外一个项目的Owner,两个项目之间存在一条边;如果两个项目相互之间follow,则权重为2,只有一个项目follow另外一个项目,则权重为1,否则为0。在Owner Star Network中,如果这些项目的任意一个Owner同时Star两个项目,则这两个项目之间有一条边,边上的权重为项目Owner的个数。
图4为图1中计算缺陷报告主题相似性的流程图。具体实施过程中的步骤如下:
第1步,首先需要进行TF-IDF向量化。
利用TF-IDF计算缺陷报告之间的向量化与具体实施的第4步中计算项目的Topic信息向量化的方法相同。
第2步,需要进行Word Embedding向量化。
WS是采用Word Embedding来对一份缺陷报告表示向量化,然后采用余弦相似度来对其计算相似度。在本文中,实现Word Embedding采用的是skip-gram模型,在skip-gram模型中,给一个字词w,w的上下文定义为Cw,其目标函数J如下所示:
其中,n代表字词序列的长度,p(wj|wi)是使用下面的software函数定义的条件概率:
其中,vw是词w的向量表示,W是所有字词的词汇表。通过训练wiki-english语料库,语料库中词汇表的所有词可以表示为d维向量,根据经验d一般取值为100。
经过上述2个步骤的处理,每个词被表示为词向量,那么一份文档用一个矩阵表示,矩阵每一行表示一个词的向量,不同的文档有不同数目的词,所以不能采用文档矩阵计算文档相似度。本文中为了把文档矩阵转换成向量,对文档中包含的所有词向量求平均,n表示文档矩阵的行数,ri表示矩阵的行向量,公式表示如下:
利用上面的公式,可以将文档矩阵转换成文档向量,因此便可以利用余弦相似度计算文档余弦相似度。在计算余弦相似度时,与具体实施第4步中计算项目Topic相似度方法相同。
第3步,缺陷报告主题相似性大小由TF-IDF相似度(TS)、Word Embedding词向量相似度(WS)决定。因此,根据缺陷报告的标题和描述信息计算缺陷报告的TS、WS。采用TS和WS两者的和作为缺陷报告之间的相似度,具体表示如下:
Similary=TS+WS
图5是获取与缺陷报告相关的源文件信息的流程图。首先需要对缺陷报告以及源代码进行数据清洗,去除其中的停词以及词根等此操作,然后利用LDA模型进行缺陷定位,具体操作过程有以下几个步骤:
第1步,对LDA模型进行参数估计。
在LDA模型中,最重要的参数是各主题下的词项概率分布和各文本的主题概率分布。本发明采用Gibbs抽样进行参数估计,避开实际待估计的参数,对每个单词的主题进行抽样,一旦每个单词的主题确定,参数就可以在统计频次后计算出来。其公式如下:
其中zi表示第i个单词对应的主题变量;表示剔除其中的第i项;表示k主题出现词项t的次数;βt是词项t的Dirichlet先验;表示文本m出现主题k的次数;αk为主题k的Dirichlet先验。一旦获取每个单词的主题标号,我们需要的参数计算公式可由以下公式获得:
其中,是主题k中词项t的概率,文本m中主题k的概率,V是词项个数,K是主题个数。通过计数的方式对参数进行估计。
第2步,使用LDA模型生成文章-主题分布和主题-词语分布。
LDA是一种统计模型,用来从文档中找出一组潜在的包含特定概率的主题。同一主题出现概率最高的词具有近义词特性。LDA核心公式为:
其中p表示概率,wi为文章di的词语,ti为文章中隐藏的主题。
LDA生成文章的思想是:文章以一定的概率选择某个主题,再以一定的概率从该主题中选择某个词语,不断循环这两个步骤直到生成整篇文章。
图6为LDA方法的图模型,其具体过程如下:
1)从Dirichlet(α)分布中取样生成文档dk的主题分布θj,θj为多项式分布;
2)从θj中取样生成dk的第i个词语的主题;
3)从Dirichlet(β)分布中取样生成主题tk,j的词语分布为多项式分布;
4)从中采样生成词语wk,i;
第3步,计算缺陷报告和源文件的相似度。
在文本的主题表示情况下,计算文本相似度可以通过计算与之对应的主题概率分布来实现。使用KL距离作为相似度度量标准,KL距离如下所示:
但是KL距离不是对称的,其对称版本是:
Dλ(p,q)=λDKL(p,λp+(1-λ)q)+(1-λ)DKL(q,λp+(1-λ)q)
当时,上述公式转变成JS(Jensen-Shannon)距离:
第4步,选取其中与缺陷报告相似度最大的三个源代码文件。
图7为图1中计算缺陷报告源代码文件之间距离的流程图。需要从缺陷报告中抽取出该缺陷报告所需要修改的源代码文件路径,但是往往在一个缺陷报告中可能不止只有一个文件路径,因此源文件距离计算公式如下:
其中,Ia,Ib分别表示两个缺陷报告;ISeta,ISetb表示两个缺陷报告这种出现的源文件路径集合;Fa,Fb表示在路径集合中的两个路径;commonLength(Fa,Fb)表示出现在两个路径中的最长子串的长度;maxLength(Fa,Fb)表示两个路径中字符串最长的长度;
图8为图1中使用多目标优化算法NSGA-II的具体流程图。
在这个遗传算法中首先需要确定适应值函数,在本发明中,适应值函数主要是基于项目与查询缺陷所在项目的关联程度(Co_related)、项目中缺陷报告与查询缺陷报告的相似度(Similary)、以及缺陷所对应的源文件之间的距离(issueDistance)。具体公式如下:
Fitness=Co_related+Similary+issueDistance
在基于搜索的遗传算法NSGA-II中,变更操作在搜索空间中扮演着很重要的角色,其主要目的是使搜索空间中尽可能留下好的个体。在该算法中,其中最重要的是步骤七中计算三个算子:选择算子,交叉算子,变异算子。具体实施步骤如下:
第1步,计算选择算子。
我们使用轮盘赌选择(又称比例选择算子)来对个体进行交叉和变异,其选择算子的基本思想是个体被选中的概率与其适应度函数值成正比。
具体操作如下:根据适应值函数计算出每个个体推荐列表的适应度f(i=1,2,3…n),n为种群大小;然后根据每个推荐列表个体的适应度在种群中所占比例计算出每个个体被遗传到下一代群体的概率。计算公式如下所示,其中f(xi)表示种群个体x_i的适应值:
第2步,计算交叉算子。
每次迭代过程中,选择第i次迭代的一半个体,用这些被选择的个体采用交叉算子,得到第i+1次迭代的另一半新个体。我们选择单点交叉算子,可以从选择的两个父代个体Px和Py得到两个后代个体P′x和P′y。
具体操作如下:随机选择一个位置k,Px中的前k个缺陷报告成为P′x的前k个缺陷报告,Py中位置k后面的缺陷报告成为P′x从位置k开始后面的缺陷报告;同样地,Py的前k个缺陷报告成为P′y的前k个缺陷报告,Px中位置k后面的缺陷报告成为P′y从位置k后面的缺陷报告。这种交叉算子得到的子代可能包含冗余的缺陷报告,所以需要检测是否包含冗余的缺陷报告,如果包含,需要从历史缺陷报告库中随机选择一份缺陷报告来替换冗余的缺陷报告。
第3步,计算变异算子。
变异算子是对缺陷报告推荐列表个体中的某些缺陷报告进行变动,之所以采用变异操作是因为变异操作使遗传算法具有局部的随机搜索能力,而且可以使遗传算法维持种群多样性,避免局部最优。
具体操作如下:对于选择的缺陷报告推荐列表,随机选择向量的一个或者更多维度点;然后对于每个选择的维度点,每个维度对应一个缺陷报告,可以删除该缺陷报告或者被其他缺陷报告替换。我们使用同样方法来解决变异操作所造成的冗余。
第4步,采用NSGA-II遗传算法给查询缺陷报告推荐跨项目关联缺陷报告。
NSGA-II算法从候选个体中构造种群,按照适者生存和优胜劣汰的原则逐代演化产生出越来越好的近似解,即非领域个体,也可以称为Pareto最优解。
NSGA-II算法过程如下:
1)随机产生初始种群p0
2)在非支配排序后,通过遗传算法的三个算子(选择算子,交叉算子,变异算子)进行变更操作得到第一代种群Q0
3)将父代种群pt与子代种群Qt合并得到大小为N的初始化种群Rt,对于输入的一份缺陷报告的标题和描述,该种群代表一系列将要被查看的候选缺陷报告排列
4)对包括N个个体的种群进行快速非支配排序
5)对每个非支配层中的个体进行拥挤度计算
6)根据非支配关系及个体的拥挤度选取合适的个体组成新的父代种群
7)通过遗传算法的基本变更操作产生新的子代种群
8)重复(3)到(7)直到满足程序结束的条件(即遗传进化代数)
通过上述具体实施过程,可以为查询缺陷报告推荐相关联的跨项目缺陷报告,可以使开发者在软件维护过程中定位相关联的缺陷节省大量的人力成本,提高软件维护效率。
Claims (3)
1.一种基于多目标优化算法NSGA-II推荐跨项目关联缺陷报告的方法,其特征在于,首先需要获取与查询缺陷报告所在项目关联的其他项目,主要是基于待查询缺陷的项目源代码和项目参与人的信息;然后对于得到的关联项目,计算其与待查询缺陷所在的项目之间的关联度,主要有三个方面的因素:项目之间的主题相似性、项目之间的距离(将这些项目以网络图的形式组织起来,计算在图中的距离)、项目的重要程度。得到关联度较大的关联项目;对于些关联项目,计算项目中的缺陷报告与待查询缺陷报告之间的相关度,主要有两个因素:缺陷报告之间的文本相似度、与缺陷相关的源代码文件之间的距离;对于上述项目之间关联度以及缺陷报告之间的关联度,最后利用多目标优化算法NSGA-II推荐得到跨项目关联缺陷报告。该方法包括下列步骤:
1)收集python项目中的查询缺陷报告信息,从Github上提取查询缺陷报告的文本信息、该项目的源代码和主题信息以及该项目的参与人的信息。其中缺陷报告的信息主要有id(拥有者/包名#issue.number)、标题、描述信息、参与者、时间(创建、更新、关闭时间),并且获取项目的参与人(Contributors、Owners、Watchers、Stargazers)的相关信息以及项目的源代码文件;
2)根据缺陷报告所在项目的源代码文件,从中获取相关项目;根据源代码文件中的语句抽取该项目所引用的其他项目,在python项目的源代码文件中往往会出现类似于“import***”等这样的语句用来导入其他项目。因此,可以得到该项目在源代码中所引入的其他项目。利用正则式匹配可能会出现一些不正确的项目,例如导入的项目内的模块等,因此需要对这些项目进行人工审查;
3)获取缺陷报告所在项目的Contributors的活动信息,获取相关项目;在Github上,查询缺陷报告的项目中的Contributors往往会关注(Watch/Star、Follow)其他的相关项目或者其他开发者,因此可以利用Github提供的接口获取每个Contributor所关注的开发者或者项目;
4)根据步骤2)和步骤3)中得到的与查询缺陷所在的项目有关联的其他项目,并且可以计算查询缺陷所在的项目与其他关联项目之间的关联程度,按照关联度进行排序;
41)根据项目的主题信息,计算这些关联项目与查询缺陷所在的项目之间的主题相似度;
42)根据每个项目Owner之间的关注信息或者每个项目Contributors的关系建立项目之间的网络图。其中Owner的关注信息主要是Owner之间的follow关系,以及项目Owner关注(Star)另外一个项目;Contributors的关系主要是任意两个项目之间是否有共同的Contributor;
43)利用上一步中建立的网络图,能够计算的到项目的重要程度以及这些关联项目与查询缺陷所在的项目之间的距离;
44)结合计算得到的项目之间的主题相似度、项目重要程度、项目之间的距离,可以按照这些信息对项目之间的相关联程度进行排序;
5)对于得到的与查询缺陷报告所在项目相关联程度较高的其他项目,分析这些项目中的缺陷,获取这些缺陷报告中的文本信息;其中文本信息主要包括缺陷的标题和描述信息;
6)对于步骤5)中的到的缺陷报告的文本信息和查询缺陷报告中的文本信息进行相关处理,主要包括以下几个步骤:
61)利用python中的NLTK包对所有缺陷报告的文本信息(标题和描述信息)进行分词,需要去除其中的停词以及词形还原;
62)对于所有的缺陷报告中的标题以及描述信息根据TF-IDF、Word Embedding进行向量化;
63)采用余弦相似度分别计算TF-IDF相似度(TS)、Word Embedding词向量相似度(WS),因为TS和WS是互补的,因此考虑使用两者只和计算得到两个缺陷报告之间的主题相似性;
7)根据步骤5)中得到的缺陷报告的文本信息以及源代码,利用LDA模型进行缺陷定位,然后计算得到源文件距离,主要包括以下几个步骤:
71)对于缺陷报告文本信息以及源代码进行简单的文本处理,去除其中的停词以及词根;
72)使用基于Gibbs抽样的参数推理方法得到LDA模型中最重要的两个参数;
73)使用LDA模型得到缺陷报告以及源代码的文章-主题分布和主题-词语分布,得到词语在主题维度的分布;
74)计算两个文本的相似度,使用KL(Kullback-Leibler)距离作为相似度度量标准;
75)得到与缺陷报告相关度最大的三个源文件路径,计算其与对应的查询缺陷报告相似的源文件之间的距离;
8)根据步骤6)和步骤7)中得到的缺陷报告之间的关联度以及步骤4)中计算得到的项目之间的关联度,可以计算得到适应值;
9)根据步骤8)得到的适应值,在利用NSGA-II算法时,需要先计算得到遗传算法中的三个算子:选择算子、交叉算子、变异算子,然后使用多目标优化算法NSGA-II推荐得到与查询缺陷报告相关联的跨项目缺陷报告。
2.根据权利要求1所述的基于多目标优化算法NSGA-II推荐跨项目关联缺陷报告的方法,其特征在于,根据项目的源文件、项目的Contributors的活动信息来确定与查询缺陷所在的项目相关的其他项目;针对这些项目进一步计算与查询缺陷所在项目之间的关联程度,主要是基于这些项目主题信息、项目的参与人的活动信息衡量项目之间的关联程度;对于得到关联程度较大的项目,对于项目中的缺陷报告分别计算与查询缺陷报告之间的相似度,在计算缺陷报告相似度时主要是TF-IDF相似度、Word Embedding词向量相似度;并且定位这些缺陷需要修改的源文件路径,计算与查询缺陷报告之间的源文件距离。在计算源文件距离时,主要利用LDA算法,使用KL距离作为度量标准,进而得到源文件之间的距离;利用项目的关联程度、缺陷报告相似度、缺陷报告之间源文件距离得到适应值函数,最后根据NSGA-II算法推荐得到跨项目关联缺陷报告。
3.根据权利要求1所述的基于多目标优化算法NSGA-II推荐跨项目关联缺陷报告的方法,其特征在于,在计算缺陷报告之间的关联度时,主要基于以下三个方面:缺陷报告之间的相似度、缺陷报告定位到的源文件之间的距离、缺陷报告所在项目之间的关联度;在计算项目之间的关联程度时,主要根据三个方面来衡量:项目的Topic相似度、项目的重要程度、项目与查询缺陷所在的项目之间的距离。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710932159.0A CN109597747A (zh) | 2017-09-30 | 2017-09-30 | 一种基于多目标优化算法nsga-ⅱ推荐跨项目关联缺陷报告的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710932159.0A CN109597747A (zh) | 2017-09-30 | 2017-09-30 | 一种基于多目标优化算法nsga-ⅱ推荐跨项目关联缺陷报告的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109597747A true CN109597747A (zh) | 2019-04-09 |
Family
ID=65956036
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710932159.0A Pending CN109597747A (zh) | 2017-09-30 | 2017-09-30 | 一种基于多目标优化算法nsga-ⅱ推荐跨项目关联缺陷报告的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109597747A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110135072A (zh) * | 2019-05-15 | 2019-08-16 | 南京航空航天大学 | 基于EMC评估模型和γ-NSGA-Ⅱ的传导干扰陷波器多目标优化设计方法 |
CN110163476A (zh) * | 2019-04-15 | 2019-08-23 | 重庆金融资产交易所有限责任公司 | 项目智能推荐方法、电子装置及存储介质 |
CN110175128A (zh) * | 2019-05-29 | 2019-08-27 | 北京百度网讯科技有限公司 | 一种相似代码案例获取方法、装置、设备和存储介质 |
CN110471858A (zh) * | 2019-08-22 | 2019-11-19 | 腾讯科技(深圳)有限公司 | 应用程序测试方法、装置及存储介质 |
CN110688303A (zh) * | 2019-08-28 | 2020-01-14 | 武汉大学 | 一种基于一体化开发平台的软件工件关系的挖掘方法 |
CN112286807A (zh) * | 2020-10-28 | 2021-01-29 | 北京航空航天大学 | 一种基于源代码文件依赖关系的软件缺陷定位系统 |
CN114510645A (zh) * | 2022-04-08 | 2022-05-17 | 浙大城市学院 | 一种基于提取有效多目标群组来解决长尾推荐问题的方法 |
CN114816497A (zh) * | 2022-04-18 | 2022-07-29 | 南京航空航天大学 | 基于bert预训练模型的链接生成方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102521131A (zh) * | 2011-12-13 | 2012-06-27 | 南京大学 | 一种基于动态基本块的缺陷定位测试用例约简方法 |
US20130212435A1 (en) * | 2012-02-14 | 2013-08-15 | Microsoft Corporation | Integrated Fuzzing |
CN104484278A (zh) * | 2015-01-05 | 2015-04-01 | 浪潮(北京)电子信息产业有限公司 | 一种静态代码缺陷测试方法和装置 |
CN106649557A (zh) * | 2016-11-09 | 2017-05-10 | 北京大学(天津滨海)新代信息技术研究院 | 一种缺陷报告与邮件列表语义关联挖掘方法 |
CN106874203A (zh) * | 2017-02-15 | 2017-06-20 | 南京大学 | 一种基于缺陷报告文本主题分析的缺陷定位方法 |
-
2017
- 2017-09-30 CN CN201710932159.0A patent/CN109597747A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102521131A (zh) * | 2011-12-13 | 2012-06-27 | 南京大学 | 一种基于动态基本块的缺陷定位测试用例约简方法 |
US20130212435A1 (en) * | 2012-02-14 | 2013-08-15 | Microsoft Corporation | Integrated Fuzzing |
CN104484278A (zh) * | 2015-01-05 | 2015-04-01 | 浪潮(北京)电子信息产业有限公司 | 一种静态代码缺陷测试方法和装置 |
CN106649557A (zh) * | 2016-11-09 | 2017-05-10 | 北京大学(天津滨海)新代信息技术研究院 | 一种缺陷报告与邮件列表语义关联挖掘方法 |
CN106874203A (zh) * | 2017-02-15 | 2017-06-20 | 南京大学 | 一种基于缺陷报告文本主题分析的缺陷定位方法 |
Non-Patent Citations (1)
Title |
---|
颜乐鸣: "《基于关联规则挖掘的软件缺陷分析研究》", 《软件》 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110163476A (zh) * | 2019-04-15 | 2019-08-23 | 重庆金融资产交易所有限责任公司 | 项目智能推荐方法、电子装置及存储介质 |
CN110135072A (zh) * | 2019-05-15 | 2019-08-16 | 南京航空航天大学 | 基于EMC评估模型和γ-NSGA-Ⅱ的传导干扰陷波器多目标优化设计方法 |
CN110135072B (zh) * | 2019-05-15 | 2021-09-10 | 南京航空航天大学 | 基于emc评估模型和改进nsga-ii的传导干扰陷波器优化设计方法 |
CN110175128A (zh) * | 2019-05-29 | 2019-08-27 | 北京百度网讯科技有限公司 | 一种相似代码案例获取方法、装置、设备和存储介质 |
CN110471858A (zh) * | 2019-08-22 | 2019-11-19 | 腾讯科技(深圳)有限公司 | 应用程序测试方法、装置及存储介质 |
CN110471858B (zh) * | 2019-08-22 | 2023-09-01 | 腾讯科技(深圳)有限公司 | 应用程序测试方法、装置及存储介质 |
CN110688303A (zh) * | 2019-08-28 | 2020-01-14 | 武汉大学 | 一种基于一体化开发平台的软件工件关系的挖掘方法 |
CN112286807A (zh) * | 2020-10-28 | 2021-01-29 | 北京航空航天大学 | 一种基于源代码文件依赖关系的软件缺陷定位系统 |
CN112286807B (zh) * | 2020-10-28 | 2022-01-28 | 北京航空航天大学 | 一种基于源代码文件依赖关系的软件缺陷定位系统 |
CN114510645A (zh) * | 2022-04-08 | 2022-05-17 | 浙大城市学院 | 一种基于提取有效多目标群组来解决长尾推荐问题的方法 |
CN114816497A (zh) * | 2022-04-18 | 2022-07-29 | 南京航空航天大学 | 基于bert预训练模型的链接生成方法 |
CN114816497B (zh) * | 2022-04-18 | 2023-11-28 | 南京航空航天大学 | 基于bert预训练模型的链接生成方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109597747A (zh) | 一种基于多目标优化算法nsga-ⅱ推荐跨项目关联缺陷报告的方法 | |
Mohan et al. | Stock price prediction using news sentiment analysis | |
CN106227722B (zh) | 一种基于上市公司公告摘要的自动提取方法 | |
Oh et al. | Hybrid genetic algorithms for feature selection | |
CN106021364B (zh) | 图片搜索相关性预测模型的建立、图片搜索方法和装置 | |
Alharbi et al. | Evaluation of sentiment analysis via word embedding and RNN variants for Amazon online reviews | |
CN104598611B (zh) | 对搜索条目进行排序的方法及系统 | |
CN107515873A (zh) | 一种垃圾信息识别方法及设备 | |
CN104778186B (zh) | 将商品对象挂载到标准产品单元的方法及系统 | |
EP2659437A1 (en) | Automatic variable creation for adaptive analytical models | |
CN107688870B (zh) | 一种基于文本流输入的深度神经网络的分层因素可视化分析方法及装置 | |
CN109063164A (zh) | 一种基于深度学习的智能问答方法 | |
CN109189926A (zh) | 一种科技论文语料库的构建方法 | |
CN110175235A (zh) | 基于神经网络的智能商品税分类编码方法及系统 | |
Basnet et al. | Improving Nepali news recommendation using classification based on LSTM recurrent neural networks | |
Yoshihara et al. | Leveraging temporal properties of news events for stock market prediction. | |
CN110909125A (zh) | 推文级社会媒体谣言检测方法 | |
CN111709225A (zh) | 一种事件因果关系判别方法、装置和计算机可读存储介质 | |
CN112200674B (zh) | 一种证券市场情绪指数智能计算信息系统 | |
CN111930944B (zh) | 文件标签分类方法及装置 | |
CN113704393A (zh) | 关键词提取方法、装置、设备及介质 | |
Kamruzzaman et al. | Text classification using association rule with a hybrid concept of naive Bayes classifier and genetic algorithm | |
Ahn et al. | Using genetic algorithms to optimize nearest neighbors for data mining | |
CN105653686A (zh) | 一种域名网址活跃度统计方法及系统 | |
CN116245110A (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 | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20190409 |