黃亞蒙 馬璐璐
摘要:針對(duì)開源軟件存在缺陷,改善軟件質(zhì)量等問題,文章提出了基于貢獻(xiàn)者行為特征的開源軟件缺陷預(yù)測(cè)研究。首先獲取Apache軟件基金會(huì)中的開源軟件項(xiàng)目,運(yùn)用Git和SVN版本控制系統(tǒng)對(duì)開發(fā)人員日志信息提取;然后采用K均值聚類算法模型挖掘開發(fā)人員團(tuán)隊(duì)(貢獻(xiàn)者),采用詞頻統(tǒng)計(jì)和主成分分析算法模型得到貢獻(xiàn)者行為特征;最后利用隨機(jī)森林算法實(shí)現(xiàn)對(duì)貢獻(xiàn)者特征行為的軟件缺陷預(yù)測(cè),該實(shí)驗(yàn)結(jié)果具有一定的參考意義。
關(guān)鍵詞:開源軟件;行為特征;軟件缺陷預(yù)測(cè)
中圖分類號(hào):TP311? 文獻(xiàn)標(biāo)志碼:A
0 引言
隨著軟件開發(fā)不斷發(fā)展,開源軟件開發(fā)正在走進(jìn)大眾的視野中,雖給人們的生活帶來大量便利,但也出現(xiàn)一些問題,部分軟件產(chǎn)品在進(jìn)行操作時(shí)無法正常運(yùn)行以及存在大量的軟件半成品等,給人們帶來巨大的經(jīng)濟(jì)損失,甚至威脅人類生命安全,故關(guān)于軟件質(zhì)量的研究已經(jīng)刻不容緩。
本文通過對(duì)開源軟件中版本控制系統(tǒng)和缺陷跟蹤系統(tǒng)中的開發(fā)者行為日志信息挖掘與處理研究,對(duì)開源項(xiàng)目貢獻(xiàn)者(即開發(fā)者團(tuán)隊(duì))的行為特征進(jìn)行分析,發(fā)現(xiàn)了研究貢獻(xiàn)者特征行為對(duì)項(xiàng)目缺陷造成的影響。主要強(qiáng)調(diào)開發(fā)人員在開源項(xiàng)目的核心作用力,通過對(duì)貢獻(xiàn)者的行為日志分析,確定出貢獻(xiàn)者行為特征,建立一種基于貢獻(xiàn)者特征行為的軟件缺陷預(yù)測(cè)模型,確定貢獻(xiàn)者行為特征對(duì)開源軟件缺陷率的影響,貢獻(xiàn)者在軟件開發(fā)過程中規(guī)避此類缺陷[1]。
1 數(shù)據(jù)獲取
本文采用Apache軟件基金會(huì)中的開源軟件項(xiàng)目作為研究對(duì)象。Apache軟件基金會(huì)的開源項(xiàng)目具有一定公信度,其下的版本控制系統(tǒng)及缺陷跟蹤系統(tǒng)的數(shù)據(jù)較為完整,具有支持多平臺(tái)安裝和使用、安全性高、易于擴(kuò)展、性能穩(wěn)定等特點(diǎn)。其項(xiàng)目信息存儲(chǔ)在Git repository和Subversion repository資源網(wǎng)站,故采用不同方式獲取項(xiàng)目信息。首先對(duì)項(xiàng)目克隆及檢出得到230個(gè)項(xiàng)目集;之后采用Git,SVN,MySQL等工具將日志信息導(dǎo)出到CSV文件中。
2 貢獻(xiàn)者行為特征選擇
2.1 數(shù)據(jù)處理
數(shù)據(jù)處理主要目的是得到成員下的項(xiàng)目,然后采用K均值聚類實(shí)現(xiàn)貢獻(xiàn)者的選擇。其過程如下:運(yùn)用Git命令對(duì)Git項(xiàng)目貢獻(xiàn)統(tǒng)計(jì);利用數(shù)據(jù)透視法實(shí)現(xiàn)對(duì)SVN項(xiàng)目貢獻(xiàn)統(tǒng)計(jì);實(shí)現(xiàn)對(duì)所有項(xiàng)目貢獻(xiàn)統(tǒng)計(jì);結(jié)合數(shù)據(jù)透視法得到成員下的項(xiàng)目,得到615組成員數(shù)據(jù)集,172個(gè)維度屬性。
2.2 基于K均值聚類算法的貢獻(xiàn)者選擇
K均值聚類算法具有算法簡(jiǎn)單、時(shí)間復(fù)雜度較低、收斂速度快、能有效地處理大規(guī)模的數(shù)據(jù)集等優(yōu)點(diǎn),故采取K均值聚類算法實(shí)現(xiàn)貢獻(xiàn)者選擇[2]。首先對(duì)簇?cái)?shù)k選擇,然后通過歐式距離計(jì)算數(shù)據(jù)對(duì)象之間的相似性,使得實(shí)現(xiàn)類內(nèi)數(shù)據(jù)對(duì)象相似度最大,類間相似度最小。K均值聚類算法將成員數(shù)據(jù)集依據(jù)數(shù)據(jù)集間的相似性(共同參與到相同項(xiàng)目的項(xiàng)目成員)聚集到指定的類簇中,且每個(gè)數(shù)據(jù)集屬于并僅屬于一個(gè)類簇中,具體操作如下:選取肘部方法和輪廓系數(shù)法實(shí)現(xiàn)對(duì)簇?cái)?shù)的選擇;采用K均值聚類算法實(shí)現(xiàn)貢獻(xiàn)者的選擇。
手肘法的核心指標(biāo)是SSE(誤差平方和)公式如(1)所示:
SSE=∑ki=1∑p∈Ci|p-mi|2(1)
Ci表示第i個(gè)簇,p表示Ci中的樣本點(diǎn),mi表示Ci質(zhì)心中所有樣本均值,SSE表示所有樣本聚類誤差,其代表聚類效果的好壞,通過Python得到k和SSE關(guān)系;輪廓系數(shù)法主要是確定聚類結(jié)果的內(nèi)聚度和分離度,其結(jié)果是對(duì)聚類效果好壞評(píng)價(jià)。采用輪廓系數(shù)法與肘部方法相結(jié)合的方式確定k值,輪廓系數(shù)的核心指標(biāo)是S,樣本點(diǎn)Xi,其計(jì)算公式如(2)所示:
S=b-amax(a,b)(2)
a表示Xi與同簇的其他樣本的平均距離,稱為凝聚度,b表示Xi與最近簇中所有樣本的平均距離,稱為分離度,其計(jì)算公式如(3)所示:
Cj=argmin1n∑p∈Ck|p-Xi|2(3)
p表示某個(gè)簇Ck中的樣本,平均輪廓系數(shù)的取值范圍為[-1,1],且簇內(nèi)樣本的距離越近,簇間樣本距離越遠(yuǎn),平均輪廓系數(shù)越大,聚類效果越好。采用Python將k進(jìn)行聚類求輪廓系數(shù),得出k=12時(shí),SSE及輪廓系數(shù)值相匹配,聚類結(jié)果相對(duì)較好;故采用Matlab對(duì)成員數(shù)據(jù)集進(jìn)行K均值聚類,Best total sum of distances表示聚類結(jié)果的好壞,經(jīng)由10次聚類結(jié)果評(píng)估,如表1所示。
最佳距離總和=544.77時(shí)效果最好,并運(yùn)行得出貢獻(xiàn)者即項(xiàng)目成員團(tuán)隊(duì)的分類結(jié)果,得到12組貢獻(xiàn)者。
2.3 基于詞頻統(tǒng)計(jì)的貢獻(xiàn)者行為特征選擇
詞頻統(tǒng)計(jì)的主要操作步驟主要分為4步,即分詞、詞干提取、去停用詞和計(jì)算詞頻[3]。分詞是將文件中的信息按照一定的規(guī)則進(jìn)行分散;詞干提取是將同一單詞在不同的語(yǔ)句狀態(tài)下呈現(xiàn)不同的狀態(tài)進(jìn)行提??;去停用詞是英文狀態(tài)下經(jīng)常出現(xiàn),其沒有特殊指代含義,采用Python自然語(yǔ)言中自帶的NLTK工具包中停用詞語(yǔ)料庫(kù),實(shí)現(xiàn)對(duì)高頻詞的停用;計(jì)算詞頻是遍歷每個(gè)單詞出現(xiàn)在文本中的次數(shù);首先將12組文本信息通過詞頻統(tǒng)計(jì)得到12組結(jié)果,對(duì)提取出的行為特征頻數(shù)排序,提取其特征數(shù)出現(xiàn)超過1萬次的詞匯作為行為特征初始樣本;然后將12組貢獻(xiàn)者的特征信息與提取的行為特征初始樣本比對(duì),保留12組貢獻(xiàn)者都存在的特征集。
2.4 基于主成分分析的特征降維
主成分分析算法從多元特征中解析出主要特征,其反映原始變量絕大部分信息,并且彼此之間不相關(guān),實(shí)現(xiàn)數(shù)據(jù)集之間的降維效果,最終實(shí)現(xiàn)對(duì)貢獻(xiàn)者行為特征的選擇[4]。
采用Matlab工具將12組度量元的統(tǒng)計(jì)數(shù)據(jù)進(jìn)行主成分分析算法的降維,處理過程如下:(1)數(shù)據(jù)的標(biāo)準(zhǔn)化處理;(2)計(jì)算樣本相關(guān)系數(shù)矩陣;(3)計(jì)算相關(guān)系數(shù)矩陣特征值及特征向量;(4)計(jì)算特征值的貢獻(xiàn)率和累計(jì)貢獻(xiàn)率;(5)選擇主成分;(6)計(jì)算主成分得分。得到行為特征重要性排序,將降序中為0以上的數(shù)據(jù)集保留,其行為特征對(duì)與軟件開發(fā)的影響性較大,選取此類行為特征進(jìn)行軟件缺陷預(yù)測(cè)分析。
3 軟件缺陷預(yù)測(cè)
隨機(jī)森林算法具有很高的預(yù)測(cè)準(zhǔn)確率,對(duì)噪聲和異常值具有很好的容忍度,易于實(shí)現(xiàn),且計(jì)算開銷小,不容易出現(xiàn)過擬合現(xiàn)象等[5],故本文采取隨機(jī)森林算法實(shí)現(xiàn)對(duì)軟件缺陷預(yù)測(cè)。
3.1 數(shù)據(jù)處理
缺陷數(shù)據(jù)集獲取,實(shí)操中存在兩種缺陷網(wǎng)址數(shù)據(jù)集,https://issues.apache.org/jira/browse下可直接獲取缺陷數(shù)據(jù)集總量;https://github.com/apache下的缺陷數(shù)據(jù)集分布在issue中的open和closed中,匯總得到缺陷量,存在bug缺失項(xiàng)。將172個(gè)項(xiàng)目日志數(shù)統(tǒng)計(jì),運(yùn)用SPSS工具對(duì)缺陷數(shù)據(jù)集及日志數(shù)據(jù)集進(jìn)行數(shù)據(jù)關(guān)聯(lián)性分析,不具有關(guān)聯(lián)性。平均值插補(bǔ)法不會(huì)對(duì)樣本造成極大的干擾,其通用與各個(gè)領(lǐng)域,具有極大的普適性,故采用平均值法進(jìn)行缺失值的插補(bǔ)得出最終bug數(shù)據(jù)表,得出各組貢獻(xiàn)值的bug表,進(jìn)行整理匯總,得到貢獻(xiàn)者特征缺陷數(shù)據(jù)集表,如表2所示。
3.2 基于隨機(jī)森林算法的特征行為缺陷預(yù)測(cè)
采用K折交叉驗(yàn)證法作為隨機(jī)森林模型檢驗(yàn)分析技術(shù),其將原始樣本打亂并重復(fù)利用,充分地利用有限的樣本資源減少預(yù)測(cè)偏差,并考慮訓(xùn)練樣本和泛化誤差。其具體的步驟如下:首先將原始數(shù)據(jù)隨機(jī)分為k組,然后將子集分別做一次測(cè)試集,余下的k-1組子集作為訓(xùn)練集用來訓(xùn)練模型,共得到k個(gè)模型,最后用平均值作為模型預(yù)測(cè)精度的最終估計(jì)值。求得其均方根誤差(RMSE)、平均絕對(duì)誤差(MAE)及因變量實(shí)際與預(yù)測(cè)值的相關(guān)系數(shù)(R)作為模型模擬結(jié)果與實(shí)際值的吻合程度的衡量指標(biāo),當(dāng)RMSE與MAE的值越小,R的值越接近1,表明模型的預(yù)測(cè)效果越好,其指標(biāo)的定義如(4)(5)(6)所示:
RMSE=∑ni=1( yi-yi)2n(4)
MAE=1n∑ni=1 yi-yi(5)
R=±∑ni=1(y^-y-)2∑ni=1(yi-y-)2(6)
yi,yi表示第i個(gè)樣本的預(yù)測(cè)值,y-表示樣本觀測(cè)值的平均值,n表示對(duì)應(yīng)的樣本容量。利用特征缺陷率的數(shù)據(jù)集,采用隨機(jī)森林回歸算法進(jìn)行對(duì)軟件的缺陷的預(yù)測(cè)如圖1所示。
當(dāng)特征集為10,17,38,41,43,45,46時(shí),即code,file,remove,support,test,update,use時(shí),其判斷為缺陷集的可能性較大,故貢獻(xiàn)者在進(jìn)行軟件開發(fā)時(shí),可以? 通過規(guī)避及防范此類特征下的操作,增加開源軟件項(xiàng)目的可信度,提高軟件產(chǎn)品的質(zhì)量。
4 結(jié)語(yǔ)
本文提出了基于貢獻(xiàn)者行為特征的軟件預(yù)測(cè)研究。首先在Apache軟件基金會(huì)中運(yùn)用Git和SVN版本控制系統(tǒng)完成對(duì)開源項(xiàng)目獲取,使用MySQL等工具實(shí)現(xiàn)對(duì)開源項(xiàng)目日志信息獲取,對(duì)日志中成員進(jìn)行貢獻(xiàn)統(tǒng)計(jì)分析,采用K均值聚類算法完成對(duì)貢獻(xiàn)者選擇,得到12組貢獻(xiàn)者分組;然后利用詞頻統(tǒng)計(jì)方式完成對(duì)貢獻(xiàn)者行為特征選擇,并采用主成分分析完成對(duì)特征降維,共提取49項(xiàng)特征;之后采用缺陷跟蹤系統(tǒng)對(duì)項(xiàng)目的bug集統(tǒng)計(jì);最后使用隨機(jī)森林算法完成貢獻(xiàn)者特征行為的軟件缺陷預(yù)測(cè)研究,得出貢獻(xiàn)者在進(jìn)行項(xiàng)目開發(fā)時(shí)在遇到code,file,remove,support,test,update,use等行為特征時(shí)開源軟件出現(xiàn)缺陷的概率較高,貢獻(xiàn)者在進(jìn)行軟件項(xiàng)目的開發(fā)過程中遇到此類編寫程序代碼時(shí),應(yīng)保持警惕,減少軟件缺陷。
參考文獻(xiàn)
[1]謝新強(qiáng),楊曉春,王斌,等.一種多特征融合的軟件開發(fā)者推薦[J].軟件學(xué)報(bào),2018(8):2306-2321.
[2]劉望舒,陳翔,顧慶,等.軟件缺陷預(yù)測(cè)中基于聚類分析的特征選擇方法[J].中國(guó)科學(xué):信息科學(xué),2016(9):1298-1320.
[3]李杰,孫仁誠(chéng).基于詞頻統(tǒng)計(jì)算法的中英文詞頻分布研究[J].青島大學(xué)學(xué)報(bào)(工程技術(shù)版),2020(1):1-5.
[4]張曉風(fēng).基于主成分分析的軟件缺陷預(yù)測(cè)研究[D].南京:南京航空航天大學(xué),2017.
[5]呂紅燕,馮倩.隨機(jī)森林算法研究綜述[J].河北省科學(xué)院學(xué)報(bào),2019(3):37-41.
(編輯 傅金睿)
Research on open source software defect prediction based on characteristic behavior of contributors
Huang? Yameng1, Ma? Lulu2*
(1.Huanghe Jiaotong University, Jiaozuo 454950, China; 2.Zhengzhou Technical College, Zhengzhou 450100, China)
Abstract: Aiming at the problems of open source software defects and improving software quality,this paper puts forward a research on open source software defect prediction based on the behavior characteristics of contributors.First,obtain the open source software project in the Apache Software Foundation,and use GIT and SVN version control system to extract the developers log information;Then,the K-means clustering algorithm model is used to mine the developer team (contributors), and the word frequency statistics and principal component analysis algorithm model are used to obtain the behavior characteristics of contributors;Finally,the random forest algorithm is used to predict the software defects of contributors characteristic behavior.The experimental results have certain reference significance.
Key words: open source software; behavioral characteristics; software defect prediction