1.一種基于stackoverflow和commit庫的bug定位方法,其特征在于包括如下步驟:
(1)將用戶提交的問題分解成問題段、代碼段、stack trace段三個子段;
(2)根據(jù)步驟(1)所得到的問題段,先進行預(yù)處理,然后使用RAKE算法提取出關(guān)鍵字,將關(guān)鍵字對Stack Overflow問題庫中的問題標簽進行匹配,將每個問題答案對的標簽與問題段的關(guān)鍵字進行比較,計算相同標簽所占比重,導出比重最高的問題答案對;
(3)根據(jù)步驟(2)得出的答案,提取出其中的代碼段,若步驟(1)分解后也有代碼段,則整合為問題代碼段+答案代碼段形式;
(4)對步驟(3)整合的結(jié)果,使用RAKE提取出關(guān)鍵字,設(shè)定為標簽tag,再使用tag-LDA對commit庫進行處理,建立主題模型,并結(jié)合標簽進行匹配,篩選出匹配度大于等于0.3的commit相應(yīng)代碼段;
(5)對步驟(3)得出的結(jié)果的代碼部分與步驟(4)得到的commit代碼進行文本相似度匹配和利用由節(jié)點即類、class,有向線段即方法、method組成的程序依賴圖對由步驟(1)分解得到的堆棧追蹤stack trace進行結(jié)構(gòu)相似度匹配;
(6)根據(jù)前面計算得到的文本相似度和結(jié)構(gòu)相似度進行綜合計算,計算30%×文本相似度+70%×結(jié)構(gòu)相似度的結(jié)果,按計算結(jié)果大小進行結(jié)果推薦。
2.根據(jù)權(quán)利要求1所述的一種基于Stack Overflow和commit庫的bug定位方法,其特征在于,步驟1)預(yù)處理過程包括以下步驟:
a)移除數(shù)字;
b)對一些按照駝峰規(guī)則和有下劃短線相連的組合詞進行分詞;
c)去除英語停用詞;
d)將詞語的不同形式進行歸一化。
3.根據(jù)權(quán)利要求1所述的一種基于Stack Overflow和commit庫的bug定位方法,其特征在于,步驟2)RAKE算法的計算公式如下:
wordScore=wordDegree(w)/wordFrequency(w)
即單詞w的得分是該單詞的度(是一個網(wǎng)絡(luò)中的概念,每與一個單詞共現(xiàn)在一個短語中,度就加1,考慮該單詞本身)除以該單詞的詞頻(該單詞在該文檔中出現(xiàn)的總次數(shù))。
然后對于每個候選的關(guān)鍵短語,將其中每個單詞的得分累加,并進行排序, RAKE將候選短語總數(shù)的前三分之一的認為是抽取出的關(guān)鍵詞。
4.根據(jù)權(quán)利要求1所述的一種基于Stack Overflow和commit庫的bug定位方法,其特征在于,步驟2)標簽匹配的計算公式如下:
相似度=相同標簽個數(shù)/所有不重復(fù)標簽個數(shù)。
5.根據(jù)權(quán)利要求1所述的一種基于Stack Overflow和commit庫的bug定位方法,其特征在于,步驟5)文本相似度的計算公式如下:
其中A,B是表示文檔一和文檔二的量化表示。文檔一和文檔二經(jīng)過分詞,去停用詞,移除數(shù)字,詞根化等預(yù)處理過程,將剩余的單詞按一定順序數(shù)值化后形成向量A,B。在信息檢索中,每個詞條擁有不同的度,一個文檔是由一個由有權(quán)值的特征向量表示的,權(quán)值的計算取決于詞條在該文檔中出現(xiàn)的頻率。余弦相似度因此可以給出兩篇文檔其主題方面的相似度。
6.根據(jù)權(quán)利要求1所述的一種基于Stack Overflow和commit庫的bug定位方法,其特征在于,步驟5)程序依賴圖(Program Dependence Graph,PDG)的建立方法如下:
程序中以類(class)作為節(jié)點,由一個節(jié)點到另一個節(jié)點的有向線段為前一個類的方法(method)調(diào)用后一個類的方法(method)。
7.根據(jù)權(quán)利要求1所述的一種基于Stack Overflow和commit庫的bug定位方法,其特征在于,步驟5)結(jié)構(gòu)相似度的計算方法如下:
stackTrace和程序依賴圖(PDG)中某一節(jié)點(類class)的距離
dist(stackTrace,e)為stackTrace上的類與該節(jié)點之間距離的最小值
。
其中,e為程序依賴圖中的節(jié)點(類,class),入為二者最遠距離
8.根據(jù)權(quán)利要求1所述的一種基于Stack Overflow和commit庫的bug定位方法,其特征在于,步驟6)綜合文本相似度和結(jié)構(gòu)相似度方法如下:
Bug定位精準度下=文本相似度*30%+結(jié)構(gòu)相似度*70%。