999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于程序局部性引導的有界模型檢測優化方法

2018-04-19 05:42:08王舜杜曄韓臻劉吉強
通信學報 2018年3期
關鍵詞:程序檢測方法

王舜,杜曄,韓臻,劉吉強

?

基于程序局部性引導的有界模型檢測優化方法

王舜,杜曄,韓臻,劉吉強

(北京交通大學智能交通數據安全與隱私保護技術北京市重點實驗室,北京 100044)

基于多種模型檢測方法組合的復合檢測方式是當前軟件模型檢測領域開展研究的熱點之一。在當前的研究中,提高檢測的規模和檢測的對象復雜程度的關鍵在于如何有效處理抽象的擴張和收縮。證明通過對程序模式或驗證信息的利用可以加快狀態空間的探索速度。面向有界模型檢測(BMC)加速方法展開研究,使用程序中額外的信息和知識對其處理以協助檢測器刪除冗余和無效的狀態。在對程序局部性進行定義的基礎上,對其加速性進行討論,提出一種加速有界檢測的方法和一種改進策略,對算法進行了詳細描述,并通過實驗驗證了方法在檢測效率和性能上的優越性。

模型檢測;BMC;軟件檢測;局部性;優化

1 引言

軟件模型檢測是提高軟件可靠性的一種非常重要的方法。在工業環境中,一些對于軟件可靠性要求高的安全苛求系統已大量地使用這種方法。軟件模型檢測是基于程序的形式化理論發展出的一種技術,它的基本思想是對當前需要檢測程序的整體狀態空間進行遍歷,從而尋找其中是否包含問題狀態。對于使用基本的遍歷思想來檢測程序的方法來講,狀態空間爆炸使它在很小的程序上都會耗盡其所有的運算和存儲資源,因此,這種檢測方法并不具備成規模的實用性。

針對上述問題,現代的軟件模型檢測方法使用了多重的優化策略來緩解,這些策略可以按照枚舉型和推理型來進行分類[1,2],2種類型分別體現了具象和抽象的邏輯思想。而隨著研究的進展和深入,很多新的研究使用了同時綜合2種方法特征的混合策略。特別是隨著近年來各種各樣的方法被陸續提出,研究者逐漸發現,區分和指導各種方法的根本不同在于如何使用源代碼中的信息來引導狀態空間的搜索。當然與之相對地,還可以通過表象對軟件模型檢測的方法進行分類,例如,模型檢測算法是否有界。

有界模型檢測器(BMC)是一種常見的和使用廣泛的軟件模型檢測工具。在近幾年的相關研究中,已經有不少基于其思想的成熟的實現,如文獻[3~7]。使用有界模型檢測器對程序進行檢測的實踐可能會因為使用了不合適的參數而導致檢測無法完成或檢測失敗。同時,由于其原理的制約,這種檢測方法也無法直接對整個程序的狀態空間進行檢測。從這個角度來講,阻礙有界模型檢測對大規模代碼進行檢測的障礙之一在于缺乏一種有效的將代碼分解為可以檢測的片段并且自動引導檢測器來進行檢驗的方法。

SAT求解問題是另一個更加基礎的研究領域,需要求解的SAT問題同樣是類似的會引起狀態爆炸的NP完全問題。在這個研究領域中,前向—后向搜索是常用的加速求解的方法之一,而最為經典的SAT前向—后向搜索算法的實現則是DPLL算法[8]。這種算法的核心思想是,在遍歷搜索時記憶和學習關于邏輯樹的結構信息,并使用這個信息來指導新一輪的搜索。在整個SAT求解器的研究領域中,大量的優化方法都采用了類似的思路為指導,也就是使用在有限的搜索中發現的信息來縮減后續的搜索樹,或選擇最優的后續搜索。基于先驗信息的啟發式算法[9~12]是另一類常用的優化方法。與前一類方法相比,它最大的不同是并不能保證總是有效。但是相對地,啟發式算法在狀態空間的規模和邏輯復雜度快速增長的情況下是一種更有潛力的方法。

最后,程序在設計和運行中具有一個非常本質和重要的特征,即程序的局部性。在調研中,當前模型檢測領域并沒有相關研究聚焦在程序的局部性和模型檢測的優化結合以及程序的局部性對模型檢測加速的可能性上。因此,本文主要研究聚焦以上層面。首先,本文給出了一種可能的程序局部性形式化定義,然后,設計了一個策略來對程序進行劃分,并提出了一種算法自動化地使用這種劃分來指導有界模型檢測器的自動運行,最后,通過實驗驗證了本文方法在加速有界模型檢測器對程序的檢測上具有較為明顯作用。

2 相關工作

近年來,大量的研究關注和聚焦了模型檢測和模型檢測的相關算法和應用。其中,基于邏輯的枚舉和基于邏輯的推理是2種重要的類型。在這些研究中,最為活躍和引人注目的部分集中在以下2個方向:1) 基于推理的模型檢測方法,包括基于符號演算的模型檢測方法;2) 不同模型檢測方法的可組裝性的研究。

其中,第一類研究方向使用歸結原理和插值規則通過定理證明的方法[13~15]來進行模型檢測。另外,還有一些研究設計并實現了一類框架[16~19],并在這類框架下實現了基于前向—后向搜索的遍歷式模型檢測方法。這類方法的基本思想是將目標狀態空間簡化為一類抽象狀態空間,并在其上進行檢測。在這類框架之上,文獻[20,21]設計了一種懶惰方法,它是針對狀態展開的優化,使算法在展開狀態時不需要一次性完全展開,而是按照需要展開必要的層數,從而避免狀態空間一次性展開過大。最后,文獻[22~24]的研究則著眼于設計和實施一套全新的軟件模型檢測方法。

第二類研究方向中包含了一類構建通用的模型檢測方法基礎的理論以及其相關的實現,它們都基于一套可以嵌入和組合大量不同方法的基礎框架之上。文獻[25~30]是其中非常重要的組成部分。它們建立了一個稱為CPA的模型檢測框架。這個框架實際上是一個基于格的狀態抽象,在這個抽象之上,使用融合、加強以及停止運算符來將各種算法組合在一起。除了這些工作以外,文獻[31]使用了另一種上近似和下近似結合的方法來對不同的模型檢測方法進行組合。

本文方法是一類組合方法,但是其手段并非直接組合已有的方法,而是結合第一類的研究和第二類的研究,提出一種基于新的局部性啟發式檢測加速方法。

3 基本模型

3.1 程序模型

為了簡化問題的分析和討論,本文使用一個簡單程序模型來表示需要檢測輸入的程序抽象。這個模型是一個基于簡單命令式程序語言的擴展,使用這個模型可以描述C語言的邏輯結構,而其他的細節則直接交給BMC工具處理即可。

一個簡單命令式程序包含了一系列的操作符,這些操作符包括:賦值操作符、假設操作符、整形變量。簡單命令式程序的描述細節可以參考文獻[1]。這里對簡單命令式程序進行一個擴展,使其可以滿足對本文形式化描述的要求,其包含了一些額外的程序結構:函數、分支、循環。它可以通過分支循環展開和函數嵌入的方式很容易地轉換回經典的簡單命令式程序。實際上,可以通過這個擴展給基礎定義添加一些高級結構。

一個帶條件語句的命令式程序可以轉換為一個簡單命令式程序,這個轉換可以通過合取條件變量(以中的元素為變量的布爾表達式)與賦值表達式來獲得。

循環語句的處理比條件語句要稍微復雜一些。首先對需要轉換的循環語句設定一個展開層數限制,然后展開這個循環為順序程序。如果循環在到達限制前沒有展開完畢,則停止在展開限制處(圖1為一個簡單的例子)。這個展開實際上是一種懶惰(lazy)的循環展開方式。使用這種方法可以在一定程度上阻止可能的狀態空間發生爆炸問題。而在循環展開以后,可能會遺留下一個未被展開的循環體,這個尾巴可以被表示為一個特殊的節點,它被標記為尚未被轉換和翻譯。這也是一個在懶惰策略中常用的技巧。函數的翻譯和循環的翻譯類似,但是更為簡單直接。一個函數既可以被展開成一段平坦的程序片段,同時也可以不翻譯。在形式化的語言表達中,可以采用一個函數集合去統一地表示2種翻譯方法。

上面所述的描述方式可以表示一個具體的程序。這個具體的程序模型描述了一個程序精確的運行特性,但是它的狀態集通常都十分巨大甚至難以使用有限的描述來表示。如果使用這個較為接近底層的模型去指導一個狀態空間的搜索,難免會遇到困難和失敗。因此,需要一個更加抽象的模型去描述一個更小以及更有限的狀態空間。

3.2 抽象可達圖

3.3 有界模型檢測

有界模型檢測(BMC)只檢測步以內的可達性,其形式化的表達如下。

其中,表示初始狀態集合,表示程序的轉換關系集合,前方下標是轉換關系索引,表示程序不變的屬性集合,這些屬性需要在程序的整個執行期中保證不被違反。一個有界模型檢測方法的工作過程就是對這個命題進行驗證,證明它恒為真或找到一個使它為假的證明。如果一個有界模型檢測方法找到了一個使命題為假的證明,這個證明肯定可以應用在原始的程序中,使程序也有一條相應的在這個賦值下的路徑,這條路徑通常被稱為反例。如果反例存在,那它一定是充分的。但是當這個有界模型檢測方法給出了一個恒為真的證明時,這個證明卻不足以說明整個原始程序的安全是充分的。所以,有界模型檢測方法是一種下近似的驗證方法。這樣的有界模型檢測可以保證整個驗證過程一定能在一定步驟后停止,無論它檢測的程序是什么結構。因此,這種方法配合其他一些優化方法對于檢測實用的程序非常有效。

有界模型檢測的基本算法框架如算法1所示。這種方法需要配合使用一個SAT或SMT求解器來作為內部的核心組件。一個基本的有界模型檢測算法也可以看作是符號模型檢測算法添加一個界限的產物。

算法1 有界模型檢測的基本算法

輸出 如果程序安全則輸出SAFE,如果程序檢測逾越邊界則輸出UNKNOWN,否則輸出UNSAFE

步數設置為0

while 工作列表非空 do

步數加1

if 步數大于,則返回 UNKNOWN

為工作集添加元素的像

if 可達集在錯誤點非空,則返回 UNSAFE

否則,返回SAFE

如果把有界模型檢測算法看作是對程序模型的樹型遍歷,那么很顯然,這種方法使用的是深度優先策略。

4 程序局部性定義與局部性模型描述

局部性又被稱為參考局部性或者局部性原理,是計算機工程領域的一個重要的原理。這個原理描述了計算機系統在數據訪問和程序執行的過程中會大概率地優先訪問或者執行上一個訪問位置附近的相關數據,對于指導計算機工程上的很多問題的優化方案有重要的作用。在局部性中,2種重要的類型分別是時間局部性和空間局部性。時間局部性描述了在一段連續的時間片段中,特定的數據或位置會被頻繁地訪問。相似地,空間局部性描述了數據的訪問會經常地發生在相距很近的地方。在很多啟發式算法中,局部性是指導優化內在原理。

當前的程序設計語言給予了程序設計人員強大的能力,這個能力體現在程序中就是程序的多維度上的自由度。具體來講,例如,在面向對象的程序設計(OOP)范式中,2個重要的自由度是繼承和包含關系。另一個重要的例子是,在堆棧式語言編碼的程序當中,2個重要的維度是深度和廣度。程序的局部性在這2個例子中就可以體現在它們的自由維度上。在每一個維度上,程序本身都具有依賴這個維度的局部性。形式化地,這些局部性可以體現在相關程序的語法和語義的鄰接關系上。在這里將要給出一個基于擴展版本的簡單命令程序的局部性的定義。首先,需要先介紹幾個前置概念。

在分層抽象可達圖中,節點的有向連接體現了程序執行序列的方向。實際上,分層抽象可達圖是一個二維視角下程序流語義的展現。

在分層抽象可達圖中,量化的距離定義不妨借鑒經典的距離表達方法,即曼哈頓距離來表示。在這個前提下,可以進一步定義一個曼哈頓抽象可達圖為一種分層抽象可達圖,其中,每一層都是一個由分支、循環或函數節點展開得到的子抽象可達圖。在曼哈頓抽象可達圖中,每一層的子分支,循環和函數都默認不被展開。在這個抽象可達圖上,可以比較方便地定義距離,同時,程序語法和語義上的信息也被有效地保留了下來。

假設1一個程序的執行路徑會有較大概率選擇局部性強的路徑。

本文給出的假設1是合理的。首先,其符合程序員的編程直覺。使用局部性較強的路徑更加容易設計邏輯連貫的程序,因為在處理邏輯的連接時,需要進行的額外記憶將會降低。其次,局部性符合計算機體系結構的基本原理,程序在執行時選擇局部性較強的路徑會節約計算機運算的時間資源和空間資源。

為了將程序的局部性性質應用到傳統的有界模型檢測算法中去,原始的算法需要進行一定的擴展,從而使它可以接受和處理現代程序設計語言中蘊含的特定的因果關系。具體地,就是讓原始的有界模型檢測算法可以接受和處理來自廣度方向上的局部性信息。有界模型檢測算法是一個典型的深度優先搜索算法,這個算法只接受具體的符號化程序作為輸入,然后按照這個程序的運行路徑進行搜索和計算。綜上所述,本文的程序局部性的定義是包含抽象狀態的,因此,有界模型檢測算法并不能直接應用在其上。特別地,如果搜索方向是廣度優先,那么在執行過程中將會有很大概率碰到抽象狀態。所以需要讓有界模型檢測算法可以處理一些抽象狀態。

不翻譯函數(uninterpreted function)是SAT求解領域里的一個重要的理論模型。這個模型擴展了SAT求解器的能力,使它可以處理的邏輯范圍不僅限于命題邏輯[32]。不翻譯函數的基本理念是使用一個不展開的符號來表示一組命題,而這組命題中的符號被當作這個符號的參數來處理。這樣一來,這個不展開的符號就符合了一般函數的定義,而它的值就是這組命題計算式的合取。這種表示方式可以跳過對這組計算式的原地求值(on-site evaluation),從而形成一個懶惰求值的節點。因此,可以仿照不翻譯函數的形式邏輯來表示本文的抽象可達圖中的抽象部分。

定義7 不翻譯函數的擴展邏輯。一個定義了不翻譯函數的擴展邏輯包含以下語法。

這種擴展邏輯利用了不翻譯函數的能力并且可以處理多重返回值以及各種各樣的二元關系運算符。它可以將程序片段轉換成邏輯公式使特定的SAT或SMT求解器得以求解。對應地,它也可以將程序變為可被BMC接受的抽象程序。

5 局部性引導的BMC算法

本節將會討論如何使用局部性來指導有界模型檢測算法。先從設計和實現一個簡單的、使用局部性策略的算法開始,接著討論一個添加了更多優化的版本。

5.1 基礎算法

直接使用程序的局部性來指導有界模型檢測算法可以通過計算目標程序的2個節點間的局部性度量來實現。這個想法相對比較易于實現,同時又易于理解。通過搜索當前節點到錯誤點的局部度量可以獲得一個整體局部性。反復進行搜索便可以得到一個迭代更新的局部性參考。

與原始的有界模型檢測算法類似,每一輪有界模型檢測算法的運行并不是完全覆蓋整個程序的狀態集。但對比傳統的算法,本文算法可以降低在深度或廣度方向上的運行消耗。另外,將一個大型的有界模型檢測搜索拆分成數個較小檢測可以增加檢測的靈活性,使檢測可以在有限的空間下對更大型的狀態空間執行搜索。

函數是遞歸逐層檢測程序的抽象可達圖的方法。其他一些參數的定義如下。

是分層抽象可達圖的有序列表。

用來獲取抽象可達圖的根元素的函數。

是一個獲取目標程序后置操作的迭代器。

是一個獲取抽象可達圖中父節點的函數。

是一個獲取抽象可達圖中子節點的函數。

是一個使用擴展邏輯將節點變為對應的抽象節點的函數。

是一個獲取分層抽象可達圖當前層的節點的迭代器。

是一個從目標抽象可達圖的節點上獲取其所包含的具體狀態的函數。這些狀態包括所選擇節點在深度或廣度方向上的狀態。如果深度或廣度方向沒有在參數上被指定,那么就直接獲取節點在所有方向上的具體狀態,這時,這個函數與函數互逆。

是一個統計集合內元素個數的函數。

是一個獲得節點和路徑間具有因果關系的所有節點的集合。

是獲取當前節點沿特定方向到錯誤點的路徑。

算法2 基礎算法

輸出 如果程序安全則輸出SAFE,否則輸出UNSAFE

初始化結果為UNKNOWN,抽象狀態為空

調用函數創建分層,賦值給

while 結果是UNKNOWN do

調用函數(,(),)并把結果傳遞給檢測結果和

for 對于集合的元素 do

對元素調用函數

返回結果

函數創建分層ARG():

初始化為

for 對于程序執行的各步驟 do

if 該步驟符合曼哈頓條件 then

調用函數(,)并給其結果賦值為該步驟調用函數的返回值。

否則,調用函數()并為其結果賦值為該步驟調用函數的返回值

函數(,,):

調用函數分別計算廣度方向上的距離和深度上的距離,并求二者之差t

設置探索方向為深度

ift大于1 then

設置探索方向為廣度

調用函數((,當前探索方向),, 1)并賦值給結果

else if 結果是UNKNOW then

初始化和為空

for 集合(,)的元素 do

調用函數(, 當前元素,)并將結果賦值給和

if取值為UNKNOWN then 將合并入

返回(UNKNOWN,)

否則,返回SAFE

函數(,):

if 方向是深度方向 then

返回((,last()))

否則返回((,last()))

5.2 改進算法

算法3 改進算法

輸出 如果程序安全則輸出SAFE,否則,輸出UNSAFE

調用函數創建分層ARG()并將結果賦予

調用函數分別計算廣度方向上的距離和深度上的距離,并求二者之差t

設置探索方向為深度

if 結果為UNSAFE then

返回 (UNSAFE,)

else if 結果為UNKNOWN then

初始化,為空

初始化為真

for 集合(,)的元素 do

if取值為UNSAFE then 將合并入

否則返回SAFE

在整個改進的算法中,參考了反例引導的抽象—精煉模型檢測方法(counterexample-guided abstraction-refinement)中的反例引導思想。通過提取每次有界模型檢測器獲取的一個證明來加強算法中的局部性尋找,從而使局部性引導過程的搜索空間可以被有效限制,并且避免了一些重復的狀態遍歷。這種做法可以加強在局部性尋找失敗時的算法效率。

6 實驗設計與性能分析

本文方法使用有界模型檢測工具作為內部的實現核心,這個工具本身具有獨立地檢測軟件可靠性的能力。綜上所述,本文的目標是針對傳統的有界模型檢測工具的一個改進和優化。將優化方法實施在一個現有的有界模型檢測器上而不是使用一個定制的檢測器具有多重優勢。其中之一是,現有的模型檢測器除了實施基本的有界模型檢測算法以外,同時還考慮了多種與模型檢測和程序分析相關的優化措施。使用現有的模型檢測工具可以充分地利用領域里已經實施的相關優化方法,從而可以獲得更佳的性能表現。另外一點是,使用現有的工具可以充分利用其對于程序的表達和處理的能力,從而可以使方法能夠應對更多樣和復雜的樣本。

通過對現有各種有界模型檢測工具進行考察發現,其中很多工具并不能很好地分析和處理實際的代碼片段,例如代碼具有復雜的循環結構、跳轉、指針或內存操作。在部分有界模型檢測工具中,對這些結構的檢測體現為直接跳過或出現誤報或者提示錯誤并拒絕,因此本文實驗還需要對測試樣本進行篩選,以去除不良用例。

實驗使用了來自SV-COMP和其他項目中的工業代碼作為測試用的樣本。這些樣本中包含了規模不一的代碼片段。其中,最長的代碼片段長度為1 762行,最短的片段長度為341行。使用這個長度范圍內的片段是因為短于這個長度的片段有界模型檢測工具可以很快地完成代碼的檢查,無法區分本文所述方案的優越性;而長于最長片段的代碼將會導致內部的有界模型檢測工具出現錯誤中止,從而使比較產生系統性誤差。在測試樣本中,除了代碼長度不同,代碼的類型也有所區別。樣本中的代碼包含順序代碼、分支代碼、循環代碼、跳轉代碼、指針及內存操作代碼。所檢查的程序安全性屬性包含可達、不可達、控制邏輯以及一些訪問相關的屬性。

大多有界模型檢測器最大的問題都是對指針和內存的支持不完整,導致實際生產中的代碼難以進行有效的檢測。通過大量的研究和測試發現,LLBMC[33]對于工業代碼的支持最為完整,同時因為其使用了顯式內存分析,它對代碼規模的支持也很強大。同時根據SV-COMP[34]的測試結果顯示,其在整個模型檢測業界也具有很好的性能表現。基于這些研究,在測試中使用LLBMC作為算法中有界模型檢測器的實現。

本文實驗平臺配置如下。Intel Core 2,4核8線程處理器,64 GB物理內存以及64位Ubuntu 12.04操作系統。保留測試代碼中的各種瑕疵以及不好的編程范式,從而使其更加貼近真實的生產中會產生的代碼。同時,也使程序員在編寫代碼時遺留在程序中的局部性得以保留。實驗分為2個部分,第一個部分將實驗樣本按照代碼規模從低到高分為5個階梯。因為代碼的行數與其復雜程度具有一定的關系但又不是嚴格的線性關系,使用這種階梯式的分類方法可以更好地體現出代碼復雜程度的演進。第二個部分將代碼按照其邏輯類型分為4個大類。使用這個分類的目的是觀察程序的邏輯類型對算法的影響。

本文實驗并未涉及比較算法在空間上的復雜度差異,其原因是本文方法涉及多次使用檢測工具,其內存消耗包括了多次的預分配和其他支持庫的共享部分與單一使用不具備可比性。同時,本文用以比較的其他算法來自不同框架,其本身內存分配和回收機理不同,也會造成結果的說明性不佳。

實驗使用的測試樣本代碼總共有115段,來自于其他測試樣例和一些實際項目中的典型代碼片段。在實驗的第一個部分中,按照大約200行代碼為一塊對這些代碼進行分片。

單獨使用LLBMC以及2種算法在這些分片上運行的時間消耗比較如表1所示。其中所列的時間是代碼檢測的平均時間。通過比較可以發現,本文所述的算法在規模較小的程序檢測中體現出更高的時間消耗。這是因為本文方案對代碼進行了多次掃描,這種掃描造成了潛在的時間消耗。同時,本文使用的方法具有一個啟動過載,這個因素同樣影響了時間消耗。在規模較大的代碼檢測中,本文方法展現出了優勢。

表1 算法時間消耗比較

第二部分實驗結果如表2所示。其中,數據代表當前類別在所列算法的檢測中成功返回并返回正確結果的數量。在前面實驗中已經發現當代碼規模增大到一定程度時,傳統的有界模型檢測器已無法完成針對代碼的檢測。因此也將代碼規模限制在這個邊界的附近,從而可以獲得具有比較意義的結果。在第二部分的實驗中也可以發現,LLBMC在各個類型的代碼中均有檢測失敗的案例。由于給LLBMC設置了無限長的代碼展開,所以這種檢測失敗基本上都是由于狀態空間過大所引起。本文的2種方案在其上表現很好,這是由于本文方法將模型檢測空間進行了有效限制。

表2 算法成功檢測數量比較

從實驗結果可以看到,本文方法在LLBMC上可以有效地運行并成功地對相對大規模的代碼進行檢測,比單純的有界模型檢測算法在規模上更加強壯,同時在相對較大的規模代碼上具有一定的時間優勢。當然,在實驗中也發現了在不同的代碼片段上有一定的不穩定性。這個現象的原因可能是代碼的局部性在不同的代碼片段上的強弱程度表現不一,這也同時說明了實現屬于一種啟發式的算法實例。

7 結束語

本文提出了局部性在模型檢測方法中應用的可能性,在描述了形式化定義的基礎之上提出了對應的算法,并通過實驗驗證了其有效性。該方法實際上屬于一種上近似的算法,通過獲取一種局部性的上近似來對目標程序模型的狀態空間進行分片,然后使用有界模型檢測工具來完成狀態子空間的檢測。算法理論上可以結合各種有界模型檢測算法,具有可擴展性,同時也具有結合其他模型檢測算法的潛力。在未來的研究中,可以進一步地探討將本文算法嵌入其他模型檢測算法中或將其他模型檢測算法嵌入本文算法中的可能性。

[1] JHALA R, MAJUMDAR R. Software model checking[J]. ACM Computing Surveys. 2009, 41(4): 1-54.

[2] BJORNER N, MCMILLAN K, RYBALCHENKO A. On solving universally quantified horn clauses[C]//The International Symposium on Static Analysis. 2013: 105-125.

[3] CLARKE E, KROENING D, LERDA F. A tool for checking ansi-c programs[C]//The 10th International Conference on Tools and Algorithms for the Construction and Analysis of Systems. 2004: 168-176.

[4] CORDEIRO L, LISCHER B, MARQUES S J. SMT-based bounded model checking for embedded ANSIC software[J]. IEEE Transactions on Software Engineering, 2012, 38(4): 137-148.

[5] YANG Z, GANAI M K, GUPTA A, et al. Efficient SAT-based bounded model checking for software verification[J]. Theoretical Computer Science, 2008, 404 (3) : 256-274.

[6] MERZ F, FALKE S, SINZ C. LLBMC: bounded model checking of C and C++ programs using a compiler IR[C]//The International Conference on Verified Software: Theories, Tools, Experiments. 2012: 146-161.

[7] MORSE J, CORDEIRO D, NICOLE D, et al. Handling unbounded loops with ESBMC 1.20[C]//The International Conference on Tools and Algorithms for the Construction and Analysis of Systems. 2013: 619-622.

[8] DAVIS M, LOGEMANN G, LOVELAND D. A machine program for theorem-proving[J]. Communications of the ACM, 1967, 5(5): 394-397.

[9] HOOKER J N, VINAY V. Branching rules for satisfiability[J]. Journal of Automated Reasoning, 1995 , 15 (3) :359-383.

[10] LI C M, ANBULAGAN A. Heuristics based on unit propagation for satisfiability problems[C]//The 15th International Joint Conference on Artificial Intelligence. 1997 :366-371.

[11] MOURA D, BJORNER N. Z3: an efficient SMT solver[C]//The International Conference on Tools and Algorithms for the Construction and Analysis of Systems. 2008: 337-340.

[12] LIU L, KONG W, ANDO T. A survey of acceleration techniques for SMT-based bounded model checking[C]//The International Conference on Computer Sciences and Applications. 2013: 554-559.

[13] HENZINGER T A, JHALA R, MAJUMDAR R, et al. Abstractions from proofs[J]. ACM SIGPLAN Notices, 2004 , 39 (1) :232-244.

[14] JHALA R, MCMILLAN K L. Array abstractions from proofs[C]//The International Conference on Computer Aided Verification. 2004: 232-244.

[15] MCMILLAN K L. Lazy abstraction with interpolants[C]//The International Conference on Computer Aided Verification. 123-136.

[16] GULAVANI B S, RAJAMANI S K. Counterexample driven refinement for abstract interpretation[C]//The International Conference on Tools and Algorithms for the Construction and Analysis of Systems. 2006: 474-488.

[17] FLANAGAN C, QADEER S. Predicate abstraction for software verification[J]. ACM SIGPLAN Notices, 2002, 37 (1) :191-202.

[18] KOMURAVELLI A, GURFINKEL A, CHAKI S. Automatic abstraction in SMT-based unbounded software model checking[C]//The International Conference on Computer Aided Verification. 2013: 846-862.

[19] APEL S, BEYER D, FRIEDBERGER K. Domain types: abstract- domain selection based on variable usage[C]//The International Conference on Hardware and Software: Verification and Testing. 2013: 262-278.

[20] BEYER D, HENZINGER T A, THEODULOZ G. Lazy shape analysis[C]//International Conference on Computer Aided Verification. 2006: 532-546.

[21] HENZINGER T A, JHALA R, MAJUMDAR R, et al. Lazy abstraction[J]. ACM SIGPLAN Notices, 2002, 37(1): 58-70.

[22] BRADLEY A R. SAT-based model checking without unrolling[C]//The International Conference on Verification, Model Checking, and Abstract Interpretation. 2011: 70-87.

[23] RRADLEY A R, MANNA Z. Checking safety by inductive generalization of counterexamples to induction[C]//The International Conference on Formal Methods in Computer Aided Design. 2007: 173-180.

[24] CHAKI S, CLARKE E M, GROCE A, et al. Modular verification of software components in C[J]. IEEE Transactions on Software Engineering, 2004 , 30 (6) :388-402.

[25] BEYER D, KEREMOGLU M E. CPAchecker: a tool for configurable software verification[C]//The International Conference on Computer Aided Verification. 2011:184-190.

[26] BEYER D, LEMBERGER T. Symbolic execution with CEGAR[M]// Leveraging Applications of Formal Methods, Verification and Validation: Foundational Techniques. Springer International Publishing, 2016.

[27] BEYER D, DANGL M, WENDLER P. Boosting K-induction with Continuously-refined Invariants[M]//Computer Aided Verification. Springer International Publishing, 2015: 622-640.

[28] BEYER D, LOWE S. Interpolation for value analysis[J]. Software-Engineering and Management, 2015: 73-74.

[29] BEYER D, WENDLER P. Reuse of verification results[C]//The International Symposium on Model Checking Software. 2013: 1-17.

[30] BEYER D, LOWE S. Explicit-State software model checking based on CEGAR and interpolation[C]//The International Conference on Fundamental Approaches to Software Engineering. 2013: 146-162.

[31] ALBARGHOUTHI A, GURFINKEL A, CHECHIK M. From Under-Approximations to Over-Approximations and Back[C]//The International Conference on Tools and Algorithms for the Construction and Analysis of Systems. 2012: 157-172.

[32] KROENING D, STRICHMAN O. Decision procedures: an algorithmic point of view[M]. Springer Publishing Company, 2008.

[33] SINZ C, MERZ F, FALKE S. LLBMC: a bounded model checker for LLVM’s intermediate representation[C]//The International Conference on Tools and Algorithms for the Construction and Analysis of Systems. 2012: 542-544.

[34] BEYER D. Status report on software verification[C]//The International Conference on Tools and Algorithms for the Construction and Analysis of Systems. 2014: 373-388.

Locality-guided based optimization method for bounded model checker

WANG Shun, DU Ye, HAN Zhen, LIU Jiqiang

Beijing Key Laboratory of Security and Privacy in Intelligent Transportation, Beijing Jiaotong University, Beijing 100044, China

For software model checking, approaches that combine with different kind of verification methods are now under research. The key to improve scale and complexity of verifiable software is handling the method for abstraction widening and strengthening wisely and precisely. To archive that, using extra knowledge that extracted from programming pattern or learned through verifying procedure to help eliminate the redundant state has been proved effective. Definition of program locality was given. It took the important role in accelerating software verification, then the strategy was raised and an algorithm was implemented to take advantage of program locality. This method exploits the features of modern BMC (bounded model checker) and scales up the capability of its power in large scale and comprehensive software modules.

model checking, BMC, software verification, locality, optimization

TP311.1

A

10.11959/j.issn.1000-436x.2018050

2017-06-14;

2018-01-11

北京高校青年英才計劃基金資助項目(No.YETP0548);國家自然科學基金資助項目(No.61672092)

Beijing Higher Education Young Elite Teacher Project (No.YETP0548), The National Natural Science Foundation of China (No.61672092)

王舜(1988-),男,陜西西安人,北京交通大學博士生,主要研究方向為形式化方法、程序分析技術、信息安全等。

杜曄(1978-),男,黑龍江哈爾濱人,博士,北京交通大學副教授、博士生導師,主要研究方向為網絡安全、態勢感知、軟件可靠性分析與評估等。

韓臻(1962-),男,浙江寧波人,北京交通大學教授、博士生導師,主要研究方向為可信計算、系統安全、保密技術等。

劉吉強(1973-),男,山東海陽人,北京交通大學教授、博士生導師,主要研究方向為密碼學、可信計算、隱私保護技術等。

猜你喜歡
程序檢測方法
“不等式”檢測題
“一元一次不等式”檢測題
“一元一次不等式組”檢測題
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
小波變換在PCB缺陷檢測中的應用
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
主站蜘蛛池模板: 成人无码区免费视频网站蜜臀| 91欧美亚洲国产五月天| 国产天天色| 国产视频a| 午夜限制老子影院888| 色婷婷色丁香| 黄色网页在线播放| 国产精品99在线观看| a级毛片一区二区免费视频| 欧美精品高清| 成人在线综合| 国产成人精品2021欧美日韩| 国产成人一区| 国产人碰人摸人爱免费视频| 国产免费精彩视频| 9啪在线视频| av天堂最新版在线| 全裸无码专区| 国产午夜精品鲁丝片| 成人久久精品一区二区三区| 在线欧美一区| 亚洲热线99精品视频| 97久久精品人人做人人爽| 波多野结衣亚洲一区| 精品视频在线观看你懂的一区| 一本大道香蕉高清久久| 久久婷婷综合色一区二区| 精品亚洲麻豆1区2区3区| 久久精品一卡日本电影| 国产成人免费观看在线视频| 久久综合色播五月男人的天堂| 97精品国产高清久久久久蜜芽| 国产精品99久久久久久董美香| 国产精品久久久久鬼色| 色婷婷国产精品视频| 日本一区二区不卡视频| 人妻精品久久无码区| 日本人妻丰满熟妇区| 97亚洲色综久久精品| 日韩AV手机在线观看蜜芽| 亚洲香蕉在线| 欧美一区二区三区香蕉视| 亚洲欧美日韩高清综合678| 青青草久久伊人| 亚洲国产成熟视频在线多多| 五月天久久婷婷| 欧美a级完整在线观看| 日韩人妻少妇一区二区| 一级黄色片网| 91在线精品麻豆欧美在线| 中文国产成人精品久久| 夜精品a一区二区三区| 99r在线精品视频在线播放| 伊人丁香五月天久久综合| 国产欧美日韩免费| 日本影院一区| 中文字幕在线看| 亚洲精品天堂在线观看| 欧美精品影院| 欧美日韩在线成人| 无码中文字幕精品推荐| 欧美激情第一区| 91久久偷偷做嫩草影院精品| 日本一区高清| 2021精品国产自在现线看| 亚洲欧美精品一中文字幕| 一区二区欧美日韩高清免费| 亚洲欧美综合另类图片小说区| 亚洲无码电影| 亚洲国产欧洲精品路线久久| 婷婷六月色| 99久久精品无码专区免费| 欧美性久久久久| 99视频在线免费观看| 蜜臀av性久久久久蜜臀aⅴ麻豆| 日韩精品专区免费无码aⅴ| 久久香蕉国产线看观| 久久九九热视频| 国产xx在线观看| 91青青草视频| 国产主播喷水| 风韵丰满熟妇啪啪区老熟熟女|