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