專利名稱:一種面向失敗測試用例稀少情況的軟件錯誤定位方法
技術(shù)領(lǐng)域:
本發(fā)明涉及ー種動態(tài)的軟件錯誤定位方法,尤其涉及一種面向失敗測試用例稀少情況的軟件錯誤定位方法,它是ー種面向擁有大量成功測試用例和極少數(shù)失敗測試用例的使用情況,涉及對成功測試用例集進(jìn)行拆分和對多重語句可疑度進(jìn)行集成操作的軟件錯誤定位方法。該方法屬于軟件測試技術(shù)領(lǐng)域。
背景技術(shù):
軟件已深入到我們?nèi)粘I钪械拿總€角落,但與此同時,軟件中的bug (錯誤)也是無處不在。為查找軟件中潛在的bug,許多自動化的錯誤定位技術(shù)被相繼提出。基于譜的軟件錯誤定位方法(Spectrum-basedFault Localization,簡稱 SBFL。該方法本質(zhì)上是ー種算法)通過比較程序語句在成功測試用例和失敗測試用例運(yùn)行時執(zhí)行信息的差異,來查找最有可能與程序缺陷有關(guān)的語句。該類算法所基于的假設(shè)是如果ー條可執(zhí)行語句只被失敗測試用例覆蓋而沒有被成功測試用例所覆蓋,則該可執(zhí)行語句被認(rèn)為越與程序缺陷相關(guān)。在現(xiàn)有的基于譜的軟件錯誤定位方法中,最具有代表性的是Tarantula算法(該名稱是算法的發(fā)明人命名,現(xiàn)在暫無中文名稱)。Tarantula算法是瓊斯等人在“ー種利用可視化信息的缺陷定位方法”(詳見2002年《第二十四屆國際軟件工程會議》)一文中提出的,其選擇的插樁方法是語句插樁,即對所有可執(zhí)行語句進(jìn)行插樁,統(tǒng)計成功和失敗測試用例對每條可執(zhí)行語句的覆蓋情況。其余幾種基于譜的軟件錯誤定位方法與Tarantula算法所使用的插樁方式以及信息類型都相同,只是彼此可疑度計算公式不同。納什等人在“ー種基于譜的軟件診斷模型”(詳見2011年ACM出版社出版的《軟件工程方法》雜志)一文中對現(xiàn)有的33種基于譜的軟件錯誤定位方法進(jìn)行了總結(jié)。由于基于譜的軟件錯誤定位方法的定位效果會受使用的測試用例集質(zhì)量的影響,因此,如何有效利用測試用例集成為了軟件錯誤定位領(lǐng)域里關(guān)注的熱點(diǎn)。測試用例集縮減技術(shù)被證明能夠有效提高對測試用例的利用效率,但是,現(xiàn)有研究主要集中于減少測試用例集的大小,卻忽略了測試用例集的組成,例如測試用例集中成功測試用例與失敗測試用例的類別比例。測試用例集中的類別不均衡現(xiàn)象是指一類測試用例的數(shù)量要遠(yuǎn)遠(yuǎn)多于另ー類測試用例的數(shù)量。在現(xiàn)實(shí)生活中,已發(fā)布的軟件通常都是含有大量的成功測試用例,僅含有少量的失敗測試用例。例如,服務(wù)于2008年北京奧運(yùn)會信息管理系統(tǒng)的基礎(chǔ)中間件產(chǎn)品,它的成功測試用例與失敗測試用例的比例就高達(dá)8500 :1。對于驗(yàn)證錯誤定位方法定位效果的實(shí)驗(yàn)程序,這種由于失敗測試用例稀少所導(dǎo)致的類別不均衡現(xiàn)象更是廣泛存在。研究如何消除測試用例集類別不均衡現(xiàn)象對基于譜的軟件錯誤定位方法所產(chǎn)生的不利影響正是本發(fā)明所基于的考慮。
發(fā)明內(nèi)容
本發(fā)明ー種面向失敗測試用例稀少情況的軟件錯誤定位方法,其目的是克服基于譜的軟件錯誤定位方法容易受到測試用例集類別不均衡現(xiàn)象影響的缺點(diǎn),提出ー種拆分一集成操作,使得基于譜的軟件錯誤定位方法在面對失敗測試用例稀少情況時仍能發(fā)揮很好的定位作用。本發(fā)明ー種面向失敗測試用例稀少情況的軟件錯誤定位方法,其設(shè)計思想是首先,對成功測試用例進(jìn)行拆分。將原始測試用例集中的成功測試用例分成幾個等份,確保每ー份中成功測試用例的數(shù)量與原始測試用例集中失敗測試用例數(shù)量相同。其次,將失敗測試用例成批復(fù)制,并與拆分后的每份成功測試用例進(jìn)行配對,構(gòu)成新的類別均衡的子測試用例集。之后,依次輸入每份類別均衡的子測試用例集,收集測試用例運(yùn)行時程序的動態(tài)執(zhí)行譜,調(diào)用基于譜的軟件錯誤定位方法進(jìn)行計算,生成相應(yīng)的語句排位表。最后,對多重語句排位結(jié)果進(jìn)行集成,合成綜合排位表,程序開發(fā)人員根據(jù)綜合排位表來查找程序中的缺陷。更具體地,本發(fā)明ー種面向失敗測試用例稀少情況的軟件錯誤定位方法,其步驟包括以下五步第一步對原始測試用例集中的成功測試用例進(jìn)行拆分。將原始測試用例集中的成
功測試用例P分成卿=IlJ等份,第i份(I ^ i ^m)成功測試用例用Pi表示。其中,u表示
原始測試用例集中成功測試用例P的數(shù)量,V表示原始測試用例集中失敗測試用例F的數(shù)量。Pi中包含V個成功測試用例,這V個成功測試用例均是通過對原始測試用例集中的成功測試用例進(jìn)行隨機(jī)不放回抽取而得到;第二步成批復(fù)制失敗測試用例,與拆分好的每份成功測試用例配對。經(jīng)過此步后,將得到m份新的類別均衡的子測試用例集Si,其中,每份子測試用例集包含V個成功測試用例和V個失敗測試用例;第三步依次輸入類別均衡的子測試用例集,生成相應(yīng)子排位表。該步驟又分為三小步
(一)收集子測試用例集運(yùn)行時程序譜的執(zhí)行信息。針對插樁后的待測程序,輸入第i個類別均衡的子測試用例集,統(tǒng)計語句s在該子測試用例集運(yùn)ィ丁時得到的fj C*5') np; (^') 1 (^'.)這四個參數(shù)。其中,OLgp 纟(S),aefi{s), anp.(s)f dnA(s)分別表示第i個類別均衡的子測試用例集中經(jīng)過語句s的成功測試用例數(shù)目,經(jīng)過語句S的失敗測試用例數(shù)目,沒有經(jīng)過語句S的成功測試用例數(shù)目和沒有經(jīng)過語句S的失敗測試用例數(shù)目;(ニ)計算語句可疑度。針對上一歩中得到的語句s的執(zhí)行信息,使用基于譜的軟件錯誤定位方法進(jìn)行計算,為語句S計算可疑度Ti(S)。不斷循環(huán)該步驟,直至計算出所有語句的可疑度;(三)生成子排位表。按照可疑度值由大到小的順序?qū)λ姓Z句進(jìn)行排序,生成子排位表Li。其中,語句s在子排位表Li中的排位用Ri(S)表示。第四步集成多重排位結(jié)果,合成綜合排位表。針對第三步中得到的語句s的m個可疑度計算結(jié)果,利用公式T(S) = ^ IKs〕來為語句S計算總可疑度
其中,式中符號說明如下m表示將原始測試用例集中的成功測試用例拆分成的份數(shù)Wefi (S)表示第i個類別均衡的子測試用例集中經(jīng)過語句s的失敗測試用例數(shù)目Ji (s)表示運(yùn)行第i個類別均衡的子測試用例集之后,使用基于譜的軟件錯誤定位方法為語句S計算出的可疑度。不斷循環(huán)第四步,為所有語句計算出總可疑度。最后按照總可疑度值由大到小的順序?qū)λ姓Z句進(jìn)行排序,生成綜合排位表L,語句s在綜合排位表中的排位用及(S)表不;第五步根據(jù)得到的綜合排位表,依次返回源程序?qū)?yīng)位置處進(jìn)行檢查,直到找出與錯誤相關(guān)的語句為止。本發(fā)明與現(xiàn)有方法相比較的優(yōu)點(diǎn)在于現(xiàn)有方法均沒有對失敗測試用例稀少所導(dǎo)致的測試用例集類別不均衡現(xiàn)象加以考慮,而該現(xiàn)象又會對基于譜的軟件錯誤定位方法的定位精度造成負(fù)面影響。本發(fā)明方法是第一個被提出來用于解決該問題的方法,并且方法切實(shí)可行,能夠有效提高基于譜的軟件錯誤定位方法的定位精度。
圖1為示例程序代碼和測試用例運(yùn)行剖面圖2為本發(fā)明流程示意3為待測程序詳細(xì)信息4為各算法在Siemens程序包上整體定位結(jié)果提升對比圖5為各算法在space、flex和grep程序上整體定位效果提升對比圖6為各算法在單個獨(dú)立程序上定位效果提升對比對圖中的符號和標(biāo)號說明如下圖1左側(cè)這段代碼的主要功能是輸出三個數(shù)中的中間值。其中,錯誤位于第4行,以方框標(biāo)出,斜線右側(cè)為正確的代碼。可以發(fā)現(xiàn)該錯誤為邏輯錯誤,在編譯器編譯過程中可以編譯通過而不會提示出錯。隨機(jī)輸入3個整數(shù),構(gòu)成ー個測試用例,如t1-t8所示。分別輸入這8個測試用例,測試用例的運(yùn)行剖面如圖1右側(cè)所示。其中,黑色實(shí)心點(diǎn)表示相應(yīng)測試用例運(yùn)行時經(jīng)過了該語句。h和t2為運(yùn)行失敗的測試用例,用符號F進(jìn)行標(biāo)示,t3-t8為成功測試用例。圖2展示了本發(fā)明方法的使用流程。主要包括拆分成功測試用例和集成多重語句排位結(jié)果兩個操作,圖中SBFL表示一種基于譜的軟件錯誤定位方法,排位表表示對待測程序中所有可執(zhí)行語句按照計算出的可疑度值大小進(jìn)行從高到低的排序。圖3列舉了用于驗(yàn)證本專利所提方法定位效果的實(shí)驗(yàn)程序的詳細(xì)信息。其中,代碼行數(shù)表示待測程序的代碼規(guī)模;版本數(shù)表示待測程序中植入的不同類型錯誤的數(shù)量(每個版本中都只植入了一個錯誤);類別比例表示待測程序自帶的測試用例集中成功測試用例數(shù)目與失敗測試用例數(shù)目的比值。例如,Siemens程序包中的teas程序,它的代碼行數(shù)是141行,包含41個錯誤版本,類別比例為159. 31 :1。圖4給出了各算法在Siemens程序包上整體定位效果提升對比實(shí)驗(yàn)的實(shí)驗(yàn)結(jié)果。圖中數(shù)據(jù)是在對圖3所示的Siemens程序包全部141個錯誤版本進(jìn)行實(shí)驗(yàn)后統(tǒng)計得到的。從左手側(cè)起,第一列表示代碼的檢查代價;第二列是對同一行中從第三列起至最后一列的數(shù)據(jù)求平均值;在第三列至最后一列中,正數(shù)表示相應(yīng)的基于譜的軟件錯誤定位方法在采取拆分-集成操作后相比沒有采取該操作之前定位精度獲得提升,反之,負(fù)數(shù)表示定位精度降低,零表示定位精度沒有發(fā)生改變。例如,對于Jaccard算法,當(dāng)檢查5%的代碼量吋,采取拆分-集成操作后,算法定位精度提升了 9. 38%。圖5給出了各算法在space、flex和grep程序上整體定位效果提升對比實(shí)驗(yàn)的實(shí)驗(yàn)結(jié)果。圖中數(shù)據(jù)是在對圖3所示的space、flex和grep程序總共76個錯誤版本進(jìn)行實(shí)驗(yàn)后統(tǒng)計得到的,具體數(shù)據(jù)解釋與圖4類似。圖6給出了各算法在單個獨(dú)立程序上定位效果提升對比實(shí)驗(yàn)的實(shí)驗(yàn)結(jié)果。圖中數(shù)據(jù)是在對圖3所示的10個獨(dú)立程序分別進(jìn)行實(shí)驗(yàn)后統(tǒng)計得到的,具體數(shù)據(jù)解釋與圖4類似。
具體實(shí)施例方式假定待測程序中含有若干個缺陷,通常測試之前這些缺陷是未知的。首先對原始測試用例集中的成功測試用例進(jìn)行拆分,并與失敗測試用例配對,構(gòu)成新的類別均衡的子測試用例集。然后依次加載子測試用例集,運(yùn)行插樁后的程序,記錄程序的執(zhí)行信息。基于 譜的軟件錯誤定位方法將利用這些執(zhí)行信息計算語句的可疑度,并將所有可執(zhí)行語句按照可疑度值從高到低排列,生成子排位表。最后,根據(jù)前面得到的多重計算結(jié)果,調(diào)用集成公式,為每個可執(zhí)行語句計算總可疑度,合成綜合排位表,程序人員最終根據(jù)該排位表來查找錯誤代碼。為了檢驗(yàn)本專利中所提方法的定位效率,考慮把Siemens程序包、space程序、UNIX程序包中的flex和grep程序(這些程序都是公認(rèn)的典型測試對象。其中,后三個為實(shí)際應(yīng)用程序)作為實(shí)驗(yàn)對象,這些待測程序中的錯誤位置、錯誤數(shù)量和錯誤類型都是事先已知的。圖3顯示了所有待測程序的詳細(xì)信息。選取圖1所示的一段程序來驗(yàn)證本發(fā)明方法,運(yùn)用本發(fā)明的流程如圖2所示,其具體實(shí)施步驟如下第一步對原始測試用例集中的成功測試用例進(jìn)行拆分?,F(xiàn)共有8個測試用例,它們分別是、(1,0,2), t2 (2,1,2), t3 (0,I, I)、t4 (0,1,2), t5 (I, I, I)、t6 (I, 1,2), t7(1,1,0)和七8 (2,2,3)。其中,h和t2為失敗測試用例,t3-t8為成功測試用例??梢詫⒊?br>
功測試用例拆分成/w=^=3份,例如 P1 (t3, t4), P2 (t5, t6), P3 (t7, t8);第二步成批復(fù)制失敗測試用例,與拆分好的每份成功測試用例配對。將失敗測試用例h和t2整體復(fù)制3份,并將其與拆分好的成功測試用例配對,構(gòu)成3個新的類別均衡的子測試用例集,即 S1 Ct1, t2, t3, t4)、S2 Ct1, t2, t5, t6)和 S3 Ct1, t2, t7, t8);第三步依次輸入類別均衡的子測試用例集,生成相應(yīng)子排位表。該步驟又分為三小步(一 )收集子測試用例集運(yùn)行時程序譜的執(zhí)行信息。當(dāng)輸入子測試用例集S1吋,針對程序中的所有可執(zhí)行語句S1-S13,分別統(tǒng)計arf,anf,aep和anp這四個參數(shù),記錄的數(shù)據(jù)如下所示
c^ef^nf^ep^ip
權(quán)利要求
1.一種面向失敗測試用例稀少情況的軟件錯誤定位方法,其特征在于它包括以下五個步驟 第一步對原始測試用例集中的成功測試用例進(jìn)行拆分;將原始測試用例集中的成功測試用例P分成繼=Ifj等份,第i份(I彡i彡m)成功測試用例用Pi表示;其中,U表示原始測試用例集中成功測試用例P的數(shù)量,V表示原始測試用例集中失敗測試用例F的數(shù)量,Pi中包含V個成功測試用例,這V個成功測試用例均是通過對原始測試用例集中的成功測試用例進(jìn)行隨機(jī)不放回抽取而得到; 第二步成批復(fù)制失敗測試用例,與拆分好的每份成功測試用例配對;經(jīng)過此步后,將得到m份新的類別均衡的子測試用例集Si,其中,每份子測試用例集包含V個成功測試用例和V個失敗測試用例; 第三步依次輸入類別均衡的子測試用例集,生成相應(yīng)子排位表;該步驟又分為三小 (一)收集子測試用例集運(yùn)行時程序譜的執(zhí)行信息;針對插樁后的待測程序,輸入第i個類別均衡的子測試用例集,統(tǒng)計語句s在該子測試用例集運(yùn)行時得到的aefi(s), amXs), anfi(s)這四個參數(shù);其中,am (s),aefi(s), anFi(s), a,3/i(s)分別表示第i個類別均衡的子測試用例集中經(jīng)過語句s的成功測試用例數(shù)目,經(jīng)過語句S的失敗測試用例數(shù)目,沒有經(jīng)過語句S的成功測試用例數(shù)目和沒有經(jīng)過語句S的失敗測試用例數(shù)目; (二)計算語句可疑度;針對上一步中得到的語句S的執(zhí)行信息,使用基于譜的軟件錯誤定位方法進(jìn)行計算,為語句S計算可疑度Ti(S);不斷循環(huán)該步驟,直至計算出所有語句的可疑度; (三)生成子排位表;按照可疑度值由大到小的順序?qū)λ姓Z句進(jìn)行排序,生成子排位表Li ,其中,語句s在子排位表Li中的排位用Ri(S)表不; 第四步集成多重排位結(jié)果,合成綜合排位表;針對第三步中得到的語句s的m個可疑度計算結(jié)果,利用公式
全文摘要
一種面向失敗測試用例稀少情況的軟件錯誤定位方法,包括五個步驟一、對原始測試用例集中的成功測試用例進(jìn)行拆分;二、成批復(fù)制失敗測試用例,與拆分好的每份成功測試用例配對;三、依次輸入類別均衡的子測試用例集,生成相應(yīng)子排位表;該步驟又具體分為收集子測試用例集運(yùn)行時程序譜的執(zhí)行信息,計算語句可疑度和生成子排位表這三小步;四、集成多重排位結(jié)果,合成綜合排位表;五、根據(jù)得到的綜合排位表,依次返回源程序?qū)?yīng)位置處進(jìn)行檢查,直到找出與錯誤相關(guān)的語句為止。該方法可以有效克服測試用例集類別不均衡現(xiàn)象對基于譜的軟件錯誤定位方法所帶來的不利影響,并且方法切實(shí)可行,能夠有效提高基于譜的軟件錯誤定位方法的定位精度。
文檔編號G06F11/36GK103019943SQ201310001120
公開日2013年4月3日 申請日期2013年1月4日 優(yōu)先權(quán)日2013年1月4日
發(fā)明者鄭征, 郝鵬 申請人:北京航空航天大學(xué)