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

基于程序約束構建的多線程程序輸出唯一性檢測與證據生成方法

文檔序號:6552468閱讀:311來源:國知局
基于程序約束構建的多線程程序輸出唯一性檢測與證據生成方法
【專利摘要】一種基于程序約束構建的多線程程序輸出唯一性檢測與證據生成方法,根據多線程程序語義構建約束表達式,將輸出唯一性驗證問題轉化為約束求解問題,采用約束求解器檢測是否存在不同的輸出,并生成說明不同輸出的反例執(zhí)行路徑,首先,插樁被檢測程序,執(zhí)行此程序并得到執(zhí)行路徑;其次,根據多線程程序執(zhí)行語義,將執(zhí)行路徑轉化為無量詞一階邏輯表達式,此約束表達式涵蓋所有可行的線程交織;然后,針對一次運行的輸出結果,構建唯一性驗證條件;最后,利用約束求解器驗證是否存在一條路徑使得輸出值與運行結果不一致,本方法可以檢測出在給定輸入下,多線程程序的輸出是否唯一;如果存在輸出不唯一的情況,則展示出反例序列以說明其觸發(fā)過程。
【專利說明】基于程序約束構建的多線程程序輸出唯一性檢測與證據生成方法

【技術領域】
[0001]本發(fā)明涉及可信軟件及軟件測試領域,特別涉及一種基于程序約束構建的多線程程序輸出唯一性檢測與證據生成方法。

【背景技術】
[0002]隨著多核處理器被普遍應用,編寫性能與結構良好的多線程程序成為釋放多核處理器潛能的重要途徑。調試多線程程序中的隱晦錯誤成為當務之急。對于串行程序,同一輸入,多次執(zhí)行下輸出必定唯一。但是同一輸入下對,于多線程程序的多次執(zhí)行,未必就能產生唯一的輸出。因為多線程程序在每次執(zhí)行過程中都可能會產生不同的線程交織,對程序的執(zhí)行結果也會有不同的影響。所以,如何驗證多線程程序的輸出唯一性,是一個亟待解決的問題。
[0003]然而,驗證多線程程序存在一定的難度,難以重現并行錯誤。多線程程序具有以下幾個特征:1)用戶難以控制所有線程之間的執(zhí)行順序;2)在調試器中使用插裝技術或者斷點調試方法會產生副作用,導致某些錯誤消失;3)由于操作系統(tǒng)與運行時環(huán)境的原因,導致錯誤發(fā)生的序列很少再次發(fā)生;4)線程交織導致的空間狀態(tài)爆炸,例如,對于有η個線程,每個線程執(zhí)行k指令的程序,其交織序列數量可達(nk) ! /(k ! )n>=(n! )k。即使在可控制線程調度的假設下,程序員也無法用窮舉所有線程交織。
[0004]目前,對于多線程程序的測試與驗證已有大量工作,其中包括不確定性測試與模型檢驗等。基于覆蓋標準指導的不確定測試方法,通過檢查每次執(zhí)行中的覆蓋標準集合以確定尚未覆蓋的元素,向程序中插入隨機延遲以增大下次執(zhí)行中覆蓋其他元素的可能性。此外,模型檢驗通過符號化程序狀態(tài)以及遍歷整個狀態(tài)空間,以查找程序中的錯誤狀態(tài)。雖然模型檢驗在一定程度解決了多線程程序的驗證問題,但其具有狀態(tài)空間爆炸問題,導致難以擴展應用到大型復雜軟件系統(tǒng)。


【發(fā)明內容】

[0005]為了克服上述現有技術的缺點,本發(fā)明的目的在于提供一種基于程序約束構建的多線程程序輸出唯一性檢測與證據生成方法,根據多線程程序語義構建約束表達式,將輸出唯一性的驗證問題轉化為約束求解問題,采用約束求解器檢測是否存在不同的輸出,并生成說明不同輸出的反例執(zhí)行路徑。
[0006]為了實現上述目的,本發(fā)明采用的技術方案是:
[0007]—種基于程序約束構建的多線程程序輸出唯一性檢測與證據生成方法,包括如下步驟:
[0008]SI)將監(jiān)控代碼植入待測程序,以記錄程序的執(zhí)行過程;
[0009]S2)在給定輸入下,執(zhí)行已插樁程序,生成路徑記錄文件;
[0010]S3)預處理執(zhí)行路徑以便于約束構建;[0011 ] S4)在程序運行結尾處自動添加屬性條件,針對多線程程序的運行輸出,將輸出唯一性條件P以assert的格式插入程序;
[0012]S5)根據程序執(zhí)行語義將執(zhí)行路徑中狀態(tài)轉移、線程交織關系轉化為無量詞一階邏輯表達式,構建蘊含了所有可能的交織序列的多線程程序執(zhí)行路徑約束模型F ;
[0013]S6)針對唯一性條件P ,利用約束求解器驗證Ρλ ~7?是否有解。
[0014]S7)如果有解,則表示存在多種不同的輸出,并生成證據序列;如果無解,則表示此輸出在此輸入下唯一。
[0015]本發(fā)明進一步的改進在于:所述步驟SI)中插樁工作并非在源碼或者二進制的層面上進行,而是在字節(jié)碼的層面上完成,具體實施方法為:首先將待測多線程程序源碼轉化為中間字節(jié)碼格式,即LLVM字節(jié)碼;然后將具有監(jiān)控功能的語句植入待測程序;最后將植入監(jiān)控代碼的字節(jié)碼鏈接成可執(zhí)行程序。
[0016]本發(fā)明進一步的改進在于:所述步驟S3)中預處理包括提取共享變量以識別出執(zhí)行路徑中公有變量的訪問點以及切片以去除與驗證屬性無關的執(zhí)行語句。
[0017]本發(fā)明進一步的改進在于:所述步驟S4)中自動識別出輸出變量且對其構建輸出唯一性驗證條件P。
[0018]本發(fā)明進一步的改進在于:所述步驟S5)中多線程程序執(zhí)行路徑約束模型F蘊含了執(zhí)行路徑所有可能的交織序列,包括五種約束:路徑表達式、內存模型約束、讀寫關系約束、偏序約束以及同步語義約束,定義分別如下:
[0019]I)路徑表達式:描述線程內部的定義-使用鏈,以及控制線程內部狀態(tài)轉換;
[0020]2)內存模型約束:表示程序中語句、變量之間的關系,采用順序一致性的語義,順序一致性規(guī)定CPU按照代碼中語句的順序來執(zhí)行程序;
[0021]3)讀寫關系約束:定義線程間的定義-使用鏈,規(guī)定共享變量所讀取到的值,必須來自初始值以及最近的寫值;
[0022]4)偏序約束:定義線程之間創(chuàng)建線程與終止線程操作語句于被操作線程語句之間的時序關系;
[0023]5)同步語義約束:定義線程之間同步控制操作語句之間的時序關系;
[0024]其中,定義-使用鏈為:將每一個線程序列轉化為SSA格式,對于每一個SSA格式的執(zhí)行序列,除去共享訪問點都是一個完整的定義-使用鏈。
[0025]本發(fā)明進一步的改進在于:所述步驟S5)中多線程程序執(zhí)行路徑約束模型F的構建方法包括以下操作:
[0026]I)計算路徑表達式,以控制線程內部狀態(tài)轉移;
[0027]2)計算內存模型約束,以線程內限制語句之間的關系;
[0028]3)計算讀寫關系約束,以建立線程間的定義-使用鏈;
[0029]4)計算同步語義約束,以定義線程間同步關系;
[0030]5)計算偏序約束,以描述線程創(chuàng)建與終止的語義;
[0031]最后,結合以上五種約束,構成約束模型F。
[0032]本發(fā)明進一步的改進在于:定義執(zhí)行路徑事件集合Ejr = {Ti\0 < i S Ic},其中k為線程數量,Ti = Ie1, e2,...,ej作為線程i的執(zhí)行序列,en表示Ti的第η個事件,0(en)表示事件en的順序,η表示Ti的事件數量,則:
[0033]所述路徑表達式的計算方法:
[0034]將每一個線程序列轉化為SSA格式,類似于路徑條件(Path Condit1n)的收集,直接將SSA格式序列轉化為路徑表達式;
[0035]所述內存模型約束的計算方法:
[0036]采用順序一致性模型,所有操作完全按程序的順序執(zhí)行,線程內的事件順序符合約束:
[0037]

【權利要求】
1.一種基于程序約束構建的多線程程序輸出唯一性檢測與證據生成方法,其特征在于,包括如下步驟: 51)將監(jiān)控代碼植入待測程序,以記錄程序的執(zhí)行過程; 52)在給定輸入下,執(zhí)行已插樁程序,生成路徑記錄文件; 53)預處理執(zhí)行路徑以便于約束構建; 54)在程序運行結尾處自動添加屬性條件,針對多線程程序的運行輸出,將輸出唯一性條件P以assert的格式插入程序; 55)根據程序執(zhí)行語義將執(zhí)行路徑中狀態(tài)轉移、線程交織關系轉化為無量詞一階邏輯表達式,構建蘊含了所有可能的交織序列的多線程程序執(zhí)行路徑約束模型F ; 56)針對唯一性條件P,利用約束求解器驗illI / P是否有解。 57)如果有解,則表示存在多種不同的輸出,并生成證據序列;如果無解,則表示此輸出在此輸入下唯一。
2.根據權利要求1所述基于程序約束構建的多線程程序輸出唯一性檢測與證據生成方法,其特征在于,所述步驟SI)中插樁工作并非在源碼或者二進制的層面上進行,而是在字節(jié)碼的層面上完成,具體實施方法為:首先將待測多線程程序源碼轉化為中間字節(jié)碼格式,即LLVM字節(jié)碼;然后將具有監(jiān)控功能的語句植入待測程序;最后將植入監(jiān)控代碼的字節(jié)碼鏈接成可執(zhí)行程 序。
3.根據權利要求1所述基于程序約束構建的多線程程序輸出唯一性檢測與證據生成方法,其特征在于,所述步驟S3)中預處理包括提取共享變量以識別出執(zhí)行路徑中公有變量的訪問點以及切片以去除與驗證屬性無關的執(zhí)行語句。
4.根據權利要求1所述基于程序約束構建的多線程程序輸出唯一性檢測與證據生成方法,其特征在于,所述步驟S4)中自動識別出輸出變量且對其構建輸出唯一性驗證條件P O
5.根據權利要求1所述基于程序約束構建的多線程程序輸出唯一性檢測與證據生成方法,其特征在于,所述步驟S5)中多線程程序執(zhí)行路徑約束模型F蘊含了執(zhí)行路徑所有可能的交織序列,包括五種約束:路徑表達式、內存模型約束、讀寫關系約束、偏序約束以及同步語義約束,定義分別如下: 1)路徑表達式:描述線程內部的定義-使用鏈,以及控制線程內部狀態(tài)轉換; 2)內存模型約束:表示程序中語句、變量之間的關系,采用順序一致性的語義,順序一致性規(guī)定CPU按照代碼中語句的順序來執(zhí)行程序; 3)讀寫關系約束:定義線程間的定義-使用鏈,規(guī)定共享變量所讀取到的值,必須來自初始值以及最近的寫值; 4)偏序約束:定義線程之間創(chuàng)建線程與終止線程操作語句于被操作線程語句之間的時序關系; 5)同步語義約束:定義線程之間同步控制操作語句之間的時序關系; 其中,定義-使用鏈為:將每一個線程序列轉化為SSA格式,對于每一個SSA格式的執(zhí)行序列,除去共享訪問點都是一個完整的定義-使用鏈。
6.根據權利要求5所述基于程序約束構建的多線程程序輸出唯一性檢測與證據生成方法,其特征在于,所述步驟S5)中多線程程序執(zhí)行路徑約束模型F的構建方法包括以下操作: 1)計算路徑表達式,以控制線程內部狀態(tài)轉移; 2)計算內存模型約束,以線程內限制語句之間的關系; 3)計算讀寫關系約束,以建立線程間的定義-使用鏈; 4)計算同步語義約束,以定義線程間同步關系; 5)計算偏序約束,以描述線程創(chuàng)建與終止的語義; 最后,結合以上五種約束,構成約束模型F。
7.根據權利要求6所述基于多線程程序約束構建的輸出唯一性驗證方法,其特征在于,定義執(zhí)行路徑事件集合
,其中k為線程數量,Ti = Ie1, e2,...,en}作為線程i的執(zhí)行序列,en表示Ti的第η個事件,0(en)表示事件en的順序,η表示Ti的事件數量,則: 所述路徑表達式的計算方法: 將每一個線程序列轉化為SSA格式,直接將SSA格式序列轉化為路徑表達式; 所述內存模型約束的計算方法: 采用順序一致性模型,所有操作完全按程序的順序執(zhí)行,線程內的事件順序符合約束:
其中61與^+1表示同一線程內連續(xù)的兩個事件,τ表示所有線程序列; 所述讀寫關系約束的計算方法: 使共享變量的讀來自于最近的寫,對于同一共享變量V,令R作為所有對其進行讀操作的事件集合,令W作為所有對其進行寫操作的事件集合,給出以下公式:
其中,er為讀事件,ew與ex為寫事件,vr和vw為事件^與ew所操作的變量,公式所表達的意思是,如果事件^中的 ' 取值來自于事件ew中的vw,首先要滿足^在ew之后,即0(ew) <0(er);然后要滿足所有的寫要么在ew之前,要么在&之后; 所述同步語義約束的計算方法包括lock/unlock與wait/signal兩類操作: 1)lock/unlock操作的目的為構建鎖同步語義約束,要求在同一互斥鎖的lock/unlock集合L中,對于任意兩個lock/unlock事件對=IiAii與lk/uk,須滿足公式:
其中,鎖對IiAii要么發(fā)生在鎖對lk/uk之前,要么發(fā)生在其后; 2)wait/signal操作的目的是構建條件變量同步語義約束,要滿足條件:每一個wait操作必須對應一個signal操作,而一個signal操作至多喚醒一個wait操作,對于同一條件變量cond,令WT作為在cond上所有wait操作的集合,令SG作為在cond上所有signal操作的集合,如要滿足之上的條件,須有以下公式:
其中,ewt為WT中的任一元素,SGwt表示ewt可以匹配的signal操作的集合,esg為SGlrt中任一 signal操作事件,利用變量Pairv^是否等于I來表示esg是否與ewt相匹配。子公式EeeSGwt Pa1-rWt -1表示,對于每一個wait操作ewt必須有一個signal操作與之匹配; 所述偏序約束的計算方法: 首先規(guī)定:如果事件創(chuàng)建一個線程,那么被創(chuàng)建線程的所有事件都要在此事件之后執(zhí)行;如果事件執(zhí)行線程終止操作,那么被終止線程的所有事件都要在此事件之前;令C為create/fork操作的事件集合,令J作為join操作的事件集合;給定約束:
其中,e。為線程創(chuàng)建事件,first (e。)為e。所創(chuàng)建的線程首個事件的順序;&為線程終止事件;last(ep為&所結束的線程末尾事件的順序; 最終將以上五種約束相與構成約束模型F。
8.根據權利要求1所述基于多線程程序約束構建的輸出唯一性驗證方法,其特征在于,所述步驟S6)中 給定約束模型與輸出唯一性屬性條件,利用約束求解器求解屬性條件;如果存在不同的輸出,則生成反例以說明此不同輸出的觸發(fā)過程。
【文檔編號】G06F11/36GK104077226SQ201410320129
【公開日】2014年10月1日 申請日期:2014年7月7日 優(yōu)先權日:2014年7月7日
【發(fā)明者】劉烴, 張曉東, 劉沛, 俞樂晨, 鄭慶華 申請人:西安交通大學
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
志丹县| 上饶县| 龙泉市| 江津市| 华宁县| 肥城市| 美姑县| 禹州市| 威海市| 英吉沙县| 德安县| 衡阳市| 满洲里市| 漳州市| 手机| 尚志市| 探索| 泊头市| 竹北市| 咸阳市| 城步| 宁武县| 尖扎县| 玉林市| 濮阳市| 阜平县| 昌平区| 周口市| 高邑县| 方正县| 呼和浩特市| 二连浩特市| 九龙坡区| 沛县| 黄陵县| 商河县| 双城市| 武平县| 遵义县| 嘉义县| 仙游县|