專利名稱::一種測試用例聚類取樣方法
技術領域:
:本發明屬于軟件測試領域,涉及軟件測試結果的驗證,首先根據執行路徑對測試用例進行聚類,然后從各個類簇中抽取測試用例來讓人工檢查測試結果,通過約簡需要人工檢查結果的測試用例集來節約人力。本發明主要應用于測試輸入的產生和測試用例的執行可以自動完成,但測試結果需要人工比對的場景下,為一種測試用例聚類取樣方法。
背景技術:
:傳統的軟件測試方法包括三個步驟1)創建測試輸入;2)執行測試用例;3)檢查測試結果。軟件測試需要耗費大量的時間和人力,但它是確保軟件質量的重要手段。為了節約測試成本,研究人員設計出了一些自動化的工具來幫助生成測試輸入,執行測試用例和檢查測試結果。然而,在操作型測試(如beta測試,領域測試)中,測試結果多樣化,無法事先精確的描述清楚,因此需要人工去驗證,從而耗費大量的人力。針對這種測試輸入的產生和測試用例的執行可以自動完成,但測試結果需要人工驗證的情況,DavidLeon等人提出了基于觀測的軟件測試技術(Observation-BasedTesting),包括三個步驟1)為所有測試用例創建好測試輸入;2)執行所有的測試用例,并記錄下每個測試用例的執行路徑;3)分析每個測試用例的執行路徑信息,挑選測試用例來讓人工檢查其測試結果是否符合需求。因此,基于觀測的軟件測試技術是通過減少需要人工檢查的測試用例數來節約人力,但同時盡可能挑出最多的失敗用例以保持測試的有效性。2001年,WilliamDickinson等人用通過實驗證明了聚類過濾技術是一種有效的基于觀測的軟件測試技術,主要包括以下三個步驟1.運行所有的測試用例,記錄下執行路徑信息。2.根據測試用例的執行路徑來聚類,這樣具有相似執行路徑的測試用例就會被聚到同一個類簇中。3.從每個類簇中取樣,挑選出來的測試用例構成了約簡后的測試用例集。測試人員只需要對這些測試用例進行驗證即可。其中第3步的取樣方法會很大程度的影響測試用例集約簡的效果。已經有學者提出了以下幾種取樣方法1)從每個類簇中隨機挑選一個(One-per-clusterSampling)在最理想的情況下,相同程序錯誤導致的失敗測試用例都聚在同一個類簇中。要找出所有的程序錯誤,只需要從每個類簇中隨機挑選一個測試用例即可。但實際上聚類的效果不可能那么好,一個類簇中可能混雜了成功測試用例和不同的程序錯誤導致的失敗測試用例。另外,僅根據該錯誤導致的一個失敗測試用例,程序員很難進行錯誤定位。因此,取樣的目標是盡可能找出最多的失敗測試用例。2)從每個類簇中隨機挑選多個(N-per-clusterSampling)該方法旨在通過挑選更多的測試用例來找出更多的失敗用例。但是該方法只是“從每個類簇中隨機挑選一個”的簡單擴展,它們本質上都是簡單的隨機抽樣,并沒有利用任何信息來指導抽樣。3)自適應取樣(AdaptiveSampling)首先從每個類簇中隨機挑選一個測試用例,然后對所有這些測試用例的執行結果進行驗證。如果一個測試用例失敗了,則它所在類簇中的所有剩余測試用例都會被挑選出來進行驗證;否則,該測試用例成功了,則它所在類簇中所有剩余測試用例都被過濾掉。WilliamDickinson等人通過實驗證明,該自適應挑選方法要比以上兩種簡單隨機抽樣更有效。在約簡集大小一樣的情況下,該方法能挑選出更多的失敗測試用例。然而,這種自適應取樣技術的效果很大程度上依賴于第一次隨機挑選出的測試用例。如果從一個類簇中隨機挑選出的測試用例驗證結果為失敗,那么整個類簇都會被選中,即使該類簇中成功測試用例占了大部分;同樣,如果從一個類簇中隨機挑選出的測試用例驗證結果為成功,那么整個類簇都會被拋棄,即使該類簇中失敗測試用例占了大部分。
發明內容本發明所要解決的技術問題是現有的基于觀測的軟件測試技術在測試結果檢查上不夠全面,需要改進現有的“自適應取樣”技術,充分利用每個類簇中已被選中的測試用例的執行頻譜信息來幫助挑選測試用例,并決定何時停止從該類簇中取樣。本發明的技術方案為一種測試用例聚類取樣方法,軟件測試的測試用例執行后,根據測試用例的執行路徑聚類得到多個類簇,在類簇中挑選測試用例進行驗證,根據被選中的測試用例的驗證結果,計算其所執行的語句的可信度,如果測試用例驗證通過,語句可信度增加,反之則減少;如果一個語句的可信度低于給定的閾值,則該語句為可疑語句,可疑語句構成可疑語句集合;根據可疑語句集合計算該類簇中剩余的每個測試用例失敗的可能性,某測試用例執行過越多可疑語句其失敗可能性越高,挑選失敗可能性最高的那個測試用例,然后根據該測試用例的驗證結果重新計算各語句的可信度,更新可疑語句集合,并計算未驗證的剩余測試用例失敗的可能性,挑選下一個失敗可能性最高的測試用例來驗證其結果;整個取樣過程如此重復下去,直到該類簇中所有剩余測試用例的失敗可能性都為0,即剩余測試用例的所執行語句均不在可疑語句集合中,取樣剩余的測試用例均不再驗證其結果,實現測試用例的約簡并確保被取樣的測試用例中失敗測試用例的比例。本發明具體步驟如下1)設聚類后得到m個類簇C1,C2...Cffl,j表示類簇編號,初始化j=1;2)初始化所有語句的可信度為0;從類簇Ci中挑選執行語句最多的測試用例t;3)驗證測試用例測試人員驗證測試用例t的執行結果,獲取反饋信息該測試用例是失敗,還是成功;4)計算執行語句可信度根據測試用例t的驗證結果,計算語句的可信度,計算語句可信度的公式為confidence(s)=passed(s)-failed(s),即語句s的可信度等于執行過S并且通過的測試用例的個數,減去執行過S并且失敗的測試用例個數,也就是如果t驗證失敗了,則t執行過的所有語句的可信度減1;否則,t成功了,則t執行過的所有語句的可信度加1;5)語句識別根據語句的可信度,將語句識別為可疑語句和可信語句兩種,設定一個閾值ConfidenceThreshold,簡寫為CT,所有可信度小于CT的語句被識別為可疑語句,具體公式為suspicious(S)={seSIconfidence(s)<CT};所有可信度大于或等于CT的語句被識別為可信語句,具體公式為correct(S)={seS|confidence(s)>=CT};可疑語句集和可信語句集之間沒有交集胃ΠCW(S)=0.6)測試用例失敗可能性度量測試用例t執行過的語句集表示為t(S)={seSltexecutess},測試用例t失敗的可能性為其執行過的可疑語句的個數,計算公式為failpossibiIity(t)=11(S)Πsuspicious(S)|;7)選取類簇剩余測試用例中失敗可能性最大的測試用例根據計算出來的剩余測試用例的失敗可能性,選取其中失敗可能性最大的測試用例t’;如果多個測試用例擁有最大失敗可能性,則采用隨機挑選的方法,從中挑選出一個測試用例t’;8)如果t’的失敗可能性值為0,則停止從類簇Cj中取樣,j=j+1,如果j<=m則返回步驟2),開始從下一個類簇中取樣;如果j>m,即所有類簇都取樣完畢后,整個取樣過程結束;如果t’的失敗可能性值大于0,則返回步驟3),繼續從當前類簇中取樣。本發明基于觀測的軟件測試技術中的聚類過濾技術,為一種測試用例聚類取樣技術。本發明通過約簡需要人工驗證的測試用例數來節約人力,同時確保挑選出盡可能多的失敗測試用例。取樣驗證軟件測試結果時,本發明取樣剩余的測試用例均不再驗證其結果,實現了測試用例的約簡,節約了人工驗證測試結果的時間和精力,同時又確保被取樣的測試用例中失敗測試用例占很大比例,語句的可信度值可以用來幫助測試人員進行錯誤定位。圖1為本發明的流程示意圖。2(a)%3-per-clustersampling,adaptivesampling及本發明ESBS在實驗程序PrintTokens上的實驗效果圖。圖2(b)%3-per-clustersampling,adaptivesampling及本發明ESBS在實驗程序PrintTokens2上的實驗效果圖。2(c)%3-per-clustersampling,adaptivesampling及本發明ESBS在實驗程序Schedule上的實驗效果圖。圖2(d)%3-per-clustersampling,adaptivesampling及本發明ESBS在實驗程序SChedule2上的實驗效果圖。圖2(e)%3-per-clustersampling,adaptivesampling及本發明ESBS在實驗程序R印Iace上的實驗效果圖。圖2(f)%3-per-clustersampling,adaptivesampling及本發明ESBS在實驗程序Space上的實驗效果圖。具體實施例方式本發明基于觀測的軟件測試技術中的聚類過濾技術,在類簇中挑選測試用例進行驗證,根據被選中的測試用例的驗證結果,計算其所執行的語句的可信度,如果測試用例驗證通過,語句可信,反之則為可疑;根據語句可信度計算該類簇中剩余的每個測試用例失敗的可能性,某測試用例執行過越多可疑語句其失敗可能性越高,挑選失敗可能性最高的那個測試用例,然后根據該測試用例的驗證結果重新計算各語句的可信度,并計算未驗證的剩余測試用例失敗的可能性,挑選下一個測試用例;整個取樣過程如此重復下去,直到該類簇中所有剩余測試用例的失敗可能性都為0,即剩余測試用例的所執行語句均為可信,則經過取樣驗證的測試用例通過驗證結果區分是成功測試用例還是失敗測試用例,取樣剩余的測試用例均為成功測試用例,實現該類簇測試用例的自動取樣。通過或失敗的測試用例的語句執行信息在錯誤定位領域被稱為“執行頻譜”,由于本發明是基于已被驗證測試用例的執行頻譜信息來挑選剩余測試用例的,所以可以稱為基于執行頻譜的取樣方法ExecutionSpectraBasedSampling,后面簡寫為ESBS。如圖1,本發明步驟如下1)設聚類后得到m個類簇C1,C2...Cffl,j表示類簇編號,初始化j=1;2)初始化所有語句的可信度為0;從類簇中挑選執行語句最多的測試用例t3)驗證測試用例測試人員驗證測試用例t的執行結果,獲取反饋信息該測試用例是失敗,還是成功;4)計算執行語句可信度根據測試用例t的驗證結果,計算語句的可信度,計算語句可信度的公式為confidence(s)=passed(s)-failed(s),即語句s的可信度等于執行過S并且通過的測試用例的個數,減去執行過S并且失敗的測試用例個數,也就是如果t驗證失敗了,則t執行過的所有語句的可信度減1;否則,t成功了,則t執行過的所有語句的可信度加1;5)語句識別根據語句的可信度,將語句識別為可疑語句和可信語句兩種,設定一個閾值ConfidenceThreshold,簡寫為CT,所有可信度小于CT的語句被識別為可疑語句,具體公式為suspicious(S)={seSIconfidence(s)<CT};所有可信度大于或等于CT的語句被識別為可信語句,具體公式為correct(S)={seS|confidence(s)>=CT};可疑語句集和可信語句集之間沒有交集-AW⑶Π⑶“^⑷=0;6)測試用例失敗可能性度量測試用例t執行過的語句集表示為t(S)={seS|texecutess},測試用例t失敗的可能性為其執行過的可疑語句的個數,計算公式為failpossibiIity(t)=11(S)Πsuspicious(S)|;7)選取類簇剩余測試用例中失敗可能性最大的測試用例根據計算出來的剩余測試用例的失敗可能性,選取其中失敗可能性最大的測試用例t’;如果多個測試用例擁有最大失敗可能性,則采用隨機挑選的方法,從中挑選出一個測試用例t’;8)如果t’的失敗可能性值為0,則停止從類簇Cj中取樣,j=j+1,如果j<=m則返回步驟2),開始從下一個類簇中取樣;如果j>m,即所有類簇都取樣完畢后,整個取樣過程結束。如果t’的失敗可能性值大于0,則返回步驟3),繼續從當前類簇中取樣。所有未被取樣出來的測試用例不用驗證其結果,這樣就實現了節約人力的目的。同時,語句的可信度值可以用來幫助程序員進行錯誤定位。下面將結合實際例子,說明本發明的具體實施。假設一個類簇中有6個測試用例,它們執行過的語句及將來的驗證結果如表1所示,其中之所以叫“將來的驗證結果”,是因為測試用例的驗證結果只有挑選出來驗證了才知道,但例子中為了說明挑選出的失敗測試用例的百分比,在表1中列出了所有測試用例將來的驗證結果。現在我們要用本發明中的取樣方法從中挑選測試用例來讓測試人員驗證。目標是挑選出盡可能少的測試用例,但包含盡可能多的失敗測試用例。具體的挑選過程如表2所示。1)剛開始,所有語句的可信度初始化為0。因為閾值CT=1,所有語句的可信度都小于CT,即所有語句都是可疑的。因此,t2被第一個挑選出來,因為它執行了最多的可疑語句,其失敗的可能性值為5。如表2中次序為1的那行所示,t2驗證后為通過,因此t2執行過的語句sl,s2,s4,s5,s6的可信度都加1,此時,只有s3的可信度小于CT,s3是唯一的可疑語句。在剩余的5個測試用例中,只有t3和t5執行了s3,因此它們擁有相同的失敗可能性值1。2)如表2中次序為2的那行所示,從t3和t5中隨機挑選一個測試用例,假設t3被選中,因為t3被驗證為失敗,t3執行過的語句s2,s3的可信度減1,此時的可疑語句為s2和S3。在剩余的4個測試用例tl,t4,t5,t6中,t4執行了s2,t5執行了s3,因此它們具有相同的失敗可能性1。3)如表2中次序為3的那行所示,從t4和t5中隨機挑選一個測試用例,假設t4被選中,因為t4被驗證為失敗,t4執行過的語句s2,s5的可信度減1,此時的可疑語句是s2,s3,s5,在剩余的測試用例tl,t5,t6中,只有t5執行了可疑語句s3,tl和t6沒有執行任何可疑語句。因此只有t5具有失敗可能性1。4)如表2中次序為4的那行所示,t5被選中,因為t5被驗證為通過,t5執行過的語句sl,s3,s4的可信度加1,此時的可疑語句為s2,s3,s5,剩余的測試用例tl,t6都沒有執行任何可疑語句,即失敗可能性值都為0。該類簇取樣結束。總結該類簇中共有6個測試用例如表1,我們選出了其中四個測試用例t2,t3,t4,t5,見表2,讓測試人員驗證其結果,另外兩個測試用例(tl,t6)并未驗證其結果,這樣節約了測試人員驗證測試結果的時間。表1中共有2個失敗的測試用例(t3,t4),在表2中這2個失敗的測試用例都被挑選出來了。也就是說,測試用例在只驗證了4/6的測試用例的情況下,找到了100%的失敗的測試用例,既節約了時間,又不影響測試效果。表1六個測試用例及它們執行過的語句和將來的驗證結果測試用例執行過的語句將來的驗證結果~~tlsl,s4,s6MM~t2sl,s2,s4,s5,s6Witt3s2,s3WMt4s2,s5WMt5sl,s3,s4通過““t6sl,s6MM表2基于表1測試用例的具體挑選過程<table>tableseeoriginaldocumentpage8</column></row><table>如圖2(a)-(d),我們將現有的兩種聚類取樣技術3-per-clustersampling(每個簇中隨機取3個樣本)和adaptivesampling(自適應取樣)及本發明ESBS(基于執行頻譜的聚類取樣技術)運行在6個經典的西門子實驗程序上。每個圖中,橫坐標代表被挑選出來驗證的測試用例數占原有測試用例數的百分比(%testsselected),縱坐標代表被挑選出的失敗測試用例數占原有失敗測試用例數的百分比(%failuresfound)。在被挑選出來的測試用例數相同的情況下,找到的失敗測試用例數越多,說明該取樣技術效果越好。即在橫坐標值相同的情況下,縱坐表值越大,該取樣技術越好。從圖中可以看出,本發明ESBS方法在Printtokens,Printtokens,Schedule2,Replace,Space在5個實驗程序上的效果者剛顯好于3-per-clustersampling禾口adaptivesampling,只有在Schedule上的效果不及adaptivesampling。查找原因后發現,本發明ESBS的效果很大程度上依賴于錯誤定位的效果,而Schedule程序中的錯誤不容易定位,從而影響了測試用例挑選的效果。權利要求一種測試用例聚類取樣方法,軟件測試的測試用例執行后,根據測試用例的執行路徑聚類得到多個類簇,其特征是在類簇中挑選測試用例進行驗證,根據被選中的測試用例的驗證結果,計算其所執行的語句的可信度,如果測試用例驗證通過,語句可信度增加,反之則減少;如果一個語句的可信度低于給定的閾值,則該語句為可疑語句,可疑語句構成可疑語句集合;根據可疑語句集合計算該類簇中剩余的每個測試用例失敗的可能性,某測試用例執行過越多可疑語句其失敗可能性越高,挑選失敗可能性最高的那個測試用例,然后根據該測試用例的驗證結果重新計算各語句的可信度,更新可疑語句集合,并計算未驗證的剩余測試用例失敗的可能性,挑選下一個失敗可能性最高的測試用例來驗證其結果;整個取樣過程如此重復下去,直到該類簇中所有剩余測試用例的失敗可能性都為0,即剩余測試用例的所執行語句均不在可疑語句集合中,取樣剩余的測試用例均不再驗證其結果,實現測試用例的約簡并確保被取樣的測試用例中失敗測試用例的比例。2.根據權利要求1所述的一種測試用例聚類取樣方法,其特征是具體步驟如下1)設聚類后得到m個類簇C1,C2...Cffl,j表示類簇編號,初始化j=1;2)初始化所有語句的可信度為0;從類簇Cj中挑選執行語句最多的測試用例t;3)驗證測試用例測試人員驗證測試用例t的執行結果,獲取反饋信息該測試用例是失敗,還是成功;4)計算執行語句可信度根據測試用例t的驗證結果,計算語句的可信度,計算語句可信度的公式為confidence(s)=passed(s)-failed(s),即語句s的可信度等于執行過s并且通過的測試用例的個數,減去執行過s并且失敗的測試用例個數,也就是如果t驗證失敗了,則t執行過的所有語句的可信度減1;否則,t成功了,則t執行過的所有語句的可信度加1;5)語句識別根據語句的可信度,將語句識別為可疑語句和可信語句兩種,設定一個閾值ConfidenceThreshold,簡寫為CT,所有可信度小于CT的語句被識別為可疑語句,具體公式為suspicious(S)={seSIconfidence(s)<CT};所有可信度大于或等于CT的語句被識別為可信語句,具體公式為correct(S)={seS|confidence(s)>=CT};可疑語句集和可信語句集之間沒有交集ΠMn^(S)=0;6)測試用例失敗可能性度量測試用例t執行過的語句集表示為t(S)={seS|texecutess},測試用例t失敗的可能性為其執行過的可疑語句的個數,計算公式為failpossibiIity(t)=11(S)Πsuspicious(S)|;7)選取類簇剩余測試用例中失敗可能性最大的測試用例根據計算出來的剩余測試用例的失敗可能性,選取其中失敗可能性最大的測試用例t’;如果多個測試用例擁有最大失敗可能性,則采用隨機挑選的方法,從中挑選出一個測試用例t’;8)如果t’的失敗可能性值為0,則停止從類簇Cj中取樣,j=j+1,如果j<=m則返回步驟2),開始從下一個類簇中取樣;如果j>m,即所有類簇都取樣完畢后,整個取樣過程結束;如果t’的失敗可能性值大于0,則返回步驟3),繼續從當前類簇中取樣。全文摘要一種測試用例聚類取樣方法,基于觀測的軟件測試技術中的聚類過濾技術,在類簇中挑選測試用例進行驗證,根據驗證結果計算其所執行的語句的可信度,判斷是否可疑語句,可疑語句構成可疑語句集合;根據可疑語句集合計算該類簇中剩余測試用例失敗的可能性,挑選失敗可能性最高的測試用例,驗證結果并重新計算各語句的可信度,更新可疑語句集合,對未驗證的測試用例重復取樣過程,直到該類簇中所有剩余測試用例的失敗可能性都為0。本發明取樣剩余的測試用例均不再驗證其結果,實現了測試用例的約簡,節約了人工驗證測試結果的時間和精力,同時確保被取樣的測試用例中失敗測試用例占很大比例,語句的可信度值可以用來幫助測試人員進行錯誤定位。文檔編號G06F11/36GK101814055SQ201010139848公開日2010年8月25日申請日期2010年4月6日優先權日2010年4月6日發明者嚴莎莉,章宸,趙志宏,陳振宇申請人:南京大學