曾 杰,賁可榮,張 獻,徐永士
(海軍工程大學電子工程學院,湖北 武漢 430033)
大部分軟件使用缺陷管理系統(tǒng)(如Bugzilla)來追蹤和記錄發(fā)生的缺陷。對于同一缺陷,使用軟件的不同用戶或者軟件維護人員可能在不同時間提交多份缺陷報告,這樣會增加修復成本。所以,對于每一份新提交的缺陷報告,先判斷其是否是歷史缺陷報告的重復,然后再行處理。在歷史缺陷報告數(shù)龐大的情況下,人工查找是不現(xiàn)實的。而據有關統(tǒng)計[1]顯示收集的關于Mozilla項目的768 335個缺陷報告中,重復報告的占比高達23%。由此可見,重復缺陷報告檢測對于降低缺陷追蹤管理系統(tǒng)的人力成本具有重要意義。
現(xiàn)有研究主要針對缺陷報告的非結構化屬性和結構化屬性2部分內容分別抽取特征,再利用機器學習算法構建分類模型。結構化屬性只能從指定選項中選取,非結構化屬性則由缺陷報告的提交者依據個人表述習慣利用自然語言進行描述,主要包括缺陷摘要和缺陷描述。部分缺陷報告在缺陷描述中會附上程序執(zhí)行步驟和屏幕截圖等其它信息。Lazar等人[2]提出的D_TS(Detection using Text Similarity)方法,抽取了25種特征,采用支持向量機SVM(Support Vector Machine)和隨機森林等機器學習算法訓練分類器,在重復缺陷報告檢測方面取得了良好效果。為了進一步提升檢測的準確性,在該方法的基礎上,本文提出一種融合文本分布式表示的檢測方法,利用大規(guī)模數(shù)據集挖掘缺陷報告在摘要和描述上的深層次語義信息,抽取缺陷報告的分布式表示,將該特征與其它特征進行融合后共同用于任務檢測。文本分布式表示利用文檔嵌入模型Doc2Vec[3]進行訓練和抽取。在公開的大規(guī)模重復缺陷報告數(shù)據集[1]上進行評測,并將本文所提方法與D_TS[2]進行比較,證實了本文方法的有效性。為了保證實驗可再現(xiàn),全部代碼和數(shù)據已開源(https://github.com/zyj183247166/BugReportDeduplicate)。
重復缺陷報告檢測的核心過程是比較2份缺陷報告不同字段內容的相似性,主要方法分為4種:
(1)信息檢索方法。
早期的工作主要利用信息檢索方法中的詞袋模型進行分析。詞袋模型首先計算單詞權重,再將缺陷報告表示為這些權重的向量,最后通過比較向量距離來判定文本相似性。比如,DupFinder[4]使用詞頻計算單詞權重;Hiew[5]則結合詞頻和逆向文檔頻率TF-IDF(Term Frequency-Inverse Document Frequency)計算單詞權重。李寧等人[6]基于n-gram方法構建檢測模型,將n元詞組看作一個新的單詞,再應用詞袋模型。但是,語義相近的單詞,如“StringIndexOutOfBoundsException”與“StringIndexOutOfBounds”,在字面上并不相同。這2個單詞描述的均是數(shù)組越界錯誤,而詞袋模型無法將它們有效關聯(lián)。為此,Sureka等人[7]在字符粒度上利用n-gram方法構建信息檢索模型。盡管如此,對于不具有共同前(后)綴的不同字面單詞,如“error”和“bug”,詞袋模型仍無法建立聯(lián)系。
(2)機器學習與主題模型。
為了提高檢測的準確性,Sun等人[8]利用SVM訓練出一個判別式二分類器,但其抽取的特征僅僅來源于缺陷摘要和描述,過于局限。因此,Sun等人[9]后續(xù)又基于包括優(yōu)先級、產品版本等多個域在內的信息利用改進的BM25F(Best Match 25 models with Fields)算法[10]來判別缺陷報告的相似性。改進的BM25F算法中,其參數(shù)并非先驗設定,而是在訓練數(shù)據上進行學習和優(yōu)化得到。Lazar等人[2]則從包括缺陷編號和缺陷類型在內的9個信息域中提取出共計25種特征來訓練機器學習分類模型。
單純分析不同缺陷報告在字面上的相似性,不夠充分。Nguyen等人[11]采取潛在狄利克雷分布LDA(Latent Dirichlet Allocation)模型對缺陷報告進行主題建模,比較不同缺陷報告的主題分布之間的相似性。Alipour等人[12]則構建多個主題詞表。比如,將與可維護性主題有關的單詞組合在一起形成列表。接著,基于BM25F算法判定缺陷報告與多個主題詞表之間的相似程度,形成一個向量。對2份缺陷報告的這類向量計算余弦距離形成新的特征,稱之為語境特征(Contextual Features),將其作為一種新的特征構建分類模型。Klein等人[13]則將不同缺陷報告的主題分布之間的海林格距離作為新的特征構建分類模型。范道遠等人[14]融合缺陷報告中非結構化屬性的文本信息與結構化屬性的分類信息構建檢測模型,在處理文本信息時使用了主題模型中的潛在語義索引LSI(Latent Semantic Indexing)算法。LSI算法利用奇異值分解SVD(Singular Value Decomposition)方法將高維矩陣映射到低維空間并抽取出主題信息,相較于LDA模型而言,其計算簡單快速,但無法應用于詞和文本非常多的大規(guī)模數(shù)據庫。董美含[15]則提出一種基于動賓短語和主題模型的相似缺陷報告識別方法,通過抽取動賓短語過濾掉相對不重要的文本信息,同時使用LDA模型構建描述主題分布的特征向量。蔣欣志[16]則對比了向量空間模型與LDA主題模型,證實了主題模型應用于重復缺陷報告檢測具有更高的準確率。
(3)利用附加信息輔助分析。
上述方法或者關注于缺陷報告自身,或者抽象出缺陷報告的主題,但是信息根源仍是缺陷報告各個域內的字面信息。Wang等人[17]則進一步關注于缺陷發(fā)生時所記錄的程序執(zhí)行信息,通過抽取程序執(zhí)行過程所調用的方法名稱,將程序執(zhí)行信息具體化為方法名稱的序列并轉化為文本表示。然后,程序執(zhí)行信息之間的相似性就可以利用文本相似性分析方法判定。由于部分程序執(zhí)行過程調用的方法過多,會導致相似性分析過程的時間開銷較大,Sabor等人[18]先將執(zhí)行序列變?yōu)閚-gram詞組的列表,再轉化為固定長度的稀疏特征向量,最后通過向量比較完成程序執(zhí)行信息的相似性分析。 除了程序執(zhí)行信息以外,提交缺陷報告時附加的屏幕截圖等信息也被用于識別重復缺陷報告[19]。陳俊潔等人[20]則結合程序特征和文本特征查找編譯器測試過程出現(xiàn)的重復缺陷報告,程序特征來源于測試程序,即能夠導致編譯器無法正常運行的被編譯程序??偟膩碚f,這些方法的應用場景是受限的。對于不存在附加信息的缺陷報告,需要對每個缺陷進行一次重現(xiàn),在操作上復雜性很高,很難適用于大規(guī)模缺陷庫。
(4)嵌入表示和深度學習模型。
前述方法常用的BM25F算法的前提假設是文檔中出現(xiàn)的單詞之間沒有任何關聯(lián)。顯然,這種假設與事實不符。為了分析單詞的上下文信息,Yang等人[21]將由詞嵌入模型word2vec[22]學習到的詞嵌入表示(Word Embedding)融入到信息檢索模型中,用于識別重復缺陷報告。樊田田等人[23]先分別用word2vec模型和TF-IDF模型將缺陷報告表征為稠密向量,再進一步計算查詢缺陷報告與歷史缺陷報告的相似程度。Budhiraja等人[24]則詳細對比了詞嵌入模型、LDA模型和BM25F算法,再次證實了詞嵌入模型用于識別相似缺陷報告的優(yōu)越性。與word2vec不同,文獻[25,26]基于文檔嵌入模型Doc2Vec[3]識別相似缺陷報告,相較于word2vec模型取得了準確率的提升。本文方法同樣使用文檔嵌入模型Doc2Vec,但與文獻[25,26]的方法不同。本文方法將2份缺陷報告的分布式表示之間的相似度作為一個新的特征,再將其與重復缺陷報告檢測過程常用的傳統(tǒng)特征進行融合,共同構建基于機器學習算法的二元分類模型。
后續(xù)研究中,Budhiraja等人[27,28]又針對基于詞嵌入模型的檢測方法提出2種優(yōu)化方案。第1種是將單詞的詞嵌入表示結合單詞的序列共同輸入到全連接深度神經網絡中,通過自動化學習缺陷報告的深度特征,訓練出一個能夠識別缺陷報告相似性的二分類器[27]。第2種則是先利用LDA模型進行初步篩選,縮小候選相似報告的范圍,再由詞嵌入模型分析候選相似報告的相似性[28]。喻維[29]則提出一種基于卷積神經網絡的檢測方法,先使用詞嵌入來表示每個單詞,再將向量拼接送入卷積神經網絡進行訓練。Deshmukh等人[30]針對缺陷報告的元屬性、缺陷摘要和詳細描述等3方面信息分別使用單層全連接、雙向長短時記憶和卷積神經網絡等3種網絡結構進行建模和特征提取,并將3個特征向量拼接起來得到缺陷報告的最終向量表示。進一步,基于學習到的向量表示分別建立檢索模型和分類模型:檢索模型基于余弦距離度量2個報告的相似性,而分類模型則搭建Softmax層完成最終的二分類任務。
本文研究Bugzilla缺陷報告庫,包括Eclipse、Open Office和NetBeans等開源項目的缺陷報告。針對存在的重復缺陷報告問題,本文提出一種融合文本分布式表示的檢測方法。整體流程包括4個步驟:數(shù)據預處理、文本分布式表示抽取、特征抽取和二元分類模型訓練與使用。在抽取特征以后,為了避免單一機器學習算法對本文方法的結果造成偏差,并充分驗證新特征用于重復缺陷報告檢測過程的有效性,本文使用多種機器學習算法[31]構建二元分類模型,包括線性支持向量機(Linear SVM)、核函數(shù)支持向量機RBF SVM(Radial Basis Function SVM)、K近鄰、決策樹、隨機森林和樸素貝葉斯。下面將詳細介紹另外3個步驟。
該階段主要針對缺陷報告的摘要和描述這2部分非結構化文本,采用常用的自然語言處理方法進行數(shù)據預處理,包括3步:
(1)分詞:英文語句使用空格將單詞進行分隔,據此將長文本拆分成單詞和標點符號的列表,并且去除空格和換行等字符。
(2)去除標點符號和停止詞:英文中有許多停止詞和標點符號,諸如“to”“the”“.”和“!”等,它們包含很少的信息,而且頻繁出現(xiàn)。為了避免這些無關信息對重復缺陷報告檢測造成影響,本文利用正則表達式匹配方法去除 “?”和“!”等英文標點符號,并根據英文常用停止詞表去除停止詞。
(3)詞干提?。涸~干是沒有任何后綴的詞,比如“commander”的詞干是“command”,“raining”的詞干是“rain”。有相同詞干,但是不同表示的詞,在語義上是相近的。本文利用Porter方法(https://tartarus.org/martin/PorterStemmer/)進行詞干提取并將各個詞進行簡化。
經過數(shù)據預處理以后,下一步將從處理后的數(shù)據中抽取文本的分布式表示。
基于詞袋模型的重復缺陷報告檢測方法將缺陷報告建模為稀疏離散向量,丟失了文本語序信息。為此,本文基于文檔嵌入模型Doc2Vec[3]挖掘文本序列中蘊含的深層次語義信息,抽取缺陷報告的分布式表示。如圖1所示,對于數(shù)據預處理后的缺陷報告庫,將每份缺陷報告的摘要和描述拼接成一段文本,形成文本的集合并利用該集合訓練Doc2Vec模型,最終將每份缺陷報告建模為稠密連續(xù)向量,而向量之間的相似度就可以用來表示缺陷報告在文本語義上的相似性。
Figure 1 Extracting distributed representations of bug reports using the Doc2Vec model圖1 Doc2Vec模型抽取缺陷報告的分布式表示
Doc2Vec基于word2vec[22]擴展而來。word2vec是一個淺層神經網絡,包括輸入層、隱藏層和輸出層共3層結構,具體包括2種訓練模型:連續(xù)詞袋CBOW(Continuous Bag Of Words)模型和Skip-gram模型。前者基于上下文單詞預測中心詞,后者則基于中心詞預測上下文單詞。word2vec基于給定的輸入單詞,利用初始化參數(shù)的神經網絡預測輸出單詞的概率,并與語料庫中輸入單詞附近真實出現(xiàn)的單詞進行比較,計算損失值。以降低損失值為目標優(yōu)化神經網絡參數(shù),最終學習到的詞嵌入表示能夠反映訓練語料庫中單詞出現(xiàn)的統(tǒng)計規(guī)律,而不同字面單詞的語義相似性便可以用詞嵌入表示之間的向量距離進行度量。
為了抽取段落或文檔等長文本的分布式表示,Doc2Vec在word2vec的基礎上,增加了一個與詞嵌入向量長度相等的段落嵌入向量,即結合段落向量和詞向量共同預測目標詞的概率分布。Doc2Vec基于Skip-gram模型擴展得到分布式詞袋DBOW(Distributed Bag Of Words)模型,基于CBOW模型擴展得到分布式記憶DM(Distributed Memory)模型。DM模型較DBOW模型而言,計算更快速并且更適合于大規(guī)模缺陷報告庫,所以本文采用此模型。設定缺陷報告文本集合的詞典為V,規(guī)模為n,滑動窗口為5,某個中心詞w的上下文單詞集合為C={c1,c2,c3,c4},則CBOW模型與DM模型的結構如圖2所示。
Figure 2 Diagram of the CBOW and DM models圖2 CBOW模型與DM模型示意圖
DM模型初始化詞嵌入矩陣W和段落嵌入矩陣D,然后根據上下文單詞集合C中的單詞編號從W中索引出對應的詞嵌入向量,同時根據段落編號從D中索引出段落嵌入向量。將這些向量求和平均后,再與參數(shù)矩陣U進行計算,得到n個輸出值構成的一維向量y。最后經過Softmax層計算,可以得出當前單詞為w的概率:
(1)
其中,yw表示向量y中單詞w對應位置的輸出值。
對于大規(guī)模缺陷報告庫,詞典V的規(guī)模n會很大,會導致求和平均后向量與矩陣U之間無法進行矩陣乘法運算。為此,本文使用負例采樣方法[32],按照高頻率詞匯有高概率被抽中的原則,從V中抽取部分詞匯并且計算它們在y中對應位置的輸出值,然后將輸出值求和后作為式(1)的分母。這樣做的好處是,向量與U的矩陣乘法運算,簡化為了向量與U中部分列向量進行點乘運算。最后,設缺陷報告庫形成的文本語料為T,在T上用滑動窗口不斷取出新的w和C,則DM模型的優(yōu)化目標就是最小化損失值:
loss=∑(w,C)∈T-lnp(w|C)
(2)
DM模型在訓練過程中要學習到的參數(shù)為矩陣W、D和U。訓練結束后,依據段落編號即可從D中抽取出該段落的分布式表示。這里的每個段落對應每一份缺陷報告經過數(shù)據預處理后的文本內容。
Lazer等人[2]將Sun等人[9]提出的缺陷報告分類屬性比對特征和aric等人[33]提出的文本比對特征進行融合,再構建重復缺陷報告檢測模型。本文則在Lazer等人工作的基礎上,將2份缺陷報告分布式表示的相似度作為一個新的特征,同已有特征進行再一次融合。給定2份缺陷報告br1和br2,本文用于判定兩者是否重復所使用的全部特征如表1所示。Lazer等人[2]使用了特征1~特征25,本文融合的新特征編號為26。
Table 1 Features used for duplicate bug report detection
表1中,WordNet[34]是一個大規(guī)模的英語詞匯語義網,該網絡將不同單詞基于各種關系連接起來;詞形還原是指把一個任何形式的單詞還原為一般形式,同時保留完整語義,比如將“is”還原為“be”;abs是計算絕對值的數(shù)學函數(shù);版本號version為“x.y.z”形式時,取數(shù)值x.y作為版本號的具體值;優(yōu)先級為“PxNormal”形式時,取數(shù)值x作為優(yōu)先級的具體值。由于不同特征的值不處于同一量綱,會影響分類模型的準確性,本文對抽取后的特征數(shù)據進行歸一化,將所有特征值的范圍縮小到[0,1]。
本節(jié)介紹實驗的數(shù)據集與實驗過程。
本文方法在大規(guī)模真實缺陷報告數(shù)據集[1]上進行評測。該數(shù)據集來源于Bugzilla缺陷庫,包括Eclipse、Open Office、NetBeans和Mozilla共4個項目的缺陷報告。學者依據缺陷報告的重復(duplicates)屬性中所記錄的ID號來識別與其存在重復關系的其它缺陷報告,構建了重復缺陷報告數(shù)據集(http://alazar.people.ysu.edu/msr14data/)。但是,它只針對前3個項目構建了重復缺陷報告數(shù)據集,對Mozilla項目則只提供了原始缺陷報告。重復缺陷報告數(shù)據集是三元組的集合,每個三元組記錄一對缺陷報告的ID號和它們之間的重復關系(重復或者不重復)。
經過實驗發(fā)現(xiàn),該數(shù)據集中存在一定程度的數(shù)據噪聲。比如,Open Office項目中ID分別為13060和39496的2份重復缺陷報告所形成的三元組(13060,39496,1),在數(shù)據集中共計出現(xiàn)了6次。除此之外,還有許多三元組在交換2個ID的順序之后所形成的新元組也在數(shù)據集中重復出現(xiàn)。顯然,這些噪聲勢必影響最后的準確性評測過程。本文對這些噪聲進行去除,最終用于評測的重復缺陷報告數(shù)據集概要見表2。
Table 2 Summary of duplicate bug report datasets for evaluation
在評測指標方面,本文用4個指標評價方法的效果:準確率(Accuracy)、召回率(Recall)、查準率(Precision)和調和平均數(shù)F1。調和平均數(shù)能夠對召回率和查準率更接近的模型給予更高的分數(shù),而兩者相差很大的模型,往往在實際應用中沒有足夠的價值。在Recall、Precision和F1的計算上,本文更關注分類模型對重復類別的預測能力。4種指標的計算公式分別如式(3)~式(6)所示:
(3)
(4)
(5)
(6)
其中,TP表示重復缺陷報告對被檢測為重復關系的個數(shù),F(xiàn)P表示非重復缺陷報告對被錯判為重復關系的個數(shù),TN表示非重復缺陷報告對被檢測為非重復關系的個數(shù),F(xiàn)N表示重復缺陷報告對被錯判為非重復關系的個數(shù)。
實驗的對照方法是2014年MSR(Mining Software Repositories)會議上由Lazer等人[2]提出的方法,該方法在規(guī)模為10 000左右的小型數(shù)據集上達到了99%的準確率。在實驗數(shù)據集劃分方面,本文采用的方法與Lazer等人[2]的方法保持一致,即針對Eclipse等3個項目隨機抽取5 000個缺陷報告對作為訓練集(重復與非重復標簽數(shù)據的比例為1∶4),將其余數(shù)據作為測試集,并且面向3個項目分別進行模型的訓練和測試。為了保證性能評測的穩(wěn)定性,本文采取10次隨機實驗取平均值的方式,計算各項評測指標。在模型參數(shù)的設置方面,也同Lazer等人的方法保持一致:即利用網格搜索方法確定線性支持向量機與核函數(shù)支持向量機RBF SVM在訓練集上的最佳參數(shù);至于隨機森林等其它機器學習模型,則直接使用scikit-learn工具箱的默認配置參數(shù)。這樣做主要是為了避免主觀因素對重復缺陷報告檢測方法的評測過程帶來偏差。
10次隨機實驗的某一次實驗中,網格搜索方法確定的支持向量機模型在訓練集上的最佳參數(shù)如表3所示。表3中,P是懲罰系數(shù),即對誤差的寬容度。P越大,表示越不能容忍誤差,模型容易過擬合;P越小,表示越容易欠擬合。Gamma是核函數(shù)支持向量機的一個參數(shù),決定了數(shù)據映射到新的特征空間分布后支持向量的個數(shù)。Gamma越大,支持向量越少;反之,支持向量越多。支持向量的個數(shù)影響模型的訓練速度和準確率。網格搜索過程首先為P和Gamma設定范圍和變化步長,再沿著步長不斷變化參數(shù)值并在訓練集上訓練(采取五折交叉驗證方式),最后會根據五折交叉驗證平均準確率的高低來確定最優(yōu)參數(shù)的取值。
Table 3 Best parameters for SVM models determined by the grid search
本文基于Python語言進行編程和實驗,主要步驟包括:
(1)數(shù)據預處理。
利用NLTK(Natural Language ToolKit)(http://www.nltk.org)完成分詞、去除標點符號和停止詞,以及詞干抽取等步驟。NLTK是Python解釋器環(huán)境下專門用于自然語言處理的工具包。
(2)文本分布式表示抽取。
數(shù)據預處理后,將缺陷報告的文本和摘要拼接成段落,并在缺陷報告庫的基礎上形成段落的集合,再利用gensim(https://radimrehurek.com/gensim/)實現(xiàn)Doc2Vec模型,并抽取每份缺陷報告的分布式表示。
(3)特征抽取。
表1的特征中,特征1~19由工具包TakeLab(http://takelab.fer.hr/)的simple版本生成。TakeLab會自動生成共計21種特征。本文人工去除其中的2種特征,因為經過數(shù)據歸一化后,所有數(shù)據的這2種特征的值均相同,即它們對重復缺陷報告檢測無任何意義。這2種特征基于文本中的塊索引符號(Stock Index Symbol)進行抽取。塊索引符號是指在全部字母大寫的單詞前有一個英文點號“.”的特殊符號,如“.AAA”。
(4)二元分類模型的訓練與使用。
通過libsvm工具包(https://www.csie.ntu.edu.tw/~cjlin/libsvm/)實現(xiàn)支持向量機模型,包括網格搜索方法確定最佳參數(shù)等。利用scikit-learn工具箱實現(xiàn)K近鄰、決策樹、隨機森林和樸素貝葉斯等其它算法,模型參數(shù)為工具箱的默認設置。
本節(jié)主要分析方法的檢測性能,對不同特征用于重復缺陷報告分類的判別力進行評價,并分析一個對照方法無法檢測而本文方法能夠檢測的重復缺陷報告實例。
本文方法與對照方法在3個項目重復缺陷報告數(shù)據集上的實驗結果如表4~表6所示,括號內的數(shù)字是本文方法結果。從表4~表6中可以看出,相較于對照方法,本文方法在Eclipse、Open Office和NetBeans項目上的F1值分別平均增長1.38%,2.61%和2.03%(對表中所有機器學習模型的F1值進行求和平均),即在全部數(shù)據集上平均增長約2%。在Accuracy等指標上,本文方法也均優(yōu)于對照方法。以核函數(shù)SVM模型為例,相較于對照方法,本文方法在Eclipse、Open Office和NetBeans項目上的Accuracy值分別增長1.2%,2.59%和2.5%,即正確分類的測試樣本個數(shù)分別增長2 907,2 436和4 514個(3個項目的測試集規(guī)模分別為242 302, 94 086和180 581)。這些結果充分表明了本文方法優(yōu)于對照方法。
Table 4 Evaluation results on the Eclipse project (numbers in parentheses are the results of our method)
Table 5 Evaluation results on the Open Office project (numbers in parentheses are the results of our method)
Table 6 Evaluation results on the NetBeans project (numbers in parentheses are the results of our method)
為了進一步評價本文融入的新特征應用于重復缺陷報告檢測中的有效性,本節(jié)對不同的特征進行判別力分析,即判別力越高的特征具有越強的分類能力。本文選擇3種常見的判別力分析指標,即斯皮爾曼(Spearman)相關性、費舍爾(Fisher)得分和信息增益。Spearman相關系數(shù)用來反映2個變量之間的相似度,即判斷特征和類別是正相關、負相關還是沒有相關程度。Fisher準則的主要思想是判別力較強的特征表現(xiàn)為類內方差盡可能小而類間方差盡可能大。某個特征的Fisher得分即為該特征在樣本集上的類間方差和類內方差的比值。信息增益用于測度某個特征為分類模型貢獻的信息量,信息增益越大說明該特征越重要。所有指標均為3個項目數(shù)據集上分別計算以后,再進行求和平均,不同特征的判別力如表7所示。從表7中可以看出,除了在Fisher得分上新特征僅次于特征20,本文融入的新特征在判別力上排名最優(yōu)。特征20的計算結果見表7,即如果2份缺陷報告描述同一個產品,則特征值為1,否則為0。此外,從Spearman相關性中可以看到,基于版本與ID分別抽取的特征24和25,與分類屬性呈現(xiàn)負相關,從統(tǒng)計意義上表明,2份缺陷報告的版本號相差越大,或者ID相差越多,重復的可能性越小。
Table 7 Features’ discriminative performance
本文方法融入文本分布式表示來分析段落之間的語義相似性,這一點對于檢測字面相似度較低的重復缺陷報告尤為重要。表8是Lazer等人方法無法檢測而本文方法能夠檢測到的一個重復缺陷報告示例。從表8中可以看出,2份缺陷報告描述的是同一缺陷,即NetBeans 6.X版本的Local Variables窗口和Watches窗口無法顯示。2份缺陷報告由不同人提交,在大部分屬性上相同,而在產品和組件屬性上均不相同,在摘要和描述上也存在較大的字面差異,尤其在使用換行符、標點符號和語言風格等方面相差較大。比如,2份缺陷報告分別用Netbeans和NB描述NetBeans。該實例表明文本分布式表示能夠較好地適應這種字面變化,再一次說明了本文方法的有效性。
Table 8 An example of duplicate bug report detected表8 檢測到的重復缺陷報告示例
本文提出了一種融合文本分布式表示的重復缺陷報告檢測方法,通過抽取缺陷報告的分布式表示,將2份缺陷報告分布式表示的相似性作為一種新特征同傳統(tǒng)特征進行融合之后再訓練機器學習分類模型,能夠更好地適應重復缺陷報告在摘要和描述等非結構化屬性上的復雜字面變化。相較于未使用分布式表示的檢測方法,具有一定程度的優(yōu)勢。本文方法在真實項目的大規(guī)模重復缺陷報告數(shù)據集上進行了評測,并與代表性方法D_TS進行了比較,評測結果顯示了本文方法的有效性。