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