国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于聚類和關(guān)鍵詞提取的軟件缺陷分析方法

2021-03-23 09:39:02高俊婷張麗萍趙鳳榮
關(guān)鍵詞:準(zhǔn)確率權(quán)重聚類

高俊婷,張麗萍,趙鳳榮

(內(nèi)蒙古師范大學(xué) 計(jì)算機(jī)科學(xué)技術(shù)學(xué)院,內(nèi)蒙古 呼和浩特 010022)

0 引 言

軟件缺陷[1-3]通常以缺陷報(bào)告的形式存儲(chǔ)在缺陷跟蹤系統(tǒng)中[4],因此缺陷分析首要工作是對(duì)缺陷報(bào)告進(jìn)行分析。缺陷報(bào)告數(shù)據(jù)量大、信息繁雜,修復(fù)缺陷耗時(shí)長成本高,傳統(tǒng)的人工分析已經(jīng)無法滿足大規(guī)模的軟件缺陷修復(fù)需求。

本文提出一種基于K-Means和主題模型的軟件缺陷分析方法DAKSM(defect analysis method based on K-Means and subject model)。該方法將聚類和關(guān)鍵詞提取共同應(yīng)用于軟件缺陷分析中,在聚類過程中加入無用詞和同義詞分析并引入粒子群算法,提高聚類準(zhǔn)確率。在關(guān)鍵詞提取部分加入通用關(guān)鍵詞分析,提高關(guān)鍵詞的針對(duì)性,最終將缺陷的類型和潛在表達(dá)內(nèi)容直觀地呈現(xiàn)給修復(fù)人員。由于目前缺陷追蹤系統(tǒng)大多為英文版本,因此缺陷報(bào)告大部分為英文,該方法只適用于英文缺陷報(bào)告分析。若需要分析中文缺陷報(bào)告,則需在本文方法基礎(chǔ)上將英文文本分析算法改進(jìn)為中文文本分析算法,使之適應(yīng)中文缺陷報(bào)告分析。實(shí)驗(yàn)結(jié)果表明,該方法在英文缺陷報(bào)告的聚類平均準(zhǔn)確率能達(dá)到81%。

1 相關(guān)工作

缺陷分析是對(duì)軟件開發(fā)過程中產(chǎn)生的缺陷信息進(jìn)行分類和理解[5],將缺陷相關(guān)信息提供給修復(fù)人員和開發(fā)人員,使修復(fù)人員更快速地解決缺陷,了解缺陷產(chǎn)生的原因以避免此類缺陷再次產(chǎn)生。缺陷分析范圍廣泛、方法眾多,現(xiàn)有缺陷分析主要分為人工分析方法和自動(dòng)分析方法。

人工分析方法是通過開發(fā)人員的經(jīng)驗(yàn)對(duì)缺陷報(bào)告進(jìn)行分析,主要分為單屬性、多屬性分析[6,7]、定性和定量4種分析方法。定性分析主要有根本原因分析法(root cause analysis,RCA)、缺陷注入-發(fā)現(xiàn)矩陣分析法(DRE/DRM)、軟件故障樹分析法(software fault tree analysis,SFTA)、缺陷消除模型分析(defect removal model analysis,DRM)等方法;定量分析方法主要有(orthogonal defect classification,ODC)[8]和異常分類標(biāo)準(zhǔn)IEEE[9]等。

由于軟件規(guī)模和數(shù)量的增大,人工分析過于耗費(fèi)資源,于是研究人員致力于尋找軟件缺陷自動(dòng)分析方法。LiGuo Huang等提出一種自動(dòng)ODC分類方法[8],對(duì)每一個(gè)缺陷類別建立一個(gè)支持向量機(jī)(support vector machine,SVM)分類器。該方法雖然最終分類結(jié)果比較好,但是由于只分析了某公司社交網(wǎng)絡(luò),導(dǎo)致結(jié)論通用性和代表性較低。

Thung等提出了一種缺陷自動(dòng)分類框架和分類標(biāo)準(zhǔn)[10],獲取源代碼和缺陷報(bào)告,將源代碼轉(zhuǎn)換成抽象語法樹(abstract syntax tree,AST),然后用SVM對(duì)文本特征和修改特征進(jìn)行分類。該方法分類粒度較粗,且只分析500個(gè)缺陷,數(shù)據(jù)量較少。

夏鑫等更注重缺陷的觸發(fā)方式,他們提出了基于觸發(fā)方式的缺陷自動(dòng)分類模型[11]。該方法將模糊邏輯作為特征提取方法,使分類效果更加準(zhǔn)確,但該方法只將缺陷分為2個(gè)類型,對(duì)開發(fā)人員理解缺陷的幫助有限,還需開發(fā)人員進(jìn)一步分析理解缺陷。

昆明理工大學(xué)的王延飛認(rèn)為由于軟件是給客戶使用的[12],所以軟件的一部分缺陷是用戶提出的,并且軟件缺陷描述大部分存在于軟件的負(fù)面評(píng)論中,所以使用情感傾向分析方法重點(diǎn)分析軟件評(píng)論。但評(píng)論包含無用信息較多,僅分析評(píng)論不具代表性。

大連理工大學(xué)的劉文杰等重點(diǎn)分析缺陷的嚴(yán)重性[13],分別組合并對(duì)比了不同特征表示方法和特征選擇方法以及不同分類算法,最終得出各部分最優(yōu)方式,但并未提出最優(yōu)組合方式。

Indu Chawla等運(yùn)用模糊邏輯的分類方法,將缺陷分為bug、特性增強(qiáng)和其它請(qǐng)求[14],實(shí)驗(yàn)驗(yàn)證該方法優(yōu)于Pingclasai方法。但該方法收集到的原始數(shù)據(jù)集質(zhì)量不高,嚴(yán)重影響分類性能。

另外,本團(tuán)隊(duì)的劉樹毅等在缺陷預(yù)測(cè)方向提出了一種融合多策略特征篩選的跨項(xiàng)目軟件缺陷預(yù)測(cè)方法[15]。該方法首先使用多策略篩選方法與過采樣方法進(jìn)行數(shù)據(jù)預(yù)處理;然后利用代價(jià)敏感的域自適應(yīng)方法進(jìn)行分類。該方法可以較好進(jìn)行軟件缺陷預(yù)測(cè),不足之處在于對(duì)屬性數(shù)量改變所帶來分類性能突變估計(jì)不足,可能會(huì)導(dǎo)致計(jì)算資源的浪費(fèi)、跨項(xiàng)目失效問題。

綜上所述,大多數(shù)自動(dòng)分析方法都要依據(jù)經(jīng)驗(yàn)先制定分類標(biāo)準(zhǔn),將缺陷進(jìn)行人工標(biāo)注,然后提取特征并用機(jī)器學(xué)習(xí)方法將缺陷進(jìn)行分類,但是這種方法將經(jīng)驗(yàn)與數(shù)據(jù)分離,分類魯棒性較低;在提取特征方面考慮信息單一,沒有考慮冗余特征和特征之間的位置關(guān)系;另外還需人工標(biāo)注,消耗資源,最終分類后的信息有限。因此,本文針對(duì)這一問題,使用聚類和關(guān)鍵詞提取的方法分析軟件缺陷,將缺陷類型和潛在信息提供給修復(fù)人員,使缺陷可理解性更強(qiáng),幫助修復(fù)人員更快速地了解缺陷并能更好地解決缺陷。

2 基于K-Means和主題模型的缺陷分析方法

2.1 研究框架

本文從數(shù)據(jù)角度出發(fā)提出一種軟件缺陷自動(dòng)分析的方法,即基于K-Means和主題模型的缺陷分析方法DAKSM。DAKSM流程如圖1所示。

圖1 DAKSM流程

該方法分為2個(gè)階段:聚類和關(guān)鍵詞提取。在聚類階段,首先輸入缺陷報(bào)告,然后對(duì)缺陷報(bào)告預(yù)處理,得到清洗后的缺陷報(bào)告文本。接下來對(duì)特征進(jìn)行篩選和處理,獲取缺陷有效特征,然后進(jìn)行文本表示和權(quán)重計(jì)算,最后進(jìn)行聚類,輸出缺陷類型。在關(guān)鍵詞提取階段,將聚類后的缺陷類型作為輸入,先提取主題詞,然后過濾主題詞,最后再一次提取主題詞,將缺陷類型和該類型主題詞作為關(guān)鍵詞輸出。

2.2 聚 類

大部分的缺陷分析方法要先確定缺陷的類型,而當(dāng)前的缺陷類型都是對(duì)已有缺陷的總結(jié)和積累。由于缺陷的產(chǎn)生原因和形式是多樣的,這種基于經(jīng)驗(yàn)的方法并不能良好地適應(yīng)缺陷的多樣性。本文從缺陷報(bào)告的數(shù)據(jù)自身出發(fā),采用聚類的方法科學(xué)地將缺陷劃分為幾個(gè)類型,聚類過程如圖2所示。

圖2 聚類流程

本文將缺陷報(bào)告作為輸入,選取摘要、詳細(xì)描述和評(píng)論作為分析對(duì)象。首先對(duì)缺陷報(bào)告進(jìn)行預(yù)處理,包括標(biāo)記化、分詞、去停用詞和詞形轉(zhuǎn)化;接著使用詞頻統(tǒng)計(jì)、特征篩選和特征統(tǒng)一的方法來獲取有效特征;下一步進(jìn)行文本表示、TF-IDF計(jì)算權(quán)重值和粒子群算法優(yōu)化權(quán)重值;最后用K-Means方法聚類,輸出缺陷類型。聚類實(shí)現(xiàn)方法如算法1所示。

算法1: 聚類算法

Input: 缺陷報(bào)告xml文件

Output: 聚類后結(jié)果

(1)str=file.readline();//按行讀取文件

(2)Whilestr=file.readline()!=nulldo

(3)Ifstr==""||str==""||str=""Then//

提取bug_id,comment,thetext中的信息。

(4)str.toLowerCase();//轉(zhuǎn)成小寫

(5)str.remove("’");//去掉單引號(hào)。

(6)IfWords.count<=3Then

(7)str.remove(Words);//移除詞頻小于3的單詞。

(8)Endif

(9)str.remove(Uselesswords);//去除無用詞

(10)Fori=0:Synonym.length-1to

(11)Forj=0:Synonym[i].length-1to

(12)str.replace(Synonym[i][j],Synonym[i][0];)//

一組同義詞都被替換為該組第一個(gè)單詞。

(13)Endfor

(14)Endfor

(15)bug=bug+str+" ";

(16)Endif

(17)Endwhile

(18)fori=0:bug.length-1do

(19)bug[i].weight=w_TFIDF[i]*w_PSO[i];//計(jì)算每個(gè)特征的權(quán)重值

(20)Endfor

(21)Clustering=SimpleKMeans(bug);//K-Means取類后的結(jié)果

(22)returnClustering;

2.2.1 預(yù)處理

首先,獲取缺陷報(bào)告,提取缺陷報(bào)告中的id號(hào)(標(biāo)簽)、摘要(標(biāo)簽)、詳細(xì)描述(第一個(gè)中的標(biāo)簽)和評(píng)論(除第一個(gè)以外的中的標(biāo)簽),然后對(duì)缺陷數(shù)據(jù)進(jìn)行預(yù)處理。預(yù)處理的過程為標(biāo)記化數(shù)據(jù),去掉數(shù)據(jù)中的標(biāo)點(diǎn)符號(hào)和數(shù)字等;接著對(duì)缺陷報(bào)告進(jìn)行分詞,將句子轉(zhuǎn)換成詞語的模式;然后去掉停用詞,即高頻率出現(xiàn)但是對(duì)文本分析沒有作用的單詞;最后進(jìn)行詞形還原,將過去式、分詞、復(fù)數(shù)形式的單詞還原為原型形式,但特殊單詞除外,例如window,這個(gè)單詞單數(shù)的window和復(fù)數(shù)的windows是含義完全不同的2個(gè)單詞,所以不將windows轉(zhuǎn)換成window。

2.2.2 獲取有效特征

接下來進(jìn)入特征提取階段。由于被處理的缺陷數(shù)據(jù)是多樣的語言文本形式,所以會(huì)出現(xiàn)大量單詞。為防止在文本表示時(shí)造成維度爆炸,本文在聚類之前對(duì)單詞進(jìn)行有效特征提取。提取有效特征也會(huì)降低聚類復(fù)雜度,提高聚類準(zhǔn)確率。該階段主要對(duì)單詞特征進(jìn)行處理,目的是提取對(duì)缺陷聚類而言有用處的單詞。

(1)詞頻統(tǒng)計(jì)和特征移除

根據(jù)對(duì)數(shù)據(jù)的分析發(fā)現(xiàn)詞頻小于3的大多數(shù)為拼寫錯(cuò)誤或?qū)θ毕轃o用的單詞。因此,該方法首先要去掉出現(xiàn)頻率小于3的單詞,該方法可將特征維度縮減到原來的1/3。

(2)特征篩選

將特征移除后仍然有很多單詞是經(jīng)常出現(xiàn)但是對(duì)缺陷數(shù)據(jù)聚類而言沒有作用的單詞,特征篩選目的是過濾掉這些單詞,本文將這些詞稱為無用詞。首先分析出無用詞,如yeah、nightly、hmm等單詞可能是評(píng)論中摻雜的無用詞;然后創(chuàng)建無用詞列表,表1列舉了部分無用詞。在分析無用詞的時(shí)候,我們使用人工分析的方法,考慮該單詞的含義和作用,再考慮去掉該單詞之后對(duì)整個(gè)語句的理解,如果不影響整句話含義,則設(shè)為無用詞。通過對(duì)3款軟件1500個(gè)缺陷的人工分析得到無用詞列表。該列表含有web軟件中大部分無用詞。然后設(shè)計(jì)特征過濾算法,在特征移除后的特征子集上自動(dòng)過濾掉無用詞列表中的單詞。實(shí)驗(yàn)表明使用經(jīng)過特征過濾后的特征子集聚類效果好于未經(jīng)過特征過濾的特征子集。

(3)特征統(tǒng)一

文檔中可能出現(xiàn)實(shí)際意義相同但是表達(dá)不同的單詞,例如:color可以被表達(dá)為red、blue和black等。這些單詞雖然含義相同,但由于表達(dá)形式不同,所以它們?cè)谖臋n向量中是不同的?;谶@個(gè)問題,本文提出一種針對(duì)軟件缺陷聚類的特征統(tǒng)一處理方法,特征統(tǒng)一是指在軟件缺陷聚類之前,將隱藏含義相同的單詞統(tǒng)一成實(shí)際意義單詞。這樣做將降低特征維度,使聚類更準(zhǔn)確。該方法首先分析出隱藏含義相同的單詞,創(chuàng)建特征統(tǒng)一列表,部分特征統(tǒng)一見表2,將特征統(tǒng)一列表中的單詞統(tǒng)一成實(shí)際意義單詞。通過對(duì)3款軟件1500個(gè)缺陷進(jìn)行分析創(chuàng)建了特征統(tǒng)一表,該表包含大部分web軟件應(yīng)該統(tǒng)一含義的單詞。然后設(shè)計(jì)特征統(tǒng)一算法自動(dòng)將單詞進(jìn)行統(tǒng)一。實(shí)驗(yàn)結(jié)果表明,聚類前使用特征統(tǒng)一方法將提高聚類準(zhǔn)確率。

表1 無用詞

表2 特征統(tǒng)一

2.2.3 文本表示

文本表示是將計(jì)算機(jī)無法直接處理的無結(jié)構(gòu)語言文本轉(zhuǎn)化為可處理形式。向量空間模型(VSM)是一種文本表示模型。該模型由特征項(xiàng)、特征權(quán)重和特征向量組成[16]。使用該模型需要先確定文本的特征項(xiàng)和權(quán)重值,對(duì)于英文文本來說,一個(gè)詞即為一個(gè)特征,因此本文選用單詞作為VSM模型中的輸入特征。

在權(quán)重計(jì)算方面,本文提出一種TF-IDF與粒子群相結(jié)合的權(quán)重計(jì)算方法。一般對(duì)于權(quán)重計(jì)算只選用TF-IDF、信息增益(IG)等方法,由于軟件缺陷的特殊性,我們認(rèn)為缺陷報(bào)告中摘要是缺陷的高度概括,所以將摘要設(shè)為重點(diǎn)分析部分,同時(shí)描述也是缺陷分析不可缺少的部分,評(píng)論集合了不同開發(fā)人員的多種角度對(duì)缺陷的描述。因此本文選用摘要、描述和評(píng)論作為分析對(duì)象。由于不同位置的特征提供的信息質(zhì)量不同,所以需要根據(jù)單詞存在位置的不同而設(shè)置不同的權(quán)重。為了分析不同位置與權(quán)重的關(guān)系,本文在權(quán)重計(jì)算上采用粒子群優(yōu)化算法來計(jì)算特征在不同位置的最優(yōu)權(quán)重。該方法對(duì)權(quán)重值的計(jì)算分為2步,首先通過TF-IDF計(jì)算出基本權(quán)重,然后再通過基于粒子群的特征權(quán)重算法計(jì)算出最終最優(yōu)特征權(quán)重。特征權(quán)重計(jì)算公式為

wword(i)=wTF-IDF×wpso

(1)

wword(i)為第i個(gè)特征的權(quán)重;wTF-IDF為通過TF-IDF所計(jì)算出的權(quán)值;wpso為通過基于粒子群的特征權(quán)重算法計(jì)算過后的權(quán)重。

(1)TF-IDF(term frequency-inverse document frequency)

首先使用TF-IDF方法計(jì)算基本權(quán)重值,TF-IDF是一種常用的加權(quán)技術(shù)[17]。TF(term frequency)為詞頻,表示單詞在文檔中出現(xiàn)的頻率,TF計(jì)算公式如下

(2)

ni,j是該詞在文件中的出現(xiàn)次數(shù),而∑knk,j則是在文件中所有字詞的出現(xiàn)次數(shù)之和。IDF(inverse document frequency)為逆文本頻率,主要思想為包含該詞條的文檔越少,IDF值越大,該詞的區(qū)分度越高,IDF計(jì)算公式如下

(3)

其中,|D|為語料庫中的文件總數(shù),分子為包含詞語的文件數(shù)目,如果該詞語不在語料庫中,就會(huì)導(dǎo)致分母為零,因此一般情況下使用1+|{d∈D:t∈d}|作為分母。TF-IDF值為TF*IDF,本文的TF-IDF值由WEKA工具計(jì)算,WEKA是一款JAVA環(huán)境下開源的機(jī)器學(xué)習(xí)工具。本文使用StringToWordVector實(shí)現(xiàn)TF-IDF權(quán)重計(jì)算[18]。計(jì)算結(jié)果如圖3所示。

圖3 TF-IDF計(jì)算結(jié)果

(2)基于粒子群算法的特征權(quán)重計(jì)算

粒子群算法是由J.Kennedy和R.Eberhart開發(fā)的一種生物啟發(fā)式算法[19]。粒子群算法以其實(shí)現(xiàn)容易、精度高、收斂快等優(yōu)點(diǎn)引起了學(xué)術(shù)界的重視[20,21]。利用粒子群算法可以有效地解決權(quán)重優(yōu)化的問題。

在粒子群算法中,每一個(gè)單詞在不同位置的權(quán)重值數(shù)組被抽象成一個(gè)粒子,由N個(gè)粒子組成一個(gè)種群。其中第i個(gè)粒子的位置被表示成一個(gè)D維的向量Xi=(xi1,xi2,…,xiD),i=1,2,…,N,并且它的速度也被表示成一個(gè)D維的向量Vi=(vi1,vi2,…,viD),i=1,2,…,N。所有粒子的適應(yīng)值都由適應(yīng)度函數(shù)計(jì)算得到,判斷調(diào)整權(quán)重以后結(jié)果的好壞需要從兩方面考慮:一方面是聚類的聚集程度,可以由K-Means算法的SquareError值得到,SquareError值越小分類的結(jié)果越好;另一方面是聚類的準(zhǔn)確率,由正確分類的個(gè)數(shù)除以總個(gè)數(shù)得到,正確率越高分類效果越好。所以本文的適應(yīng)度函數(shù)如下

(4)

其中,k1,k2為算法參數(shù),s為聚類的SquareError值,a為聚類的準(zhǔn)確率。此外,每個(gè)粒子還具有記憶功能,會(huì)記錄當(dāng)前搜索到的最優(yōu)位置,稱為個(gè)體極值pbest=(pi1,pi2,…,pgD),i=1,2,…,N,代表個(gè)體經(jīng)驗(yàn)。此外,整個(gè)種群當(dāng)前搜索到的最優(yōu)位置稱為全局極值gbest=(pi1,pi2,…,pgD),代表種群經(jīng)驗(yàn)。每個(gè)粒子的速度更新由3部分組成:第一是慣性速度,代表粒子有維持自己之前速度的趨勢(shì);第二是認(rèn)知速度,代表粒子有靠近個(gè)體最優(yōu)位置的趨勢(shì);第三是社會(huì)速度,代表粒子有靠近群體最優(yōu)位置的趨勢(shì)。速度和位置更新公式如下

vid=ωvid+c1r1(pid-xid)+c2r2(pgd-xid)

(5)

xid=xid+vid

(6)

其中,ω是慣性權(quán)重,c1,c2是學(xué)習(xí)因子,r1和r2為[0,1]范圍內(nèi)的隨機(jī)數(shù)。i=1,2,…,N為群體大小。粒子將會(huì)在目標(biāo)搜索空間中追隨當(dāng)前的最優(yōu)粒子在解空間中搜索。

慣性權(quán)重ω是影響算法性能的重要參數(shù)。文獻(xiàn)[22]提出了一種慣性權(quán)重線性微分遞減的方法,慣性權(quán)重的計(jì)算公式如下

(7)

(8)

由公式可以看出,在算法初期粒子的慣性權(quán)重較大,提高了粒子的全局搜索能力,保證粒子的多樣性。而在算法后期粒子的慣性權(quán)重較小,提高了粒子的局部搜索能力,有利于找到最優(yōu)解。該算法流程如圖4所示。

圖4 粒子群算法流程

2.2.4 聚類

大部分缺陷分析方法都需要在訓(xùn)練模型前將缺陷手工分類,K-Means是一種無監(jiān)督學(xué)習(xí)技術(shù),可省去人工分類時(shí)間,但是該方法需要在聚類后人工分析聚類結(jié)果。分析發(fā)現(xiàn),某些缺陷可被分到不同類別,相較于只能按照標(biāo)簽分類的方法,該方法靈活度較高。

在模型構(gòu)建階段,本文采用K-Means算法對(duì)缺陷進(jìn)行聚類。K-Means算法是一種基于距離的聚類方法,該算法認(rèn)為兩個(gè)對(duì)象之間的歐氏距離越近,則它們相似度越大,且屬于同一個(gè)類型的可能性也更大。算法首先需要設(shè)定K個(gè)簇中心點(diǎn),隨機(jī)選取中心點(diǎn)位置,然后計(jì)算對(duì)象與中心的距離,通過距離進(jìn)行歸類,接著重新計(jì)算距離,迭代2次-3次上述步驟,直到滿足閾值或中心不再改變。

本文在實(shí)現(xiàn)K-Means算法時(shí)使用WEKA工具里的SimpleKMeans方法。圖5為聚類結(jié)果部分示例。

圖5 聚類結(jié)果部分示例

2.3 關(guān)鍵詞提取方法

每一類缺陷里面還可能包含不同的主題,本節(jié)通過聚類結(jié)果,進(jìn)一步提取主題與關(guān)鍵詞。經(jīng)實(shí)驗(yàn)發(fā)現(xiàn),主題之間會(huì)出現(xiàn)許多相同關(guān)鍵詞,這些詞為缺陷通用關(guān)鍵詞,例如firefox、bug和error等詞,雖然是關(guān)鍵詞,但由于單詞概括性較強(qiáng),區(qū)分度較差,實(shí)際分析意義不大,所以要在關(guān)鍵詞提取之前將這些單詞去掉。因此關(guān)鍵詞提取分為關(guān)鍵詞識(shí)別、關(guān)鍵詞過濾和關(guān)鍵詞再提取3個(gè)步驟。

2.3.1 關(guān)鍵詞識(shí)別

在該階段,本文使用主題模型中的(latent dirichlet allocation,LDA)提取出主題和主題詞以及主題概率,將主題詞作為該簇不同主題的關(guān)鍵詞,以主題概率從高到低的順序呈現(xiàn)給修復(fù)人員。LDA是一種無監(jiān)督機(jī)器學(xué)習(xí)技術(shù),用來生成文檔主題,主要識(shí)別大規(guī)模文檔集或語料庫的隱藏主題信息[23]。該模型運(yùn)用詞袋模型,忽略詞的排列順序,將無結(jié)構(gòu)的自然語言編寫的文檔信息轉(zhuǎn)化為計(jì)算機(jī)可識(shí)別的模式。該模型包含詞、主題和文檔3層結(jié)構(gòu),對(duì)于一篇文檔,首先通過LDA模型生成其主題分布與詞分布,然后根據(jù)主題分布隨機(jī)選取一個(gè)主題,再根據(jù)單詞分布生成一個(gè)詞,重復(fù)上述過程直至生成一篇文檔。

本文將上一步經(jīng)過K-Means聚類后的每一類設(shè)置成一個(gè)文件夾,將該類中的缺陷以一個(gè)缺陷一個(gè)文本的形式放入文件夾中,每個(gè)文本以缺陷id命名,內(nèi)容為缺陷摘要、評(píng)論、描述的原始數(shù)據(jù)。將文件夾作為LDA輸入,經(jīng)過主題提取后得到每一類的主題以及該主題下的主題詞和主題概率。

2.3.2 關(guān)鍵詞過濾

分析發(fā)現(xiàn),主題之間會(huì)出現(xiàn)許多概括性較強(qiáng)、區(qū)分度較差的單詞,如firefox、bug和error等,這些詞定義為通用關(guān)鍵詞。在關(guān)鍵詞過濾階段主要過濾掉通用關(guān)鍵詞,該過程首先比對(duì)上一步提取出的關(guān)鍵詞,分析重復(fù)的單詞;然后,設(shè)置通用關(guān)鍵詞列表,表3為部分通用關(guān)鍵詞列表;最后,在最原始數(shù)據(jù)集上去掉通用關(guān)鍵詞,迭代提取和過濾過程直到分析出的結(jié)果比較符合要求。

表3 通用關(guān)鍵詞

2.3.3 關(guān)鍵詞再提取

經(jīng)過關(guān)鍵詞過濾后的文本中單詞都具有高度識(shí)別性,因此,將去掉通用關(guān)鍵詞后的數(shù)據(jù)集上再次提取關(guān)鍵詞,提取結(jié)果以主題概率從高到低的順序呈現(xiàn)給修復(fù)人員,幫助修復(fù)人員快速理解缺陷。

3 實(shí)驗(yàn)分析

3.1 驗(yàn)證指標(biāo)

由于業(yè)界還未有類似方法,所以針對(duì)本文提出的基于聚類和關(guān)鍵詞提取的缺陷分析方法 DAKSM進(jìn)行組內(nèi)評(píng)估驗(yàn)證,本文將從聚類準(zhǔn)確的個(gè)數(shù)、準(zhǔn)確率和評(píng)價(jià)聚類好壞的簇內(nèi)誤差平方和(SSE)這3個(gè)方面進(jìn)行驗(yàn)證,以檢驗(yàn)DAKSM方法的有效性。

準(zhǔn)確率指經(jīng)過分析后得出的聚類正確的缺陷數(shù)與全部缺陷數(shù)的比例。SSE值是K-Means聚類中常用的判斷聚類好壞的標(biāo)準(zhǔn)。該值越小證明同一簇之間距離越小,聚類效果越好。該值由WEKA工具完成聚類時(shí)提供。

3.2 實(shí)驗(yàn)驗(yàn)證

3.2.1 數(shù)據(jù)源

Bugzilla是一個(gè)開源的缺陷管理系統(tǒng),主要管理軟件開發(fā)過程中存在的缺陷,許多軟件公司使用bugzilla來進(jìn)行缺陷管理,因此本文從bugzilla中下載缺陷報(bào)告進(jìn)行分析。為了使研究更具有針對(duì)性,本文選用firefox、bugzilla和SeaMonke這3款web軟件,并且為了保證實(shí)驗(yàn)的實(shí)用性,本文在每款軟件中隨機(jī)選取500個(gè)缺陷進(jìn)行分析。

3.2.2 實(shí)驗(yàn)步驟

(1)在bugzilla中下載xml形式的缺陷報(bào)告,提取缺陷報(bào)告中的缺陷id、摘要、描述和評(píng)論。

(2)對(duì)提取出的文本進(jìn)行預(yù)處理。

(3)將預(yù)處理過的文本提取有效特征。

(4)進(jìn)行文本表示和權(quán)重計(jì)算,我們先用WEKA中的StringToWordVector將文本轉(zhuǎn)換成空間向量,初步權(quán)值為TF-IDF,然后用基于粒子群算法的權(quán)重計(jì)算方法計(jì)算權(quán)重,其中粒子群算法的參數(shù)為:c1=1.49445,c2=1.49445,ωmax=0.8,ωmin=0.5,最大迭代次數(shù)為500次。

(5)用WEKA里面的SimpleKMeans實(shí)現(xiàn)K-Means聚類,歐氏距離作為算法的相似度測(cè)度,初始化方法選擇k-Means++,最大迭代次數(shù)為500次,種子數(shù)為800,經(jīng)過實(shí)驗(yàn)驗(yàn)證,將缺陷分為6個(gè)類別結(jié)果最準(zhǔn)確,所以初始聚類的簇個(gè)數(shù)設(shè)置為6個(gè)。

(6)將聚類結(jié)果分別保存到不同的文件夾中,再用LDA提取出關(guān)鍵詞,本文主題數(shù)設(shè)置為10個(gè),每個(gè)主題下有20個(gè)主題詞,根據(jù)經(jīng)驗(yàn)將α和β分別設(shè)置為50/K和0.1,其中K為主題數(shù),輸出最終分析結(jié)果。

3.2.3 實(shí)驗(yàn)結(jié)果與分析

(1)聚類結(jié)果

1)不同獲取有效特征方法的實(shí)驗(yàn)結(jié)果

獲取有效特征:我們分別對(duì)比了未獲取有效特征和使用該方法后的聚類效果:

方法1:只使用詞頻進(jìn)行特征提取。

方法2:使用詞頻和特征篩選進(jìn)行特征提取。

方法3:使用詞頻和特征統(tǒng)一獲取有效特征。

方法4:使用詞頻、特征篩選和特征統(tǒng)一進(jìn)行獲取有效特征。

實(shí)驗(yàn)結(jié)果如圖6所示,圖6橫坐標(biāo)表示4種方法,縱坐標(biāo)表示聚類正確的個(gè)數(shù),不同的柱形代表不同的軟件。

圖6 不同獲取有效特征方法聚類正確的數(shù)量

由圖6可以看出:①bugzilla聚類時(shí)使用其它方法較方法1有小幅度提升,但使用方法2和方法3時(shí)差距不大,僅僅增加了1個(gè);當(dāng)使用方法4時(shí)準(zhǔn)確個(gè)數(shù)有明顯升高。②firefox對(duì)本文提出的方法較為敏感,準(zhǔn)確個(gè)數(shù)提升較多。但firefox準(zhǔn)確個(gè)數(shù)并不是很多,剛達(dá)到bugzilla使用方法3時(shí)的準(zhǔn)確個(gè)數(shù)。③SeaMonkey軟件在使用方法2時(shí)較方法1有明顯提高,但是使用方法3反而降低了準(zhǔn)確個(gè)數(shù),但仍高于方法1,使用方法4優(yōu)于方法1但與方法2差距不大。

由以上分析可以看出,方法2和方法3結(jié)果有較大起伏,但方法4對(duì)任何軟件的準(zhǔn)確個(gè)數(shù)都有較大的提升,總體來看本文提出的獲取有效特征方法優(yōu)于只使用詞頻的方法。

準(zhǔn)確率如表4所示,方法2和方法3準(zhǔn)確率都高于方法1,但是低于方法4,方法4有效提高準(zhǔn)確率使準(zhǔn)確率平均達(dá)到77.2%。該表看出使用方法1時(shí)firefox, SeaMonkey準(zhǔn)確率較低,但bugzilla有良好的準(zhǔn)確率,當(dāng)使用方法4時(shí)準(zhǔn)確率提高到了80.4%,因此bugzilla對(duì)方法4適應(yīng)性比較好,準(zhǔn)確率提升8.4%,SeaMonkey雖然使用方法1時(shí)準(zhǔn)確率比firefox高,使用方法4后并沒有太大的提升,反而比firefox準(zhǔn)確率低,但通過平均準(zhǔn)確率分析來看使用方法2和方法3差距不大,使用方法4相較于方法1有明顯提高。表5表示不同方法不同軟件的SSE值。由表4和表5綜合來看,雖然bugzilla的SSE值最高,但是準(zhǔn)確率卻是最高的,firefox的SSE值最低,但是準(zhǔn)確率也是最低的。因?yàn)镾SE為WEKA工具中計(jì)算出來的簇之間實(shí)例距離,但是在實(shí)際語言中,有些很相似的句子會(huì)有不同的含義,比如:Password is not safe和No prompt when the password is not safe這兩句話可能距離相對(duì)較小,但一個(gè)是安全問題,一個(gè)是頁面設(shè)計(jì)時(shí)出現(xiàn)的問題;還有些看起來不是很相似,但是實(shí)際上應(yīng)該被分成一個(gè)類別的句子,比如:Button should turn blue when clicked和Icon cannot be displayed,這兩句話應(yīng)該都是頁面設(shè)計(jì)問題,但是在聚類時(shí)的距離可能會(huì)被計(jì)算為很大。因此只使用SSE作為評(píng)價(jià)指標(biāo)是不合理的,本文選擇準(zhǔn)確率和SSE值共同作用,由表5可見,使用方法4的SSE值略低于使用方法1的SSE值,由此驗(yàn)證使用方法4聚類效果好于使用方法1。

表4 不同獲取有效特征方法的聚類準(zhǔn)確率/%

表5 不同方法獲取有效特征方法的聚類的SEE值/%

2)不同權(quán)重計(jì)算方法的實(shí)驗(yàn)結(jié)果

我們根據(jù)摘要,描述和評(píng)論來分析不同位置特征向量的權(quán)重。因?yàn)槌霈F(xiàn)在摘要的特征單詞一定會(huì)出現(xiàn)在描述中,所以一共可以分為5種情況。我們使用粒子群算法可以計(jì)算出單詞在不同位置時(shí)最優(yōu)的一組權(quán)重值,結(jié)果見表6。

表6 基于粒子群算法權(quán)重計(jì)算結(jié)果

我們比較了使用了權(quán)重計(jì)算方法和未使用該方法的聚類效果:

方法1:只使用TF-IDF進(jìn)行權(quán)重計(jì)算。

方法2:TF-IDF基礎(chǔ)上加入基于粒子群算法的權(quán)重計(jì)算規(guī)則的權(quán)重計(jì)算。

圖7顯示了不同軟件分別使用方法1和方法2后的準(zhǔn)確率,從實(shí)驗(yàn)結(jié)果可以看出,加入權(quán)重后,所有軟件聚類的準(zhǔn)確率都明顯提高,驗(yàn)證了特征單詞所在位置的不同,其所提供的信息不同,需要通過加入權(quán)重來調(diào)整特征向量來提高聚類的效果。

圖7 不同權(quán)重計(jì)算方法的聚類結(jié)果

DAKSM方法實(shí)驗(yàn)結(jié)果:經(jīng)過實(shí)驗(yàn),使用DAKSM方法后每款軟件的總體結(jié)果見表7。

(2)關(guān)鍵詞提取結(jié)果

在聚類基礎(chǔ)上,我們獲得了不同類型的缺陷簇,接著我們提取不同簇的關(guān)鍵詞。本文認(rèn)為關(guān)鍵詞提取時(shí)無用單詞與聚類時(shí)無用單詞有很大不同,因此本文在進(jìn)行關(guān)鍵詞提取時(shí)選用的是只經(jīng)過預(yù)處理的缺陷報(bào)告,基于此本文首先

表7 聚類總結(jié)果

提取關(guān)鍵詞,然后分析了通用關(guān)鍵詞,在去掉了通用關(guān)鍵詞后,我們提取了不同簇的不同主題以及關(guān)鍵詞。我們?cè)诒?中列舉了firefox中聚類結(jié)果為cluster 0的3個(gè)主題,每個(gè)主題下分別列舉了5個(gè)關(guān)鍵詞,由關(guān)鍵詞得知,cluster 0是關(guān)于安全的問題,topic 0和topic 1為登陸或注冊(cè)的身份安全問題,topic 2是支付問題,這2種主題同屬于安全問題。

表8 主題與關(guān)鍵詞

4 缺陷分析結(jié)果

4.1 web軟件缺陷類別與主題

經(jīng)過實(shí)驗(yàn)分析,Web程序缺陷主要分安全、功能、崩潰、文件傳輸、前后臺(tái)傳值和頁面這6類,通過對(duì)主題和主題詞分析得出每一類下面的不同關(guān)鍵詞,通過分析整理后部分見表9。

4.2 web軟件中缺陷數(shù)量關(guān)系

經(jīng)過對(duì)實(shí)驗(yàn)結(jié)果的分析發(fā)現(xiàn)由于本文選擇的3款軟件為web軟件,所以頁面、前后臺(tái)傳值和功能類缺陷較多,而安全類較少,大部分為木馬病毒攻擊或密碼等信息安全。而且大部分缺陷可被分成多個(gè)類別,比如“點(diǎn)擊下載按鈕

表9 部分缺陷類別與主題

無法進(jìn)行下載”也許是因?yàn)轫撁娴陌粹o不起作用,也可能是前后臺(tái)傳下載路徑有問題,還有可能是文件本身不符合下載規(guī)定。經(jīng)過分析發(fā)現(xiàn)一個(gè)缺陷可能由多個(gè)原因引起,因此在解決缺陷過程中不能只關(guān)注該缺陷的一方面,要全面分析才能有效地徹底解決缺陷。

4.3 開發(fā)人員建議

在對(duì)數(shù)據(jù)集進(jìn)行清洗過程中發(fā)現(xiàn),許多缺陷描述不是很清楚,這造成了缺陷自動(dòng)分析過程中準(zhǔn)確率降低,同時(shí)也對(duì)修復(fù)人員造成一定困擾,一般情況下摘要是缺陷的高度概括,應(yīng)該聚集了缺陷的所有特征,但對(duì)數(shù)據(jù)集分析發(fā)現(xiàn)只看摘要并不能快速了解缺陷,還需要仔細(xì)閱讀詳細(xì)介紹才能大概了解缺陷的特征,有時(shí)甚至需要分析評(píng)論才能更好讀懂缺陷,這對(duì)修復(fù)人員是一個(gè)挑戰(zhàn),因此建議開發(fā)人員寫缺陷報(bào)告時(shí)盡量完善缺陷信息以減少分析時(shí)間,并提高開發(fā)人員再培訓(xùn)效率。

5 有效性威脅

5.1 內(nèi)部有效性威脅

首先在特征篩選階段,我們選用人工分析的方式分析出大部分web軟件的無用詞,在特征處理階段也選用人工分析隱藏含義相同的單詞,主觀影響難以消除。其次在關(guān)鍵詞提取過程中我們選用LDA提取主題詞,每一次提取出的結(jié)果有一定差異,造成實(shí)驗(yàn)難以重復(fù),另外本文只提取出關(guān)鍵詞,下一步打算提取主題以便修復(fù)人員更高效修復(fù)缺陷。最后在評(píng)價(jià)部分,由于該方法主要針對(duì)修復(fù)人員看缺陷報(bào)告困難的問題,所以單用準(zhǔn)確率來評(píng)價(jià)有些單一,下一步打算將結(jié)果呈現(xiàn)給修復(fù)人員,收集一些評(píng)價(jià)數(shù)據(jù),例如理解時(shí)間、清晰度等值進(jìn)行評(píng)價(jià)。

5.2 外部有效性威脅

我們選用了3款web軟件作為分析數(shù)據(jù)驗(yàn)證本文提出的方法,有較強(qiáng)的針對(duì)性,并未分析其它類型軟件,下一步打算使用本文方法進(jìn)行多類型軟件缺陷分析。其次為保證實(shí)驗(yàn)的多樣性,本文隨機(jī)選取3款軟件各500個(gè)缺陷進(jìn)行分析,缺陷數(shù)量略少導(dǎo)致某些類型缺陷過少,聚類過程中有嚴(yán)重不平衡現(xiàn)象。今后的工作中打算對(duì)更多的缺陷進(jìn)行分析。

6 結(jié)束語

軟件行業(yè)的快速發(fā)展給人們生活帶來簡便。但是,當(dāng)軟件存在缺陷的時(shí)候就會(huì)造成諸多威脅。因此,如何快速高效解決軟件缺陷是研究者們一直以來研究的熱點(diǎn)。本文提出了一種基于聚類和關(guān)鍵詞提取的軟件缺陷分析方法,利用K-Means和LDA主題建模技術(shù)分析缺陷報(bào)告,使缺陷理解性更強(qiáng),使修復(fù)人員更有針對(duì)地尋找解決方法以便高效解決缺陷。另外經(jīng)過實(shí)驗(yàn)驗(yàn)證了該方法的可行性。實(shí)驗(yàn)結(jié)果表明該方法能夠?yàn)樾迯?fù)人員提供缺陷的關(guān)鍵信息。

在未來的工作中,我們希望統(tǒng)計(jì)更多類型的軟件得到更多類型的缺陷,并使用增量學(xué)習(xí)來增加缺陷類型,使方法具有較好的魯棒性。另外希望結(jié)合starckoverflow問答系統(tǒng),綜合缺陷關(guān)鍵詞和問答系統(tǒng)關(guān)鍵詞自動(dòng)推薦出與該類缺陷相關(guān)的修復(fù)方式,以減少修復(fù)人員的修復(fù)時(shí)間。

猜你喜歡
準(zhǔn)確率權(quán)重聚類
乳腺超聲檢查診斷乳腺腫瘤的特異度及準(zhǔn)確率分析
健康之家(2021年19期)2021-05-23 11:17:39
不同序列磁共振成像診斷脊柱損傷的臨床準(zhǔn)確率比較探討
2015—2017 年寧夏各天氣預(yù)報(bào)參考產(chǎn)品質(zhì)量檢驗(yàn)分析
權(quán)重常思“浮名輕”
高速公路車牌識(shí)別標(biāo)識(shí)站準(zhǔn)確率驗(yàn)證法
為黨督政勤履職 代民行權(quán)重?fù)?dān)當(dāng)
基于DBSACN聚類算法的XML文檔聚類
基于公約式權(quán)重的截短線性分組碼盲識(shí)別方法
基于改進(jìn)的遺傳算法的模糊聚類算法
一種層次初始的聚類個(gè)數(shù)自適應(yīng)的聚類方法研究
吴忠市| 上林县| 枞阳县| 柳河县| 稻城县| 通化市| 札达县| 榆树市| 湖北省| 邛崃市| 都安| 沛县| 高要市| 钟山县| 金堂县| 红原县| 黎平县| 仲巴县| 西林县| 柘城县| 建湖县| 寿阳县| 清涧县| 芦山县| 永丰县| 永登县| 双辽市| 辰溪县| 环江| 新民市| 平阴县| 宾阳县| 宁河县| 石城县| 梁河县| 安图县| 梁山县| 望江县| 库伦旗| 新和县| 曲水县|