欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種快速的循環(huán)擴展檢測方法

文檔序號:6424871閱讀:157來源:國知局
專利名稱:一種快速的循環(huán)擴展檢測方法
技術(shù)領(lǐng)域
本發(fā)明涉及軟件模型檢測技術(shù)以及狀態(tài)空間歸約技術(shù),針對含有關(guān)于聚合類型的循環(huán)的data-based程序的驗證空間爆炸問題,提出了一種新的循環(huán)擴展的檢測方法。
背景技術(shù)
模型檢測技術(shù)是一種驗證系統(tǒng)的有限狀態(tài)空間是否滿足正確屬性的方法。傳統(tǒng)的模型檢測技術(shù)從被測系統(tǒng)的初始狀態(tài)出發(fā),產(chǎn)生并驗證該初始狀態(tài)的所有后繼狀態(tài)是否滿足某個給定的正確或者安全屬性。目前已提出很多針對狀態(tài)爆炸問題的軟件模型檢測技術(shù)以及狀態(tài)歸約技術(shù)(參考文獻Chaki,S.,E. Clarke, et al. (2003).Modular verification of software components in C. Software Engineering,2003.Proceedings. 25th International Conference on.;文獻Henzinger,T. A.,R. Jhala, et al. (2002). Lazy abstraction. Proceedings of the 29th ACM SIGPLAN-SIGACTsymposium on Principles of programming languages. Portland, Oregon,ACM :58-70.;文獻Corbett, J. C.,Μ. B. Dwyer, et al. (2000). Bandera !extracting finite-statemodels from Java source code.Software Engineering,2000. Proceedings of the 2000International Conference on.),例如偏序規(guī)約技術(shù)以及謂詞抽象技術(shù),然而這些技術(shù)主要用于檢測control-based的程序,而不能有效的檢測data-based的程序。data-based的程序通常有非常龐大(通常是無限的)的測試空間,雖然小范圍假設(shè)(small scopehypothesis)理論的驗證,可以將測試空間縮小到一個限定的有限空間內(nèi),但是這個空間仍然非常大。目前存在的一些針對data-based程序的模型檢測技術(shù),如Korat產(chǎn)生并驗證限定空間中的每個合法(滿足某個給定的前置條件)的狀態(tài),然而這樣依次獨立檢查每個狀態(tài)的方法往往是非常低效的(參考文獻Boyapati,C.,S. Khurshid, et al. (2002).Korat !automated testing based on Java predicates. Proceedings of the 2002ACM SIGS0FT international symposium on Software testing and analysis. Roma,Italy,ACM :123-133.)。Glass Box技術(shù)是另一種針對data-based程序的模型檢測技術(shù)(參考文獻Darga,P. T. and C. Boyapati (2006). Efficient software model checkingof data structure properties. Proceedings of the 21st annual ACM SIGPLANconference on Object-oriented programming systems, languages,and applications.Portland, Oregon, USA,ACM :363-382.),它利用了測試空間中狀態(tài)的相似性,同時檢測相似狀態(tài)(而不是單獨的檢測每個狀態(tài))。Module Glass Box技術(shù)(參考文獻Roberson,M. and C. Boyapati(2010). Efficient modular glass box software model checking.Proceedings of the ACM international conference on Object oriented programmingsystems languages and applications. Reno/Tahoe,Nevada,USA,ACM :4-21.)利用執(zhí)行路徑信息來尋找相似狀態(tài),該方法能找到更多的相似狀態(tài)。然而我們觀察到,很多數(shù)據(jù)結(jié)構(gòu)的方法中都包含有關(guān)于聚合類型的循環(huán),而這些循環(huán)是導致測試用例和檢測時間增多的一個主要原因。目前已有的模型檢測方法不能有效的檢測這類程序,這就使得提出一種有效的針對含有聚合類型的循環(huán)結(jié)構(gòu)的程序的模型檢測方法尤為重要。

發(fā)明內(nèi)容
針對 現(xiàn)有技術(shù)存在的問題,本發(fā)明的目的在于提出一種檢測含有關(guān)于聚合類型的循環(huán)(以下均簡稱循環(huán))的程序的檢測方法,以快速規(guī)約測試狀態(tài)空間。本發(fā)明以檢測含循環(huán)的程序為分析對象,公開了一種快速的循環(huán)擴展檢測方法。與已有的模型檢測方法相t匕,該方法能在更短的時間內(nèi)顯示檢測更少的狀態(tài)來檢測含有循環(huán)的程序的性質(zhì)。為了驗證某個程序的實現(xiàn)是否滿足某個給定的正確屬性,本方法檢測被測程序是否在測試空間中的所有狀態(tài)上的行為都表現(xiàn)正確。被測程序的合法前置狀態(tài)是指滿足被測程序的前置條件的狀態(tài),被測程序的合法后置狀態(tài)是指滿足被測程序的后置條件的狀態(tài)。一個狀態(tài)通過檢測,當且僅當被測程序在該狀態(tài)上的行為表現(xiàn)正確,也就是基于該狀態(tài)執(zhí)行被測程序后的后置狀態(tài)是滿足后置條件的合法后置狀態(tài)。本方法只考慮限定的測試空間中的所有滿足前置條件的狀態(tài)。因此本方法首先初始化測試空間為被測程序的限定范圍內(nèi)所有滿足前置條件的狀態(tài);然后從測試空間中隨機挑選一個未檢測的狀態(tài),并基于該狀態(tài)調(diào)用被測程序,在程序的動態(tài)執(zhí)行過程中收集動態(tài)執(zhí)行信息以及路徑信息;然后分析收集到的動態(tài)執(zhí)行信息,依次靜態(tài)計算剛收集的執(zhí)行路徑的循環(huán)擴展相似的路徑,并執(zhí)行靜態(tài)分析檢查是否所有經(jīng)過該循環(huán)擴展相似路徑的狀態(tài)的正確性;將所有通過檢測的狀態(tài)從測試空間中裁剪掉;如果存在某個狀態(tài)未通過檢測,則表明被測程序的實現(xiàn)中存在錯誤,此時本方法打印出錯,并給出反例;迭代執(zhí)行這個檢查過程,直到檢測完測試空間中的所有狀態(tài)。最終本方法驗證被測程序的實現(xiàn)滿足所檢查的屬性,或者給出反例集合以發(fā)現(xiàn)存在的錯誤。為了達到上述目的,本發(fā)明采用的技術(shù)方案主要包含了動態(tài)和靜態(tài)分析相結(jié)合的方法來標識狀態(tài)以及檢測被標識的狀態(tài)的正確性,該方法包含以下幾個步驟Ia)限定測試空間中的每個變量的取值范圍,并將測試空間的狀態(tài)初始化為限定范圍內(nèi)的所有滿足被測程序前置條件的狀態(tài),進入步驟Ib);Ib)判斷測試空間中是否存在未檢測的狀態(tài),如果沒有則檢測結(jié)束;否則進入步驟 Ic);Ic)挑選一個未檢測的狀態(tài)S,基于狀態(tài)s執(zhí)行被測程序,同時符號執(zhí)行(symbolicexecution)(參考文獻J. C. King. Symbolic execution and program testing. Commun.ACM, 19 (7) :385-394,1976.)被測程序來收集該狀態(tài)經(jīng)過被測程序的路徑p所經(jīng)過的程序分支約束條件信息以及其他動態(tài)執(zhí)行信息,進入步驟Id ;Id)分析收集到的動態(tài)執(zhí)行信息,依次檢測路徑P的所有循環(huán)相似擴展路徑P’,然后返回步驟Ib)對路徑P的每條循環(huán)擴展相似路徑P’,計算P’的路徑約束(是指路徑P’經(jīng)過的所有程序分支約束條件的交運算),滿足P’的路徑約束的所有狀態(tài)肯定經(jīng)過被測程序的路徑P’,本方法執(zhí)行靜態(tài)分析同時檢查這些狀態(tài)的正確性,如果所有狀態(tài)都通過檢測,則可以安全的將路徑P’的路徑約束表示的狀態(tài)從測試空間中裁剪掉而不必執(zhí)行顯示執(zhí)行測試用例來檢測這些狀態(tài);如果存在未通過檢測的狀態(tài),本方法打印出錯信息,并給出反例。如果基于狀態(tài)S執(zhí)行被測程序得到執(zhí)行路徑P,則可以說狀態(tài)S經(jīng)過路徑P,而路徑P標識了狀態(tài)S。通過上述技術(shù)方案可以看出,由于本發(fā)明在每次調(diào)用被測程序時,都靜態(tài)的構(gòu)造與前一個執(zhí)行路徑循環(huán)擴展相似的所有路徑,每條循環(huán)擴展相似路經(jīng)的路徑約束都表示測試空間中的一個狀態(tài)集合,本方法依次靜態(tài)檢查這些狀態(tài)集合(而不是顯示檢測這些狀態(tài)),在這些狀態(tài)集合中的所有狀態(tài)都通過檢查的時候,本方法將其從測試空間中裁剪掉。與 現(xiàn)有技術(shù)相比,本發(fā)明的積極效果為跟其他data-based的模型檢測工具和方法相比,比如Korat與Glass Box模型檢測方法,本方法通過靜態(tài)的檢測更多的狀態(tài)來減少顯示檢測的狀態(tài)數(shù),進而減少了執(zhí)行的測試用例個數(shù),加快檢測速度。


圖I是本方法檢測算法的流程圖;圖2是收集動態(tài)執(zhí)行彳目息流程圖;圖3是計算循環(huán)相似路徑P’的行號列表流程圖;圖4是靜態(tài)構(gòu)造循環(huán)擴展相似路徑P’的路徑約束和經(jīng)過路徑P’后的后置狀態(tài)流程圖;圖5是靜態(tài)檢測經(jīng)過路徑P’的所有狀態(tài)流程圖。
具體實施例方式下面結(jié)合附圖和具體實施方式
對本發(fā)明作更進一步的說明本方法是檢測含有關(guān)于聚合類型的循環(huán)的數(shù)據(jù)結(jié)構(gòu)方法的模型檢測方法。如圖I所示,本方法不斷迭代檢測步驟,來檢查整個測試空間,直到迭代檢查完測試空間中的所有操作為止。該檢測算法的偽代碼描述如下所示
1void check(Bounds b) {Il 限制測試空間b
2S = {s e b I s.repOK() == True} Il 初始化測試空間3while (S != ο) {
4s = any state in SIl從S中隨機選一個未檢查的狀態(tài)s
5P = run(s)//基于s執(zhí)行被測程序,并符號執(zhí)行以收集路徑p
7while (not all LESPs of p are considered) {
8p’= validLESPOf(p);//p’是路徑p的一條合法的循環(huán)相似路徑
9S’= similarStates (p’) Il計算經(jīng)過路徑p’的所有狀態(tài)
10if (some state in S5 fails check) { // 檢查正確性
11print (“error” and a counterexample)
12}
13S = S-S5// 從S中裁剪S’
14}
15} 16}為了更清楚地理解本發(fā)明,將本方案的具體實施過程描述如下(I)初始化測試空間S ;本方法首先限定測試空間中的各個變量的取值范圍,并初始化測試空間中的狀態(tài)為限定測試空間中的所有滿足被測程序的前置條件的狀態(tài)。為了能有效的管理測試空間,本方法用一種增量式求解器,YICES,來管理(包括從測試空間中隨機挑選一個未檢測的狀態(tài),刪除一個或者多個狀態(tài)等操作)測試空間。本方法將被測程序的前置條件轉(zhuǎn)換為一個求解器HCES可接收的公式,并將該公式加入求解器HCES中,以使求解器產(chǎn)生的所有解都能編碼為滿足被測程序的前置條件的狀態(tài)。(2)如果測試空間S非空,則從測試空間S中隨機選擇一個未檢測的狀態(tài)s進入步驟(3),否則結(jié)束;如果管理測試空間的求解器還能提供一組對測試空間中的變量的賦值,則表明測試空間S非空,此時本方法從求解器獲取一組對測試空間中的變量的賦值,并將該組賦值編碼為下一個檢查狀態(tài)s ;如果求解器不能提供一組對測試空間中的變量的賦值,則表明已檢測完所有狀態(tài),并且沒有發(fā)現(xiàn)被測程序中的任何錯誤。(3)基于狀態(tài)s執(zhí)行被測程序,并同時符號執(zhí)行該程序收集執(zhí)行路徑P (為了便于表不,每條路徑用該路徑經(jīng)過的行號序列來表示)的路徑分支約束信息,以及其他動態(tài)執(zhí)行信息;在步驟(2)中選擇的未檢測的狀態(tài)s上執(zhí)行被測程序的過程中,本方法在動態(tài)執(zhí)行過程中自動收集其路徑分支約束信息以及其他動態(tài)執(zhí)行信息。該方法收集的動態(tài)信息包括以下幾個方面執(zhí)行過程中遇到的路徑分支約束條件(例如執(zhí)行語句if (a > b)時,如果該條件成立,那么記錄路徑條件a > b),執(zhí)行語句的effect rules (effect rule是一個三元組(ln,oldValue,newValue),該三元組表示行號為In的語句將oldValue變量的符號值改變?yōu)閚ewValue的符號值),以及此次執(zhí)行經(jīng)過的所有循環(huán)子路徑(是完整路徑的行號序列的一部分,且該部分的下一個行號等于該部分的第一個行號,例如在完整路徑I,2, 3,4,5,6,4,7,8中,4,5,6是一個循環(huán)子路徑)。圖2描述了收集動態(tài)執(zhí)行信息流程圖,其具體步驟為(3a)用一個列表記錄執(zhí)行路徑依次經(jīng)過的語句行號,并初始化該列表為空,進入步驟3b ;(3b)執(zhí)行下一條程序語句(設(shè)該語句的行號為In),首先判斷行號列表中是否已存在行號In,是則將行號列表中從In開始到列表末尾的子列表記錄為一個循環(huán)子路徑,并為該循環(huán)子路徑分配一個唯一標識,然后將行號列表中的剛發(fā)現(xiàn)的循環(huán)子路徑部分用它的唯一標識來替換,最后將當前執(zhí)行的語句的行號In加入行號列表并進入步驟(3c);如果沒有發(fā)現(xiàn)循環(huán)子路徑,則將當前執(zhí)行的行號In直接加入行號列表,并進入步驟(3c);(3c)判斷當前語句是否為條件分支語句,是則記錄該條件分支語句產(chǎn)生的分支條件,然后進入步驟(3d);否則直接進入步驟(3d)(3d)如果當前語句改變前置狀態(tài)的某些值或被測程序的某些局部變量,則記錄該語句的effect rule,并接著進入步驟(3e);否則直接進入步驟(3e);
(3e)判斷此次執(zhí)行是否結(jié)束,如果沒有結(jié)束則進入步驟(3b),否則進入步驟(3f);(3f)將整個行號列表記錄為一個特殊的循環(huán)子路徑,稱其為top循環(huán)子路徑,該循環(huán)子路徑只能循環(huán)一次,進入步驟(3g);(3g)計算每個循環(huán)子路徑的循環(huán)模式(一個循環(huán)子路徑的循環(huán)模式是一個行號列表,該列表記錄該循環(huán)子路徑依次經(jīng)過的行號或者其他的循環(huán)子路徑),然后結(jié)束。如果一個循環(huán)子路徑a連續(xù)兩次或者多次經(jīng)過循環(huán)子路徑b,那么循環(huán)子路徑a的循環(huán)模式中只記錄一個而不是多個b。例如循環(huán)子路徑a為{l,2,3,b,b,b,5,6},那么a連續(xù)三次經(jīng)過循環(huán)子路徑b,此時a的循環(huán)模式為{1,2,3,b,5,6}。(4)如果存在還未考慮的路徑P的循環(huán)擴展相似路徑(某個路徑的循環(huán)擴展相似路徑是指與該路徑以相同的順序經(jīng)過相同的循環(huán)子路徑,但可能經(jīng)過相同循環(huán)子路徑不同的次數(shù)),則設(shè)定還未考慮過的循環(huán)子路徑的循環(huán)次數(shù)組合后進入步驟(5),否則進入步驟
(2);如果路徑P共有η個循環(huán)子路徑lbl,. . . Ibn,用tl,. . tn分別表示這η個循環(huán)子路徑在循環(huán)擴展相似路徑P’中的循環(huán)次數(shù),那么每個對tl,... tn的一組賦值就對應(yīng)著一個P的可能的循環(huán)擴展相似路徑。在設(shè)定好tl. . . tn的值后進入步驟(5)。如果所有的循環(huán)子路徑的循環(huán)次數(shù)組合都考慮過,則直接進入步驟(2)。(5)根據(jù)步驟(4)的設(shè)定,構(gòu)造路徑P的循環(huán)擴展相似路徑P’ ;構(gòu)造路徑P’包括構(gòu)造路徑P’的路徑約束條件以及經(jīng)過路徑P’后的后置狀態(tài)。本方法首先找出路徑P’經(jīng)過的行號列表,如圖3所示。具體來說根據(jù)步驟(4)的設(shè)定依次賦值tl, . . . tn,將ti (I <= i < = η)設(shè)定為循環(huán)子路徑Ibi的循環(huán)次數(shù),并按照此種設(shè)定計算出對應(yīng)的路徑P’經(jīng)過的行號列表。用一個列表list來記錄路徑ρ’依次經(jīng)過的行號或者循環(huán)子路徑,并將list初始化為top循環(huán)子路徑的循環(huán)模式;然后依次遍歷list中的各個元素e,如果e表示循環(huán)子路徑lbi,則表示循環(huán)子路徑Ibi在路徑P’中的循環(huán)次數(shù)為ti,因此將Ibi的循環(huán)模式迭代ti次后得到的列表替換list中的元素e。依次處理完list中的所有元素后,list記錄了路徑ρ’依次經(jīng)過的行號列表。在得到路徑P’經(jīng)過的行號列表后,本方法構(gòu)造路徑P’的路徑約束和經(jīng)過路徑P’后的后置狀態(tài),如圖4所示。具體步驟為依次遍歷路徑P’經(jīng)過的行號列表,如果行號對應(yīng)的語句帶有effect rule,則根據(jù)該effect rule改變前置狀態(tài);如果行號對應(yīng)的語句能產(chǎn)生分支條件,則產(chǎn)生對應(yīng)的分支條件。當遍歷完list中的所有元素時,本方法得到了路徑P’的所有分支條件,因此得到了路徑P’的路徑約束(所有分支條件的交運算得到的約束條件)。為了保證路徑P’是一條合法的循環(huán)擴展路徑,本方法判斷路徑P’的路徑約束是否是可滿足的。如果P’的路徑約束是不可滿足的,則表明P’是一條非法的路徑,此時返回步驟⑷。(6)檢查經(jīng)過路徑P’的所有狀態(tài),并返回步驟4.圖5描述了本方法靜態(tài)檢測經(jīng)過路徑P’的所有狀態(tài)的流程圖。具體步驟為6a)滿足路徑P’的路徑約束的所有狀態(tài)為經(jīng)過路徑P’的狀態(tài),設(shè)這個狀態(tài)集合為S,。6b)檢測路徑P’的后置狀態(tài)是否滿足測試程序的后置條件,如果后置狀態(tài)不滿足被測程序的后置條件,則本方法打印錯誤信息,并給出反例,然后進入步驟(6c);否則直接進入步驟(6c)。具體來說,本方法檢測工具S’ - > R的合法性,其中S’是表示經(jīng)過路徑ρ’的所有狀態(tài),R表示被測程序的后置條件,該公式成立則表示所有經(jīng)過路徑P’的狀態(tài)的后置狀態(tài)都滿足后置條件R。為了便于該公式的合法性檢測,本方法檢測公式 (S’ - > R)是否有解,如果該公式有解,則表明原公式S’-> R不是恒成立,此時存在某個狀態(tài)未通過檢測,因而發(fā)現(xiàn)反例。 6c)從測試空間S中裁剪所有經(jīng)過路徑P’的狀態(tài)集合S’,并返回步驟5a。從以上的對本方法描述可知,如果本方法在步驟(5d)中給出被測程序的反例,則每個反例發(fā)現(xiàn)被測程序中的一個錯誤,如果在步驟(5d)中未生成任何反例,則表示本方法沒有發(fā)現(xiàn)被測程序中的任何錯誤。
權(quán)利要求
1.一種快速的循環(huán)擴展檢測方法,其步驟為 1)限定測試空間中各個變量的取值范圍,并將測試空間中的狀態(tài)初始化為被測程序限定范圍內(nèi)所有滿足被測程序的前置條件的狀態(tài); 2)從測試空間中隨機挑選一個未檢測的狀態(tài)S,并基于該狀態(tài)s調(diào)用被測程序,記錄該狀態(tài)s經(jīng)過被測程序的執(zhí)行路徑P,以及動態(tài)執(zhí)行信息; 3)根據(jù)所收集的動態(tài)執(zhí)行信息,依次計算并檢測執(zhí)行路徑p的循環(huán)擴展相似路徑p’執(zhí)行靜態(tài)分析,檢查路徑P’的路徑約束條件表示的所有狀態(tài)是否正確;如果所有狀態(tài)都通過檢測,則將這些通過檢測的狀態(tài)從測試空間中裁剪掉;如果存在某個狀態(tài)未通過檢測,則打印該出錯狀態(tài)并給出反例; 4)重復步驟2) 3),直到檢測完測試空間中的所有狀態(tài)。
2.如權(quán)利要求I所述的方法,其特征在于所述將測試空間中的狀態(tài)初始化為被測程序限定范圍內(nèi)所有合法的前置狀態(tài)的方法為將被測程序的前置條件轉(zhuǎn)換為一個求解器YICES可接收的公式,并將該公式加入求解器HCES中,然后將求解器HCES產(chǎn)生的所有解編碼為滿足被測程序前置條件的限定范圍內(nèi)所有狀態(tài)。
3.如權(quán)利要求I所述的方法,其特征在于所述從測試空間中隨機挑選一個未檢測的狀態(tài)s的方法為利用求解器獲取一組對測試空間中的變量的賦值,并將該組賦值編碼為狀 S O
4.如權(quán)利要求I所述的方法,確定是否檢測完測試空間中的所有狀態(tài)的方法為如果求解器不能提供一組對測試空間中的變量的賦值,則確定已檢測完測試空間中的所有狀態(tài)。
5.如權(quán)利要求I所述的方法,其特征在于記錄所述動態(tài)執(zhí)行信息的方法為 a)建立并初始化一列表,用于記錄執(zhí)行路徑依次經(jīng)過的語句行號; b)執(zhí)行程序的第In行語句,首先判斷行號列表中是否已存在行號In;如果存在,則將行號列表中從In開始到列表末尾的子列表記錄為一個循環(huán)子路徑,并為該循環(huán)子路徑分配一個唯一標識,然后將行號列表中的子列表部分用其唯一標識替換,最后將當前執(zhí)行語句的行號In加入行號列表并進入步驟c);如果不存在,則將當前執(zhí)行的行號In直接加入行號列表,并進入步驟c); c)判斷當前語句是否為條件分支語句;如果是,則記錄該條件分支語句產(chǎn)生的分支條件,然后進入步驟e);否則直接進入步驟d); d)判斷當前語句是否會改變前置狀態(tài)的某些值或被測程序的某些局部變量;如果是,則用一個effect rule來記錄該語句對前置狀態(tài)產(chǎn)生的影響,然后進入步驟e);否則直接進入步驟e);其中,effect rule是一個三元組(In, oldValue, newValue), In為行號、oldValue為修改前的變量值、newValue修改后的變量值; e)執(zhí)行下一行語句,直到程序結(jié)束,將整個行號列表記錄為top循環(huán)子路徑; f)執(zhí)行top循環(huán)子路徑,計算所有找到的循環(huán)子路徑的循環(huán)模式。
6.如權(quán)利要求5所述的方法,其特征在于所述動態(tài)執(zhí)行信息包括執(zhí)行過程中遇到的路徑條件、語句的effect rule、此次執(zhí)行經(jīng)過的所有循環(huán)子路徑。
7.如權(quán)利要求I或5或6所述的方法,其特征在于所述根據(jù)所收集的動態(tài)執(zhí)行信息,依次構(gòu)造并檢測執(zhí)行路徑P的每條循環(huán)擴展相似路徑P’的方法為設(shè)路徑P共有n個循環(huán)子路徑Ibl,.. lbn,用tl,. . tn分別表示這n個循環(huán)子路徑的循環(huán)次數(shù);對于tl,. . . tn的每一組賦值對應(yīng)路徑P的一條循環(huán)擴展相似路徑P’。
8.如權(quán)利要求7所述的方法,其特征在于計算所述循環(huán)擴展相似路徑p’的方法為用一個列表list來記錄路徑p’依次經(jīng)過的行號或者循環(huán)子路徑,并將list初始化為top循環(huán)子路徑的循環(huán)模式;然后依次遍歷list中的各個元素e,如果e表示循環(huán)子路徑lbi,則將Ibi的循環(huán)模式迭代ti次后得到的列表替換list中的元素e ;依次處理完list中的所有元素后,list記錄了路徑p’依次經(jīng)過的所有行號,得到路徑p’的行號列表;然后計算路徑P’的路徑約束和經(jīng)過路徑P’的后置狀態(tài)。
9.如權(quán)利要求8所述方法,其特征在于計算所述循環(huán)擴展相似路徑p’的路徑約束和經(jīng)過路徑p’的后置狀態(tài)的方法為依次遍歷路徑P’經(jīng)過的行號列表,如果行號對應(yīng)的語句帶有effect rule,則根據(jù)該effect rule改變前置狀態(tài);如果行號對應(yīng)的語句能產(chǎn)生分支條件,則產(chǎn)生對應(yīng)的分支條件;當遍歷完list中的所有元素時,得到路徑p’的所有分支條件和路徑約束。
10.如權(quán)利要求7所述的方法,其特征在于檢查經(jīng)過路徑p’的狀態(tài)是否正確的方法為 a)設(shè)滿足路徑P’的路徑約束的所有狀態(tài)為經(jīng)過路徑P’的狀態(tài),設(shè)這個狀態(tài)集合為S’; b)檢測是否所有經(jīng)過路徑S’的所有狀態(tài)的后置狀態(tài)都滿足測試程序的后置條件,如果有狀態(tài)未通過檢查,則打印錯誤信息并給出反例,否則,從測試空間中裁剪所有經(jīng)過路徑P’的狀態(tài)集合S’。
全文摘要
本發(fā)明公開了一種快速的循環(huán)擴展檢測方法,屬于軟件模型檢測技術(shù)領(lǐng)域。本方法為1)限定測試空間中各個變量的取值范圍,并將測試空間中的狀態(tài)初始化為被測程序限定范圍內(nèi)所有滿足被測程序的前置條件的狀態(tài);2)隨機挑選一個未檢測的狀態(tài)s,調(diào)用被測程序,記錄該狀態(tài)s經(jīng)過被測程序的執(zhí)行路徑p以及動態(tài)執(zhí)行信息;3)根據(jù)動態(tài)執(zhí)行信息,依次計算并檢測執(zhí)行路徑p的循環(huán)擴展相似路徑p’,檢查路徑p’的路徑約束條件表示的所有狀態(tài)是否正確;如果正確則將這些通過檢測的狀態(tài)從測試空間中裁剪掉;如果未通過檢測,則打印出錯狀態(tài)并給出反例;4)迭代檢查測試空間中的所有狀態(tài)。本方法減少了執(zhí)行的測試用例個數(shù),加快檢測速度。
文檔編號G06F11/36GK102799517SQ20111013779
公開日2012年11月28日 申請日期2011年5月25日 優(yōu)先權(quán)日2011年5月25日
發(fā)明者易秋萍, 劉劍, 沈武威, 汪孫律, 李斌 申請人:中國科學院軟件研究所
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
霍邱县| 芜湖县| 嘉峪关市| 永新县| 陈巴尔虎旗| 桓台县| 汕尾市| 兰考县| 黄龙县| 江阴市| 南丰县| 泰顺县| 紫云| 阳信县| 甘泉县| 白山市| 岳普湖县| 波密县| 鲜城| 九江县| 芦溪县| 永德县| 昂仁县| 谢通门县| 托克逊县| 马关县| 怀远县| 屯留县| 嘉义县| 林西县| 精河县| 元朗区| 鹿邑县| 峨边| 遂川县| 淅川县| 浙江省| 厦门市| 都昌县| 明星| 化隆|