首页 专利交易 科技果 科技人才 科技服务 国际服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

一种基于Stack Overflow和commit库的bug定位方法 

买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!

申请/专利权人:扬州大学

摘要:本发明涉及一种基于Stack Overflow和commit库的bug定位方法。本发明将用户提交的问题分解成问题段、代码段、stack trace段,使用RAKE算法提取出关键字匹配,计算所占比重,导出问题答案对,提取代码段,整合为问题代码段+答案代码段形式,使用RAKE提取关键字,设定为标签tag,再使用tag‑LDA对commit库处理,建立主题模型,匹配,筛选出匹配度大于等于0.3的commit相应代码段,进行文本相似度匹配和利用由节点组成的程序依赖图对堆栈追踪stack trace进行结构相似度匹配,计算30%×文本相似度+70%×结构相似度的结果并推荐。本发明克服了无视多人参与其中的众包知识库,bug定位的准确率不高的缺陷。本发明结合了Stack Overflow问题库和软件Commit库中的信息,来对bug做出更好更精确的定位,对Latent Dirichlet Allocation模型拓展应用。

主权项:一种基于stackoverflow和commit库的bug定位方法,其特征在于包括如下步骤:1将用户提交的问题分解成问题段、代码段、stack trace段三个子段;2根据步骤1所得到的问题段,先进行预处理,然后使用RAKE算法提取出关键字,将关键字对Stack Overflow问题库中的问题标签进行匹配,将每个问题答案对的标签与问题段的关键字进行比较,计算相同标签所占比重,导出比重最高的问题答案对;3根据步骤2得出的答案,提取出其中的代码段,若步骤1分解后也有代码段,则整合为问题代码段+答案代码段形式;4对步骤3整合的结果,使用RAKE提取出关键字,设定为标签tag,再使用tag‑LDA对commit库进行处理,建立主题模型,并结合标签进行匹配,筛选出匹配度大于等于0.3的commit相应代码段;5对步骤3得出的结果的代码部分与步骤4得到的commit代码进行文本相似度匹配和利用由节点即类、class,有向线段即方法、method组成的程序依赖图对由步骤1分解得到的堆栈追踪stack trace进行结构相似度匹配;6根据前面计算得到的文本相似度和结构相似度进行综合计算,计算30%×文本相似度+70%×结构相似度的结果,按计算结果大小进行结果推荐。

全文数据:_种基于StackOverfIow和commit库的bug定位方法技术领域[0001]本发明属于软件bug定位领域,特别提出了一种基于StackOverflow和commit库的bug定位方法。背景技术[0002]随着开源项目的逐渐流行,越来越多的软件开发者参与到开源项目之中,开源项目主持人与其他项目开发者常常将项目的更新代码上传到commit库中,修复一些在原来项目中存在问题。随着项目的不断扩大,开发者在对开源项目进行开发时,常常会遇到新的bug问题,为了解决遇到的bug问题,贝Ij需要对bug进行精确的定位。[0003]对此,在之前的研究中,很多技术使用了LDALatentDirichletAilocation,LSILatentSemanticIndexing,VSMVectorSpaceModel等模型对项目代码进行文本检索,LauraMoreno等人对上面的模型应用静态分析技术,即利用由软件系统的源代码中提取出的各种各样结构信息,如语法属性、数据流从属关系等,来加强相关代码元素与查询语句的关系。此外,还利用bug报告中的stacktrace来进行Bug定位的方法。对bug定位的准确性做出了一些改善。[0004]但该方法只是对单一的commit库或者项目代码,忽视了如今越来越多人参与其中的众包知识库,bug定位的准确率依旧不高。发明内容[0005]本发明的目的就在于克服上述缺陷,研制一种基于StackOverflow和commit库的bug定位方法。[0006]本发明的技术方案是:[0007]一种基于stackoverflow和commit库的bug定位方法,其特征在于包括如下步骤:[0008]1将用户提交的问题分解成问题段、代码段、stacktrace段三个子段;[0009]2根据步骤⑴所得到的问题段,先进行预处理,然后使用RAKE算法提取出关键字,将关键字对StackOverflow问题库中的问题标签进行匹配,将每个问题答案对的标签与问题段的关键字进行比较,计算相同标签所占比重,导出比重最高的问题答案对;[0010]3根据步骤2得出的答案,提取出其中的代码段,若步骤⑴分解后也有代码段,则整合为问题代码段+答案代码段形式;[0011]4对步骤3整合的结果,使用RAKE提取出关键字,设定为标签tag,再使用tag-LDA对commit库进行处理,建立主题模型,并结合标签进行匹配,筛选出匹配度大于等于0.3的commit相应代码段;[0012]5对步骤⑶得出的结果的代码部分与步骤4得到的commit代码进行文本相似度匹配和利用由节点即类、class,有向线段即方法、method组成的程序依赖图对由步骤(1分解得到的堆栈追踪stacktrace进行结构相似度匹配;[0013]6根据前面计算得到的文本相似度和结构相似度进行综合计算,计算30%X文本相似度+70%X结构相似度的结果,按计算结果大小进行结果推荐。[0014]所述步骤⑴预处理过程包括以下步骤:[0015]a移除数字;[0016]b对一些按照驼峰规则和有下划短线相连的组合词进行分词;[0017]c去除英语停用词;[0018]d将词语的不同形式进行归一化;[0019]所述步骤⑵RAKE算法的计算公式如下:[0020]wordScore=wordDegreewwordFrequencyw[0021]即单词w的得分是该单词的度是一个网络中的概念,每与一个单词共现在一个短语中,度就加1,考虑该单词本身除以该单词的词频该单词在该文档中出现的总次数)。[0022]然后对于每个候选的关键短语,将其中每个单词的得分累加,并进行排序,RAKE将候选短语总数的前三分之一的认为是抽取出的关键词。[0023]所述步骤⑵标签匹配的计算公式如下:[0024]匹配度=相同标签个数所有不重复标签个数[0025]所述步骤⑶文本相似度的计算公式如下:[0027]其中A,B是表示文档一和文档二的量化表示。文档一和文档二经过分词,去停用词,移除数字,词根化等预处理过程,将剩余的单词按一定顺序数值化后形成向量A,B。在信息检索中,每个词条拥有不同的度,一个文档是由一个由有权值的特征向量表示的,权值的计算取决于词条在该文档中出现的频率。余弦相似度因此可以给出两篇文档其主题方面的相似度。[0028]所述步骤⑶程序依赖图(ProgramDependenceGraph,PDG的建立方法如下:程序中以类(class作为节点,由一个节点到另一个节点的有向线段为前一个类的方法method调用后一个类的方法method[0029]所述步骤⑶结构相似度的计算方法如下:[0030]stackTrace和程序依赖图PDG中某一节点类class的距离[0031]diststackTrace,e为stackTrace上的类与该节点之间距离的最小值[0034]其中,e为程序依赖图中的节点类,class,λ为二者最远距离所述步骤6综合文本相似度和结构相似度方法如下:[0035]Bug定位精准度下=文本相似度*30%+结构相似度*70%[0036]本发明的优点和效果在于:[0037]1目前bug定位技术主要针对单一库进行检索,功能不够完善。而本发明利用基于众包的知识库StackOverflow,来增加bug定位的准确率。[0038]2本发明从文本相似度,结构相似度两个角度综合匹配commit相关代码库,给出较为准确的定位。[0039]因此,本发明主要结合了StackOverflow问题库和软件Commit库中的信息,来对bug做出更好更精确的定位,且使用了Tag-LDA模型来对commit库进行匹配,使用了RAKE算法来提取问题的关键字。Tag-LDA模型是对LatentDirichletAilocation模型的一种拓展应用,本发明通过Tag-LDA主题模型,推荐和文档内容相关的多个标签,并且对每个标签和文章相关程度的概率进行估算,如图2是Tag-LDA主题模型的示意图。[0040]RAKERapidAutomaticKeywordsExtraction算法对提出的问题、以及问题代码进行关键字提取。RAKE算法于被2010年提出,本发明应用RAKE算法来提取关键词keyword〇附图说明[0041]图1--本发明整体流程图。[0042]图2——本发明Tag-LDA模型的示意图。[0043]图3--本发明StackOverflow上用户提交的用户问题示例示意图。[0044]图4--本发明StackOverflow上的一个答案示例示意图。[0045]图5--本发明StackOverflow上的另一个答案示例示意图。[0046]图6--本发明commit库中一个示例示意图。[0047]图7——本发明中在文件JSONPath.java中修改代码的部分示意图。[0048]图8——本发明中在文件JS0NPath_4.java中修改代码的部分示意图。具体实施方式[0049]本发明提供一种基于StackOverflow和commit库的bug定位方法,下面结合附图对本发明的技术方案进行详细说明:[0050]1将用户提交的bug问题分解成问题段、代码段、stacktrace段三个子段。如图3为StackOverflow上用户提交的一个问题示例,为一个用户提交的问题,问题文档如下:[0052]经过问题分解后,结果为[0054]效果:将问题分解,利于对不同性质的文本进行查询,得到更准确的查询结果。[0055]2根据分解得到的问题段Json’skey’svalueisstringtype,whenonlycontainnumbersand‘.’Therearesomequestions#735,先进行预处理,移除数字、停用词,进行分词等操作。[0056]得到的文本为:Jsonkeyvaluestringtypenumbercontainquestion然后使用RAKE算法进行关键字提取,RAKE算法计算过程为:[0057]对Json,单词的度wordDegreeJson=3,词频wordFrequencyJson=1[0058]得单词Json的得分wordScore=wordDegreeJsonwordFrequencyJson=3[0059]同理,其他单词的得分分别为[0060]wordScorekey=WordDegreetypewordFrequencytype=41=4?[0061]wordScorevalue=WordDegreevaluewordFrequencyvalue=31=3?[0062]wordScorestring=WordDegreestringwordFrequencystring=21?[0063]wordScoretype=WordDegreetypewordFrequencytype=21=2?[0064]wordScorecontain=WordDegreetypewordFrequencytype=21=2,[0065]wordScorenumber=WordDegreetypewordFrequencytype=21=2?[0066]wordScorequestion=WordDegreetypewordFrequencytype=11=1[0067]排序后选取得分大于等于2的单词作为关键字,得到的关键字为keyJsonvaluestringtypecontainnumber,共7个[0068]将所得到的关键字对StackOverflow历史问题库中的每个问题的标签进行匹配,将每个历史问题答案对的标签与第二步得到的关键字进行比较,计算相同标签所占比重。如下是问题库中的几个问题:[0069]问题一:[0070]NumberFormatExceptionwhenparseinginAndroidandJS0N.String—[0071]double[0072]标签:jsonstringandroidparsingdouble[0073]问题二:[0074]HowtohandleaNumberFormatExceptionwithGsonindeserializationaJSON[0075]response[0076]I7ItireadingaJSONresponsewithGson?whichreturnssomtimesaNumberFormatExceptionbecauseanexpectedintvalueissettoanemptystring.NowI7mwonderingwhat7sthebestwaytohandlethiskindofexception.Ifthevalueisanemptystring?thedeserializationshouldbe0.[0077]标签:javajsondeserializationgson[0078]问题三:[0079]NumberFormatExceptioninGSONwhenconvertingStringtodouble[0080]IamworkingwithaJSONresponsethatisimproperlyformatted.AllfieldsarebeingreturnedasStrings.Unfortunately?Ihavenocontroloverthereturndata.[0081][0082]根据公式:[0083]匹配度=相同标签个数所有不重复的标签个数[0084]问题一的匹配度为210=0.2,问题二的匹配度为110=0.1,问题三的匹配度为110=0.Io[0085]根据计算结果,提取出匹配度最高的问题一的问题答案对。[0086]效果:StackOverflow作为基于众包的软件工程领域最受欢迎的问答网站,其问题库中包含大量与开发相关的问题,利用StackOverflow问题库,查找bug错误解答结果,给出更准确的定位。[0087]3将步骤2得出的最优结果答案一中的代码提取,与问题的代码段结合,整合为问题代码段+答案代码段形式。[0089]⑷对步骤3整合的结果,使用RAKE,即RapidAutomaticKeywordsExtraction算法提取出关键字,同步骤2,推荐出关键字为String,JSON,java,NumberFormatException,exception,Double,将这些关键字设置为标签tag,使用tag-LDA对commit库主题进行处理,结合tag进行匹配,筛选出匹配度0.3以上的commit代码段。筛选出到如图6的两个commit代码段。[0090]效果:准确快速匹配筛选出commit库中的结果[0091]5对步骤3得出的结果的代码部分与步骤4得到的commit代码进行文本相似度匹配。[0092]根据步骤4,对文件JSONPath.java和JS0NPath_4.java中修改代码的部分预处理,包括分词,去停用词,移除数字,词根化等,过后:[0093]文件JSONPath.java中修改部分的向量表示为Dl[0094]〈String,3,〈JS0N,2,〈Segment,4,〈return,2[0095]文件S0NPath_4.java中修改部分的向量表示为D2[0096]〈String,1,,〈java,1,〈object,2[0097]对步骤4所得代码+StackTrace向量表示为D[0098]〈String,6,〈JS0N,5,〈java,1,〈NumberFormatException,3,〈exception,2,〈Double,5〇[0099]根据余弦公式计算文件JSONPath.java中修改部分与问题的内容相似度:首先量化Dl和D,由于D和Dl中共出现String,JSON,NumberFormatException,Double,Segment,return,java,exception8个单词,按这种顺序进行量化如下,[0100]Dl3,2,0,0,4,2,0,0,[0101]D6,5,3,5,0,0,l,2[0102]根据余弦公式计算得cos〈D,DD=0.0921[0103]同上处理D和D2,D和D2中共出现String,JSON,java,object,NumberFormatException,exception,Double7个单词,按顺序量化如下:[0104]D2l,4,l,2,0,0,0[0105]D6,5,l,0,3,2,5[0106]计算得COS〈D,D2=0.1108。[0107]利用由节点,即类、class,和有向线段,即方法,组成的程序依赖图对由步骤1分解得到的堆栈追踪,即stacktrace,进行结构相似度匹配。[0108]如图7,为程序依赖图中在文件JSONPath.java中修改代码的部分,得结构匹配度为0〇[0109]如图8,为程序依赖图中在文件JS0NPath_4.java中修改代码的部分,得结构匹配度为1。[0110]效果:从文本和结构两方面进行匹配,分别得出相应结果,便于下一步综合计算。6根据前面计算得到的文本相似度和结构相似度进行综合计算,计算30%X文本相似度+70%*结构相似度的结果。[0111]如步骤3,对文件JSONPath.java中修改的部分代码[0112]根据余弦公式计算的文本余弦匹配度cos〈D,DD=0.0921[0113]结构匹配度为0[0114]综合结果=0.02763[0115]对文件JS0NPath_4.java中修改的部分代码[0116]根据余弦公式计算的文本余弦匹配度cos〈D,D2=0.1108[0117]结构匹配度为1[0118]综合结果=0.73324[0119]根据以上计算,推荐JS0NPath_4.javacommit部分[0121]尽管本发明就优选实施方式进行了示意和描述,但本领域的技术人员应当理解,只要不超出本发明的权利要求所限定的范围,可以对本发明进行各种变化和修改。

权利要求:1.一种基于stackoverflow和commit库的bug定位方法,其特征在于包括如下步骤:1将用户提交的问题分解成问题段、代码段、stacktrace段三个子段;2根据步骤⑴所得到的问题段,先进行预处理,然后使用RAKE算法提取出关键字,将关键字对StackOverflow问题库中的问题标签进行匹配,将每个问题答案对的标签与问题段的关键字进行比较,计算相同标签所占比重,导出比重最高的问题答案对;3根据步骤2得出的答案,提取出其中的代码段,若步骤(1分解后也有代码段,则整合为问题代码段+答案代码段形式;4对步骤⑶整合的结果,使用RAKE提取出关键字,设定为标签tag,再使用tag-LDA对commit库进行处理,建立主题模型,并结合标签进行匹配,筛选出匹配度大于等于0.3的commit相应代码段;5对步骤3得出的结果的代码部分与步骤4得到的commit代码进行文本相似度匹配和利用由节点即类、class,有向线段即方法、method组成的程序依赖图对由步骤⑴分解得到的堆栈追踪stacktrace进行结构相似度匹配;6根据前面计算得到的文本相似度和结构相似度进行综合计算,计算30%X文本相似度+70%X结构相似度的结果,按计算结果大小进行结果推荐。2.根据权利要求1所述的一种基于StackOverflow和commit库的bug定位方法,其特征在于,步骤2预处理过程包括以下步骤:a移除数字;b对一些按照驼峰规则和有下划短线相连的组合词进行分词;c去除英语停用词;d将词语的不同形式进行归一化。3.根据权利要求1所述的一种基于StackOverflow和commit库的bug定位方法,其特征在于,步骤⑵RAKE算法的计算公式如下:wordScore=wordDegreewwordFrequencyw即单词w的得分是该单词的度,是一个网络中的概念,每与一个单词共现在一个短语中,度就加1,考虑该单词本身,除以该单词的词频,该单词出现的总次数;然后对于每个候选的关键短语,将其中每个单词的得分累加,并进行排序,RAKE将候选短语总数的前三分之一的认为是抽取出的关键词。4.根据权利要求1所述的一种基于StackOverflow和commit库的bug定位方法,其特征在于,步骤⑵标签匹配的计算公式如下:相似度=相同标签个数所有不重复标签个数。5.根据权利要求1所述的一种基于StackOverflow和commit库的bug定位方法,其特征在于,步骤⑶文本相似度的计算公式如下:其中A,B是表示文档一和文档二的量化表示;文档一和文档二经过分词,去停用词,移除数字,词根化等预处理过程,将剩余的单词按一定顺序数值化后形成向量A,B;在信息检索中,每个词条拥有不同的度,一个文档是由一个由有权值的特征向量表示的,权值的计算取决于词条在该文档中出现的频率;余弦相似度因此可以给出两篇文档其主题方面的相似度。6.根据权利要求1所述的一种基于StackOverflow和commit库的bug定位方法,其特征在于,步骤⑶程序依赖图ProgramDependenceGraph,即PDG的建立方法如下:程序中以类class作为节点,由一个节点到另一个节点的有向线段为前一个类的方法method调用后一个类的方法method。7.根据权利要求1所述的一种基于StackOverflow和commit库的bug定位方法,其特征在于,步骤⑶结构相似度的计算方法如下:stackTrace和程序依赖图PDG中某一节点类class的距离dist为StackTrace上的类与该节点之间距离的最小值其中,e为程序依赖图中的节点类class,λ为二者最远距离。8.根据权利要求1所述的一种基于StackOverflow和commit库的bug定位方法,其特征在于,步骤6综合文本相似度和结构相似度方法如下:Bug定位精准度下=文本相似度*30%+结构相似度*70%。

百度查询: 扬州大学 一种基于Stack Overflow和commit库的bug定位方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。