一種基于預(yù)運算的程序變異軟件錯誤定位方法
【專利摘要】本發(fā)明屬于軟件測試領(lǐng)域,涉及一種基于預(yù)運算的程序變異軟件錯誤定位方法,步驟包括:利用程序編寫的過程中獲得的中間版本的程序生成多個變異版本的程序;執(zhí)行變異版本的程序,收集各個版本程序的執(zhí)行信息,所述執(zhí)行信息包括執(zhí)行結(jié)果和次數(shù);當(dāng)程序編寫完畢后,執(zhí)行最終版本的程序,收集最終版本程序的執(zhí)行信息;比較變異版本的程序與最終版本程序的各自的程序信息,定位軟件錯誤位置。本發(fā)明在利用變異進(jìn)行程序錯誤定位,準(zhǔn)確率非常高,使用預(yù)計算策略進(jìn)行加速,測試效率也非常高,比現(xiàn)有錯誤定位方法在準(zhǔn)確率和效率都有提高。
【專利說明】一種基于預(yù)運算的程序變異軟件錯誤定位方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于軟件測試【技術(shù)領(lǐng)域】,涉及一種軟件錯誤定位方法,特別提供了基于預(yù)運算的程序變異軟件錯誤定位方法,可應(yīng)用于動態(tài)的軟件錯誤定位。
【背景技術(shù)】
[0002]在敏捷軟件持續(xù)集成開發(fā)過程中,要求軟件開發(fā)要在編碼和測試迭代進(jìn)行,即編寫代碼的工作人員每個周期提供一個版本,測試人員進(jìn)行測試之后再交給編寫代碼工作人員進(jìn)行下一個版本的編寫,這樣的持續(xù)集成開發(fā)環(huán)境可以有效的保證軟件開發(fā)的效率。但是這樣的迭代方式對于編寫代碼人員與測試人員都存在大量的空閑時間,降低了效率。我們利用在編寫代碼的過程中軟件測試人員就開始進(jìn)行預(yù)測試,將測試的任務(wù)在代碼編寫的過程中完成一部分,來加快軟件開發(fā)的效率。
[0003]另外,為了修改軟件中存在的錯誤,對錯誤進(jìn)行定位是必要的步驟之一。軟件測試中的錯誤定位是最困難、最耗時的任務(wù),錯誤定位是軟件測試的瓶頸,使用一種自動化的錯誤定位技術(shù)來協(xié)助程序員找到錯誤是解決軟件測試問題的趨勢。
[0004]學(xué)術(shù)界早在十年前已經(jīng)提出了自動化錯誤定位的概念,最近許多的軟件自動錯誤定位技術(shù)通過分析成功和失敗測試用例的覆蓋信息輔助程序員定位錯誤代碼,Jaccard,Tarantula等人在2002年基于此類方法進(jìn)行了研究,這類技術(shù)統(tǒng)稱為基于覆蓋信息的錯誤定位技術(shù)。要應(yīng)用此類分析技術(shù),必須具備兩個關(guān)鍵因素:(I) 一個(或一組)用于參考的程序執(zhí)行信息特征,用以提供分析語句可疑度的信息;(2) —個評估函數(shù),用以衡量語句的可疑度。
[0005]盡管基于覆蓋信息的錯誤定位技術(shù)取得初步成功,但其準(zhǔn)確率受到許多負(fù)面因素影響,Baudry等人在2006年研究表明了覆蓋了程序錯誤代碼的成功測試用例會顯著影響基于覆蓋信息的錯誤定位技術(shù)的準(zhǔn)確率,目前這種錯誤定位方法的平均運行時間低于5秒,但是在檢查5%代碼的情況下對錯誤定位的平均準(zhǔn)確率不超過30%。
[0006]Papadakis等學(xué)者利用程序變異提高錯誤定位的準(zhǔn)確率,其方法是對于程序中的每一個可執(zhí)行語句S應(yīng)用不同的變異算子生成若干變異程序,然后對每個變異程序收集運行的覆蓋信息,分析語句的可疑度,賀濤等研究人員對其進(jìn)行了優(yōu)化與集成并且制作了一款名為Muffler的自動化測試工具。這種錯誤定位方法在檢查5%代碼的情況下對錯誤定位的平均準(zhǔn)確率超過60%,但是平均運行時間超過了 500秒。
[0007]基于覆蓋信息的自動化錯誤定位技術(shù)擁有較高的效率,但是準(zhǔn)確率很低,基于程序變異的自動化錯誤定位技術(shù)擁有比較高的準(zhǔn)確率,但是效率非常低,嚴(yán)重影響了實用性,有必要尋找一種準(zhǔn)確率高并且效率也高的自動化錯誤定位技術(shù)。
【發(fā)明內(nèi)容】
[0008]本發(fā)明技術(shù)解決問題:克服現(xiàn)有技術(shù)中存在的上述問題,提供一種基于預(yù)計算的程序變異軟件錯誤定位方法,大大提高了準(zhǔn)確率和效率。
[0009]本發(fā)明技術(shù)解決方案:一種基于預(yù)計算的程序變異軟件錯誤定位方法,原理為:
[0010]軟件開發(fā)需要在編寫代碼與測試這兩個過程中進(jìn)行迭代,如圖(l)a所示,為了減少編寫代碼人員和測試人員的空閑時間,將測試的任務(wù)一部分提前在代碼編寫的過程中,即預(yù)測試可以有效的提高軟件開發(fā)的效率,如圖1(b)所示。
[0011]錯誤定位是軟件測試的一個耗時最長、精確度要求高的一個瓶頸,提高錯誤定位的準(zhǔn)確度和效率是加快軟件測試的核心。目前基于覆蓋信息的錯誤定位技術(shù)準(zhǔn)確率低,并且必須在代碼編寫完成才能進(jìn)行計算,不適合進(jìn)行預(yù)測試;相反的是基于程序變異的錯誤定位方法有很高的準(zhǔn)確率但是消耗的時間非常大,一個不完整的程序變異與完整程序的變異的本質(zhì)都是變異,對結(jié)果的損失很小,可以進(jìn)行預(yù)測試。
[0012]本發(fā)明的方法,其步驟包括(見圖2與圖3):
[0013]步驟1、利用程序編寫的過程中獲得的中間版本的程序生成多個變異版本的程序;
[0014]步驟2、執(zhí)行變異版本的程序,收集各個版本程序的執(zhí)行信息,所述執(zhí)行信息包括執(zhí)行結(jié)果(true或false)和次數(shù);
[0015]步驟3、當(dāng)程序編寫完畢后,執(zhí)行最終版本的程序,收集最終版本程序的執(zhí)行信息;
[0016]步驟4、比較變異版本的程序與最終版本程序的各自的程序信息,定位軟件錯誤位置。
[0017]本發(fā)明與現(xiàn)有技術(shù)相比的優(yōu)點在于:
[0018](I)將測試程序的過程的一部分與編寫程序的過程并行執(zhí)行,即在編寫程序的過程中對測試進(jìn)行預(yù)計算,減少了編寫程序與測試程序這個過程的整體時間消耗。
[0019](2)本發(fā)明在利用變異進(jìn)行程序錯誤定位,準(zhǔn)確率非常高,使用預(yù)計算策略進(jìn)行加速,測試效率也非常高,比現(xiàn)有錯誤定位方法在準(zhǔn)確率和效率都有提高。
【專利附圖】
【附圖說明】
[0020]圖1 (a)和(b)分別為程序編寫與測試在未應(yīng)用預(yù)測試與應(yīng)用預(yù)測試的對比;
[0021]圖2為基于預(yù)計算的程序變異軟件錯誤定位方法的簡明框圖;
[0022]圖3為基于預(yù)計算的程序變異軟件錯誤定位方法的具體流程圖。
【具體實施方式】
[0023]如圖2所示,本發(fā)明具體流程主要分為四個步驟,其中前兩個步驟在編寫程序的過程中進(jìn)行,即為預(yù)運算的過程,進(jìn)行預(yù)測試,后兩個步驟在程序編寫結(jié)束后進(jìn)行。具體的步驟描述如圖3所示:
[0024]步驟1、編程人員編程得到了中間版本代碼,可能是沒有完成的代碼,也可能是一個功能不全的版本,這些版本都可以視為中間版本代碼,可以用來做預(yù)運算測試,對這些代碼進(jìn)行變異,每一個變異的版本是指對中間版本的代碼中的一條語句進(jìn)行隨機(jī)修改,例如對一個程序中的某條語句中的一個變量加1,這樣就是獲得的一個變異版本的程序;
[0025]步驟2、執(zhí)行變異版本的程序,收集各個版本的變異版本程序的執(zhí)行信息,所述執(zhí)行信息包括執(zhí)行結(jié)果和次數(shù),通過gcov等測試代碼覆蓋率的工具獲取程序?qū)γ恳粋€語句的覆蓋信息(每一條語句是否被執(zhí)行),這樣就得到了變異語句的位置與執(zhí)行結(jié)果(包括覆蓋信息)與這一對信息;
[0026]步驟3、當(dāng)程序編寫完畢后,執(zhí)行最終版本的程序,收集最終版本程序的執(zhí)行信息與覆蓋信息,最終版本的含義是指需要在這個版本的程序上進(jìn)行測試;
[0027]步驟4、比較變異版本的程序與最終版本程序的各自的執(zhí)行信息與覆蓋信息,與最終版本程序的信息相似度越高的變異版本,其變異語句的位置是錯誤位置的可能性越大,由此規(guī)律來定位軟件錯誤位置。
[0028]提供以上實施例僅僅是為了描述本發(fā)明的目的,而并非要限制本發(fā)明的范圍。本發(fā)明的范圍由所附權(quán)利要求限定。不脫離本發(fā)明的精神和原理而做出的各種等同替換和修改,均應(yīng)涵蓋在本發(fā)明的范圍之內(nèi)。
【權(quán)利要求】
1.一種基于預(yù)運算的程序變異軟件錯誤定位方法,其步驟包括: (1)利用程序編寫的過程中獲得的中間版本生成多個變異版本的程序; (2)執(zhí)行變異版本的程序,收集各個版本程序的執(zhí)行信息;所述執(zhí)行信息包括執(zhí)行結(jié)果和次數(shù); (3)當(dāng)程序編寫完畢后,執(zhí)行最終版本的程序,收集最終版本程序的執(zhí)行信息; (4)比較變異版本的程序與最終版本程序的各自的程序信息,定位軟件錯誤位置。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于:所述步驟(I)為在編寫代碼過程中利用生成的中間版本程序生成多個變異版本的程序。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于:所述步驟(2)為在編寫代碼過程中利用生成的多個變異版本的程序執(zhí)行獲取執(zhí)行信息。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于:所述步驟(I)與步驟(2)中的操作為測試的預(yù)運算,即編寫測試為在編寫代碼過程中并行的進(jìn)行軟件測試。
【文檔編號】G06F11/36GK104317706SQ201410546540
【公開日】2015年1月28日 申請日期:2014年10月15日 優(yōu)先權(quán)日:2014年10月15日
【發(fā)明者】孫成龍, 張震宇, 劉暢 申請人:中國科學(xué)院軟件研究所