萬發(fā)洋,于 旭,徐其江
(1.青島科技大學(xué)信息科學(xué)技術(shù)學(xué)院,山東 青島 266061;2.山東信息職業(yè)技術(shù)學(xué)院,山東 濰坊 261061)
缺陷是破壞程序正常工作并使系統(tǒng)功能失效的軟件錯誤。伴隨著規(guī)模和復(fù)雜度的增加,大型開源軟件通過缺陷跟蹤系統(tǒng)(如Bugzilla和JIRA)管理缺陷,不斷實現(xiàn)對缺陷報告的記錄、管理以及狀態(tài)更新。當(dāng)前,大多數(shù)缺陷報告都是手動處理的,系統(tǒng)管理人員必須逐個檢查缺陷報告,結(jié)合歷史經(jīng)驗人工分配合適的修復(fù)者。這對于大型開源軟件項目是一項勞動密集的任務(wù)。例如,在Eclipse中,每天都能收到大約100個新提交的缺陷報告,而系統(tǒng)內(nèi)存在具有不同專業(yè)知識的1800名修復(fù)者。
為了合理利用缺陷跟蹤系統(tǒng)的人力資源,Cubranic等人[1]提出了一種自動缺陷分派技術(shù),通過學(xué)習(xí)歷史數(shù)據(jù)將缺陷分配給一組最具專業(yè)技能的修復(fù)者。進(jìn)而,學(xué)者們提出了一系列有關(guān)機(jī)器學(xué)習(xí)、信息檢索和深度學(xué)習(xí)的缺陷分派方法。機(jī)器學(xué)習(xí)方法[2-4]將修復(fù)者視為類別,通過訓(xùn)練分類器為缺陷報告分派合適的修復(fù)者標(biāo)簽。Tamrawi等人[2]提出了一種基于模糊集的Bugzie方法,修復(fù)者對集合的隸屬度通過術(shù)語相關(guān)性來表示,并使用它們來衡量修復(fù)者是否適合新的缺陷報告。Xuan等人[3]提出了一種半監(jiān)督的缺陷分派方法,通過期望最大化算法增強(qiáng)樸素貝葉斯分類器對已分派和未分派缺陷的分類能力。信息檢索方法[5-11]將缺陷報告作為查詢,修復(fù)者作為返回結(jié)果,根據(jù)新提交的缺陷報告與歷史缺陷報告之間的相似性對修復(fù)者排序。Tian等人[5]提出了一種基于排序模型Learning to rank的缺陷分派方法。結(jié)合缺陷報告的內(nèi)容信息和源代碼的定位信息識別合適的修復(fù)者處理特定的缺陷報告。Gay等人[6]提出了一種基于概念定位的IRRF缺陷分派方法,通過信息檢索與相關(guān)性反饋機(jī)制的結(jié)合,計算缺陷報告與源文件在空間向量模型上的相似度。深度學(xué)習(xí)方法[12-17]通過神經(jīng)網(wǎng)絡(luò)的優(yōu)異特征學(xué)習(xí)能力對數(shù)據(jù)有更本質(zhì)的刻畫,從而進(jìn)行缺陷分派任務(wù)。Lee等人[12]首次將卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用于缺陷分派,將文本內(nèi)容轉(zhuǎn)換為高層特征,訓(xùn)練一個預(yù)測模型返回每位修復(fù)者被分派的概率。Mani等人[13]為了挖掘文本內(nèi)容中存在的序列關(guān)系,應(yīng)用循環(huán)神經(jīng)網(wǎng)絡(luò)并結(jié)合雙向長短期記憶單元,提出了一種帶有注意力機(jī)制的缺陷分派模型。除此以外,學(xué)者們還著手研究系統(tǒng)中關(guān)系模型對缺陷分派的影響[18-22]。
基于目前的缺陷分派研究,發(fā)現(xiàn)依然存在一些不足。首先,以往的模型過于依賴缺陷報告的文本質(zhì)量,質(zhì)量的高低直接影響缺陷分派的結(jié)果。圖1表示缺陷報告ID為485038的部分文本描述。據(jù)統(tǒng)計,報告共83行、5307個字符。冗余的描述并不利于缺陷的準(zhǔn)確定位,極大地增加了缺陷修復(fù)的工作量。其次,缺陷跟蹤系統(tǒng)作為一個群智化的修復(fù)平臺,包含多個不同的修復(fù)者社區(qū),社區(qū)由具有相似的專業(yè)技能和開發(fā)活動的修復(fù)者組成。然而,缺陷報告中的元字段(如產(chǎn)品、構(gòu)件等)作為篩選修復(fù)者社區(qū)的重要分類標(biāo)簽大多被以往的模型所忽視,并未考慮社區(qū)因素對缺陷分派的影響。圖2表示修復(fù)者joakim.erdfelt和jesse.mcconnell在同一時間段的修復(fù)歷史,可以發(fā)現(xiàn)2名修復(fù)者經(jīng)常參與產(chǎn)品Jetty的缺陷,屬于共同的修復(fù)者社區(qū),具有相似的專業(yè)技能和開發(fā)活動。
圖1 缺陷報告ID為485038的部分文本描述
圖2 joakim.erdfelt和jesse.mcconnell的修復(fù)歷史
基于以上問題,本文提出一種基于多頭自注意力機(jī)制的深度缺陷分派方法MSDBT,不僅考慮缺陷報告的文本內(nèi)容,還根據(jù)產(chǎn)品、構(gòu)件生成相同元字段的修復(fù)者序列,探究具有相似的專業(yè)技能和開發(fā)活動的修復(fù)者社區(qū)對缺陷分派結(jié)果的影響;采用雙向循環(huán)神經(jīng)網(wǎng)絡(luò)抽取輸入文本和修復(fù)者序列中的高層特征;最后,采用多頭自注意力機(jī)制在內(nèi)部的輸入元素之間進(jìn)行并行注意力計算。本文弱化缺陷報告文本中的冗余信息,并通過修復(fù)者序列進(jìn)一步量化社區(qū)因素對缺陷分派的影響。
缺陷報告作為缺陷跟蹤系統(tǒng)管理缺陷的基本單元,由元字段和文本內(nèi)容組成。其中元字段是預(yù)先定義的屬性標(biāo)簽,便于開發(fā)人員對缺陷報告的分類和查找;文本內(nèi)容是開發(fā)人員對缺陷的自然語言表述,是以往工作的主要信息來源。元字段和文本內(nèi)容的組成和含義如表1所示。
表1 元字段和文本內(nèi)容的組成和含義
Word2Vec作為一種基于神經(jīng)網(wǎng)絡(luò)的詞嵌入模型,將自由格式的文本作為輸入轉(zhuǎn)換為詞向量,捕獲文本中單詞間的關(guān)聯(lián)關(guān)系,對詞匯以分布式向量的方式來表示。這不僅避免了矩陣稀疏的問題,還量化上下文之間的類比關(guān)系,挖掘出語義層面上的關(guān)聯(lián)信息。模型訓(xùn)練的目標(biāo)是最大化當(dāng)前詞wt在語料庫的術(shù)語集合T上生成鄰居詞wt+j的條件概率p(wt+j|wt):
(1)
其中,c是當(dāng)前詞wt周圍鄰居詞的集合大小。
MSDBT的框架由輸入層、特征抽取層、多頭自注意力層、輸出層組成。模型不僅弱化文本中的冗余信息,還通過社區(qū)因素進(jìn)一步量化具有相似活動的修復(fù)者對缺陷分派的影響。輸入層實現(xiàn)對數(shù)據(jù)的特征嵌入;特征抽取層實現(xiàn)文本內(nèi)容和修復(fù)者社區(qū)的特征計算;多頭自注意力層綜合內(nèi)部特征計算特征對結(jié)果的貢獻(xiàn)程度;輸出層計算為修復(fù)者分派缺陷報告的概率。
針對缺陷報告的文本內(nèi)容和修復(fù)者社區(qū),本文利用Word2Vec和one-hot編碼將其轉(zhuǎn)變?yōu)閷崝?shù)向量。
對于缺陷報告的文本內(nèi)容,本文利用Word2Vec生成k維術(shù)語向量,術(shù)語在語義上的相似度通過向量的相似度來表征。其表達(dá)式為:
E=[e1,e2,e3,e4,…,el]
(2)
其中,設(shè)置文本序列的最大長度為l,ei為文本中第i個術(shù)語的特征表示,每個缺陷報告的文本內(nèi)容生成大小為l×k的詞向量矩陣E。
對于修復(fù)者社區(qū),根據(jù)元字段中的產(chǎn)品和構(gòu)件生成保留社區(qū)因素的修復(fù)者序列,并通過one-hot對修復(fù)者進(jìn)行編碼。例如Ed Merks、Dirk Fauth、Nathan Ridge參與產(chǎn)品JDT的修復(fù)者社區(qū),假設(shè)Ed Merks、Dirk Fauth、Nathan Ridge、Grant Gayed是整個系統(tǒng)的修復(fù)者,則產(chǎn)品JDT的修復(fù)者社區(qū)編碼F為:
F=[[1,0,0,0],[0,1,0,0],[0,0,1,0]]
(3)
針對輸入層提交的詞向量矩陣和社區(qū)編碼,特征抽取層連接兩者生成輸入矩陣X,通過雙向長短期記憶網(wǎng)絡(luò)挖掘前后2個方向的特征,更加全面地對輸入內(nèi)容進(jìn)行特征抽取。雙向長短期記憶網(wǎng)絡(luò)是由LSTM單元組成雙層神經(jīng)網(wǎng)絡(luò),通過遺忘門、輸入門、輸出門決定細(xì)胞狀態(tài)的保存程度和當(dāng)前輸入的記憶程度。
LSTM的第1步是通過遺忘門決定之前細(xì)胞狀態(tài)Ct-1的丟棄程度。計算之前隱藏狀態(tài)ht-1和當(dāng)前輸入xt的Sigmoid函數(shù)。其中,Wf表示遺忘門對應(yīng)的權(quán)重矩陣,bf表示常數(shù)向量。
ft=σ(Wf·[ht-1,xt]+bf)
(4)
it=σ(Wi·[ht-1,xt]+bi)
(5)
(6)
下一步,根據(jù)前2步的輸出計算信息的丟棄和更新,確定當(dāng)前的細(xì)胞狀態(tài)Ct。
(7)
最后,基于細(xì)胞狀態(tài)確定輸出信息,首先,通過輸出門計算之前隱藏狀態(tài)ht-1和當(dāng)前輸入xt的Sigmoid函數(shù),決定哪些信息需要輸出。其次,利用tanh函數(shù)規(guī)范細(xì)胞狀態(tài)Ct并將其乘以輸出門的值,確定當(dāng)前單元的輸出ht。其中,Wo表示輸入門對應(yīng)的權(quán)重矩陣,bo表示常數(shù)向量。
ot=σ(Wo·[ht-1,xt]+bo)
(8)
ht=ot·tanh(Ct)
(9)
(10)
最終,綜合輸入矩陣X獲得特征抽取層的輸出序列S。
S=[s1,s2,s3,s4,…,st]
(11)
考慮到文本內(nèi)容的冗余信息和修復(fù)者社區(qū)對缺陷分派的影響,本文通過多頭自注意力機(jī)制[23]強(qiáng)化特征抽取層在不同時刻的輸出序列S的關(guān)鍵特征,每個時刻的注意力表示對分類結(jié)果的貢獻(xiàn)程度,如圖3所示。多頭自注意力利用多次并行查詢從輸入信息中提取到多組不同子空間進(jìn)行相關(guān)信息的獲取,從多方面捕獲序列的關(guān)鍵信息。其計算方式如下:
圖3 多頭自注意力層結(jié)構(gòu)
首先,將特征抽取層的輸出S線性變換生成查詢向量矩陣Q、鍵向量矩陣K、值向量矩陣V。其中,WQ、WK、WV為轉(zhuǎn)換矩陣。
(12)
將Q、K、V投影到h個不同子空間。其中,WQi、WKi、WVi分別為Q、K、V的第i個轉(zhuǎn)換矩陣。
(13)
通過縮放點積對Qi和Ki進(jìn)行內(nèi)積運算,并使用softmax函數(shù)歸一化后與Vi相乘得到單頭的注意力值headi,并行地在h個子空間上計算注意力。其中,d是縮放因子,將Q、K的內(nèi)積變?yōu)闃?biāo)準(zhǔn)的正態(tài)分布。
(14)
最后,融合所有子空間的注意力值。其中,WO為轉(zhuǎn)換矩陣。
A(Q,K,V)=Concat(head1,…,headh)WO
(15)
輸出層采用softmax分類器計算每名修復(fù)者的概率。其中Wd為轉(zhuǎn)換矩陣,bd為實數(shù)向量。
(16)
(17)
本文使用的數(shù)據(jù)集是開源項目Eclipse、Mozilla、Netbeans、GCC中的缺陷報告集合。由缺陷的生命周期可知,新修復(fù)的缺陷是不穩(wěn)定的,易出現(xiàn)再分派的情況,所以選取狀態(tài)較為穩(wěn)定的歷史缺陷來分析(即解決方案為“已修復(fù)”,報告狀態(tài)為“關(guān)閉”、“已解決”、“已驗證”),提交時間至少是4年前。為減少噪聲,刪除參與次數(shù)少于10次的修復(fù)者。經(jīng)過篩選后,數(shù)據(jù)集包含38152個缺陷報告、1609名修復(fù)者。
為了評價實驗結(jié)果推薦精度,本文使用召回率Recall@K進(jìn)行度量,這類度量指標(biāo)已在先前的相關(guān)工作中廣泛使用[1,3-4],計算公式為:
(18)
假設(shè)共存在q個待推薦的缺陷報告,對于每個缺陷報告,Di表示缺陷報告中真實參與的修復(fù)者集合,Pi表示本文模型推薦的修復(fù)者集合。K表示推薦修復(fù)者的集合大小,在這里K=5。
本文設(shè)置3種方法作為對比方法:
1)SVM[4]使用支持向量機(jī)來完成缺陷報告文本分類的經(jīng)典方法。
2)MTM[8]根據(jù)缺陷報告的元字段,以監(jiān)督的方式更新修復(fù)者在各個主題的比例。
3)DT[14]結(jié)合文本與修復(fù)者活動序列,循環(huán)神經(jīng)網(wǎng)絡(luò)使用文本特征與活躍度進(jìn)行修復(fù)者的類別分配。
對于本文模型的參數(shù)設(shè)置,文本長度設(shè)置為300,并通過補(bǔ)零或截斷進(jìn)行文本內(nèi)容調(diào)整,Word2vec生成的向量維度設(shè)置為256。Bi-LSTM神經(jīng)網(wǎng)絡(luò)的隱藏層神經(jīng)元個數(shù)為300。多頭注意力機(jī)制獨生成12個線性子空間,每次的輸出維度都是128維。
實驗為了比較本文提出的MSDBT模型與已有模型在缺陷分派上的準(zhǔn)確性,如圖4所示,MSDBT在4個數(shù)據(jù)集上Recall@5的平均值為0.6375,相較于SVM,提升了8.97%。相較于MTM,提升了7.64%。相較于DT,提升了3.76%。結(jié)果表明,本文模型的召回率指標(biāo)優(yōu)于對照的方法。
圖4 MSBDT及對比方法的實驗結(jié)果
本文針對缺陷的修復(fù)者推薦問題,提出了一種基于多頭自注意力機(jī)制的缺陷分派模型MSDBT。從文本描述和元字段這2個角度出發(fā),采用雙向長短期記憶網(wǎng)絡(luò)提取文本和修復(fù)者序列的特征,并使用多頭自注意力機(jī)制進(jìn)一步在內(nèi)部元素之間計算并行注意力。弱化文本內(nèi)容中的冗余信息的同時增加修復(fù)者社區(qū)對缺陷分派的影響。本文在4個大型開源項目的數(shù)據(jù)集上進(jìn)行驗證,實驗結(jié)果表明,本文模型較經(jīng)典的缺陷分派方法具有明顯優(yōu)勢。在未來的工作中將考慮不同數(shù)據(jù)類型的影響、系統(tǒng)的動態(tài)變化以及不同數(shù)據(jù)集之間的跨域分析,進(jìn)一步提升缺陷分派模型的性能。