本發(fā)明主要涉及軟件測(cè)試技術(shù)領(lǐng)域,具體涉及一種基于Actor模型的并行動(dòng)態(tài)符號(hào)執(zhí)行方法和系統(tǒng)。
背景技術(shù):
1976年提出的符號(hào)執(zhí)行技術(shù),是一種靜態(tài)的軟件分析方法,它用符號(hào)值代替了具體值作為程序的輸入,主要用來(lái)進(jìn)行軟件路徑探索、測(cè)試用例生成和軟件缺陷檢測(cè)。動(dòng)態(tài)符號(hào)執(zhí)行是在符號(hào)執(zhí)行發(fā)展過(guò)程中提出的一種方法,它結(jié)合了具體執(zhí)行和符號(hào)執(zhí)行的優(yōu)點(diǎn),在某些情況下,符號(hào)執(zhí)行進(jìn)行路徑探索時(shí)路徑約束可能無(wú)法求解出具體值,不能繼續(xù)路徑探索,這時(shí)利用動(dòng)態(tài)符號(hào)執(zhí)行就可以通過(guò)其具體執(zhí)行來(lái)解決這個(gè)問題。
傳統(tǒng)的符號(hào)執(zhí)行方式效率已經(jīng)無(wú)法應(yīng)對(duì)由于軟件規(guī)模擴(kuò)大而帶來(lái)的軟件復(fù)雜性。用傳統(tǒng)的符號(hào)執(zhí)行方式,對(duì)目前規(guī)模龐大,邏輯復(fù)雜的程序進(jìn)行路徑探索時(shí),效率很低,耗時(shí)很長(zhǎng)。這給符號(hào)執(zhí)行在軟件測(cè)試用例生成和缺陷檢測(cè)方面的實(shí)用性帶來(lái)了很大的挑戰(zhàn)。因此效率問題已經(jīng)成為了符號(hào)執(zhí)行研究的熱點(diǎn)
目前存在的解決辦法:
(1)第一是考慮在探索路徑收集路徑約束時(shí)并行化:如Cloud9平臺(tái),其由一個(gè)負(fù)載均衡器和一群節(jié)點(diǎn)組成,每次路徑探索都由負(fù)載均衡器協(xié)調(diào)多節(jié)點(diǎn)進(jìn)行并行化路徑探索。2010年Stats提出的一種基于Java PathFinder(JPF)并行隨機(jī)搜索路徑樹的符號(hào)執(zhí)行方法。符號(hào)執(zhí)行過(guò)程中,由JPF先計(jì)算出一個(gè)不相交路徑的集合,當(dāng)其作為某個(gè)節(jié)點(diǎn)探索路徑樹的前置條件時(shí),每個(gè)節(jié)點(diǎn)都會(huì)被引導(dǎo)去搜索執(zhí)行所有路徑互不相交的子集。這種方法是靜態(tài)分配路徑,總的執(zhí)行時(shí)間是由執(zhí)行最大子集的節(jié)點(diǎn)決定的。但是Cloud9在執(zhí)行的過(guò)程中需要維護(hù)整棵符號(hào)執(zhí)行樹,路徑搜索消耗大量多余時(shí)間,此外,Cloud9是針對(duì)經(jīng)典的符號(hào)執(zhí)行工具而非動(dòng)態(tài)符號(hào)執(zhí)行,在任務(wù)的產(chǎn)生和分配機(jī)制上與本文是不同的。
(2)第二是考慮在約束求解方面實(shí)現(xiàn)并行化:由Quoc-Sang Phan等人提出的Concurrent Bounded Model Checking(CBMC)方法,是由多線程實(shí)現(xiàn)的,在主線程進(jìn)行路徑探索時(shí),其收集的路徑約束并不進(jìn)行約束求解,而是等到路徑探索完成后,對(duì)其結(jié)構(gòu)進(jìn)行分析轉(zhuǎn)化成一系列不相交的約束子集用多線程并發(fā)求解,這種方法可以提高求解效率,但缺點(diǎn)是其并不是真正的并行,而且在所有路徑探索完成后才開始約束求解分析,浪費(fèi)了中間的等待時(shí)間,降低了整體的效率
在上述方法(1)中存在一個(gè)主要問題是維護(hù)的樹問題,既在多節(jié)點(diǎn)執(zhí)行任務(wù)時(shí),該方法需要維護(hù)一整棵符號(hào)執(zhí)行樹,這樣在探索的時(shí)候需要消耗大量的多余時(shí)間,此外,此方法是基于經(jīng)典符號(hào)執(zhí)行工具而言,不能針對(duì)動(dòng)態(tài)符號(hào)執(zhí)行工具而言,這樣任務(wù)產(chǎn)生和分配需要浪費(fèi)大量系統(tǒng)資源和時(shí)間。方法(2)中求解時(shí)采用并行技術(shù),將各條路徑的約束分配到多個(gè)節(jié)點(diǎn)進(jìn)行求解,但是該方法只針對(duì)的是模型檢測(cè)的應(yīng)用場(chǎng)景,只對(duì)約束求解過(guò)程進(jìn)行并行。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是針對(duì)現(xiàn)有技術(shù)的不足,提供一種基于Actor模型的并行動(dòng)態(tài)符號(hào)執(zhí)行方法和系統(tǒng)。
本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:一種基于Actor模型的并行動(dòng)態(tài)符號(hào)執(zhí)行方法,包括如下步驟:
步驟A:將動(dòng)態(tài)符號(hào)執(zhí)行工具的執(zhí)行方式設(shè)置為滿足并行框架執(zhí)行的需求;
步驟B:在Actor模型的并行框架中配置用于管理并行框架中各工作節(jié)點(diǎn)通訊的通訊節(jié)點(diǎn),并將配置后的并行框架合并到修改后的動(dòng)態(tài)符號(hào)執(zhí)行工具中;
步驟C:Actor模型的多個(gè)工作節(jié)點(diǎn)通過(guò)通訊節(jié)點(diǎn)從預(yù)先構(gòu)造的待求解路徑棧中取出任務(wù),并根據(jù)任務(wù)探索器獲取所述任務(wù)的任務(wù)路徑約束值;
步驟D:利用約束求解器對(duì)所述任務(wù)路徑約束值進(jìn)行求解,得到求解值Valuation;
步驟E:將求解值Valuation采用遞歸方式來(lái)代入所述待求解路徑棧中的路徑,生成待探索路徑,將待探索路徑存入預(yù)先構(gòu)造的待探索路徑棧中。
本發(fā)明的有益效果是:提出一種并行動(dòng)態(tài)符號(hào)執(zhí)行方法,實(shí)現(xiàn)了兩個(gè)層面上的并行,可以在多個(gè)節(jié)點(diǎn)上并行分析程序路徑,實(shí)現(xiàn)動(dòng)態(tài)的負(fù)載均衡,可同次進(jìn)行約束求解和路徑探索,降低程序耗時(shí),進(jìn)一步提高了效率,還可以加強(qiáng)測(cè)試大規(guī)模程序的能力,結(jié)合了Actor傳統(tǒng)并發(fā)模型,實(shí)現(xiàn)了節(jié)點(diǎn)之間的相互通信。
在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn)。
進(jìn)一步,還包括步驟F:根據(jù)待探索路徑生成待測(cè)程序的測(cè)試用例,根據(jù)測(cè)試用例檢測(cè)待測(cè)程序中的漏洞。
采用上述進(jìn)一步方案的有益效果是:具有測(cè)試大規(guī)模程序的能力。
進(jìn)一步,所述步驟A包括:所述動(dòng)態(tài)符號(hào)執(zhí)行工具為Jdar工具,將動(dòng)態(tài)符號(hào)執(zhí)行工具Jdar的模式設(shè)置為每次處理完一條路徑即結(jié)束的模式來(lái)滿足并行框架執(zhí)行的需求;
動(dòng)態(tài)符號(hào)執(zhí)行工具Jdar原來(lái)的執(zhí)行方式為循環(huán)執(zhí)行直到所有路徑分析探索完成后結(jié)束的模式,需要將其模式修改為每次只分析探索一條路徑就結(jié)束的模式,即單例模式,每次返回一條程序的測(cè)試路徑;原始約束求解與對(duì)路徑樹的維護(hù)是一起工作的,將其拆分開了獨(dú)立執(zhí)行并行調(diào)度模TaskCenter與Solver來(lái)承擔(dān)相應(yīng)工作。
采用上述進(jìn)一步方案的有益效果是:將動(dòng)態(tài)符號(hào)執(zhí)行工具Jdar修改為單例模式能夠和Actor模型實(shí)現(xiàn)合并。
進(jìn)一步,所述步驟B包括:在Actor模型的并行框架中配置通訊節(jié)點(diǎn)Master,所述通訊節(jié)點(diǎn)Master用于管理并行框架中各工作節(jié)點(diǎn)通訊和信息交互,并將已配置通訊節(jié)點(diǎn)的并行框架合并到修改后的動(dòng)態(tài)符號(hào)執(zhí)行工具的框架中,得到并行動(dòng)態(tài)執(zhí)行工具。
Actor是一種高性能的并行框架,將其配置到動(dòng)態(tài)符號(hào)執(zhí)行工具Jdar的框架中;
Actor模型雖然是并發(fā)模型,但是并不能滿足動(dòng)態(tài)符號(hào)執(zhí)行的需求,在Actor框架中配置至少一個(gè)通訊節(jié)點(diǎn)Master,讓其來(lái)管理Actor消息的交互,命名為Remote Actor,啟動(dòng)Remote Actor來(lái)執(zhí)行消息交互任務(wù)。
進(jìn)一步,所述步驟C包括:?jiǎn)?dòng)并行動(dòng)態(tài)執(zhí)行工具中Actor模型的多個(gè)工作節(jié)點(diǎn),所述多個(gè)工作節(jié)點(diǎn)從預(yù)先構(gòu)造的待求解路徑棧中取出任務(wù)并將任務(wù)傳遞給任務(wù)探索器,所述任務(wù)探索器包括動(dòng)態(tài)探索器和搜索器,動(dòng)態(tài)探索器將任務(wù)中的并行任務(wù)重新分配給多個(gè)工作節(jié)點(diǎn),搜索器在任務(wù)分配后的多個(gè)工作節(jié)點(diǎn)中獲取任務(wù)路徑約束值。
采用上述進(jìn)一步方案的有益效果是:通過(guò)動(dòng)態(tài)和靜態(tài)的方式獲取工作節(jié)點(diǎn)上的任務(wù)的任務(wù)路徑約束值。
進(jìn)一步,所述步驟D包括:
步驟D1:將任務(wù)路徑約束值保存在預(yù)先構(gòu)造的約束求解值棧中;
步驟D2:將待求解路徑棧中的任務(wù)分割為多個(gè)任務(wù)片段,將任務(wù)片段分別與約束求解值棧中的任務(wù)路徑約束值進(jìn)行比對(duì),如果相同,則執(zhí)行步驟D3,否則執(zhí)行步驟D4;
步驟D3:從與任務(wù)路徑約束值相同的任務(wù)片段中提取參數(shù)值A(chǔ);
步驟D4:利用約束求解器Z3對(duì)該任務(wù)片段進(jìn)行求解,將求解數(shù)值記為B;
步驟D5:將各參數(shù)值A(chǔ)和各求解數(shù)值B進(jìn)行集合,得到數(shù)組[A,B],將數(shù)組[A,B]作為求解值Valuation。
進(jìn)一步,所述步驟E的具體步驟為:
步驟E1:將求解值Valuation采用遞歸方式依次代入待求解路徑棧的每條路徑,如果可滿足當(dāng)前路徑,則生成待探索路徑,再執(zhí)行下一條路徑,否則利用約束求解器Z3對(duì)求解值Valuation進(jìn)行約束求解;
步驟E2:將待探索路徑存入預(yù)先構(gòu)造的待探索路徑棧中。
采用上述進(jìn)一步方案的有益效果是:將求解值Valuation作為一組新值代入待求解路徑棧的任務(wù)隊(duì)列中,能夠使測(cè)試更準(zhǔn)確,加強(qiáng)了測(cè)試大規(guī)模程序的能力。
本發(fā)明解決上述技術(shù)問題的另一技術(shù)方案如下:一種基于Actor模型的并行動(dòng)態(tài)符號(hào)執(zhí)行系統(tǒng),包括:
設(shè)置模塊,用于將動(dòng)態(tài)符號(hào)執(zhí)行工具的執(zhí)行方式設(shè)置為滿足并行框架執(zhí)行的需求;
合并模塊,用于在Actor模型的并行框架中配置用于管理并行框架中各工作節(jié)點(diǎn)通訊的通訊節(jié)點(diǎn),并將配置后的并行框架合并到修改后的動(dòng)態(tài)符號(hào)執(zhí)行工具中;
任務(wù)求解模塊,用于Actor模型的多個(gè)工作節(jié)點(diǎn)從預(yù)先構(gòu)造的待求解路徑棧中取出任務(wù),并根據(jù)任務(wù)探索器獲取所述任務(wù)的任務(wù)路徑約束值;
求解模塊,用于利用約束求解器對(duì)所述任務(wù)路徑約束值進(jìn)行求解,得到求解值Valuation;
任務(wù)探索模塊,用于將求解值Valuation采用遞歸方式來(lái)代入所述待求解路徑棧中的路徑,生成待探索路徑,將待探索路徑存入預(yù)先構(gòu)造的待探索路徑棧中。
在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn)。
進(jìn)一步,還包括檢測(cè)模塊,根據(jù)待探索路徑生成待測(cè)程序的測(cè)試用例,根據(jù)測(cè)試用例檢測(cè)待測(cè)程序中的漏洞。
本發(fā)明還提出了一種并行動(dòng)態(tài)符號(hào)執(zhí)行系統(tǒng),實(shí)現(xiàn)了兩個(gè)層面上的并行,可以在多個(gè)節(jié)點(diǎn)上并行分析程序路徑,實(shí)現(xiàn)動(dòng)態(tài)的負(fù)載均衡,可同次進(jìn)行約束求解和路徑探索,降低程序耗時(shí),進(jìn)一步提高了效率,還可以加強(qiáng)測(cè)試大規(guī)模程序的能力,結(jié)合了Actor傳統(tǒng)并發(fā)模型,實(shí)現(xiàn)了節(jié)點(diǎn)之間的相互通信。
附圖說(shuō)明
圖1為本發(fā)明實(shí)施例提供的基于Actor模型的并行動(dòng)態(tài)符號(hào)執(zhí)行方法的方法流程圖;
圖2為本發(fā)明實(shí)施例提供的基于Actor模型的并行動(dòng)態(tài)符號(hào)執(zhí)行系統(tǒng)的模塊框圖。
具體實(shí)施方式
以下結(jié)合附圖對(duì)本發(fā)明的原理和特征進(jìn)行描述,所舉實(shí)例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。
圖1為本發(fā)明實(shí)施例提供的基于Actor模型的并行動(dòng)態(tài)符號(hào)執(zhí)行方法的方法流程圖;
如圖1所示,一種基于Actor模型的并行動(dòng)態(tài)符號(hào)執(zhí)行方法,包括如下步驟:
步驟A:將動(dòng)態(tài)符號(hào)執(zhí)行工具的執(zhí)行方式設(shè)置為滿足并行框架執(zhí)行的需求;
步驟B:在Actor模型的并行框架中配置用于管理并行框架中各工作節(jié)點(diǎn)通訊的通訊節(jié)點(diǎn),并將配置后的并行框架合并到修改后的動(dòng)態(tài)符號(hào)執(zhí)行工具中;
步驟C:Actor模型的多個(gè)工作節(jié)點(diǎn)通過(guò)通訊節(jié)點(diǎn)從預(yù)先構(gòu)造的待求解路徑棧中取出任務(wù),并根據(jù)任務(wù)探索器獲取所述任務(wù)的任務(wù)路徑約束值;
步驟D:利用約束求解器對(duì)所述任務(wù)路徑約束值進(jìn)行求解,得到求解值Valuation;
步驟E:將求解值Valuation采用遞歸方式來(lái)代入所述待求解路徑棧中的路徑,生成待探索路徑,將待探索路徑存入預(yù)先構(gòu)造的待探索路徑棧中。
上述實(shí)施例中,提出一種并行動(dòng)態(tài)符號(hào)執(zhí)行方法,實(shí)現(xiàn)了兩個(gè)層面上的并行,可以在多個(gè)節(jié)點(diǎn)上并行分析程序路徑,實(shí)現(xiàn)動(dòng)態(tài)的負(fù)載均衡,可同次進(jìn)行約束求解和路徑探索,降低程序耗時(shí),進(jìn)一步提高了效率,還可以加強(qiáng)測(cè)試大規(guī)模程序的能力,結(jié)合了Actor傳統(tǒng)并發(fā)模型,實(shí)現(xiàn)了節(jié)點(diǎn)之間的相互通信。
可選地,作為本發(fā)明的一個(gè)實(shí)施例,還包括步驟F:根據(jù)待探索路徑生成待測(cè)程序的測(cè)試用例,根據(jù)測(cè)試用例檢測(cè)待測(cè)程序中的漏洞。
上述實(shí)施例中,具有測(cè)試大規(guī)模程序的能力。
下面詳細(xì)描述構(gòu)造待求解路徑棧和待探索路徑棧的實(shí)施過(guò)程:
將探索出來(lái)的路徑任務(wù)添加到待求解任務(wù)棧中等待工作節(jié)點(diǎn)取任務(wù)求解;
將取出來(lái)的路徑任務(wù)求解完成,生成對(duì)應(yīng)測(cè)試用例和待探索任務(wù),并且將待探索任務(wù)存入待探索任務(wù)棧中,待工作節(jié)點(diǎn)取相應(yīng)任務(wù)探索;
在待探索任務(wù)棧中取任務(wù)進(jìn)行探索,在待求解任務(wù)棧中取任務(wù)進(jìn)行求解,并且生成待探索任務(wù),存入待探索任務(wù)棧。
可選地,作為本發(fā)明的一個(gè)實(shí)施例,實(shí)現(xiàn)步驟A的具體方法為:所述動(dòng)態(tài)符號(hào)執(zhí)行工具為Jdar工具,將動(dòng)態(tài)符號(hào)執(zhí)行工具Jdar的模式修改為每次處理完一條路徑即結(jié)束的模式來(lái)滿足并行框架執(zhí)行的需求;
動(dòng)態(tài)符號(hào)執(zhí)行工具Jdar原來(lái)的執(zhí)行方式為循環(huán)執(zhí)行直到所有路徑分析探索完成后結(jié)束的模式,需要將其模式修改為每次只分析探索一條路徑就結(jié)束的模式,即單例模式,每次返回一條程序的測(cè)試路徑;原始約束求解與對(duì)路徑樹的維護(hù)是一起工作的,將其拆分開了獨(dú)立執(zhí)行并行調(diào)度模TaskCenter與Solver來(lái)承擔(dān)相應(yīng)工作。
上述實(shí)施例中,將動(dòng)態(tài)符號(hào)執(zhí)行工具Jdar修改為單例模式能夠和Actor模型實(shí)現(xiàn)合并。
可選地,作為本發(fā)明的一個(gè)實(shí)施例,實(shí)現(xiàn)步驟B的具體方法為:在Actor模型的并行框架中配置通訊節(jié)點(diǎn)Master,所述通訊節(jié)點(diǎn)Master用于管理并行框架中各工作節(jié)點(diǎn)通訊和信息交互,并將已配置通訊節(jié)點(diǎn)的并行框架合并到修改后的動(dòng)態(tài)符號(hào)執(zhí)行工具的框架中,得到并行動(dòng)態(tài)執(zhí)行工具。
Actor是一種高性能的并行框架,將其配置到動(dòng)態(tài)符號(hào)執(zhí)行工具Jdar的框架中;
Actor模型雖然是并發(fā)模型,但是并不能滿足動(dòng)態(tài)符號(hào)執(zhí)行的需求,在Actor框架中配置至少一個(gè)通訊節(jié)點(diǎn)Master,讓其來(lái)管理Actor消息的交互,命名為Remote Actor,啟動(dòng)Remote Actor來(lái)執(zhí)行消息交互任務(wù)。
可選地,作為本發(fā)明的一個(gè)實(shí)施例,實(shí)現(xiàn)步驟C的具體方法為:?jiǎn)?dòng)并行動(dòng)態(tài)執(zhí)行工具中Actor模型的多個(gè)工作節(jié)點(diǎn),所述多個(gè)工作節(jié)點(diǎn)從預(yù)先構(gòu)造的待求解路徑棧中取出任務(wù)并將任務(wù)傳遞給任務(wù)探索器,所述任務(wù)探索器包括動(dòng)態(tài)探索器和搜索器,動(dòng)態(tài)探索器將任務(wù)中的并行任務(wù)重新分配給多個(gè)工作節(jié)點(diǎn),搜索器在任務(wù)分配后的多個(gè)工作節(jié)點(diǎn)中獲取任務(wù)路徑約束值。
上述實(shí)施例中,通過(guò)動(dòng)態(tài)和靜態(tài)的方式獲取工作節(jié)點(diǎn)上的任務(wù)的任務(wù)路徑約束值。
具體的,在該實(shí)施例中,搜索器啟動(dòng)前,動(dòng)態(tài)符號(hào)執(zhí)行工具(Jdar)已運(yùn)行并產(chǎn)生valuation值,將valuation值傳入搜索器中進(jìn)行初始化。
下面詳細(xì)描述該實(shí)施例的實(shí)施過(guò)程:
啟動(dòng)Remote Actor模型,啟動(dòng)多個(gè)工作節(jié)點(diǎn):Worker1、Worker2等;
啟動(dòng)動(dòng)態(tài)符號(hào)執(zhí)行工具(Jdar);
判斷Jdart是不是為空,如果是則重新運(yùn)行Jdart,否則接著執(zhí)行符號(hào)執(zhí)行操作;
若Jdart不為空,新建一個(gè)Jdart Analysis,并且啟動(dòng)分析,然后將工作節(jié)點(diǎn)對(duì)象傳遞給動(dòng)態(tài)探索器,并且使用傳入的valuation值初始化搜索器中的值,執(zhí)行分析,將分析結(jié)果存入待分析隊(duì)列,然后判斷分析隊(duì)列是否為空;
若分析隊(duì)列為空,則返回空值,表示不存在分析任務(wù),否則從待分析隊(duì)列中取出任務(wù)進(jìn)行分析;
還可以設(shè)置一個(gè)用于檢測(cè)待分析隊(duì)列是否存在分析任務(wù)的監(jiān)聽器。執(zhí)行該監(jiān)聽器,重置當(dāng)前節(jié)點(diǎn),準(zhǔn)備接下來(lái)進(jìn)行探索路徑的獲取工作。
可選地,作為本發(fā)明的一個(gè)實(shí)施例,實(shí)現(xiàn)步驟D的具體步驟為:
步驟D1:將任務(wù)路徑約束值保存在預(yù)先構(gòu)造的約束求解值棧中;
步驟D2:多個(gè)工作節(jié)點(diǎn)通過(guò)通訊節(jié)點(diǎn)從待求解路徑棧中取出任務(wù);將任務(wù)分割為多個(gè)任務(wù)片段,將任務(wù)片段分別與約束求解值棧中的任務(wù)路徑約束值進(jìn)行比對(duì),如果相同,則執(zhí)行步驟D3,否則執(zhí)行步驟D4;
步驟D3:從與任務(wù)路徑約束值相同的任務(wù)片段中提取參數(shù)值A(chǔ);
步驟D4:利用約束求解器Z3對(duì)該任務(wù)片段進(jìn)行求解,將求解數(shù)值記為B;
步驟D5:將各參數(shù)值A(chǔ)和各求解數(shù)值B進(jìn)行集合,得到數(shù)組[A,B],將數(shù)組[A,B]作為求解值Valuation。
實(shí)現(xiàn)步驟E的具體步驟為:
步驟E1:將求解值Valuation采用遞歸方式依次執(zhí)行待求解路徑棧的每條路徑,如果可滿足當(dāng)前路徑,則生成待探索路徑,再執(zhí)行下一條路徑,否則利用約束求解器Z3對(duì)求解值Valuation進(jìn)行約束求解;下次操作時(shí),程序使用該約束求解值執(zhí)行下一條路徑;
步驟E2:將待探索路徑存入預(yù)先構(gòu)造的待探索路徑棧中。
上述實(shí)施例中,將求解值Valuation作為一組新值代入待求解路徑棧的任務(wù)隊(duì)列中,能夠使測(cè)試更準(zhǔn)確,加強(qiáng)了測(cè)試大規(guī)模程序的能力。
圖2為本發(fā)明實(shí)施例提供的基于Actor模型的并行動(dòng)態(tài)符號(hào)執(zhí)行系統(tǒng)的模塊框圖。
可選地,作為本發(fā)明的另一個(gè)實(shí)施例,如圖2所示,一種基于Actor模型的并行動(dòng)態(tài)符號(hào)執(zhí)行系統(tǒng),包括:
設(shè)置模塊,用于將動(dòng)態(tài)符號(hào)執(zhí)行工具的執(zhí)行方式設(shè)置為滿足并行框架執(zhí)行的需求;
合并模塊,用于在Actor模型的并行框架中配置用于管理并行框架中各工作節(jié)點(diǎn)通訊的通訊節(jié)點(diǎn),并將配置后的并行框架合并到修改后的動(dòng)態(tài)符號(hào)執(zhí)行工具中;
任務(wù)求解模塊,用于Actor模型的多個(gè)工作節(jié)點(diǎn)從預(yù)先構(gòu)造的待求解路徑棧中取出任務(wù),并根據(jù)任務(wù)探索器獲取所述任務(wù)的任務(wù)路徑約束值;
求解模塊,用于利用約束求解器對(duì)所述任務(wù)路徑約束值進(jìn)行求解,得到求解值Valuation;
任務(wù)探索模塊,用于將求解值Valuation采用遞歸方式來(lái)代入所述待求解路徑棧中的路徑,生成待探索路徑,將待探索路徑存入預(yù)先構(gòu)造的待探索路徑棧中。
可選地,作為本發(fā)明的一個(gè)實(shí)施例,還包括檢測(cè)模塊,根據(jù)待探索路徑生成待測(cè)程序的測(cè)試用例,根據(jù)測(cè)試用例檢測(cè)待測(cè)程序中的漏洞。
本發(fā)明還提出了一種并行動(dòng)態(tài)符號(hào)執(zhí)行系統(tǒng),實(shí)現(xiàn)了兩個(gè)層面上的并行,可以在多個(gè)節(jié)點(diǎn)上并行分析程序路徑,實(shí)現(xiàn)動(dòng)態(tài)的負(fù)載均衡,可同次進(jìn)行約束求解和路徑探索,降低程序耗時(shí),進(jìn)一步提高了效率,還可以加強(qiáng)測(cè)試大規(guī)模程序的能力,結(jié)合了Actor傳統(tǒng)并發(fā)模型,實(shí)現(xiàn)了節(jié)點(diǎn)之間的相互通信。
以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。