張燕飛,張春熙,李宇明,張蓉
(華東師范大學(xué)數(shù)據(jù)科學(xué)與工程研究院上海高可信計算重點實驗室,上海200062)
DBugHelper:分布“系統(tǒng)Debug協(xié)助工具
張燕飛,張春熙,李宇明,張蓉
(華東師范大學(xué)數(shù)據(jù)科學(xué)與工程研究院上海高可信計算重點實驗室,上海200062)
對于大規(guī)模分布式系統(tǒng)的開發(fā)而言,其開發(fā)周期比較漫長,包括前期的開發(fā)、過程中的Debug、后期的維護和測試等.在整個開發(fā)周期中,Debug是一個非常關(guān)鍵和重要的環(huán)節(jié),如何才能在短時間內(nèi)找到最可靠的方法來解除bug成為一個重要的挑戰(zhàn).對于系統(tǒng)開發(fā)人員來說,bug報告能非常有效地幫助其了解bug的所有特征信息,并找到能修復(fù)bug的方法.通過研究發(fā)現(xiàn),許多大規(guī)模分布式系統(tǒng)之間具有較強的相關(guān)性和相似性,因而其bug的產(chǎn)生情況和修復(fù)方法也具有類似特征.開發(fā)人員可以利用已存在的修復(fù)bug的方案來協(xié)助修復(fù)與其一致或相近的bug.本文提出一個適用于大規(guī)模分布式系統(tǒng)的Debug協(xié)助工具——DBugHelper,能為某些大規(guī)模分布式系統(tǒng)的開發(fā)人員的bug修復(fù)提供比較有效、正確的幫助.DBugHelper將最新的bug報告進行文本處理,形成查詢向量,并將大量已被修復(fù)的bug及其相關(guān)信息進行離線處理和緩存,從而為在線查詢提供索引機制.通過將大量已修復(fù)的bug報告進行離線處理并同時減少在線處理的數(shù)據(jù)量,從而使其準(zhǔn)確并快速地為系統(tǒng)開發(fā)人員提供必要的Debug協(xié)助工作,以此減少系統(tǒng)開發(fā)的周期與成本.
大規(guī)模分布式系統(tǒng);Debug;bug報告;協(xié)助
Debug是軟件系統(tǒng)開發(fā)周期中十分重要的一個環(huán)節(jié),其所消耗的時間、人力往往與系統(tǒng)開發(fā)階段相當(dāng)甚至所占比重更大.特別是對大規(guī)模分布式系統(tǒng)而言,其項目開發(fā)復(fù)雜度大、開發(fā)周期長、開發(fā)成本高;并且分布式系統(tǒng)特別是基于開源框架的此類系統(tǒng)之間存在著功能相關(guān)和代碼相似的性質(zhì).其中,相關(guān)性是指所開發(fā)的系統(tǒng)是基于或兼容其他大規(guī)模分布式系統(tǒng),而相似性是指某些大規(guī)模分布式系統(tǒng)的整體架構(gòu)或思想屬于同一種類,例如: Spark、HBase、Cassandra等系統(tǒng)與Hadoop密切相關(guān);CouchDB和MongoDB同屬于文檔型數(shù)據(jù)庫等.大規(guī)模分布式系統(tǒng)的bug具有依賴性、傳遞性等特殊性質(zhì),Debug工作更加繁瑣和復(fù)雜.因此,近些年工業(yè)界一直研究如何降低系統(tǒng)開發(fā)周期和成本的問題,而現(xiàn)階段最直接有效的方法就是降低系統(tǒng)Debug成本.目前系統(tǒng)Debug通常由bug的預(yù)測、定位、發(fā)現(xiàn)、分析、修復(fù)、測試等環(huán)節(jié)組成,對每個環(huán)節(jié)所使用的方法進行優(yōu)化,從而降低Debug成本.
在系統(tǒng)開發(fā)的各個階段會生成與系統(tǒng)相關(guān)的很多文件資料,例如bug報告、日志信息、源碼文件、交流檔案、測試案例以及版本信息等.如何利用這些文件信息,挖掘此類文件信息所蘊含的有利于bug定位、分析、修復(fù)等工作的有價值信息是當(dāng)前Debug研究的關(guān)注點.Kim S[1]等人研究挖掘bug報告的相關(guān)信息,對bug進行預(yù)測的工作;Zhou J[2], Nguyen A[3]等人研究通過挖掘出bug報告和源碼文件之間所隱藏的緊密聯(lián)系,并利用此關(guān)系有效和快速地為系統(tǒng)開發(fā)人員進行bug定位的方法.
在眾多支持Debug操作的數(shù)據(jù)信息中,bug報告是用于發(fā)現(xiàn)和修復(fù)系統(tǒng)bug的重要參考文獻,其記錄了來自于系統(tǒng)開發(fā)人員、測試人員以及最終用戶所提交的關(guān)于bug的狀態(tài)信息、重要等級、標(biāo)簽信息、描述信息、交流信息、附件信息等[3-4].
通常大規(guī)模分布式系統(tǒng)在其開發(fā)周期內(nèi)會產(chǎn)生大量的bug報告,其狀態(tài)包括公開、正在修復(fù)中、再次公開、關(guān)4、可用補丁、已修復(fù)等6種.其中已修復(fù)的bug報告包含bug修復(fù)方案及相關(guān)補丁,同時記錄關(guān)于bug修復(fù)的所有交互信息.例如,目前APACHE官方網(wǎng)站所公布的其所收錄的bug總數(shù)為39 365,已修復(fù)的bug為28 602個[5];其中關(guān)于MapReduce的bug數(shù)達3 898,包括已修復(fù)bug為1 435個,公開的bug為711個[5].
一旦一份bug報告被系統(tǒng)開發(fā)人員所接收和確認(rèn),項目團隊就要對此bug報告進行分析,從bug報告中抽取出此bug的主要特征,并搜索與其相關(guān)和類似的bug的解決方案,期望從已經(jīng)修復(fù)的bug中獲取和解決bug的思路.然而,面對眾多的大規(guī)模分布式系統(tǒng)以及其所包含的大量bug信息,想要找到與當(dāng)前所遇到的bug一致或非常類似的bug并非易事,因為bug描述簡短、專業(yè)性強,并且其關(guān)鍵詞抽取自動化比較困難.
近年來,已有一些研究運用信息檢索技術(shù)對bug報告進行分析,再對bug報告進行基于特征的分類[6];或者利用機器學(xué)習(xí)算法根據(jù)bug報告的影響力進行分類[7];也可以基于正交缺陷分類(Orthogonal Defect Classification,ODC)的方法,定義基于數(shù)據(jù)和控制流缺陷、結(jié)構(gòu)缺陷和非功能缺陷類型,通過提取缺陷報告和源代碼的特征,對缺陷報告進行自動分類[8].當(dāng)前所存在的這些bug分類方法,都是利用較少的bug報告的信息結(jié)合源碼信息、測試信息等分類算法進行分類.Bug報告本身具有的特征信息、描述內(nèi)容中的關(guān)鍵信息(例如,bug的概要描述、詳細(xì)描述)、bug的修復(fù)交互信息以及相關(guān)的bug修復(fù)方案及其附件通常容易被忽略,而這些信息中包含大量bug特征.因此,本文的研究問題是:“如何利用bug相關(guān)信息協(xié)助開發(fā)人員修復(fù)bug,以支持大規(guī)模分布式系統(tǒng)的開發(fā)?”由此關(guān)鍵問題,也?生出兩個子問題:
Q1:如何挖掘bug報告所隱含的bug的特征信息以及關(guān)聯(lián)信息?
Q2:如何利用已修復(fù)bug的相關(guān)信息對新的bug進行修復(fù)方案推薦?
本文針對上述問題進行了研究,包括:
(1)特征提取:基于詞集的bug特征定義和抽取忽視描述詞間潛在的關(guān)聯(lián)關(guān)系.本文提出利用Latent Dirichlet Allocation(LDA)模型[9-10],基于bug相關(guān)文檔,從而構(gòu)造基于潛語義的詞集;
(2)噪音過濾:通過LDA模型獲取詞在主題上的分布,根據(jù)此分布過濾掉與主題相關(guān)度低的詞,從而降低Vector Space Model(VSM)模型的輸入規(guī)模;
(3)多層次聚類:發(fā)現(xiàn)bug之間的關(guān)聯(lián)關(guān)系.
分別利用LDA模型和VSM模型對bug報告進行分類的工作已經(jīng)存在,但其最終結(jié)果并不理想:僅利用LDA模型,只考慮bug報告的主題分布,利用基于主題的低維度向量進行相似度分析,必然會導(dǎo)致大量信息的丟失,且已有的工作大多利用bug報告的短文本,同樣會降低準(zhǔn)確性;只利用VSM模型,其利用bug報告的詞頻所建立的文本向量會丟失大量的語義信息,而高維度的相似度計算會導(dǎo)致其極高的代價.本文所提出的DBugHelper將結(jié)合LDA和VSM模型的優(yōu)勢構(gòu)造L VSM模型,在原本機械詞頻統(tǒng)計的基礎(chǔ)上加入詞之間的深層語義知識,使最終形成的向量更好地對bug報告的特征信息及其之間的關(guān)聯(lián)信息進行描述.
本文工作的貢獻是:
·將LDA與VSM相結(jié)合提出L VSM模型,該模型能更加有效地對大規(guī)模分布式系統(tǒng)所產(chǎn)生的bug報告進行分析.
·本文在大量的bug報告數(shù)據(jù)上,開展了充分的對比試驗,驗證工具的有用性和有效性.
·設(shè)計和實現(xiàn)了Debug協(xié)助分析工具DBugHelper.工具可以有效地分析所提交bug的特性,為系統(tǒng)開發(fā)人員提供最為相近的bug修復(fù)方案.
本文的組織如下:第1節(jié)闡述bug報告及其修復(fù)方案的分析;第2節(jié)介紹本文所提出的DBugHelper工具;第3節(jié)介紹了實驗設(shè)計;第4節(jié)展示了實驗結(jié)果并進行相關(guān)討論;第5節(jié)對相關(guān)工作進行了介紹;第6節(jié)對全文進行總結(jié).
通過對現(xiàn)有bug報告及其修復(fù)方案的細(xì)致分析,其主要特征如下:
相似bug報告:當(dāng)系統(tǒng)開發(fā)人員獲取到新的bug報告后,首先考慮是否有類似的bug已被修復(fù),通過查詢已修復(fù)的bug報告,得到相近或相關(guān)的修復(fù)方案.再進一步查詢相關(guān)的資料文檔,最終對bug進行修復(fù).因此,如何有效地查詢歷史記錄來幫助修復(fù)bug是重要問題.
簇組:系統(tǒng)開發(fā)人員為修復(fù)bug而查閱大量文檔資料,例如相似的bug報告及其修復(fù)方案、系統(tǒng)功能設(shè)計文檔、系統(tǒng)日志文檔等.為縮短bug修復(fù)時間以提高搜索和查詢資料的效率,可提前對bug進行分析歸類,在其所屬簇組中查詢相關(guān)修復(fù)方法的信息.因此,對bug及其報告進行歸類,有利于提高bug的查詢效率.
離線、在線處理:及時響應(yīng)是工具的基本要素.大規(guī)模分布式系統(tǒng)所擁有的與bug相關(guān)的數(shù)據(jù)資源十分豐富,其數(shù)據(jù)處理耗時較長,因此迅速響應(yīng)是工具可用性的表現(xiàn).將復(fù)雜計算進行離線處理,縮短工具響應(yīng)時間并提高其可用性.DBugHelper采取離線和在線處理操作分離的方式,離線處理已修復(fù)bug相關(guān)數(shù)據(jù)信息并提供索引機制,在線處理利用該索引及新的bug報告及時為系統(tǒng)開發(fā)人員提供最為接近的bug修復(fù)方案以及相關(guān)資料信息.
就目前相關(guān)研究來看,相似bug報告已經(jīng)被用于bug的定位方法[2].而其他兩方面都沒有很好地利用和研究.在本文所設(shè)計的工具中,此類信息被進行考慮和利用.
圖1 DBugHelper的整體架構(gòu)Fig.1DBugHelper overview
2.1 DBugHelper的整體架構(gòu)
圖1展現(xiàn)了為大規(guī)模分布式系統(tǒng)的開發(fā)提供Debug協(xié)助的工具--DBugHelper.整個系統(tǒng)分為兩大部分:1)離線處理模塊:主題分析、詞典構(gòu)建、術(shù)語選擇、文本向量構(gòu)建、簇及其質(zhì)心構(gòu)建;2)在線處理模塊:查詢向量構(gòu)建、修復(fù)方案推薦.當(dāng)獲取到新的bug報告,工具基于離線處理所獲取的術(shù)語詞典將此報告轉(zhuǎn)化為查詢向量.已修復(fù)的bug報告經(jīng)過L VSM模型構(gòu)造向量集合,再通過聚類分析將bug的向量集合進行歸類,并獲取各類的質(zhì)心以構(gòu)建索引機制.將查詢向量與所構(gòu)建的索引向量進行相關(guān)性分析,查詢出與新的bug報告相關(guān)的已修復(fù)的bug,再將這一類的bug文件資料進行融合,為新提交的bug推薦可能的修復(fù)方案及其他相關(guān)文件資料.新提交的bug報告會進入已修復(fù)bug的緩存隊列中,bug一旦被修復(fù)會觸發(fā)離線處理操作.
2.2 離線處理
離線處理環(huán)節(jié),將大量已修復(fù)bug的相關(guān)文檔資料進行分析處理,利用L VSM模型抽取bug報告的特征信息并將其向量化表示,向量分量的權(quán)值波動反映出bug報告之間的關(guān)聯(lián)關(guān)系.DBugHelper存儲了大量大規(guī)模分布式系統(tǒng)的bug報告F及其相關(guān)修復(fù)方案的文檔R,采取離線處理方式,對已修復(fù)的bug報告F進行處理.分為幾個步驟:
主題分析:本文從兩個層面提取bug報告的主題,一是bug報告所具有的明確特征的主題Ts,例如bug等級、標(biāo)簽、狀態(tài)、系統(tǒng)環(huán)境、所屬版本、所屬組件、作者等;二是從bug報告中的bug概要、描述、評論、歷史等信息中抽取出的主題Tg;本文所抽取和利用的主題為T(Ts+Tg).本文對已修復(fù)的bug報告進行分析并抽取其主題T,對于每篇bug報告F所包含的主題T,在F中均有相關(guān)單詞w進行描述.
術(shù)語選擇:本文利用主題T和單詞w之間的反向關(guān)系,將原本主題T的對單詞w的概率分布θ(T→w)變?yōu)閣→T,以計算單詞w在每個主題T上的概率分布,從而得到每個w的向量,其中|T|是主題總數(shù),c是當(dāng)前詞,wc,t表示為:
其距離越大分值將越高.將所有詞按分值進行降序排序,將得分較低的單詞去除.將所有留存的單詞w來構(gòu)成術(shù)語詞典D.
詞典構(gòu)建:本文從已修復(fù)的bug報告F中抽取主題T,主題T由F中單詞w進行描述,而單詞w的概率值θ表示出其對于主題T的重要程度.為提高工具的性能和縮短響應(yīng)時間,選取F中較為重要的單詞作為術(shù)語,從而構(gòu)建術(shù)語詞典D.前期對bug報告進行文本處理,包括去除停用詞、標(biāo)點符號等,再通過術(shù)語選擇,進一步降低工具的在線、離線處理的時間和代價.傳統(tǒng)利用LDA模型進行特征抽取時,通常是以主題詞來構(gòu)建文檔向量,但由于主題數(shù)為人為設(shè)定,因此誤差性較大,當(dāng)主題數(shù)設(shè)定較小時,甚至導(dǎo)致所有向量相似性極高.本文選擇描述主題權(quán)重較高的單詞作為術(shù)語,以術(shù)語構(gòu)建文本向量,進而提高準(zhǔn)確性以及減少模型處理代價.
文本向量構(gòu)建:所構(gòu)造的術(shù)語詞典D涵蓋所有已修復(fù)bug報告d的關(guān)鍵術(shù)語,基于詞典D所形成的F的特征向量Q能表現(xiàn)bug的基本特性又能反映bug之間的關(guān)聯(lián)關(guān)系,|F|為此向量的元素個數(shù)即詞典D所含術(shù)語t的個數(shù).將已修復(fù)bug報告進行向量化表示,其各個分量的權(quán)重值wi,j是基于術(shù)語頻率(tf)和逆文檔頻率(idf)計算而來.該算法的基本思想是術(shù)語的重要性隨著它在文檔中出現(xiàn)的次數(shù)成正比增加,但同時也隨其在詞典中出現(xiàn)的頻率成反比下降.在傳統(tǒng)的VSM模型中,對tf和idf進行以下定義:
等式(3)中的ni,j是指術(shù)語ti在文檔dj中出現(xiàn)的次數(shù),其對應(yīng)的分母表示文檔dj所有術(shù)語出現(xiàn)次數(shù)之和.|D|為詞典D所包含的文檔dj的總數(shù),它對應(yīng)的分母則是包含術(shù)語tj的文件的個數(shù).當(dāng)前很多研究通過改變tf的形式,進一步提高VSM模型的性能,其中包括對數(shù)型、增廣型以及布爾型等多種VSM模型改進方法[11].通過對比驗證,本文采用對數(shù)型以提高性能:
在L VSM中,本文利用等式(4)來定義tf,因此術(shù)語ti所對應(yīng)的權(quán)值wi,j被定義為:
文檔dj所對應(yīng)的文本向量表示為:
L VSM模型利用LDA的Gibbs Sampling實現(xiàn),并結(jié)合等式(2)得到用于描述bug報告的特征值,以此作為改進的VSM模型的輸入,最終通過等式(6)得到F的向量集合,其集合定義為:
簇及其質(zhì)心構(gòu)建:隨著已修復(fù)bug報告數(shù)量的不斷增加,其處理分析的時間也隨之增長,因此本文將此階段進行離線處理.通過對已修復(fù)bug報告集進行聚類分析并進行歸類,找出表示每個簇的質(zhì)心來構(gòu)建索引,從而提高相近bug修復(fù)方案的查詢效率.Bug報告的區(qū)別性和關(guān)聯(lián)性與K-Means聚類分析[12]所適用的場景吻合,同時結(jié)合算法的時間復(fù)雜度低、對大規(guī)模數(shù)據(jù)處理適用性高、伸縮性好等特點,因此將K-Means算法用于bug報告的聚類分析.向量集合F在給定簇組數(shù)K(K 6|D|)值的條件下,將F中的向量歸為K類,所構(gòu)成簇集合為:
簇組數(shù)K是人為設(shè)定的,不同的K值對聚類結(jié)果影響較大,本文通過確定指標(biāo)的方式,對K值進行探尋,找出最接近于真實簇數(shù)目的K值.K-Means所定義的函數(shù)公式為:
等式(9)中的μk表示的是每個分類Sk的平均值,rnk只有當(dāng)被歸類到某一簇Sn時,其值被賦為1,否則為0.通過計算E值來找出每個向量Vn所屬的簇Sn,通過不斷地迭代最終形成k個簇,每個簇的質(zhì)心定義為:
簇以及簇的質(zhì)心將被用于新提交bug報告B的相似度計算,以此判別B所屬的簇.
2.3 在線處理
在線處理主要針對新提交的bug報告,如何利用離線處理所構(gòu)建的索引機制迅速查詢到相近的修復(fù)方案是在線處理環(huán)節(jié)的核心問題.針對此問題,本文提出三層處理架構(gòu),其結(jié)構(gòu)如圖2所示.第一層是用于緩存新提交bug報告,將所提交的bug報告基于詞典D生成查詢向量B;第二層緩存由離線處理階段所獲取的簇Sn及所對應(yīng)的質(zhì)心Cn;第三層緩存所有已修復(fù)bug的相關(guān)修復(fù)方法及其他相關(guān)資料文件.
圖2 DBugHelper在線處理三層處理架構(gòu)Fig.2Three layers for online processing in DBugHelper
第一、二層的鏈接關(guān)系是B與Cn之間的相似度,通過計算B與Cn之間的相似度值判別其所屬簇SB,同樣利用公式(2)所采用的cosine相似度計算方法對B進行簇判別:
計算所得與B相似度值最大Cn簇即是B所屬簇,這表明新提交的bug和簇中其他bug報告所描述的bug屬于同一類,則其修復(fù)方案最為相似或相關(guān).第二、三層的鏈接關(guān)系是已修復(fù)bug報告F和其相關(guān)修復(fù)方案的對應(yīng)關(guān)系,同樣通過將B與所屬簇SB的其他bug報告進行相似度分析,將適用于新提交的bug報告的修復(fù)方案及相關(guān)文檔資料進行排序,最終為系統(tǒng)開發(fā)人員提供最為相似或相關(guān)的bug修復(fù)方案.
3.1 系統(tǒng)選擇
為評估DBugHelper的有效性,本文選取四個開源的大規(guī)模分布式系統(tǒng)作為實驗項目(如表1所示).所有項目都擁有完整的bug報告以及相關(guān)的修復(fù)方案,同時也包含與bug相關(guān)的包括討論、歷史、日志、狀態(tài)轉(zhuǎn)換等方面的數(shù)據(jù)信息.本文選取HDFS作評估對象,因其是一款非常流行并開源的分布式文件系統(tǒng),并且是分布式系統(tǒng)基礎(chǔ)架構(gòu)Hadoop的核心部件.而MapReduce同樣也是Hadoop的核心設(shè)計之一,它是用于大規(guī)模數(shù)據(jù)集并行計算的編程模型.HBase是基于Hadoop架構(gòu)實現(xiàn)的分布式開源數(shù)據(jù)庫系統(tǒng),利用HDFS存儲海量數(shù)據(jù),并使用MapReduce進行數(shù)據(jù)處理.數(shù)據(jù)倉庫工具Hive同樣基于Hadoop架構(gòu)所實現(xiàn),是一種可以存儲、查詢和分析大規(guī)模數(shù)據(jù)的機制.
表1 研究項目Tab.1Study project
3.2 數(shù)據(jù)選擇
對于每個項目系統(tǒng),本文從bug跟l系統(tǒng)(例如BugZilla或APACHE官網(wǎng))中選擇最原始的bug報告作為實驗對象,來評估DBugHelper所推薦bug修復(fù)方案的準(zhǔn)確性.
用于評估的bug報告,包含以下幾個方面:
(1)Bug的基本信息.它一般包括bug的主題、類型、優(yōu)先級、所影響的系統(tǒng)版本以及其所屬組件等(例如:“MapReduce job can infinitely increase number of reducer resource requests”,“Bug”,“Blocker”,“2.8.0”,“None”).
(2)Bug的描述信息.開發(fā)人員用自然語言對Debug過程中所產(chǎn)生的bug進行詳細(xì)描述,有時也附加相關(guān)的日志信息等.
3.3 研究問題
本文設(shè)計實驗對以下三個問題進行回答:
Q1:DBugHelper能否較為準(zhǔn)確地為bug提供相一致或相近的修復(fù)方案?
為回答這個問題,本文將四個項目系統(tǒng)的已修復(fù)bug及其修復(fù)方案作為基準(zhǔn)數(shù)據(jù),將bug報告作為DBugHelper的輸入條件.檢查從工具中所返回的修復(fù)方案及其相對應(yīng)的bug報告.若所輸出的結(jié)果Top N(N=1,5,10,15,20)個包含該bug的真實修復(fù)方案,則認(rèn)為bug的修復(fù)方案可以有效地被推薦.本文選取每個系統(tǒng)的100個已修復(fù)bug作為實驗對象,計算bug被提供的修復(fù)方案的準(zhǔn)確率(Accuracy).
Q2:L VSM模型是否能提高尋找相似bug報告的準(zhǔn)確率?
在第2節(jié)中,本文提出了L VSM模型,將其用于bug分析從而構(gòu)建查詢向量及結(jié)合聚類分析構(gòu)建索引機制.為評估L VSM的有效性,本文將其與傳統(tǒng)VSM的方法進行對比,將DBugHelper中的L VSM模型替換為傳統(tǒng)VSM模型,并在Q1的條件下對DBugHelper提供bug修復(fù)方案的準(zhǔn)確率進行計算,并以此與基于L VSM模型實現(xiàn)的工具進行結(jié)果比對.
Q3:DBugHelper的在線、離線處理模式能否提高查詢bug修復(fù)方案的效率?
在第2節(jié)中,本文提出在線、離線處理分離的模式,將大數(shù)據(jù)集進行離線處理構(gòu)建查詢索引,用在線處理獲取查詢向量,使用該查詢向量結(jié)合索引機制查詢bug修復(fù)方案.為評估該模式的可靠性,本文引入時間準(zhǔn)確率比(TA)的度量標(biāo)準(zhǔn)(在下一小節(jié)介紹),以評估在線、離線處理模式的性能.
3.4 評估度量
為評估DBugHelper關(guān)于bug修復(fù)方案的查詢效率,本文提出以下度量:
·Accuracy(準(zhǔn)確率)是指bug的準(zhǔn)確修復(fù)方案占DBugHelper所輸出的修復(fù)方案Top N(N=1,5,10,···,n)的比率.工具所輸出的修復(fù)方案越多,包含的bug準(zhǔn)確修復(fù)方案就越多.此度量值越高,則其準(zhǔn)確率越高.
·TA(時間/準(zhǔn)確率)指時間與準(zhǔn)確率的比值,以此衡量Bug修復(fù)方案的查詢效率.TA表示單位準(zhǔn)確率下DBugHelper的每個查詢的執(zhí)行時間,其值越小則表示查詢效率越高.公式定義如下:
其中Time指的是分別返回Top N個bug修復(fù)方案所需時間;指的是針對相同返回Top N個bug修復(fù)方案所需的時間均值;Accuracy是指DBugHelper所返回Top N個bug修復(fù)方案中真實修復(fù)方案的所占比重.
針對所研究問題的實驗結(jié)果展示如下:
Q1:DBugHelper能較為準(zhǔn)確地提供與bug相一致或相近的修復(fù)方案嗎?
表2展現(xiàn)了DBugHelper所輸出的Top N個bug解決方案中包含bug真實解決方案的比例.本文分別選取4種系統(tǒng)項目各100個bug報告作為輸入數(shù)據(jù),而工具針對每個bug報告輸出的Top N個修復(fù)方案.此類方案中包含真實bug修復(fù)方案的個數(shù)所占bug總數(shù)(即100個bug報告)的比例,即為工具的準(zhǔn)確率.對于輸入的100個HDFS相關(guān)的bug報告,工具輸出的Top 10個修復(fù)方案包含真實方案的有44個,則其準(zhǔn)確率為44%.對于Hive項目,相同的輸入條件下,工具所返回的Top 20個修復(fù)方案包含68個真實方案,則其準(zhǔn)確率為68%.隨著N值的遞增,DBugHelper所輸出的修復(fù)方案準(zhǔn)確率也在同步提升.
表2 DBugHelper的準(zhǔn)確率Tab.2DBugHelper accuracy
Q2:L VSM模型是否能提高查詢相似bug報告的準(zhǔn)確率?
在DBugHelper工具中,L VSM模型被用于查詢向量以及索引機制的構(gòu)建,從而影響bug修復(fù)方案的推薦.表3表明基于VSM和L VSM實現(xiàn)的DBugHelper在提供修復(fù)方案的準(zhǔn)確率上的差異.實驗選取HDFS和MapReduce系統(tǒng)的bug報告數(shù)據(jù),利用與Q1中相同的方法,對工具的兩種實現(xiàn)方式作對比,以此證明L VSM模型在查詢相似bug報告的準(zhǔn)確率方面的提高.從表3的數(shù)據(jù)中可以發(fā)現(xiàn),基于L VSM實現(xiàn)的工具在Top N(N=1,5,15,20)上所提供bug修復(fù)方案的準(zhǔn)確率均高于VSM模型.在HDFS和MapReduce兩種系統(tǒng)的實驗數(shù)據(jù)對比中,L VSM模型所實現(xiàn)的工具準(zhǔn)確率高于傳統(tǒng)VSM模型.傳統(tǒng)VSM所實現(xiàn)的DBugHelper的準(zhǔn)確率同樣滿足隨N值的遞增而遞增的趨勢,但整體趨勢均略低于L VSM模型.簡而言之,L VSM模型的提出有利于提高相似bug報告的查詢準(zhǔn)確率以及所提供bug修復(fù)方案的準(zhǔn)確率.
表3 基于VSM與L VSM實現(xiàn)的DBugHelper的準(zhǔn)確率對比Tab.3Accuracy comparison between VSM and L VSM in DBugHelper
Q3:DBugHelper的在線、離線處理模式能否提高查詢bug修復(fù)方案的效率?
表4展現(xiàn)了在Q1實驗條件下,不同系統(tǒng)及Top N所組成的實驗中工具所執(zhí)行的時間.將系統(tǒng)HDFS的100個bug報告作為輸入條件,執(zhí)行工具100次輸出Top N(N=1,5,15,20)個bug修復(fù)方案所用時間,求算術(shù)平均值,所輸出的bug修復(fù)方案的準(zhǔn)確率如表2所示.
表4 DBugHelper的執(zhí)行時間Tab.4Execution time in DBugHelper
利用等式(12),計算時間與準(zhǔn)確率的比值TA作為評估DBugHelper效率的度量.如圖3所示,工具的TA值隨著N值的遞增呈現(xiàn)先上升后平穩(wěn)的趨勢.在Top 1到Top 5階段,工具的效率值呈現(xiàn)快速上升趨勢;但從Top 5到Top 20階段,工具效率值趨于平穩(wěn).對于不同的項目系統(tǒng),效率趨勢圖都比較相似或相近.TA作為時間與準(zhǔn)確率的比值,其物理意義在于單位準(zhǔn)確率下DBugHelper每個查詢的執(zhí)行時間.TA的值越小,工具的執(zhí)行效率越高,即在較短的時間內(nèi)能返回較為準(zhǔn)確的bug修復(fù)方案.
本文利用三個方面的實驗對DBugHelper工具進行評估,分別為工具的準(zhǔn)確性、L VSM模型查詢相似bug報告的準(zhǔn)確性以及工具的效率.通過與傳統(tǒng)的VSM模型進行對比實驗,進一步闡明本文提出L VSM模型的必要性;通過對工具在準(zhǔn)確性和查詢效率兩方面的實驗驗證,并且將大規(guī)模分布式系統(tǒng)數(shù)據(jù)作為實驗對象,進一步證明本文所提出的適用于大規(guī)模分布式系統(tǒng)開發(fā)的Debug協(xié)助工具--DBugHelper的必要性和有效性.
圖3 DBugHelper的效率趨勢圖Fig.3The efficiency of DBugHelper
在系統(tǒng)的開發(fā)周期內(nèi),Debug工作至關(guān)重要.Bug的難以預(yù)知性和無法避免性導(dǎo)致其成本消耗巨大,有時甚至超過整個系統(tǒng)開發(fā)成本的三分之一[13].通過利用已有的bug報告、源代碼文件、系統(tǒng)日志等資源,為系統(tǒng)開發(fā)人員定位bug、修復(fù)bug等提供協(xié)助的工作一直被研究領(lǐng)域所關(guān)注.Lukins等人用LDA模型對bug報告進行分析,從而對bug進行有效定位[14].該方法利用LDA模型對所有bug報告和代碼源文件進行主題抽取,根據(jù)所抽取的主題作為查詢條件對所有的資源文件進行查詢.而DBugHelper利用bug報告所含的相關(guān)術(shù)語作為查詢屬性,更加完整地對bug相關(guān)資源文件進行查詢,同時提高查詢效率、降低查詢時間.在他們的方法中,如果新提交的bug報告所提取出的主題較少,其所查詢出的資源文件準(zhǔn)確度就較低.DBugHelper充分利用bug報告所具有的特征,以主題相關(guān)的術(shù)語構(gòu)建文本向量,以此可以充分表示bug報告及其關(guān)聯(lián)關(guān)系.
近些年,有關(guān)利用信息檢索的技術(shù)去進行bug報告的分類、bug定位的方法不斷被提出. DBugHelper工具利用LDA和VSM相結(jié)合的手段對Bug報告進行檢索和分析具有一定的優(yōu)勢,Rao等人[15]用具體的試驗對Unigram Model(UM),Vector Space Model(VSM),Latent Semantic Analysis Model(LSA),Latent Dirichlet Allocation Model(LDA)以及Cluster Based Document Model(CBDM)進行了對比,從結(jié)果可以發(fā)現(xiàn)UM和VSM從文本集中檢索相關(guān)文檔的效果更好.本文將LDA和VSM相結(jié)合對與Bug報告相關(guān)的文檔信息進行檢索分析,在一定程度上比單一模型在準(zhǔn)確度上有了一定的提高.
本文的工作也與很多軟件資料庫的挖掘工作有關(guān).大量有關(guān)系統(tǒng)軟件開發(fā)的數(shù)據(jù)資料越來越多地被人們所搜集,并且很多資料開始被用來分析和挖掘以解決與bug相關(guān)的眾多問題.許多研究人員通過挖掘bug報告及相關(guān)信息來解決與bug相關(guān)的一系列問題,如bug的自動分類[16],二重bug報告的探測[17],以及bug的預(yù)測研究[1]等.隨著計算機技術(shù)的發(fā)展和應(yīng)用,面對更多大規(guī)模分布式系統(tǒng)或者其他系統(tǒng)軟件的開發(fā),大量的bug以及其相關(guān)信息被源源不斷地產(chǎn)生出來,用人工處理的方法已經(jīng)無法滿足當(dāng)前科技發(fā)展的需求,因此越來越多的研究人員著手用機器學(xué)習(xí)、數(shù)據(jù)挖掘等技術(shù)對這類數(shù)據(jù)進行自動分析處理.本文提出的工具,充分利用bug報告對大規(guī)模分布式系統(tǒng)的開發(fā)人員提供Debug協(xié)助.
每當(dāng)新的bug報告來臨,系統(tǒng)開發(fā)人員需盡快掌握bug的特性,并尋找出合適的方案進行bug的修復(fù).對于大規(guī)模分布式系統(tǒng)而言,bug產(chǎn)生原因更為復(fù)雜,除需要檢查系統(tǒng)自身可能出現(xiàn)的bug,還包括與之相關(guān)或緊密聯(lián)系的其他系統(tǒng),因此系統(tǒng)的bug更具有依賴性、傳遞性以及關(guān)聯(lián)性等特征.并且此類系統(tǒng)開發(fā)周期長、難度大,需要在其Debug工作上投入大量成本.本文充分挖掘大規(guī)模分布式系統(tǒng)bug的獨特性,利用信息檢索的相關(guān)方法,提出了一個適用于大規(guī)模分布式系統(tǒng)開發(fā)的Debug協(xié)助工具--DBugHelper.工具利用L VSM模型和聚類分析技術(shù)構(gòu)建了bug報告的查詢向量和bug修復(fù)方案的索引機制,采用在線、離線進行數(shù)據(jù)處理的模式提高查詢效率和準(zhǔn)確率.評估結(jié)果階段,本文利用4個真實開源的分布式系統(tǒng)作實驗對象,展現(xiàn)出DBugHelper推薦相關(guān)或相似bug修復(fù)方案的準(zhǔn)確性和高效性.
后續(xù)我們將會繼續(xù)探究將分布式系統(tǒng)的詳細(xì)設(shè)計文檔信息加入到現(xiàn)在的方法中,從而進一步提高工具推薦bug修復(fù)方案準(zhǔn)確度的問題.同時也將會把DBugHelper應(yīng)用到企業(yè)項目中,以真實地評估工具的有效性.
[1]KIM S,ZIMMERMANN T,WHITEHEADE E J,et al.Predicting faults from cached history[C]//Proceedings of the 29th International Conference on Software Engineering.2007.
[2]ZHOU J,ZHANG H,LO D.Where should the bugs be fixed?-more accurate information retrieval-based bug localization based on bug reports[C]//Proceedings of the 2012 International Conference on Software Engineering. 2012:14-24.
[3]NGUYEN A T,NGUYEN T T,AL-KOFAHI J,et al.A topic-based approach for narrowing the search space of buggy files from a bug report[C]//Proceedings of the IEEE/ACM International Conference on Automated Software Engineering.2011:263-272.
[4]ZHANG J,WANG X Y,HAO D,et al.A survey on bug-report analysis[J].Science China,2015,58(2):1-24.
[5]Hadoop Map/Reduce[EB/OL].[2016-06-20].https://issues.apache.org/jira/browse/MAPREDUCE.
[6]SUN X,LI B,LEUNG H,et al.MSR4SM:Using topic models to effectively mining software repositories for software maintenance tasks[J].Information&Software Technology,2015,66:1-12.
[7]HUANG L,NG V,PERSING I,et al.AutoODC:Automated generation of orthogonal defect classifications[J]. Automated Software Engineering,2015,22(1):3-46.
[8]THUNG F,LO D,JIANG L.Automatic defect categorization[C]//Proceedings of the 2012 19th Working Conference on Reverse Engineering(WCRE).IEEE,2012:205-214.
[9]BLEI D M,NG A Y,JORDAN M I.Latent Dirichlet allocation[J].Journal of Machine Learning Research,2003: 993-1022.
[10]THOMAS S W.Mining software repositories using topic models[C]//Proceedings of the 33rd International Conference on Software Engineering.2011:1138-1139.
[11]MANNING C D,RAGHAVAN P,SCHüTZE H.Introduction to Information Retrieval[M].Cambridge:Cambridge University Press,2008.
[12]KANUNGO T,MOUNT D M,NETANYAHU N S,et al.An efficient k-means clustering algorithm:Analysis and implementation[J].IEEE Transactions on Pattern Analysis&Machine Intelligence,2002,24(7):881-892.
[13]SI X S,HU C H,ZHOU Z J.Fault prediction model based on evidential reasoning approach[J].Science China Information Sciences,2010,53(10):2032-2046.
[14]LUKINS S K,KRAFT N A,ETZKORN L H.Bug localization using latent Dirichlet allocation[J].Information &Software Technology,2010,52(9):972-990.
[15]RAO S,KAK A.Retrieval from software libraries for bug localization:A comparative study of generic and composite text models[C]//Proceedings of the International Working Conference on Mining Software Repositories. 2011:43-52.
[16]PINGCLASAI N,HATA H,MATSUMOTO K.Classifying bug reports to bugs and other requests using topic modeling[C]//Proceedings of the Asia-Pacific Software Engineering Conference.IEEE Computer Society,2013: 13-18.
[17]RUNESON P,ALEXANDERSSON M,NYHOLM O.Detection of duplicate defect reports using natural language processing[C]//Proceedings of the 29th International Conference on Software Engineering.2007:499-510.
(責(zé)任編輯:林磊)
DBugHelper:A Debug assistant tool for distributed systems
ZHANG Yan-fei,ZHANG Chun-xi,LI Yu-ming,ZHANG Rong
(Institute for Data Science and Engineering,Shanghai Key Laboratory of Trustworthy Computing,East China Normal University,Shanghai200062,China)
Development of large-scale distributed systems has experienced a long developing period.During the whole development cycle,debug is one of the most important steps.We meet the challenges of finding all the bugs and the corresponding solutions fixing bugs in a short time.Bug reports record bug histories and solutions,which provide a way to understand bug features and help to find solutions for new bugs.After we analyze the bug reports and fixed solutions,we find that there are strong correlation and similarity among many large-scale distributed systems.Thus the developing and fixing scheme ofbugs may have similar characteristics.Then existed fixing solutions of bugs can be used to assist fixing new bugs.In this paper,we propose DBugHelper,a debug helping tool which can be applied to boost the development of large-scale distributed systems and provide a more effective way to fix bugs.In DBugHelper,the existed bug reports are processed offline,and the latest bug report is represented as a query vector.We query the bug report history database and find the similar bugs with their solutions.In such way,we suppose to shorten the whole system development period.
large-scale distributed system;Debug;bug report;assistance
TP391
A
10.3969/j.issn.1000-5641.2016.05.017
1000-5641(2016)05-0153-12
2016-05
國家863計劃項目(2015AA015307);國家自然科學(xué)基金重點項目(61232002,61332006);國家自然科學(xué)基金(61432006)
張燕飛,男,碩士研究生,研究方向為數(shù)據(jù)庫系統(tǒng)、數(shù)據(jù)挖掘. E-mail:yfzhang@stu.ecnu.edu.cn.
張蓉,女,博士,副教授,研究方向為分布式數(shù)據(jù)管理.E-mail:rzhang@sei.ecnu.edu.cn.