李文華,李浩杰
1(青島科技大學(xué) 信息科學(xué)技術(shù)學(xué)院,青島 266061)
2(青島科技大學(xué) 高密校區(qū)機電系,濰坊 261500)
軟件發(fā)展的過程中,在軟件工程領(lǐng)域軟件的開源和軟件系統(tǒng)的不斷興起和發(fā)展使得軟件的開發(fā)與軟件管理變得更加方便快捷.開源軟件的開發(fā)管理團隊通常依靠開放性的缺陷跟蹤管理系統(tǒng),對軟件使用過程中產(chǎn)生的缺陷進(jìn)行管理與跟蹤,如:Bugzilla、Jira 等均為眾人比較熟知的開放性缺陷報告提交平臺.據(jù)統(tǒng)計,自2007年起,Eclipse 缺陷報告庫中新的缺陷報告以每天30 個的速度遞增[1];2001年至2010年,Mozilla 的缺陷報告庫中的缺陷報告以平均每天307 個的速度增加[2].分析顯示,大量的缺陷報告因為描述遺漏或不準(zhǔn)確,而影響缺陷有效判定和缺陷修復(fù)進(jìn)程,致使缺陷修復(fù)時間一般都較長[3],也存在因描述不準(zhǔn)確而長時間得不到修復(fù)的缺陷報告.而面對需要填報的復(fù)雜缺陷報告信息,缺陷報告發(fā)布者也無法確定哪些屬性是關(guān)鍵的、哪些需要重點描述.因此,能夠區(qū)分缺陷報告的屬性的重要度,不僅能夠指導(dǎo)報告者規(guī)范缺陷報告的提交信息從而提升缺陷報告質(zhì)量,也能夠輔助開發(fā)者提高缺陷有效性判定和修復(fù)的效率.
Zhang 等[4]將修復(fù)過程分解為5 個階段,發(fā)現(xiàn)缺陷提交后的確認(rèn)階段、缺陷分派后到開始修復(fù)的分析階段耗時較長.Saha 等[5]對4 個開源項目進(jìn)行實例研究,發(fā)現(xiàn)影響缺陷修復(fù)時間的因素是復(fù)雜的、多方面的,缺陷報告質(zhì)量不高是主要因素,同時,調(diào)查發(fā)現(xiàn)由于缺陷報告描述不準(zhǔn)確,40%的長時間未修復(fù)的缺陷可能只修改幾行代碼或修改1 個文件.Karim 等[6]研究高影響力缺陷(HIB)修復(fù)問題,研究發(fā)現(xiàn)缺陷報告質(zhì)量不高是影響缺陷時間修復(fù)的主要因素,同時也發(fā)現(xiàn)測試用例,代碼示例,重現(xiàn)步驟和堆棧跟蹤是代碼修復(fù)的重要因素.Tantithamthavorn 等[7]研究了缺陷建模的pitfalls and challenges 指出缺陷預(yù)測模型實際應(yīng)用的最大問題是缺乏高質(zhì)量的數(shù)據(jù),不能提取預(yù)測模型所需要的高質(zhì)量缺陷特征.Fan 等[8]全面提取報告提交者、修復(fù)者、社交網(wǎng)絡(luò)、缺陷報告描述文本、缺陷報告描述可讀性等特征,采用5 種機器學(xué)習(xí)方法進(jìn)行有效性預(yù)測,并通過特征的是否參與發(fā)現(xiàn)文本類特征是較重要的特征,但其并沒有給出不同特征的重要度排序,也沒有對每一維度下的特征進(jìn)行重要分析.
基于上述的問題,本文在文獻(xiàn)[9-12]等提出的缺陷報告特征描述的基礎(chǔ)上,綜合得到5 個維度28 個特征,給出面向維度和維度內(nèi)特征的重要度排序方法.首先,基于不同維度,采用5 種不同的機器學(xué)習(xí)分類器進(jìn)行有效性判定學(xué)習(xí)和訓(xùn)練,根據(jù)模型預(yù)測的準(zhǔn)確性對每個維度的特征重要性進(jìn)行排序;其次采用XGBoost[13]和GBDT[14]兩個特征選擇常見的方法,對每個維度內(nèi)的特征進(jìn)行排序.將排序結(jié)果推薦給缺陷報告提交者,使其能夠在提交缺陷報告時,更加注重重要度較高的屬性描述,提升缺陷報告的質(zhì)量;將排序結(jié)果推薦給開發(fā)者,可以輔助開發(fā)者更準(zhǔn)確的識別缺陷,實現(xiàn)縮短確認(rèn)和修復(fù)時間的目的.
本文第2 部分綜合歷史文獻(xiàn)給出常見的缺陷描述特征;第3 部分給出特征重要度選擇方法,并給出實驗的設(shè)計方案;第4 部分給出實驗結(jié)果,最后給出本文的總結(jié).
本部分綜述目前文獻(xiàn)在進(jìn)行缺陷有效性判定時提取的特征,共分為5 個維度,并分析每一維度的特征含義及包含的屬性信息.
在Just 等[15]研究表明在軟件修復(fù)缺陷過程中缺陷報告有效性和缺陷發(fā)布者的經(jīng)驗是相關(guān)的.在后續(xù)的研究中他們發(fā)現(xiàn)有經(jīng)驗的開發(fā)者或缺陷報告發(fā)布者發(fā)布的軟件缺陷報告可能被修復(fù)的概率更高.
發(fā)布者經(jīng)驗的維度上,Guo 等的工作提出[9],發(fā)布者的經(jīng)驗是定義了發(fā)布者的能力的一個關(guān)鍵特征.在某一個領(lǐng)域的經(jīng)驗越高,代表著他對這個領(lǐng)域了解的更多.相應(yīng)的,也代表在對應(yīng)領(lǐng)域的經(jīng)驗也相對的豐富.本文定義發(fā)布者經(jīng)驗包括3 個屬性:報告者的報告數(shù)量(bug-num)、缺陷報告的有效率(validrate)和最近缺陷報告數(shù)量(recent-bug-num) 3 種特征.缺陷報告的數(shù)量有效率決定了報告者的基礎(chǔ)經(jīng)驗,理論上缺陷報告越多,也就代表著發(fā)布者的潛在基礎(chǔ)經(jīng)驗越高.但是發(fā)布者有可能在后續(xù)沒有產(chǎn)生相應(yīng)的缺陷報告,而且缺陷報告的數(shù)量也不能代表著缺陷報告的有效性越好.所以提出了最近的報告數(shù)量和有效率.最近的報告數(shù)量決定了報告者的活躍度,代表了開發(fā)者在時間段內(nèi)保持著一定的活躍度和粘性.有效率是指有效缺陷報告和缺陷報告總數(shù)的比率,其中報告者的活躍度使用了120 天內(nèi)的缺陷報告發(fā)布數(shù)量.發(fā)布者經(jīng)驗維度特征如表1所示.
表1 發(fā)布者經(jīng)驗維度特征
缺陷報告定義了軟件缺陷的所有信息,如圖1.一個完整的缺陷報告應(yīng)當(dāng)要求包含對應(yīng)的信息.缺陷報告包含對整個缺陷報告的總結(jié)、缺陷的基本內(nèi)容包括平臺和基本信息、缺陷發(fā)生時的附件或者截圖、缺陷的詳細(xì)描述以及后續(xù)補充評論的內(nèi)容等,這些內(nèi)容構(gòu)成了一個完整的缺陷報告.開發(fā)者會經(jīng)常利用重現(xiàn)步驟、棧軌跡、代碼樣例、測試樣例和截屏等信息處理和修復(fù)缺陷.缺陷報告中缺少這些信息是一個嚴(yán)重的問題,這些問題在缺陷修復(fù)過程中也經(jīng)常遇到.在實驗中,我們用在缺陷報告的描述中有無這些專有信息作為報告有效性的一種推斷.這些專有信息包括棧軌跡(stack trace)、重現(xiàn)步驟(steps to reproduce)、代碼樣例(code samples)、補丁(patches)、測試樣例(test case)和截屏(screenshots).
圖1 缺陷報告樣例553 099
文獻(xiàn)[10,16]的工作介紹了總結(jié)了缺陷報告的結(jié)構(gòu)和內(nèi)容而且研究提出了缺陷報告最重要的階段.缺陷報告的完整度越高,代表著缺陷報告修復(fù)的可能性也越高.所以缺陷報告的完整度也是缺陷報告是否能夠盡快修復(fù)的一個關(guān)鍵特征.
Bettenburg 等[10]在缺陷報告的研究中使用了多個關(guān)鍵的正則表達(dá)從缺陷報告中提取出的關(guān)鍵信息,包括缺陷重現(xiàn)(steps to reproduce)、棧軌跡(stack trace)、測試樣例(test case)、代碼(code samples)、附件(patches)和截圖(screenshots),有無此類信息關(guān)系到缺陷報告的整個完整性.在排除掉信息有效的情況下,缺陷報告包含的內(nèi)容越充分,代表著缺陷報告的完整度越高.所以在完整性維度上,本文使用了上述6 種特征代表了缺陷報告的完整度特征.
定義了缺陷報告的所有關(guān)鍵特征中包括是否包含步驟,截圖,代碼,補丁,測試用例和截圖等.每個特征取1 或0,分別代表缺陷報告中有無對應(yīng)相應(yīng)的信息.完整性維度特征如表2所示.
表2 完整性維度特征
缺陷報告的描述和內(nèi)容會對整個缺陷的閱讀理解產(chǎn)生影響,缺陷報告者在描述缺陷上需要清晰明了,這其中包括缺陷描述的理解程度和的文本閱讀的難度[17].
Zimmermann 等的研究認(rèn)為可讀性是影響缺陷報告的重要因素,缺陷報告的可讀性也與缺陷報告的有效性成正比,缺陷報告的可讀性影響體現(xiàn)在文本閱讀難度和理解難度[11].
要計算可讀性的特征需要對文本中特殊單詞進(jìn)行定義,對于文本中的特殊單詞可以分為復(fù)雜單詞(complex words)、長單詞(long words)和期(period)多音節(jié)詞(polysyllables)這幾個概念進(jìn)行定義.
大部分較為復(fù)雜的單詞其中通常包含3 個或更多音節(jié),所以定義由3 個或更多音節(jié)組成的單詞稱為復(fù)雜單詞,其中不包括專有名詞、行業(yè)用語和地方詞.如果一個單詞中存在超過 6 個字符那么可以定義為長單詞.定義period 可以從單詞是否包含像句號(.)、冒號(:)或大寫的首字母.多音節(jié)詞是從分析提取的文本中組合獲得,由文本的開頭、中間和結(jié)尾3 部分分別取10 個單詞組成3 組句子,則這三組句子中有3 個或更多音節(jié)的單詞稱為多音節(jié)詞.
文本中抽取的所有概念包括字符數(shù)(Characters)、單詞(Words)、音節(jié)(Syllables)、句子(Sentence)、復(fù)雜單詞(ComplexWords)、長單詞(LongWords)、期(Period)和多音節(jié)詞(Polysyllables).
可讀性計算最初應(yīng)用計算文本的理解程度,以便推薦確定是否與人的理解能力相匹配.以上的7 個不同的可讀性計算公式可以涵蓋所有文本的可讀性特征包括:flesch是通過計算元音和音節(jié)數(shù)來定義可讀性的方法[18];lix[19]最初改進(jìn)flesch用在文本的困難度上的測試;fog[20]常用來衡量音節(jié)對可讀性的影響;smog[21]則常被用來衡量多音節(jié)詞對可讀性的影響.kincaid[22]、ari[23]以及coleman-liau[24]都是可讀性的計算,但是與大多數(shù)其他不同,不需要分析單詞的字符內(nèi)容,只需要分析單詞的字符長度,只依賴于字符而不是每個單詞的音節(jié).
通過NLTK 中的readability 包,最后可以得到7 個不同的可讀性特征.通過這7 類特征,可以統(tǒng)計出每個缺陷報告的可讀性特征分布.通過不同的缺陷報告的可讀性特征不同,分析不同缺陷報告可讀性特征的重要度.可讀性維度特征如表3所示.
表3 可讀性維度特征
在缺陷報告中,報告發(fā)布者與開發(fā)者存在密切的問答關(guān)系,而缺陷報告與開發(fā)者存在著分派關(guān)系.缺陷報告的問答關(guān)系可以提取出人員的社交網(wǎng)絡(luò)關(guān)系,問答關(guān)系涉及不同的參與人員,直接體現(xiàn)出不同參與人員的知識水平和社交活躍度.缺陷報告中的每一條評論都包含有參與人員的信息和回復(fù)目標(biāo),本文通過正則表達(dá)式抽取出用戶和回復(fù)關(guān)系,通過參與人員的回復(fù)關(guān)系建立節(jié)點和映射,進(jìn)而轉(zhuǎn)換為所有參與人員的社交網(wǎng)絡(luò)關(guān)系.
Zanetti 等[12]都對缺陷報告的社交網(wǎng)絡(luò)分析中使用了9 種方法,得出社交網(wǎng)絡(luò)的特征關(guān)系表現(xiàn)為9 個相關(guān)特征.在缺陷報告中提取9 個相關(guān)的特征代表了報告發(fā)布者在社交網(wǎng)絡(luò)中的嵌入度,而且具有很好的效果.本文使用了他們的工作在社交網(wǎng)絡(luò)的特征方面選取了同樣的特征處理.社交網(wǎng)絡(luò)維度特征如表4.
表4 社交網(wǎng)絡(luò)維度特征
這9 種特征分別是最大連同分量(lcc-membership)、入度(in-degree)、出度(out-degree)、總度(totaldegree)、聚類系數(shù)(clustering-coefficient)、k-核系數(shù)(k-coreness)、接近中心性(closeness-centrality)、中介中心性(betweenness-centrality) 和特征向量中心性(eigenvector-centrality).
最大連同分量(lcc-membership)表示缺陷報告發(fā)布者所在節(jié)點在社交網(wǎng)絡(luò)中是否屬于最大連通分量.入度(in-degree)、出度(out-degree) 和總度(totaldegree)這3 個特征衡量了發(fā)布者到其他發(fā)布者和開發(fā)者的連接數(shù)量.入度表示通過發(fā)布者節(jié)點的輸入邊與之連接的其他節(jié)點數(shù)量,出度表示通過發(fā)布者節(jié)點的輸出邊與之連接的其他節(jié)點數(shù)量,總度為入度與出度的和,即與發(fā)布者節(jié)點相連接的節(jié)點數(shù)量.入度、出度和總度的特征值越大意味著發(fā)布者在社交網(wǎng)絡(luò)中越活躍.
社交網(wǎng)絡(luò)分解的出k核系數(shù)(k-coreness);局部聚類系數(shù)能夠反映單個節(jié)點的在網(wǎng)絡(luò)中的性質(zhì);全局聚類系數(shù)能夠反映出整個網(wǎng)絡(luò)的特性;聚類系數(shù)(clustering-coefficient)用來表示網(wǎng)絡(luò)中節(jié)點聚集程度的系數(shù).例如發(fā)布者對應(yīng)節(jié)點的聚類系數(shù)越高,說明發(fā)布者和他的臨近節(jié)點在協(xié)作活動中的聯(lián)系越密切;臨近中心性(closeness-centrality)體現(xiàn)一個節(jié)點到所有其它節(jié)點的難易程度:節(jié)點的介數(shù)中心性(betweennesscentrality)是指網(wǎng)絡(luò)中包含此節(jié)點的最短路徑的數(shù)量占所有最短路徑數(shù)量的百分比.某個節(jié)點的介數(shù)中心性越高,說明此節(jié)點對社交網(wǎng)絡(luò)的控制力越強,因為很多信息會從此節(jié)點經(jīng)過;特征向量中心性(eigenvectorcentrality)也是社交網(wǎng)絡(luò)的重要特征.社交網(wǎng)絡(luò)中存在這樣一種概念,連接到中心性高的節(jié)點會增加節(jié)點本身的中心性.
在缺陷報告中有明顯的缺陷分配的關(guān)系和問答關(guān)系.分配關(guān)系僅體現(xiàn)了報告發(fā)布者與開發(fā)者之間的聯(lián)系,其中缺陷報告中只有一條最終的分配關(guān)系.而缺陷報告中的問答關(guān)系卻涉及到多名開發(fā)者和參與者,存在的交互關(guān)系更為復(fù)雜.因此,問答關(guān)系網(wǎng)絡(luò)中會包含更多的信息,能更有效和實際地體現(xiàn)每個節(jié)點在網(wǎng)絡(luò)中的權(quán)重關(guān)系.在實驗中,本文建立了基于問答關(guān)系的社交網(wǎng)絡(luò)圖.
缺陷報告中內(nèi)容的文本挖掘可以幫助缺陷報告的分類,以往對缺陷報告描述內(nèi)容的研究大多使用了文本挖掘進(jìn)行分類[25].
文本表示的特征的工作由早期的詞映射模型表示到神經(jīng)網(wǎng)絡(luò)模型經(jīng)歷了多種變遷,其中經(jīng)典的模型有Word2Vec[26]和Glove[27].其方法是把文本中的單詞轉(zhuǎn)化為向量,然后在相近的單詞余弦相似度較小的原理來做分類,早期詞向量的模型生成的語義與上下文無關(guān),無法更好、更完整的表達(dá)文本語義的信息.
Fan 等[8]使用了文本內(nèi)容的數(shù)據(jù)集,分別放入分類器中進(jìn)行分類和訓(xùn)練.所有的訓(xùn)練集訓(xùn)練出一個分類器,將此分類器用于對測試集的分類,用分類器預(yù)測測試集中每篇缺陷報告文本特征向量有效的概率,將此概率作為測試集的一個文本度量.這種方法使用的基于數(shù)據(jù)集的學(xué)習(xí)分類,使得文本的有效性可能會高于原本文本的度量值.基于數(shù)據(jù)集的分類器很大程度上會依賴于數(shù)據(jù)集本身的結(jié)果,使文本的度量值可能偏高.
在2018年提出后成為了最具代表性的預(yù)訓(xùn)練語言模型BERT (Bidirectional Encoder Representations from Transformers)模型[28].BERT 使用了attention 注意力機制對文本中的句子進(jìn)行建模和雙向深度的transformer 的訓(xùn)練模型,采用兩階段模型進(jìn)行預(yù)訓(xùn)練和微調(diào),使通過BERT 模型表達(dá)的文本向量包含更多的文本語義信息.
本維度缺陷描述信息主要包含綜述,描述和評論3 類信息.標(biāo)題作為一個缺陷報告的總結(jié)內(nèi)容、包含的目的性和錯誤信息更加的準(zhǔn)確和精簡;描述信息是缺陷報告出錯信息的詳細(xì)描述,包含作者出錯的棧軌跡信息、缺陷的現(xiàn)象描述及產(chǎn)生缺陷時所執(zhí)行的測試用例等信息,缺陷詳細(xì)描述信息可以幫助開發(fā)者更好的重現(xiàn)缺陷;評論信息則是在缺陷修復(fù)過程中,報告者、修復(fù)者和其他參與用戶關(guān)于缺陷的各種討論信息,是逐步發(fā)現(xiàn)缺陷根因和缺陷需要采用的方法匯總.
采用BERT 模型分別對標(biāo)題、描述和評論3 類信息分別進(jìn)行訓(xùn)練,分別產(chǎn)生3 類文本信息的作為文本維度的3 個特征:標(biāo)題特征和描述特征和評論特征,共同代表了文本特征的總體.文本維度特征如表5.
表5 文本維度特征
在缺陷報告庫中,其中缺陷報告狀態(tài)為FIXED(被修復(fù))、WONTFIX(真實的缺陷,但由于資源或權(quán)限等問題無法修復(fù))的缺陷報告是有效的缺陷報告,而缺陷報告狀態(tài)為DUPLICATE (重復(fù))、INVALID (無效)、WORKSFORME (無法重現(xiàn))和INCOMPLETE (不完整)的缺陷報告為無效報告.
使用Python 從Eclipse 的缺陷報告庫中爬取截止到2019年8月份的所有缺陷報告信息.并且提取出的所有文本信息按照特征值作為處理后并歸一化得到缺陷報告中所有的特征.按照缺陷報告的狀態(tài)對所有的缺陷報告做分類統(tǒng)計,統(tǒng)計的報告數(shù)量和缺陷報告的問答數(shù)量如表6所示.
表6 報告數(shù)據(jù)統(tǒng)計
表6中實驗選取缺陷報告數(shù)據(jù)為缺陷報告的確認(rèn)階段和修復(fù)階段;在缺陷報告的確認(rèn)階段針對缺陷報告的特征重要度時選取無效的缺陷報告:包含resolution為INVALID (無效)、WORKSFORME (無法重現(xiàn))和INCOMPLETE (不完整)的缺陷報告.其中重復(fù)DUPLICATE的缺陷報告認(rèn)為仍然擁有相對有效的信息,會對實驗的準(zhǔn)確度產(chǎn)生影響.選取所有有效缺陷報告是排除無效的缺陷報告的所有缺陷報告,包含狀態(tài)為FIXED(被修復(fù))、DUPLICATE(重復(fù))的缺陷報告.
在缺陷重要度排序中,本文遵循在缺陷的各類預(yù)測模型中,不同特征在相同方法預(yù)測越準(zhǔn)確特征重要度越高的判定標(biāo)準(zhǔn).本文分別考慮不同維度下特征集合的重要性和同一維度下不同特征的重要性.在不同維度的排序中,每一維度都包含多個特征,通過多種機器學(xué)習(xí)分類方法的有效性判定,根據(jù)準(zhǔn)確率、召回率和F1 值綜合確定每個維度的重要性,從而形成每個維度的排序;在同一維度的不同特征排序中,采用基于決策樹的嵌入方法進(jìn)行維度內(nèi)的每個特征排序.
采用有效性預(yù)測模型進(jìn)行重要度排序.有效性預(yù)測不僅是缺陷確認(rèn)階段的關(guān)鍵活動,也是影響缺陷分配質(zhì)量的關(guān)鍵活動.為了保證結(jié)果的客觀性和數(shù)據(jù)的有效性,考慮到不同的分類方法對分類效果可能效果不同,因此我們使用了多層感知機,樸素貝葉斯,決策樹,支持向量機,邏輯回歸5 種常用的機器學(xué)習(xí)方法對缺陷報告每個維度的特征集合進(jìn)行有效性預(yù)測,根據(jù)預(yù)測精度進(jìn)行特征重要度排序.
為了分析內(nèi)部特征的重要性影響,在對3 個維度的特征使用了特征重要性排序,是為了獲得每個特征的重要度,分別使用了在本文數(shù)據(jù)集更適合的XGBoost和GBDT (Gradient Boosting Decision Tree)對維度的單獨特征進(jìn)行排序,得到特征排名和特征重要度.
GBDT 在Facebook 中用于自動發(fā)現(xiàn)有效的特征和特征組合,也在淘寶的搜索和預(yù)測中發(fā)揮了重要的作用.XGBoost 和GBDT 兩種方法實際上都是屬于樹形模型,都具有高解釋性,而且可以處理多種混合類型的特征,具有伸縮不變形,對于缺失值也可以自然處理,可以更好的處理缺陷報告多種維度的特征.GBDT 使用梯度下降,使用多個弱分類器的加權(quán)求和合成強分類器,每次迭代的過程中會產(chǎn)生一個弱分類器,而當(dāng)前的弱分類器在之前的分類器的殘差基礎(chǔ)上進(jìn)行訓(xùn)練,GBDT 使用回歸樹模型而XGBoost 使用了L1,L2 正則化項的CART 樹模型.
樹模型可以定義為所有樹組成的函數(shù)空間,回歸樹可以看作為一個把特征向量映射為某個值的函數(shù).
特征j的全局重要度通過特征在單棵樹中的重要度的平均值來衡量,M是樹的數(shù)量.則特征j在單棵樹中的重要度的如下:
其中,L為樹中的葉子節(jié)點數(shù)量和,L?1即為樹的非葉子節(jié)點數(shù)量(構(gòu)建的樹都是具有左右孩子的二叉樹),vt是和節(jié)點t相 關(guān)聯(lián)的特征,節(jié)點t分裂之后平方損失的減少值為.
為了探討單獨特征對于缺陷報告的影響,基于特征選擇器的原理對于每一個特征分別使用XGBoost和GBDT 這兩種方法.實驗中單獨對每個維度單獨特征進(jìn)行特征重要度排序時,單獨使用每一個維度的特征而排除其他維度特征的影響,以每個特征所在缺陷報告是否最終修復(fù),使用兩種特征選擇方法計算每個特征對其結(jié)果的影響,最后兩種方法得到的影響率轉(zhuǎn)化為百分比,取兩種方法結(jié)果的均值作為最后的排名的依據(jù).
為了衡量特征選取的性能,首要選取使用分類的準(zhǔn)確率(Precision,P)和召回率(Recall,R),但是準(zhǔn)確率和召回率也不能代表整個特征選取的性能指標(biāo).若希望將有效的缺陷報告盡可能多地預(yù)測出來,則可通過增加要預(yù)測的報告的數(shù)量來解決,將所有報告預(yù)測為有效,真正有效的報告必然被預(yù)測為有效,但這樣會降低查準(zhǔn)率;若希望預(yù)測出的有效報告中真正有效的比例盡可能高,則只將有效的可能性大的報告預(yù)測為有效,但這樣會漏掉不少真正有效的報告,造成查全率較低.因此,準(zhǔn)確率與召回率是一對矛盾的度量.如果部分樣本準(zhǔn)確率高,而小部分樣本沒有被召回則我們更要關(guān)注樣本F1 值的情況,所以在實驗性能的度量方面,分別使用了準(zhǔn)確率、召回率和F1 值作為效果對比.表7為分類結(jié)果混淆矩陣.
表7 分類結(jié)果混淆矩陣
為了對比維度上的重要度,本文首先將缺陷報告數(shù)據(jù)集首先按照對應(yīng)屬性維度分為5 組.輸入每組的數(shù)據(jù)包含各自維度的特征,缺陷報告的是否有效作為數(shù)據(jù)判定標(biāo)準(zhǔn),分別對數(shù)據(jù)集采用分層隨機采樣策略進(jìn)行劃分,其中使用了30% 的數(shù)據(jù)集作為測試集和70%的訓(xùn)練集作為樣本進(jìn)行了30 次迭代實驗,計算最后結(jié)果度量的平均值,然后進(jìn)行比較.同時為了驗證每個分類方法對于綜合維度分類的準(zhǔn)確性,我們計算了所有維度的分類效果的平均值.
實驗中使用了5 種不同的分類方法,首先對于每個維度的評估值如表8所示,經(jīng)試驗表示在文本維度和發(fā)布者經(jīng)驗維度方面兩者對于不同的方法各有優(yōu)劣,也從側(cè)面反應(yīng)了對于缺陷報告來講發(fā)布者經(jīng)驗和文本是重要的維度.另外我們也發(fā)現(xiàn)在綜合所有維度邏輯回歸和支持向量機對于本文數(shù)據(jù)的分類效果最好.
表8 特征維度重要度
可讀性以及社交網(wǎng)絡(luò)特征不能很好的表征每個單獨特征對缺陷報告的影響,所以實驗僅對完整性,發(fā)布者經(jīng)驗以及文本做特征重要度排序,以此來驗證缺陷報告中涉及的特征對于缺陷報告有效性的影響.
在報告者經(jīng)驗中,特征選擇得到的特征重要度為圖2所示,在報告者經(jīng)驗中,通過兩種方法的特征選擇結(jié)果發(fā)現(xiàn):缺陷報告數(shù)量以及缺陷報告有效率特征占比均高于最近缺陷報告數(shù)量;其次缺陷報告有效率對缺陷報告有效性的影響達(dá)到了48.9%.基于此分析報告者的歷史發(fā)布數(shù)量和報告的有效率對于缺陷報告的最終是否修復(fù)影響更大.雖然報告者發(fā)布的缺陷數(shù)量越多以及缺陷報告發(fā)布者的歷史缺陷報告有效率越高則對其以后發(fā)布缺陷報告修復(fù)的影響更大,但也并不是絕對的,需要綜合最近缺陷報告的數(shù)量等綜合影響.
而在完整性的維度中如圖3所示,完整性的特征較多,分布可能不明顯.通過兩種特征選擇的方法可以發(fā)現(xiàn):在缺陷報告的完整性方面,堆棧以及截圖特征的影響率均優(yōu)于其他特征,最高的影響率達(dá)到了35.7%,表明如果缺陷報告中包含棧軌跡(stack traces)的缺陷報告更容易最終被修復(fù).棧軌跡和截圖是完整性維度中包含最多的特征之一,其中包含了重要的信息,而且容易上傳和進(jìn)行提交,因此對于缺陷修復(fù)的影響也可能更大.
圖2 報告者經(jīng)驗特征重要度
圖3 完整性特征重要度
在文本維度中定義了總結(jié),描述和評論中的特征,使用了BERT 生成向量特征能夠更好的表示文本特征的差異,在試驗結(jié)果中,評論文本內(nèi)容的特征重要度要優(yōu)于其他兩項達(dá)到了58.2%的占比,其次是描述文本的重要度如圖4所示.由此發(fā)現(xiàn):由于評論包含的文本信息包含更多與開發(fā)者交互的問答內(nèi)容,能夠在缺陷報告提交后及時與開發(fā)者交流和補充相關(guān)信息,其次缺陷報告描述的信息是開發(fā)者能夠與提交者交互的重要支撐.而標(biāo)題文本則所占的重要度更低,可能由于標(biāo)題文本的字符數(shù)較少而且包含的有效信息更少的原因.
圖4 文本特征重要度
由此可見,在本文分析的3 種特征維度的單獨特征分析結(jié)果表明:對于報告者首先應(yīng)當(dāng)著重完善缺陷報告本身的質(zhì)量和提交更多的缺陷報告;對于缺陷報告完整度本身,應(yīng)當(dāng)盡量提交棧軌跡和截圖,也需要完善補充所有的內(nèi)容;對于文本維度而言報告者應(yīng)當(dāng)盡量完善描述的同時,需要在發(fā)布缺陷報告后與開發(fā)者更多的交互;
在缺陷報告的特征當(dāng)中,每一維度對應(yīng)的特征的重要度不同,報告者對于缺陷報告的關(guān)注度也不同.帶來的缺陷報告的有效性的判定也是不同的.所以報告者對于缺陷報告特征重要度的關(guān)注度其實間接著影響了缺陷報告的有效性以及后續(xù)缺陷報告被修復(fù)的可能性.本文首先綜合所有維度提取出缺陷報告的全部特征信息,然后對于每一維度的特征重要度進(jìn)行了分析,通過這些實驗和統(tǒng)計做出的分析推薦給缺陷報告的報告者以及開發(fā)人員,希望他們關(guān)注于缺陷報告中特征的重要度,來提高缺陷報告的有效性和修復(fù)成功率.但本文沒有考慮時間對于缺陷報告重要度的影響,修復(fù)的效率也是影響特征重要度的關(guān)鍵.其中缺陷報告修復(fù)及確認(rèn)時間的長短,同樣對缺陷報告的特征本身有很重要的影響.未來基于缺陷報告每個特征的重要度和特征值,研究作為預(yù)測缺陷報告是否可以有效地面向用戶和開發(fā)者推薦缺陷報告.