張燕飛,張春熙,李宇明,張蓉
(華東師范大學(xué)數(shù)據(jù)科學(xué)與工程研究院上海高可信計(jì)算重點(diǎn)實(shí)驗(yàn)室,上海200062)
DBugHelper:分布“系統(tǒng)Debug協(xié)助工具
張燕飛,張春熙,李宇明,張蓉
(華東師范大學(xué)數(shù)據(jù)科學(xué)與工程研究院上海高可信計(jì)算重點(diǎn)實(shí)驗(yàn)室,上海200062)
對于大規(guī)模分布式系統(tǒng)的開發(fā)而言,其開發(fā)周期比較漫長,包括前期的開發(fā)、過程中的Debug、后期的維護(hù)和測試等.在整個(gè)開發(fā)周期中,Debug是一個(gè)非常關(guān)鍵和重要的環(huán)節(jié),如何才能在短時(shí)間內(nèi)找到最可靠的方法來解除bug成為一個(gè)重要的挑戰(zhàn).對于系統(tǒng)開發(fā)人員來說,bug報(bào)告能非常有效地幫助其了解bug的所有特征信息,并找到能修復(fù)bug的方法.通過研究發(fā)現(xiàn),許多大規(guī)模分布式系統(tǒng)之間具有較強(qiáng)的相關(guān)性和相似性,因而其bug的產(chǎn)生情況和修復(fù)方法也具有類似特征.開發(fā)人員可以利用已存在的修復(fù)bug的方案來協(xié)助修復(fù)與其一致或相近的bug.本文提出一個(gè)適用于大規(guī)模分布式系統(tǒng)的Debug協(xié)助工具——DBugHelper,能為某些大規(guī)模分布式系統(tǒng)的開發(fā)人員的bug修復(fù)提供比較有效、正確的幫助.DBugHelper將最新的bug報(bào)告進(jìn)行文本處理,形成查詢向量,并將大量已被修復(fù)的bug及其相關(guān)信息進(jìn)行離線處理和緩存,從而為在線查詢提供索引機(jī)制.通過將大量已修復(fù)的bug報(bào)告進(jìn)行離線處理并同時(shí)減少在線處理的數(shù)據(jù)量,從而使其準(zhǔn)確并快速地為系統(tǒng)開發(fā)人員提供必要的Debug協(xié)助工作,以此減少系統(tǒng)開發(fā)的周期與成本.
大規(guī)模分布式系統(tǒng);Debug;bug報(bào)告;協(xié)助
Debug是軟件系統(tǒng)開發(fā)周期中十分重要的一個(gè)環(huán)節(jié),其所消耗的時(shí)間、人力往往與系統(tǒng)開發(fā)階段相當(dāng)甚至所占比重更大.特別是對大規(guī)模分布式系統(tǒng)而言,其項(xià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é)組成,對每個(gè)環(huán)節(jié)所使用的方法進(jìn)行優(yōu)化,從而降低Debug成本.
在系統(tǒng)開發(fā)的各個(gè)階段會(huì)生成與系統(tǒng)相關(guān)的很多文件資料,例如bug報(bào)告、日志信息、源碼文件、交流檔案、測試案例以及版本信息等.如何利用這些文件信息,挖掘此類文件信息所蘊(yùn)含的有利于bug定位、分析、修復(fù)等工作的有價(jià)值信息是當(dāng)前Debug研究的關(guān)注點(diǎn).Kim S[1]等人研究挖掘bug報(bào)告的相關(guān)信息,對bug進(jìn)行預(yù)測的工作;Zhou J[2], Nguyen A[3]等人研究通過挖掘出bug報(bào)告和源碼文件之間所隱藏的緊密聯(lián)系,并利用此關(guān)系有效和快速地為系統(tǒng)開發(fā)人員進(jìn)行bug定位的方法.
在眾多支持Debug操作的數(shù)據(jù)信息中,bug報(bào)告是用于發(fā)現(xiàn)和修復(fù)系統(tǒng)bug的重要參考文獻(xiàn),其記錄了來自于系統(tǒng)開發(fā)人員、測試人員以及最終用戶所提交的關(guān)于bug的狀態(tài)信息、重要等級、標(biāo)簽信息、描述信息、交流信息、附件信息等[3-4].
通常大規(guī)模分布式系統(tǒng)在其開發(fā)周期內(nèi)會(huì)產(chǎn)生大量的bug報(bào)告,其狀態(tài)包括公開、正在修復(fù)中、再次公開、關(guān)4、可用補(bǔ)丁、已修復(fù)等6種.其中已修復(fù)的bug報(bào)告包含bug修復(fù)方案及相關(guān)補(bǔ)丁,同時(shí)記錄關(guān)于bug修復(fù)的所有交互信息.例如,目前APACHE官方網(wǎng)站所公布的其所收錄的bug總數(shù)為39 365,已修復(fù)的bug為28 602個(gè)[5];其中關(guān)于MapReduce的bug數(shù)達(dá)3 898,包括已修復(fù)bug為1 435個(gè),公開的bug為711個(gè)[5].
一旦一份bug報(bào)告被系統(tǒng)開發(fā)人員所接收和確認(rèn),項(xiàng)目團(tuán)隊(duì)就要對此bug報(bào)告進(jìn)行分析,從bug報(bào)告中抽取出此bug的主要特征,并搜索與其相關(guān)和類似的bug的解決方案,期望從已經(jīng)修復(fù)的bug中獲取和解決bug的思路.然而,面對眾多的大規(guī)模分布式系統(tǒng)以及其所包含的大量bug信息,想要找到與當(dāng)前所遇到的bug一致或非常類似的bug并非易事,因?yàn)閎ug描述簡短、專業(yè)性強(qiáng),并且其關(guān)鍵詞抽取自動(dòng)化比較困難.
近年來,已有一些研究運(yùn)用信息檢索技術(shù)對bug報(bào)告進(jìn)行分析,再對bug報(bào)告進(jìn)行基于特征的分類[6];或者利用機(jī)器學(xué)習(xí)算法根據(jù)bug報(bào)告的影響力進(jìn)行分類[7];也可以基于正交缺陷分類(Orthogonal Defect Classification,ODC)的方法,定義基于數(shù)據(jù)和控制流缺陷、結(jié)構(gòu)缺陷和非功能缺陷類型,通過提取缺陷報(bào)告和源代碼的特征,對缺陷報(bào)告進(jìn)行自動(dòng)分類[8].當(dāng)前所存在的這些bug分類方法,都是利用較少的bug報(bào)告的信息結(jié)合源碼信息、測試信息等分類算法進(jìn)行分類.Bug報(bào)告本身具有的特征信息、描述內(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)鍵問題,也?生出兩個(gè)子問題:
Q1:如何挖掘bug報(bào)告所隱含的bug的特征信息以及關(guān)聯(lián)信息?
Q2:如何利用已修復(fù)bug的相關(guān)信息對新的bug進(jìn)行修復(fù)方案推薦?
本文針對上述問題進(jìn)行了研究,包括:
(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報(bào)告進(jìn)行分類的工作已經(jīng)存在,但其最終結(jié)果并不理想:僅利用LDA模型,只考慮bug報(bào)告的主題分布,利用基于主題的低維度向量進(jìn)行相似度分析,必然會(huì)導(dǎo)致大量信息的丟失,且已有的工作大多利用bug報(bào)告的短文本,同樣會(huì)降低準(zhǔn)確性;只利用VSM模型,其利用bug報(bào)告的詞頻所建立的文本向量會(huì)丟失大量的語義信息,而高維度的相似度計(jì)算會(huì)導(dǎo)致其極高的代價(jià).本文所提出的DBugHelper將結(jié)合LDA和VSM模型的優(yōu)勢構(gòu)造L VSM模型,在原本機(jī)械詞頻統(tǒng)計(jì)的基礎(chǔ)上加入詞之間的深層語義知識(shí),使最終形成的向量更好地對bug報(bào)告的特征信息及其之間的關(guān)聯(lián)信息進(jìn)行描述.
本文工作的貢獻(xiàn)是:
·將LDA與VSM相結(jié)合提出L VSM模型,該模型能更加有效地對大規(guī)模分布式系統(tǒng)所產(chǎn)生的bug報(bào)告進(jìn)行分析.
·本文在大量的bug報(bào)告數(shù)據(jù)上,開展了充分的對比試驗(yàn),驗(yàn)證工具的有用性和有效性.
·設(shè)計(jì)和實(shí)現(xiàn)了Debug協(xié)助分析工具DBugHelper.工具可以有效地分析所提交bug的特性,為系統(tǒng)開發(fā)人員提供最為相近的bug修復(fù)方案.
本文的組織如下:第1節(jié)闡述bug報(bào)告及其修復(fù)方案的分析;第2節(jié)介紹本文所提出的DBugHelper工具;第3節(jié)介紹了實(shí)驗(yàn)設(shè)計(jì);第4節(jié)展示了實(shí)驗(yàn)結(jié)果并進(jìn)行相關(guān)討論;第5節(jié)對相關(guān)工作進(jìn)行了介紹;第6節(jié)對全文進(jìn)行總結(jié).
通過對現(xiàn)有bug報(bào)告及其修復(fù)方案的細(xì)致分析,其主要特征如下:
相似bug報(bào)告:當(dāng)系統(tǒng)開發(fā)人員獲取到新的bug報(bào)告后,首先考慮是否有類似的bug已被修復(fù),通過查詢已修復(fù)的bug報(bào)告,得到相近或相關(guān)的修復(fù)方案.再進(jìn)一步查詢相關(guān)的資料文檔,最終對bug進(jìn)行修復(fù).因此,如何有效地查詢歷史記錄來幫助修復(fù)bug是重要問題.
簇組:系統(tǒng)開發(fā)人員為修復(fù)bug而查閱大量文檔資料,例如相似的bug報(bào)告及其修復(fù)方案、系統(tǒng)功能設(shè)計(jì)文檔、系統(tǒng)日志文檔等.為縮短bug修復(fù)時(shí)間以提高搜索和查詢資料的效率,可提前對bug進(jìn)行分析歸類,在其所屬簇組中查詢相關(guān)修復(fù)方法的信息.因此,對bug及其報(bào)告進(jìn)行歸類,有利于提高bug的查詢效率.
離線、在線處理:及時(shí)響應(yīng)是工具的基本要素.大規(guī)模分布式系統(tǒng)所擁有的與bug相關(guān)的數(shù)據(jù)資源十分豐富,其數(shù)據(jù)處理耗時(shí)較長,因此迅速響應(yīng)是工具可用性的表現(xiàn).將復(fù)雜計(jì)算進(jìn)行離線處理,縮短工具響應(yīng)時(shí)間并提高其可用性.DBugHelper采取離線和在線處理操作分離的方式,離線處理已修復(fù)bug相關(guān)數(shù)據(jù)信息并提供索引機(jī)制,在線處理利用該索引及新的bug報(bào)告及時(shí)為系統(tǒng)開發(fā)人員提供最為接近的bug修復(fù)方案以及相關(guān)資料信息.
就目前相關(guān)研究來看,相似bug報(bào)告已經(jīng)被用于bug的定位方法[2].而其他兩方面都沒有很好地利用和研究.在本文所設(shè)計(jì)的工具中,此類信息被進(jìn)行考慮和利用.
圖1 DBugHelper的整體架構(gòu)Fig.1DBugHelper overview
2.1 DBugHelper的整體架構(gòu)
圖1展現(xiàn)了為大規(guī)模分布式系統(tǒng)的開發(fā)提供Debug協(xié)助的工具--DBugHelper.整個(gè)系統(tǒng)分為兩大部分:1)離線處理模塊:主題分析、詞典構(gòu)建、術(shù)語選擇、文本向量構(gòu)建、簇及其質(zhì)心構(gòu)建;2)在線處理模塊:查詢向量構(gòu)建、修復(fù)方案推薦.當(dāng)獲取到新的bug報(bào)告,工具基于離線處理所獲取的術(shù)語詞典將此報(bào)告轉(zhuǎn)化為查詢向量.已修復(fù)的bug報(bào)告經(jīng)過L VSM模型構(gòu)造向量集合,再通過聚類分析將bug的向量集合進(jìn)行歸類,并獲取各類的質(zhì)心以構(gòu)建索引機(jī)制.將查詢向量與所構(gòu)建的索引向量進(jìn)行相關(guān)性分析,查詢出與新的bug報(bào)告相關(guān)的已修復(fù)的bug,再將這一類的bug文件資料進(jìn)行融合,為新提交的bug推薦可能的修復(fù)方案及其他相關(guān)文件資料.新提交的bug報(bào)告會(huì)進(jìn)入已修復(fù)bug的緩存隊(duì)列中,bug一旦被修復(fù)會(huì)觸發(fā)離線處理操作.
2.2 離線處理
離線處理環(huán)節(jié),將大量已修復(fù)bug的相關(guān)文檔資料進(jìn)行分析處理,利用L VSM模型抽取bug報(bào)告的特征信息并將其向量化表示,向量分量的權(quán)值波動(dòng)反映出bug報(bào)告之間的關(guān)聯(lián)關(guān)系.DBugHelper存儲(chǔ)了大量大規(guī)模分布式系統(tǒng)的bug報(bào)告F及其相關(guān)修復(fù)方案的文檔R,采取離線處理方式,對已修復(fù)的bug報(bào)告F進(jìn)行處理.分為幾個(gè)步驟:
主題分析:本文從兩個(gè)層面提取bug報(bào)告的主題,一是bug報(bào)告所具有的明確特征的主題Ts,例如bug等級、標(biāo)簽、狀態(tài)、系統(tǒng)環(huán)境、所屬版本、所屬組件、作者等;二是從bug報(bào)告中的bug概要、描述、評論、歷史等信息中抽取出的主題Tg;本文所抽取和利用的主題為T(Ts+Tg).本文對已修復(fù)的bug報(bào)告進(jìn)行分析并抽取其主題T,對于每篇bug報(bào)告F所包含的主題T,在F中均有相關(guān)單詞w進(jìn)行描述.
術(shù)語選擇:本文利用主題T和單詞w之間的反向關(guān)系,將原本主題T的對單詞w的概率分布θ(T→w)變?yōu)閣→T,以計(jì)算單詞w在每個(gè)主題T上的概率分布,從而得到每個(gè)w的向量,其中|T|是主題總數(shù),c是當(dāng)前詞,wc,t表示為:
其距離越大分值將越高.將所有詞按分值進(jìn)行降序排序,將得分較低的單詞去除.將所有留存的單詞w來構(gòu)成術(shù)語詞典D.
詞典構(gòu)建:本文從已修復(fù)的bug報(bào)告F中抽取主題T,主題T由F中單詞w進(jìn)行描述,而單詞w的概率值θ表示出其對于主題T的重要程度.為提高工具的性能和縮短響應(yīng)時(shí)間,選取F中較為重要的單詞作為術(shù)語,從而構(gòu)建術(shù)語詞典D.前期對bug報(bào)告進(jìn)行文本處理,包括去除停用詞、標(biāo)點(diǎn)符號(hào)等,再通過術(shù)語選擇,進(jìn)一步降低工具的在線、離線處理的時(shí)間和代價(jià).傳統(tǒng)利用LDA模型進(jìn)行特征抽取時(shí),通常是以主題詞來構(gòu)建文檔向量,但由于主題數(shù)為人為設(shè)定,因此誤差性較大,當(dāng)主題數(shù)設(shè)定較小時(shí),甚至導(dǎo)致所有向量相似性極高.本文選擇描述主題權(quán)重較高的單詞作為術(shù)語,以術(shù)語構(gòu)建文本向量,進(jìn)而提高準(zhǔn)確性以及減少模型處理代價(jià).
文本向量構(gòu)建:所構(gòu)造的術(shù)語詞典D涵蓋所有已修復(fù)bug報(bào)告d的關(guān)鍵術(shù)語,基于詞典D所形成的F的特征向量Q能表現(xiàn)bug的基本特性又能反映bug之間的關(guān)聯(lián)關(guān)系,|F|為此向量的元素個(gè)數(shù)即詞典D所含術(shù)語t的個(gè)數(shù).將已修復(fù)bug報(bào)告進(jìn)行向量化表示,其各個(gè)分量的權(quán)重值wi,j是基于術(shù)語頻率(tf)和逆文檔頻率(idf)計(jì)算而來.該算法的基本思想是術(shù)語的重要性隨著它在文檔中出現(xiàn)的次數(shù)成正比增加,但同時(shí)也隨其在詞典中出現(xiàn)的頻率成反比下降.在傳統(tǒng)的VSM模型中,對tf和idf進(jìn)行以下定義:
等式(3)中的ni,j是指術(shù)語ti在文檔dj中出現(xiàn)的次數(shù),其對應(yīng)的分母表示文檔dj所有術(shù)語出現(xiàn)次數(shù)之和.|D|為詞典D所包含的文檔dj的總數(shù),它對應(yīng)的分母則是包含術(shù)語tj的文件的個(gè)數(shù).當(dāng)前很多研究通過改變tf的形式,進(jìn)一步提高VSM模型的性能,其中包括對數(shù)型、增廣型以及布爾型等多種VSM模型改進(jìn)方法[11].通過對比驗(yàn)證,本文采用對數(shù)型以提高性能:
在L VSM中,本文利用等式(4)來定義tf,因此術(shù)語ti所對應(yīng)的權(quán)值wi,j被定義為:
文檔dj所對應(yīng)的文本向量表示為:
L VSM模型利用LDA的Gibbs Sampling實(shí)現(xiàn),并結(jié)合等式(2)得到用于描述bug報(bào)告的特征值,以此作為改進(jìn)的VSM模型的輸入,最終通過等式(6)得到F的向量集合,其集合定義為:
簇及其質(zhì)心構(gòu)建:隨著已修復(fù)bug報(bào)告數(shù)量的不斷增加,其處理分析的時(shí)間也隨之增長,因此本文將此階段進(jìn)行離線處理.通過對已修復(fù)bug報(bào)告集進(jìn)行聚類分析并進(jìn)行歸類,找出表示每個(gè)簇的質(zhì)心來構(gòu)建索引,從而提高相近bug修復(fù)方案的查詢效率.Bug報(bào)告的區(qū)別性和關(guān)聯(lián)性與K-Means聚類分析[12]所適用的場景吻合,同時(shí)結(jié)合算法的時(shí)間復(fù)雜度低、對大規(guī)模數(shù)據(jù)處理適用性高、伸縮性好等特點(diǎn),因此將K-Means算法用于bug報(bào)告的聚類分析.向量集合F在給定簇組數(shù)K(K 6|D|)值的條件下,將F中的向量歸為K類,所構(gòu)成簇集合為:
簇組數(shù)K是人為設(shè)定的,不同的K值對聚類結(jié)果影響較大,本文通過確定指標(biāo)的方式,對K值進(jìn)行探尋,找出最接近于真實(shí)簇?cái)?shù)目的K值.K-Means所定義的函數(shù)公式為:
等式(9)中的μk表示的是每個(gè)分類Sk的平均值,rnk只有當(dāng)被歸類到某一簇Sn時(shí),其值被賦為1,否則為0.通過計(jì)算E值來找出每個(gè)向量Vn所屬的簇Sn,通過不斷地迭代最終形成k個(gè)簇,每個(gè)簇的質(zhì)心定義為:
簇以及簇的質(zhì)心將被用于新提交bug報(bào)告B的相似度計(jì)算,以此判別B所屬的簇.
2.3 在線處理
在線處理主要針對新提交的bug報(bào)告,如何利用離線處理所構(gòu)建的索引機(jī)制迅速查詢到相近的修復(fù)方案是在線處理環(huán)節(jié)的核心問題.針對此問題,本文提出三層處理架構(gòu),其結(jié)構(gòu)如圖2所示.第一層是用于緩存新提交bug報(bào)告,將所提交的bug報(bào)告基于詞典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之間的相似度,通過計(jì)算B與Cn之間的相似度值判別其所屬簇SB,同樣利用公式(2)所采用的cosine相似度計(jì)算方法對B進(jìn)行簇判別:
計(jì)算所得與B相似度值最大Cn簇即是B所屬簇,這表明新提交的bug和簇中其他bug報(bào)告所描述的bug屬于同一類,則其修復(fù)方案最為相似或相關(guān).第二、三層的鏈接關(guān)系是已修復(fù)bug報(bào)告F和其相關(guān)修復(fù)方案的對應(yīng)關(guān)系,同樣通過將B與所屬簇SB的其他bug報(bào)告進(jìn)行相似度分析,將適用于新提交的bug報(bào)告的修復(fù)方案及相關(guān)文檔資料進(jìn)行排序,最終為系統(tǒng)開發(fā)人員提供最為相似或相關(guān)的bug修復(fù)方案.
3.1 系統(tǒng)選擇
為評估DBugHelper的有效性,本文選取四個(gè)開源的大規(guī)模分布式系統(tǒng)作為實(shí)驗(yàn)項(xiàng)目(如表1所示).所有項(xiàng)目都擁有完整的bug報(bào)告以及相關(guān)的修復(fù)方案,同時(shí)也包含與bug相關(guān)的包括討論、歷史、日志、狀態(tài)轉(zhuǎn)換等方面的數(shù)據(jù)信息.本文選取HDFS作評估對象,因其是一款非常流行并開源的分布式文件系統(tǒng),并且是分布式系統(tǒng)基礎(chǔ)架構(gòu)Hadoop的核心部件.而MapReduce同樣也是Hadoop的核心設(shè)計(jì)之一,它是用于大規(guī)模數(shù)據(jù)集并行計(jì)算的編程模型.HBase是基于Hadoop架構(gòu)實(shí)現(xiàn)的分布式開源數(shù)據(jù)庫系統(tǒng),利用HDFS存儲(chǔ)海量數(shù)據(jù),并使用MapReduce進(jìn)行數(shù)據(jù)處理.數(shù)據(jù)倉庫工具Hive同樣基于Hadoop架構(gòu)所實(shí)現(xiàn),是一種可以存儲(chǔ)、查詢和分析大規(guī)模數(shù)據(jù)的機(jī)制.
表1 研究項(xiàng)目Tab.1Study project
3.2 數(shù)據(jù)選擇
對于每個(gè)項(xiàng)目系統(tǒng),本文從bug跟l系統(tǒng)(例如BugZilla或APACHE官網(wǎng))中選擇最原始的bug報(bào)告作為實(shí)驗(yàn)對象,來評估DBugHelper所推薦bug修復(fù)方案的準(zhǔn)確性.
用于評估的bug報(bào)告,包含以下幾個(gè)方面:
(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進(jìn)行詳細(xì)描述,有時(shí)也附加相關(guān)的日志信息等.
3.3 研究問題
本文設(shè)計(jì)實(shí)驗(yàn)對以下三個(gè)問題進(jìn)行回答:
Q1:DBugHelper能否較為準(zhǔn)確地為bug提供相一致或相近的修復(fù)方案?
為回答這個(gè)問題,本文將四個(gè)項(xiàng)目系統(tǒng)的已修復(fù)bug及其修復(fù)方案作為基準(zhǔn)數(shù)據(jù),將bug報(bào)告作為DBugHelper的輸入條件.檢查從工具中所返回的修復(fù)方案及其相對應(yīng)的bug報(bào)告.若所輸出的結(jié)果Top N(N=1,5,10,15,20)個(gè)包含該bug的真實(shí)修復(fù)方案,則認(rèn)為bug的修復(fù)方案可以有效地被推薦.本文選取每個(gè)系統(tǒng)的100個(gè)已修復(fù)bug作為實(shí)驗(yàn)對象,計(jì)算bug被提供的修復(fù)方案的準(zhǔn)確率(Accuracy).
Q2:L VSM模型是否能提高尋找相似bug報(bào)告的準(zhǔn)確率?
在第2節(jié)中,本文提出了L VSM模型,將其用于bug分析從而構(gòu)建查詢向量及結(jié)合聚類分析構(gòu)建索引機(jī)制.為評估L VSM的有效性,本文將其與傳統(tǒng)VSM的方法進(jìn)行對比,將DBugHelper中的L VSM模型替換為傳統(tǒng)VSM模型,并在Q1的條件下對DBugHelper提供bug修復(fù)方案的準(zhǔn)確率進(jìn)行計(jì)算,并以此與基于L VSM模型實(shí)現(xiàn)的工具進(jìn)行結(jié)果比對.
Q3:DBugHelper的在線、離線處理模式能否提高查詢bug修復(fù)方案的效率?
在第2節(jié)中,本文提出在線、離線處理分離的模式,將大數(shù)據(jù)集進(jìn)行離線處理構(gòu)建查詢索引,用在線處理獲取查詢向量,使用該查詢向量結(jié)合索引機(jī)制查詢bug修復(fù)方案.為評估該模式的可靠性,本文引入時(shí)間準(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(時(shí)間/準(zhǔn)確率)指時(shí)間與準(zhǔn)確率的比值,以此衡量Bug修復(fù)方案的查詢效率.TA表示單位準(zhǔn)確率下DBugHelper的每個(gè)查詢的執(zhí)行時(shí)間,其值越小則表示查詢效率越高.公式定義如下:
其中Time指的是分別返回Top N個(gè)bug修復(fù)方案所需時(shí)間;指的是針對相同返回Top N個(gè)bug修復(fù)方案所需的時(shí)間均值;Accuracy是指DBugHelper所返回Top N個(gè)bug修復(fù)方案中真實(shí)修復(fù)方案的所占比重.
針對所研究問題的實(shí)驗(yàn)結(jié)果展示如下:
Q1:DBugHelper能較為準(zhǔn)確地提供與bug相一致或相近的修復(fù)方案嗎?
表2展現(xiàn)了DBugHelper所輸出的Top N個(gè)bug解決方案中包含bug真實(shí)解決方案的比例.本文分別選取4種系統(tǒng)項(xiàng)目各100個(gè)bug報(bào)告作為輸入數(shù)據(jù),而工具針對每個(gè)bug報(bào)告輸出的Top N個(gè)修復(fù)方案.此類方案中包含真實(shí)bug修復(fù)方案的個(gè)數(shù)所占bug總數(shù)(即100個(gè)bug報(bào)告)的比例,即為工具的準(zhǔn)確率.對于輸入的100個(gè)HDFS相關(guān)的bug報(bào)告,工具輸出的Top 10個(gè)修復(fù)方案包含真實(shí)方案的有44個(gè),則其準(zhǔn)確率為44%.對于Hive項(xiàng)目,相同的輸入條件下,工具所返回的Top 20個(gè)修復(fù)方案包含68個(gè)真實(shí)方案,則其準(zhǔn)確率為68%.隨著N值的遞增,DBugHelper所輸出的修復(fù)方案準(zhǔn)確率也在同步提升.
表2 DBugHelper的準(zhǔn)確率Tab.2DBugHelper accuracy
Q2:L VSM模型是否能提高查詢相似bug報(bào)告的準(zhǔn)確率?
在DBugHelper工具中,L VSM模型被用于查詢向量以及索引機(jī)制的構(gòu)建,從而影響bug修復(fù)方案的推薦.表3表明基于VSM和L VSM實(shí)現(xiàn)的DBugHelper在提供修復(fù)方案的準(zhǔn)確率上的差異.實(shí)驗(yàn)選取HDFS和MapReduce系統(tǒng)的bug報(bào)告數(shù)據(jù),利用與Q1中相同的方法,對工具的兩種實(shí)現(xiàn)方式作對比,以此證明L VSM模型在查詢相似bug報(bào)告的準(zhǔn)確率方面的提高.從表3的數(shù)據(jù)中可以發(fā)現(xiàn),基于L VSM實(shí)現(xiàn)的工具在Top N(N=1,5,15,20)上所提供bug修復(fù)方案的準(zhǔn)確率均高于VSM模型.在HDFS和MapReduce兩種系統(tǒng)的實(shí)驗(yàn)數(shù)據(jù)對比中,L VSM模型所實(shí)現(xiàn)的工具準(zhǔn)確率高于傳統(tǒng)VSM模型.傳統(tǒng)VSM所實(shí)現(xiàn)的DBugHelper的準(zhǔn)確率同樣滿足隨N值的遞增而遞增的趨勢,但整體趨勢均略低于L VSM模型.簡而言之,L VSM模型的提出有利于提高相似bug報(bào)告的查詢準(zhǔn)確率以及所提供bug修復(fù)方案的準(zhǔn)確率.
表3 基于VSM與L VSM實(shí)現(xiàn)的DBugHelper的準(zhǔn)確率對比Tab.3Accuracy comparison between VSM and L VSM in DBugHelper
Q3:DBugHelper的在線、離線處理模式能否提高查詢bug修復(fù)方案的效率?
表4展現(xiàn)了在Q1實(shí)驗(yàn)條件下,不同系統(tǒng)及Top N所組成的實(shí)驗(yàn)中工具所執(zhí)行的時(shí)間.將系統(tǒng)HDFS的100個(gè)bug報(bào)告作為輸入條件,執(zhí)行工具100次輸出Top N(N=1,5,15,20)個(gè)bug修復(fù)方案所用時(shí)間,求算術(shù)平均值,所輸出的bug修復(fù)方案的準(zhǔn)確率如表2所示.
表4 DBugHelper的執(zhí)行時(shí)間Tab.4Execution time in DBugHelper
利用等式(12),計(jì)算時(shí)間與準(zhǔn)確率的比值TA作為評估DBugHelper效率的度量.如圖3所示,工具的TA值隨著N值的遞增呈現(xiàn)先上升后平穩(wěn)的趨勢.在Top 1到Top 5階段,工具的效率值呈現(xiàn)快速上升趨勢;但從Top 5到Top 20階段,工具效率值趨于平穩(wěn).對于不同的項(xiàng)目系統(tǒng),效率趨勢圖都比較相似或相近.TA作為時(shí)間與準(zhǔn)確率的比值,其物理意義在于單位準(zhǔn)確率下DBugHelper每個(gè)查詢的執(zhí)行時(shí)間.TA的值越小,工具的執(zhí)行效率越高,即在較短的時(shí)間內(nèi)能返回較為準(zhǔn)確的bug修復(fù)方案.
本文利用三個(gè)方面的實(shí)驗(yàn)對DBugHelper工具進(jìn)行評估,分別為工具的準(zhǔn)確性、L VSM模型查詢相似bug報(bào)告的準(zhǔn)確性以及工具的效率.通過與傳統(tǒng)的VSM模型進(jìn)行對比實(shí)驗(yàn),進(jìn)一步闡明本文提出L VSM模型的必要性;通過對工具在準(zhǔn)確性和查詢效率兩方面的實(shí)驗(yàn)驗(yàn)證,并且將大規(guī)模分布式系統(tǒng)數(shù)據(jù)作為實(shí)驗(yàn)對象,進(jìn)一步證明本文所提出的適用于大規(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)致其成本消耗巨大,有時(shí)甚至超過整個(gè)系統(tǒng)開發(fā)成本的三分之一[13].通過利用已有的bug報(bào)告、源代碼文件、系統(tǒng)日志等資源,為系統(tǒng)開發(fā)人員定位bug、修復(fù)bug等提供協(xié)助的工作一直被研究領(lǐng)域所關(guān)注.Lukins等人用LDA模型對bug報(bào)告進(jìn)行分析,從而對bug進(jìn)行有效定位[14].該方法利用LDA模型對所有bug報(bào)告和代碼源文件進(jìn)行主題抽取,根據(jù)所抽取的主題作為查詢條件對所有的資源文件進(jìn)行查詢.而DBugHelper利用bug報(bào)告所含的相關(guān)術(shù)語作為查詢屬性,更加完整地對bug相關(guān)資源文件進(jìn)行查詢,同時(shí)提高查詢效率、降低查詢時(shí)間.在他們的方法中,如果新提交的bug報(bào)告所提取出的主題較少,其所查詢出的資源文件準(zhǔn)確度就較低.DBugHelper充分利用bug報(bào)告所具有的特征,以主題相關(guān)的術(shù)語構(gòu)建文本向量,以此可以充分表示bug報(bào)告及其關(guān)聯(lián)關(guān)系.
近些年,有關(guān)利用信息檢索的技術(shù)去進(jìn)行bug報(bào)告的分類、bug定位的方法不斷被提出. DBugHelper工具利用LDA和VSM相結(jié)合的手段對Bug報(bào)告進(jìn)行檢索和分析具有一定的優(yōu)勢,Rao等人[15]用具體的試驗(yàn)對Unigram Model(UM),Vector Space Model(VSM),Latent Semantic Analysis Model(LSA),Latent Dirichlet Allocation Model(LDA)以及Cluster Based Document Model(CBDM)進(jìn)行了對比,從結(jié)果可以發(fā)現(xiàn)UM和VSM從文本集中檢索相關(guān)文檔的效果更好.本文將LDA和VSM相結(jié)合對與Bug報(bào)告相關(guān)的文檔信息進(jìn)行檢索分析,在一定程度上比單一模型在準(zhǔn)確度上有了一定的提高.
本文的工作也與很多軟件資料庫的挖掘工作有關(guān).大量有關(guān)系統(tǒng)軟件開發(fā)的數(shù)據(jù)資料越來越多地被人們所搜集,并且很多資料開始被用來分析和挖掘以解決與bug相關(guān)的眾多問題.許多研究人員通過挖掘bug報(bào)告及相關(guān)信息來解決與bug相關(guān)的一系列問題,如bug的自動(dòng)分類[16],二重bug報(bào)告的探測[17],以及bug的預(yù)測研究[1]等.隨著計(jì)算機(jī)技術(shù)的發(fā)展和應(yīng)用,面對更多大規(guī)模分布式系統(tǒng)或者其他系統(tǒng)軟件的開發(fā),大量的bug以及其相關(guān)信息被源源不斷地產(chǎn)生出來,用人工處理的方法已經(jīng)無法滿足當(dāng)前科技發(fā)展的需求,因此越來越多的研究人員著手用機(jī)器學(xué)習(xí)、數(shù)據(jù)挖掘等技術(shù)對這類數(shù)據(jù)進(jìn)行自動(dòng)分析處理.本文提出的工具,充分利用bug報(bào)告對大規(guī)模分布式系統(tǒng)的開發(fā)人員提供Debug協(xié)助.
每當(dāng)新的bug報(bào)告來臨,系統(tǒng)開發(fā)人員需盡快掌握bug的特性,并尋找出合適的方案進(jìn)行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的獨(dú)特性,利用信息檢索的相關(guān)方法,提出了一個(gè)適用于大規(guī)模分布式系統(tǒng)開發(fā)的Debug協(xié)助工具--DBugHelper.工具利用L VSM模型和聚類分析技術(shù)構(gòu)建了bug報(bào)告的查詢向量和bug修復(fù)方案的索引機(jī)制,采用在線、離線進(jìn)行數(shù)據(jù)處理的模式提高查詢效率和準(zhǔn)確率.評估結(jié)果階段,本文利用4個(gè)真實(shí)開源的分布式系統(tǒng)作實(shí)驗(yàn)對象,展現(xiàn)出DBugHelper推薦相關(guān)或相似bug修復(fù)方案的準(zhǔn)確性和高效性.
后續(xù)我們將會(huì)繼續(xù)探究將分布式系統(tǒng)的詳細(xì)設(shè)計(jì)文檔信息加入到現(xiàn)在的方法中,從而進(jìn)一步提高工具推薦bug修復(fù)方案準(zhǔn)確度的問題.同時(shí)也將會(huì)把DBugHelper應(yīng)用到企業(yè)項(xiàng)目中,以真實(shí)地評估工具的有效性.
[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計(jì)劃項(xiàng)目(2015AA015307);國家自然科學(xué)基金重點(diǎn)項(xiàng)目(61232002,61332006);國家自然科學(xué)基金(61432006)
張燕飛,男,碩士研究生,研究方向?yàn)閿?shù)據(jù)庫系統(tǒng)、數(shù)據(jù)挖掘. E-mail:yfzhang@stu.ecnu.edu.cn.
張蓉,女,博士,副教授,研究方向?yàn)榉植际綌?shù)據(jù)管理.E-mail:rzhang@sei.ecnu.edu.cn.
華東師范大學(xué)學(xué)報(bào)(自然科學(xué)版)2016年5期