高俊婷,張麗萍,趙鳳榮
(內蒙古師范大學 計算機科學技術學院,內蒙古 呼和浩特 010022)
軟件缺陷[1-3]通常以缺陷報告的形式存儲在缺陷跟蹤系統中[4],因此缺陷分析首要工作是對缺陷報告進行分析。缺陷報告數據量大、信息繁雜,修復缺陷耗時長成本高,傳統的人工分析已經無法滿足大規(guī)模的軟件缺陷修復需求。
本文提出一種基于K-Means和主題模型的軟件缺陷分析方法DAKSM(defect analysis method based on K-Means and subject model)。該方法將聚類和關鍵詞提取共同應用于軟件缺陷分析中,在聚類過程中加入無用詞和同義詞分析并引入粒子群算法,提高聚類準確率。在關鍵詞提取部分加入通用關鍵詞分析,提高關鍵詞的針對性,最終將缺陷的類型和潛在表達內容直觀地呈現給修復人員。由于目前缺陷追蹤系統大多為英文版本,因此缺陷報告大部分為英文,該方法只適用于英文缺陷報告分析。若需要分析中文缺陷報告,則需在本文方法基礎上將英文文本分析算法改進為中文文本分析算法,使之適應中文缺陷報告分析。實驗結果表明,該方法在英文缺陷報告的聚類平均準確率能達到81%。
缺陷分析是對軟件開發(fā)過程中產生的缺陷信息進行分類和理解[5],將缺陷相關信息提供給修復人員和開發(fā)人員,使修復人員更快速地解決缺陷,了解缺陷產生的原因以避免此類缺陷再次產生。缺陷分析范圍廣泛、方法眾多,現有缺陷分析主要分為人工分析方法和自動分析方法。
人工分析方法是通過開發(fā)人員的經驗對缺陷報告進行分析,主要分為單屬性、多屬性分析[6,7]、定性和定量4種分析方法。定性分析主要有根本原因分析法(root cause analysis,RCA)、缺陷注入-發(fā)現矩陣分析法(DRE/DRM)、軟件故障樹分析法(software fault tree analysis,SFTA)、缺陷消除模型分析(defect removal model analysis,DRM)等方法;定量分析方法主要有(orthogonal defect classification,ODC)[8]和異常分類標準IEEE[9]等。
由于軟件規(guī)模和數量的增大,人工分析過于耗費資源,于是研究人員致力于尋找軟件缺陷自動分析方法。LiGuo Huang等提出一種自動ODC分類方法[8],對每一個缺陷類別建立一個支持向量機(support vector machine,SVM)分類器。該方法雖然最終分類結果比較好,但是由于只分析了某公司社交網絡,導致結論通用性和代表性較低。
Thung等提出了一種缺陷自動分類框架和分類標準[10],獲取源代碼和缺陷報告,將源代碼轉換成抽象語法樹(abstract syntax tree,AST),然后用SVM對文本特征和修改特征進行分類。該方法分類粒度較粗,且只分析500個缺陷,數據量較少。
夏鑫等更注重缺陷的觸發(fā)方式,他們提出了基于觸發(fā)方式的缺陷自動分類模型[11]。該方法將模糊邏輯作為特征提取方法,使分類效果更加準確,但該方法只將缺陷分為2個類型,對開發(fā)人員理解缺陷的幫助有限,還需開發(fā)人員進一步分析理解缺陷。
昆明理工大學的王延飛認為由于軟件是給客戶使用的[12],所以軟件的一部分缺陷是用戶提出的,并且軟件缺陷描述大部分存在于軟件的負面評論中,所以使用情感傾向分析方法重點分析軟件評論。但評論包含無用信息較多,僅分析評論不具代表性。
大連理工大學的劉文杰等重點分析缺陷的嚴重性[13],分別組合并對比了不同特征表示方法和特征選擇方法以及不同分類算法,最終得出各部分最優(yōu)方式,但并未提出最優(yōu)組合方式。
Indu Chawla等運用模糊邏輯的分類方法,將缺陷分為bug、特性增強和其它請求[14],實驗驗證該方法優(yōu)于Pingclasai方法。但該方法收集到的原始數據集質量不高,嚴重影響分類性能。
另外,本團隊的劉樹毅等在缺陷預測方向提出了一種融合多策略特征篩選的跨項目軟件缺陷預測方法[15]。該方法首先使用多策略篩選方法與過采樣方法進行數據預處理;然后利用代價敏感的域自適應方法進行分類。該方法可以較好進行軟件缺陷預測,不足之處在于對屬性數量改變所帶來分類性能突變估計不足,可能會導致計算資源的浪費、跨項目失效問題。
綜上所述,大多數自動分析方法都要依據經驗先制定分類標準,將缺陷進行人工標注,然后提取特征并用機器學習方法將缺陷進行分類,但是這種方法將經驗與數據分離,分類魯棒性較低;在提取特征方面考慮信息單一,沒有考慮冗余特征和特征之間的位置關系;另外還需人工標注,消耗資源,最終分類后的信息有限。因此,本文針對這一問題,使用聚類和關鍵詞提取的方法分析軟件缺陷,將缺陷類型和潛在信息提供給修復人員,使缺陷可理解性更強,幫助修復人員更快速地了解缺陷并能更好地解決缺陷。
本文從數據角度出發(fā)提出一種軟件缺陷自動分析的方法,即基于K-Means和主題模型的缺陷分析方法DAKSM。DAKSM流程如圖1所示。
圖1 DAKSM流程
該方法分為2個階段:聚類和關鍵詞提取。在聚類階段,首先輸入缺陷報告,然后對缺陷報告預處理,得到清洗后的缺陷報告文本。接下來對特征進行篩選和處理,獲取缺陷有效特征,然后進行文本表示和權重計算,最后進行聚類,輸出缺陷類型。在關鍵詞提取階段,將聚類后的缺陷類型作為輸入,先提取主題詞,然后過濾主題詞,最后再一次提取主題詞,將缺陷類型和該類型主題詞作為關鍵詞輸出。
大部分的缺陷分析方法要先確定缺陷的類型,而當前的缺陷類型都是對已有缺陷的總結和積累。由于缺陷的產生原因和形式是多樣的,這種基于經驗的方法并不能良好地適應缺陷的多樣性。本文從缺陷報告的數據自身出發(fā),采用聚類的方法科學地將缺陷劃分為幾個類型,聚類過程如圖2所示。
圖2 聚類流程
本文將缺陷報告作為輸入,選取摘要、詳細描述和評論作為分析對象。首先對缺陷報告進行預處理,包括標記化、分詞、去停用詞和詞形轉化;接著使用詞頻統計、特征篩選和特征統一的方法來獲取有效特征;下一步進行文本表示、TF-IDF計算權重值和粒子群算法優(yōu)化權重值;最后用K-Means方法聚類,輸出缺陷類型。聚類實現方法如算法1所示。
算法1: 聚類算法
Input: 缺陷報告xml文件
Output: 聚類后結果
(1)str=file.readline();//按行讀取文件
(2)Whilestr=file.readline()!=nulldo
(3)Ifstr=="
提取bug_id,comment,thetext中的信息。
(4)str.toLowerCase();//轉成小寫
(5)str.remove("’");//去掉單引號。
(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];)//
一組同義詞都被替換為該組第一個單詞。
(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];//計算每個特征的權重值
(20)Endfor
(21)Clustering=SimpleKMeans(bug);//K-Means取類后的結果
(22)returnClustering;
2.2.1 預處理
首先,獲取缺陷報告,提取缺陷報告中的id號(
2.2.2 獲取有效特征
接下來進入特征提取階段。由于被處理的缺陷數據是多樣的語言文本形式,所以會出現大量單詞。為防止在文本表示時造成維度爆炸,本文在聚類之前對單詞進行有效特征提取。提取有效特征也會降低聚類復雜度,提高聚類準確率。該階段主要對單詞特征進行處理,目的是提取對缺陷聚類而言有用處的單詞。
(1)詞頻統計和特征移除
根據對數據的分析發(fā)現詞頻小于3的大多數為拼寫錯誤或對缺陷無用的單詞。因此,該方法首先要去掉出現頻率小于3的單詞,該方法可將特征維度縮減到原來的1/3。
(2)特征篩選
將特征移除后仍然有很多單詞是經常出現但是對缺陷數據聚類而言沒有作用的單詞,特征篩選目的是過濾掉這些單詞,本文將這些詞稱為無用詞。首先分析出無用詞,如yeah、nightly、hmm等單詞可能是評論中摻雜的無用詞;然后創(chuàng)建無用詞列表,表1列舉了部分無用詞。在分析無用詞的時候,我們使用人工分析的方法,考慮該單詞的含義和作用,再考慮去掉該單詞之后對整個語句的理解,如果不影響整句話含義,則設為無用詞。通過對3款軟件1500個缺陷的人工分析得到無用詞列表。該列表含有web軟件中大部分無用詞。然后設計特征過濾算法,在特征移除后的特征子集上自動過濾掉無用詞列表中的單詞。實驗表明使用經過特征過濾后的特征子集聚類效果好于未經過特征過濾的特征子集。
(3)特征統一
文檔中可能出現實際意義相同但是表達不同的單詞,例如:color可以被表達為red、blue和black等。這些單詞雖然含義相同,但由于表達形式不同,所以它們在文檔向量中是不同的?;谶@個問題,本文提出一種針對軟件缺陷聚類的特征統一處理方法,特征統一是指在軟件缺陷聚類之前,將隱藏含義相同的單詞統一成實際意義單詞。這樣做將降低特征維度,使聚類更準確。該方法首先分析出隱藏含義相同的單詞,創(chuàng)建特征統一列表,部分特征統一見表2,將特征統一列表中的單詞統一成實際意義單詞。通過對3款軟件1500個缺陷進行分析創(chuàng)建了特征統一表,該表包含大部分web軟件應該統一含義的單詞。然后設計特征統一算法自動將單詞進行統一。實驗結果表明,聚類前使用特征統一方法將提高聚類準確率。
表1 無用詞
表2 特征統一
2.2.3 文本表示
文本表示是將計算機無法直接處理的無結構語言文本轉化為可處理形式。向量空間模型(VSM)是一種文本表示模型。該模型由特征項、特征權重和特征向量組成[16]。使用該模型需要先確定文本的特征項和權重值,對于英文文本來說,一個詞即為一個特征,因此本文選用單詞作為VSM模型中的輸入特征。
在權重計算方面,本文提出一種TF-IDF與粒子群相結合的權重計算方法。一般對于權重計算只選用TF-IDF、信息增益(IG)等方法,由于軟件缺陷的特殊性,我們認為缺陷報告中摘要是缺陷的高度概括,所以將摘要設為重點分析部分,同時描述也是缺陷分析不可缺少的部分,評論集合了不同開發(fā)人員的多種角度對缺陷的描述。因此本文選用摘要、描述和評論作為分析對象。由于不同位置的特征提供的信息質量不同,所以需要根據單詞存在位置的不同而設置不同的權重。為了分析不同位置與權重的關系,本文在權重計算上采用粒子群優(yōu)化算法來計算特征在不同位置的最優(yōu)權重。該方法對權重值的計算分為2步,首先通過TF-IDF計算出基本權重,然后再通過基于粒子群的特征權重算法計算出最終最優(yōu)特征權重。特征權重計算公式為
wword(i)=wTF-IDF×wpso
(1)
wword(i)為第i個特征的權重;wTF-IDF為通過TF-IDF所計算出的權值;wpso為通過基于粒子群的特征權重算法計算過后的權重。
(1)TF-IDF(term frequency-inverse document frequency)
首先使用TF-IDF方法計算基本權重值,TF-IDF是一種常用的加權技術[17]。TF(term frequency)為詞頻,表示單詞在文檔中出現的頻率,TF計算公式如下
(2)
ni,j是該詞在文件中的出現次數,而∑knk,j則是在文件中所有字詞的出現次數之和。IDF(inverse document frequency)為逆文本頻率,主要思想為包含該詞條的文檔越少,IDF值越大,該詞的區(qū)分度越高,IDF計算公式如下
(3)
其中,|D|為語料庫中的文件總數,分子為包含詞語的文件數目,如果該詞語不在語料庫中,就會導致分母為零,因此一般情況下使用1+|{d∈D:t∈d}|作為分母。TF-IDF值為TF*IDF,本文的TF-IDF值由WEKA工具計算,WEKA是一款JAVA環(huán)境下開源的機器學習工具。本文使用StringToWordVector實現TF-IDF權重計算[18]。計算結果如圖3所示。
圖3 TF-IDF計算結果
(2)基于粒子群算法的特征權重計算
粒子群算法是由J.Kennedy和R.Eberhart開發(fā)的一種生物啟發(fā)式算法[19]。粒子群算法以其實現容易、精度高、收斂快等優(yōu)點引起了學術界的重視[20,21]。利用粒子群算法可以有效地解決權重優(yōu)化的問題。
在粒子群算法中,每一個單詞在不同位置的權重值數組被抽象成一個粒子,由N個粒子組成一個種群。其中第i個粒子的位置被表示成一個D維的向量Xi=(xi1,xi2,…,xiD),i=1,2,…,N,并且它的速度也被表示成一個D維的向量Vi=(vi1,vi2,…,viD),i=1,2,…,N。所有粒子的適應值都由適應度函數計算得到,判斷調整權重以后結果的好壞需要從兩方面考慮:一方面是聚類的聚集程度,可以由K-Means算法的SquareError值得到,SquareError值越小分類的結果越好;另一方面是聚類的準確率,由正確分類的個數除以總個數得到,正確率越高分類效果越好。所以本文的適應度函數如下
(4)
其中,k1,k2為算法參數,s為聚類的SquareError值,a為聚類的準確率。此外,每個粒子還具有記憶功能,會記錄當前搜索到的最優(yōu)位置,稱為個體極值pbest=(pi1,pi2,…,pgD),i=1,2,…,N,代表個體經驗。此外,整個種群當前搜索到的最優(yōu)位置稱為全局極值gbest=(pi1,pi2,…,pgD),代表種群經驗。每個粒子的速度更新由3部分組成:第一是慣性速度,代表粒子有維持自己之前速度的趨勢;第二是認知速度,代表粒子有靠近個體最優(yōu)位置的趨勢;第三是社會速度,代表粒子有靠近群體最優(yōu)位置的趨勢。速度和位置更新公式如下
vid=ωvid+c1r1(pid-xid)+c2r2(pgd-xid)
(5)
xid=xid+vid
(6)
其中,ω是慣性權重,c1,c2是學習因子,r1和r2為[0,1]范圍內的隨機數。i=1,2,…,N為群體大小。粒子將會在目標搜索空間中追隨當前的最優(yōu)粒子在解空間中搜索。
慣性權重ω是影響算法性能的重要參數。文獻[22]提出了一種慣性權重線性微分遞減的方法,慣性權重的計算公式如下
(7)
(8)
由公式可以看出,在算法初期粒子的慣性權重較大,提高了粒子的全局搜索能力,保證粒子的多樣性。而在算法后期粒子的慣性權重較小,提高了粒子的局部搜索能力,有利于找到最優(yōu)解。該算法流程如圖4所示。
圖4 粒子群算法流程
2.2.4 聚類
大部分缺陷分析方法都需要在訓練模型前將缺陷手工分類,K-Means是一種無監(jiān)督學習技術,可省去人工分類時間,但是該方法需要在聚類后人工分析聚類結果。分析發(fā)現,某些缺陷可被分到不同類別,相較于只能按照標簽分類的方法,該方法靈活度較高。
在模型構建階段,本文采用K-Means算法對缺陷進行聚類。K-Means算法是一種基于距離的聚類方法,該算法認為兩個對象之間的歐氏距離越近,則它們相似度越大,且屬于同一個類型的可能性也更大。算法首先需要設定K個簇中心點,隨機選取中心點位置,然后計算對象與中心的距離,通過距離進行歸類,接著重新計算距離,迭代2次-3次上述步驟,直到滿足閾值或中心不再改變。
本文在實現K-Means算法時使用WEKA工具里的SimpleKMeans方法。圖5為聚類結果部分示例。
圖5 聚類結果部分示例
每一類缺陷里面還可能包含不同的主題,本節(jié)通過聚類結果,進一步提取主題與關鍵詞。經實驗發(fā)現,主題之間會出現許多相同關鍵詞,這些詞為缺陷通用關鍵詞,例如firefox、bug和error等詞,雖然是關鍵詞,但由于單詞概括性較強,區(qū)分度較差,實際分析意義不大,所以要在關鍵詞提取之前將這些單詞去掉。因此關鍵詞提取分為關鍵詞識別、關鍵詞過濾和關鍵詞再提取3個步驟。
2.3.1 關鍵詞識別
在該階段,本文使用主題模型中的(latent dirichlet allocation,LDA)提取出主題和主題詞以及主題概率,將主題詞作為該簇不同主題的關鍵詞,以主題概率從高到低的順序呈現給修復人員。LDA是一種無監(jiān)督機器學習技術,用來生成文檔主題,主要識別大規(guī)模文檔集或語料庫的隱藏主題信息[23]。該模型運用詞袋模型,忽略詞的排列順序,將無結構的自然語言編寫的文檔信息轉化為計算機可識別的模式。該模型包含詞、主題和文檔3層結構,對于一篇文檔,首先通過LDA模型生成其主題分布與詞分布,然后根據主題分布隨機選取一個主題,再根據單詞分布生成一個詞,重復上述過程直至生成一篇文檔。
本文將上一步經過K-Means聚類后的每一類設置成一個文件夾,將該類中的缺陷以一個缺陷一個文本的形式放入文件夾中,每個文本以缺陷id命名,內容為缺陷摘要、評論、描述的原始數據。將文件夾作為LDA輸入,經過主題提取后得到每一類的主題以及該主題下的主題詞和主題概率。
2.3.2 關鍵詞過濾
分析發(fā)現,主題之間會出現許多概括性較強、區(qū)分度較差的單詞,如firefox、bug和error等,這些詞定義為通用關鍵詞。在關鍵詞過濾階段主要過濾掉通用關鍵詞,該過程首先比對上一步提取出的關鍵詞,分析重復的單詞;然后,設置通用關鍵詞列表,表3為部分通用關鍵詞列表;最后,在最原始數據集上去掉通用關鍵詞,迭代提取和過濾過程直到分析出的結果比較符合要求。
表3 通用關鍵詞
2.3.3 關鍵詞再提取
經過關鍵詞過濾后的文本中單詞都具有高度識別性,因此,將去掉通用關鍵詞后的數據集上再次提取關鍵詞,提取結果以主題概率從高到低的順序呈現給修復人員,幫助修復人員快速理解缺陷。
由于業(yè)界還未有類似方法,所以針對本文提出的基于聚類和關鍵詞提取的缺陷分析方法 DAKSM進行組內評估驗證,本文將從聚類準確的個數、準確率和評價聚類好壞的簇內誤差平方和(SSE)這3個方面進行驗證,以檢驗DAKSM方法的有效性。
準確率指經過分析后得出的聚類正確的缺陷數與全部缺陷數的比例。SSE值是K-Means聚類中常用的判斷聚類好壞的標準。該值越小證明同一簇之間距離越小,聚類效果越好。該值由WEKA工具完成聚類時提供。
3.2.1 數據源
Bugzilla是一個開源的缺陷管理系統,主要管理軟件開發(fā)過程中存在的缺陷,許多軟件公司使用bugzilla來進行缺陷管理,因此本文從bugzilla中下載缺陷報告進行分析。為了使研究更具有針對性,本文選用firefox、bugzilla和SeaMonke這3款web軟件,并且為了保證實驗的實用性,本文在每款軟件中隨機選取500個缺陷進行分析。
3.2.2 實驗步驟
(1)在bugzilla中下載xml形式的缺陷報告,提取缺陷報告中的缺陷id、摘要、描述和評論。
(2)對提取出的文本進行預處理。
(3)將預處理過的文本提取有效特征。
(4)進行文本表示和權重計算,我們先用WEKA中的StringToWordVector將文本轉換成空間向量,初步權值為TF-IDF,然后用基于粒子群算法的權重計算方法計算權重,其中粒子群算法的參數為:c1=1.49445,c2=1.49445,ωmax=0.8,ωmin=0.5,最大迭代次數為500次。
(5)用WEKA里面的SimpleKMeans實現K-Means聚類,歐氏距離作為算法的相似度測度,初始化方法選擇k-Means++,最大迭代次數為500次,種子數為800,經過實驗驗證,將缺陷分為6個類別結果最準確,所以初始聚類的簇個數設置為6個。
(6)將聚類結果分別保存到不同的文件夾中,再用LDA提取出關鍵詞,本文主題數設置為10個,每個主題下有20個主題詞,根據經驗將α和β分別設置為50/K和0.1,其中K為主題數,輸出最終分析結果。
3.2.3 實驗結果與分析
(1)聚類結果
1)不同獲取有效特征方法的實驗結果
獲取有效特征:我們分別對比了未獲取有效特征和使用該方法后的聚類效果:
方法1:只使用詞頻進行特征提取。
方法2:使用詞頻和特征篩選進行特征提取。
方法3:使用詞頻和特征統一獲取有效特征。
方法4:使用詞頻、特征篩選和特征統一進行獲取有效特征。
實驗結果如圖6所示,圖6橫坐標表示4種方法,縱坐標表示聚類正確的個數,不同的柱形代表不同的軟件。
圖6 不同獲取有效特征方法聚類正確的數量
由圖6可以看出:①bugzilla聚類時使用其它方法較方法1有小幅度提升,但使用方法2和方法3時差距不大,僅僅增加了1個;當使用方法4時準確個數有明顯升高。②firefox對本文提出的方法較為敏感,準確個數提升較多。但firefox準確個數并不是很多,剛達到bugzilla使用方法3時的準確個數。③SeaMonkey軟件在使用方法2時較方法1有明顯提高,但是使用方法3反而降低了準確個數,但仍高于方法1,使用方法4優(yōu)于方法1但與方法2差距不大。
由以上分析可以看出,方法2和方法3結果有較大起伏,但方法4對任何軟件的準確個數都有較大的提升,總體來看本文提出的獲取有效特征方法優(yōu)于只使用詞頻的方法。
準確率如表4所示,方法2和方法3準確率都高于方法1,但是低于方法4,方法4有效提高準確率使準確率平均達到77.2%。該表看出使用方法1時firefox, SeaMonkey準確率較低,但bugzilla有良好的準確率,當使用方法4時準確率提高到了80.4%,因此bugzilla對方法4適應性比較好,準確率提升8.4%,SeaMonkey雖然使用方法1時準確率比firefox高,使用方法4后并沒有太大的提升,反而比firefox準確率低,但通過平均準確率分析來看使用方法2和方法3差距不大,使用方法4相較于方法1有明顯提高。表5表示不同方法不同軟件的SSE值。由表4和表5綜合來看,雖然bugzilla的SSE值最高,但是準確率卻是最高的,firefox的SSE值最低,但是準確率也是最低的。因為SSE為WEKA工具中計算出來的簇之間實例距離,但是在實際語言中,有些很相似的句子會有不同的含義,比如:Password is not safe和No prompt when the password is not safe這兩句話可能距離相對較小,但一個是安全問題,一個是頁面設計時出現的問題;還有些看起來不是很相似,但是實際上應該被分成一個類別的句子,比如:Button should turn blue when clicked和Icon cannot be displayed,這兩句話應該都是頁面設計問題,但是在聚類時的距離可能會被計算為很大。因此只使用SSE作為評價指標是不合理的,本文選擇準確率和SSE值共同作用,由表5可見,使用方法4的SSE值略低于使用方法1的SSE值,由此驗證使用方法4聚類效果好于使用方法1。
表4 不同獲取有效特征方法的聚類準確率/%
表5 不同方法獲取有效特征方法的聚類的SEE值/%
2)不同權重計算方法的實驗結果
我們根據摘要,描述和評論來分析不同位置特征向量的權重。因為出現在摘要的特征單詞一定會出現在描述中,所以一共可以分為5種情況。我們使用粒子群算法可以計算出單詞在不同位置時最優(yōu)的一組權重值,結果見表6。
表6 基于粒子群算法權重計算結果
我們比較了使用了權重計算方法和未使用該方法的聚類效果:
方法1:只使用TF-IDF進行權重計算。
方法2:TF-IDF基礎上加入基于粒子群算法的權重計算規(guī)則的權重計算。
圖7顯示了不同軟件分別使用方法1和方法2后的準確率,從實驗結果可以看出,加入權重后,所有軟件聚類的準確率都明顯提高,驗證了特征單詞所在位置的不同,其所提供的信息不同,需要通過加入權重來調整特征向量來提高聚類的效果。
圖7 不同權重計算方法的聚類結果
DAKSM方法實驗結果:經過實驗,使用DAKSM方法后每款軟件的總體結果見表7。
(2)關鍵詞提取結果
在聚類基礎上,我們獲得了不同類型的缺陷簇,接著我們提取不同簇的關鍵詞。本文認為關鍵詞提取時無用單詞與聚類時無用單詞有很大不同,因此本文在進行關鍵詞提取時選用的是只經過預處理的缺陷報告,基于此本文首先
表7 聚類總結果
提取關鍵詞,然后分析了通用關鍵詞,在去掉了通用關鍵詞后,我們提取了不同簇的不同主題以及關鍵詞。我們在表8中列舉了firefox中聚類結果為cluster 0的3個主題,每個主題下分別列舉了5個關鍵詞,由關鍵詞得知,cluster 0是關于安全的問題,topic 0和topic 1為登陸或注冊的身份安全問題,topic 2是支付問題,這2種主題同屬于安全問題。
表8 主題與關鍵詞
經過實驗分析,Web程序缺陷主要分安全、功能、崩潰、文件傳輸、前后臺傳值和頁面這6類,通過對主題和主題詞分析得出每一類下面的不同關鍵詞,通過分析整理后部分見表9。
經過對實驗結果的分析發(fā)現由于本文選擇的3款軟件為web軟件,所以頁面、前后臺傳值和功能類缺陷較多,而安全類較少,大部分為木馬病毒攻擊或密碼等信息安全。而且大部分缺陷可被分成多個類別,比如“點擊下載按鈕
表9 部分缺陷類別與主題
無法進行下載”也許是因為頁面的按鈕不起作用,也可能是前后臺傳下載路徑有問題,還有可能是文件本身不符合下載規(guī)定。經過分析發(fā)現一個缺陷可能由多個原因引起,因此在解決缺陷過程中不能只關注該缺陷的一方面,要全面分析才能有效地徹底解決缺陷。
在對數據集進行清洗過程中發(fā)現,許多缺陷描述不是很清楚,這造成了缺陷自動分析過程中準確率降低,同時也對修復人員造成一定困擾,一般情況下摘要是缺陷的高度概括,應該聚集了缺陷的所有特征,但對數據集分析發(fā)現只看摘要并不能快速了解缺陷,還需要仔細閱讀詳細介紹才能大概了解缺陷的特征,有時甚至需要分析評論才能更好讀懂缺陷,這對修復人員是一個挑戰(zhàn),因此建議開發(fā)人員寫缺陷報告時盡量完善缺陷信息以減少分析時間,并提高開發(fā)人員再培訓效率。
首先在特征篩選階段,我們選用人工分析的方式分析出大部分web軟件的無用詞,在特征處理階段也選用人工分析隱藏含義相同的單詞,主觀影響難以消除。其次在關鍵詞提取過程中我們選用LDA提取主題詞,每一次提取出的結果有一定差異,造成實驗難以重復,另外本文只提取出關鍵詞,下一步打算提取主題以便修復人員更高效修復缺陷。最后在評價部分,由于該方法主要針對修復人員看缺陷報告困難的問題,所以單用準確率來評價有些單一,下一步打算將結果呈現給修復人員,收集一些評價數據,例如理解時間、清晰度等值進行評價。
我們選用了3款web軟件作為分析數據驗證本文提出的方法,有較強的針對性,并未分析其它類型軟件,下一步打算使用本文方法進行多類型軟件缺陷分析。其次為保證實驗的多樣性,本文隨機選取3款軟件各500個缺陷進行分析,缺陷數量略少導致某些類型缺陷過少,聚類過程中有嚴重不平衡現象。今后的工作中打算對更多的缺陷進行分析。
軟件行業(yè)的快速發(fā)展給人們生活帶來簡便。但是,當軟件存在缺陷的時候就會造成諸多威脅。因此,如何快速高效解決軟件缺陷是研究者們一直以來研究的熱點。本文提出了一種基于聚類和關鍵詞提取的軟件缺陷分析方法,利用K-Means和LDA主題建模技術分析缺陷報告,使缺陷理解性更強,使修復人員更有針對地尋找解決方法以便高效解決缺陷。另外經過實驗驗證了該方法的可行性。實驗結果表明該方法能夠為修復人員提供缺陷的關鍵信息。
在未來的工作中,我們希望統計更多類型的軟件得到更多類型的缺陷,并使用增量學習來增加缺陷類型,使方法具有較好的魯棒性。另外希望結合starckoverflow問答系統,綜合缺陷關鍵詞和問答系統關鍵詞自動推薦出與該類缺陷相關的修復方式,以減少修復人員的修復時間。