執行時驗證概述

陳止風發表於2017-02-01

來源自我的部落格

http://www.yingzinanfei.com/2017/02/01/yunxingshiyanzhenggaishu/

  1. 執行時驗證的概述

    本文將簡要介紹執行時驗證技術。先給出執行時驗證的定義,與和知名的驗證技術像模型檢測對比並給出測試,同時指出執行時驗證的特點。然後,像面向監控程式設計的執行時驗證擴充套件和基於監控的執行時反射會被簡要描述並討論他們的相同與差異。最後,指出使用執行時驗證的約束。

    1. 簡介
      • 三種主要的驗證技術:
        • 定理證明
        • 模型檢測
        • 測試
      • 文章的主要內容
        • 強調執行時驗證的主要思想,並且與其他驗證技術相比來討論其特點
        • 在正確屬性的線性時序邏輯背景下討論執行時驗證技術
        • 總結一些用更嚴格更有表現力語言的擴充套件
        • 描述一些不僅用於監視還能在監視之下干涉系統的方法
        • 討論對於合同使用的執行時驗證技術
    2. 執行時驗證技術

      • “故障”定義為在當前行為和預期行為間的偏差
      • 除了傳統驗證技術“定理證明”、“模型檢測”、“測試”,執行時檢測是一個輕量級的新驗證技術方向
        1. 監視器
          • 監視器是讀入有限路徑並生成確定結論的裝置
          • 線上監視和離線監視
        2. 執行時驗證與模型檢測
          • 執行時驗證起源於模型檢測
          • 兩者主要區別
          • 在模型檢測中,給定系統的所有執行被用來檢測其是否滿足給定的正確屬性$\varphi$,對應於語言包含問題。而執行時檢測處理的是字元問題。
          • 模型檢測通常研究無窮路徑,但執行時檢測處理有限執行,執行也必須是有限的。
          • 模型檢測中給出一個完整的模型來研究任意位置的路徑,而執行時檢測,特別是在處理線上監測時研究的是逐漸增大的有限執行
          • 執行時檢測只處理觀察到的執行,因為他是由真實系統生成的
        3. 執行時驗證與測試
          • 執行時驗證不研究系統所有可能的執行,這與測試有相似性
          • 兩者主要區別
          • 在測試中,預言通常是直接定義的,而不是由一些高層說明生成
          • 測試窮盡一個輸入集來測試系統,而執行時驗證很少研究這個
          • 執行時驗證可以被看作是一種“被動測試”
          • 當在最終的軟體系統上加上監視器後,也可以把執行時驗證理解成“永久測試”
        4. 什麼時候使用執行時驗證
    3. 執行時驗證中線性時序邏輯的說明

    4. 不同層次的執行時驗證的表現
    5. 執行時驗證之外
    6. 執行時驗證和合同約束
    7. 結語
  2. 再探執行時驗證

    本文中將提出一個線上性時序邏輯LTL公式下執行時檢測中的典型障礙。標準的線性時序邏輯模型是無窮軌跡的,但執行時驗證只需要處理有限系統行為。這個問題通常是在給有限軌跡定義LTL語義時提出的,這和無限軌跡語義不完全契合。

    我們在有限軌跡中定義一個3值語義(正確true, 錯誤false, 不確定inconclusive), 這樣和無限軌跡最相似。此外,我們描述怎樣在給定一個LTL公式後用3輸出符號去構建一個確定的有限狀態自動機。這個自動機輸入有限軌跡然後輸出他們的3值LTL語義。這樣就能直接部署到執行時檢測中。

    我們的理念首先用在研究LTL的配置上,然後擴充套件到研究時間上的線性實時邏輯(簡稱TLTL)。因此,對於TLTL公式,監視器被構建為執行在有限時間軌跡上的。

    我們應用了不定時配置並通過檢查一個真實世界案例來驗證整個方法。

    1. 簡介

      執行時驗證作為補充像模型檢測和測試這樣的驗證技術的工具已經越來越流行。特別是在用於模型檢測不適用或不能直接適用的黑盒或灰盒系統中,或者以現在的模型檢測器無法分析的系統。

    2. 預備知識

      介紹一些關於LTL的公式定義。

    3. 在不計時配置中的3值LTL
      1. 語義
      2. $LTL_3$的監視程式
    4. 在計時配置中的3值LTL——TLTL
      1. 預備知識
      2. $TLTL_3$的語法和語義
      3. 事件時鐘自動機
      4. $TLTL_3$的監視程式
    5. 實現

      討論怎麼實現第3節中描述的不計時情況。展示實際的監視器怎麼從LTL公式中自動生成,給出一個當前實現的簡要概述,包括監視器生成器(簡稱為LTL2FSM)和一個日誌框架(簡稱為DIAGNOSTICS)。此外,描述了我們的技術怎麼用來避免一個特殊的C++陷阱,即在進入程式主函式前產生執行緒。

      1. 有效的監視器程式碼生成
      2. 我們的實現:Ltl2Fsm 和 Diagnostics
      3. 例項:靜態初始化排序失敗
    6. 結論

      本文中,我們對計時和不計時的LTL關於有限軌跡都呈現了一個3值語義。我們討論的三值語義和LTL的無限狀態語義相似。

      此外, 我們為兩種邏輯都開發了有效的監視器生成程式,在一些字首允許時能立即告警。

      我們已經應用了不計時的配置。我們把這個監視器生成工具整合了大型日誌工具和單元測試框架。我們已經檢查了一個標準C++陷阱並且對此問題提供了一個執行時驗證解決方案,這個在工程上和執行時處罰上都非常有效率。

  3. 執行時驗證中的LTL和TLTL

    本文研究線上性時序邏輯LTL和計時的線性時序邏輯TLTL中的執行時驗證屬性。

    1. 簡介
      1. 執行時驗證與模型檢測
      2. 執行時驗證與測試
      3. 監測離散時間屬性
      4. 監測實時時間屬性
      5. 概要
    2. 在離散時間配置中的3值LTL
      1. 預備知識
      2. $LTL_3$的語法和語義
      3. $LTL_3$的監視器結構
      4. 舉例
      5. 評價
    3. 正確觀察$LTL_3$
      1. 好或壞字首
      2. 安全與不安全屬性
      3. 資訊字首
    4. 在實時系統配置中的3值LTL——TLTL
      1. 預備知識
      2. $TLTL_3$的語法和語義
      3. $TLTL_3$監視的概述
      4. 執行在事件時鐘自動機上的符號
      5. 符號化狀態的空性檢測
      6. $TLTL_3$的監視器程式
      7. 平臺適應
    5. 結論
      • 附錄
      • 評價資料
  4. 基於規則的執行時驗證再探

    1. 簡介
    2. 相關工作
      1. 監視上的相關工作
      2. 規則處理上的相關工作
    3. LogFire數字模擬語言
      1. 資源管理系統的需求
      2. 需求形式化成規則
        1. 事件和事實的宣告
        2. 規則的通用形式
        3. 資源排序
        4. 釋放需求
        5. 不釋放和不准許的需求
        6. 禁止需求
      3. 監視器的終止和應用
        1. 在監視器中構成規則
        2. 應用監視器
      4. 附加特徵
        1. 事件和事實
        2. 研究作為資料庫的事實記憶體
    4. 定義和使用規範模式
      1. 時序邏輯
      2. 路徑表達
    5. RETE演算法
      1. RETE演算法
      2. RETE的五個優化
        1. 規則關聯
        2. 最小條件評價
        3. 字首共享
        4. 字首就緒
        5. 字尾就緒
    6. 對執行時驗證評價和修改RETE
      1. 評價
        1. 事件和事實
        2. RETE的優化
        3. 缺失的索引
      2. 修改
        1. 事件處理
        2. 索引
    7. DSL(數字模擬語言)的實現
      1. 作為一等公民的名稱
      2. 抽象語法規則
      3. 從具體到抽象語法
      4. 用資料視覺化來理解程式
      5. 測試
      6. 文件
    8. 實驗
      1. 系統比較
        • LOGFIRE: 本文介紹的基於規則的系統,是擴充了事件處理和索引方案的RETE演算法
        • RETE/UL: 新增了事件處理的對RETE演算法的SCALA直接實現。LOGFIRE是附帶有索引的此方法優化實現。
        • DROOLS: 一個主要的最先進的為JAVA語言制訂的基於規則系統,並且能免費從JBoss社群獲取。DROOLS基於一個RETE演算法的增強實現。
        • RULER: 是一個應用於JAVA的執行時驗證工具,建立為基於規則的系統,但和RETE演算法相比有點小區別。RULER在下一步中移除了事實,除非通過規則明確指示保持它。與其相反,RETE只有在規則中明確指示移除事實時才會移除。
        • LOGSCOPE: 是一個小規模輕量級的修改版RULER,強調資料引數化狀態機器,應用於SCALA上。LOGSCOPERULER相反,研究的是事實的保留除非其在規則中被明確移除。LOGSCOPE被開發來探索語言特徵且不是優化的。
        • TRACECONTRACT: 一個內部的SCALA DSL用於狀態機器,淺層的DSL和深層的LTL,也是一個簡單的基於規則的符號(淺層)。應用於重寫和標準化公式。TRACECONTRACT被開發來探索語言特徵且不是優化的。
        • MOP: 是在我們認識內現存的最有效最先進的執行時驗證系統。MOP以外掛的方式支援許多不同的邏輯,都使用同樣的索引演算法來快速訪問監視器基於引數事件。一般地,MOP被設計來監視程式執行(線上監視)。例如,JAVAMOP驗證由執行時JAVA程式生成的事件,用ASPECTJ儀表化。在這個評價裡日誌分析是在程式中插入一個日誌閱讀器來實現的,從日誌中讀入每個事件,呼叫給特定各類事件定義的方法,這些是空的函式體(什麼都不做)。對這些空函式體方法的呼叫用ASPECTJ儀表化來驅動監視器
      2. 特定的需求
      3. 日誌
      4. 結果
    9. 結論和未來工作
  5. 執行時驗證框架MOP概述

    本文給出了關於面向監視的程式框架MOP的概述。在MOP中支援執行時監視並且被支援作為一個基本原則來構建可依賴系統。監視器自動地綜合特定屬性並連同原始系統來檢測動態行為。當一個規範違反或執行時驗證時,使用者定義的行為會觸發,這個可以是任何程式碼像資訊日誌記錄或執行時恢復。兩個MOP的例項將會介紹:JavaMOP(適用於Java程式)和BusMOP(適用於監視PCI匯流排流量)。MOP的架構也會被討論,引數軌跡監視和應用實施將被給出。JavaMOP的綜合評價證實了它的效率,特別是和類似的系統相比。BusMOP的細節實現將被討論。通常BusMOP在其監視系統時不會有額外的系統執行開銷。

    1. 簡介
      1. 相關工作
        1. 面向方向的程式語言
        2. 執行時驗證
        3. 契約式設計
        4. 其他相關的方法
        5. 討論
      2. 舉例
    2. MOP框架
      1. 架構
      2. 語言客戶端
      3. 邏輯外掛
    3. MOP例項
      1. MOP語法
        1. 共享的語法
        2. 特殊例項的語法
        3. 特殊邏輯外掛的語法
      2. JavaMOP例項
        1. JavaMOP語法
      3. BusMOP例項
        1. BusMOP語法
    4. JavaMOP
      1. 引數軌跡切片和樸素監視
        1. 事件、軌跡、屬性和引數
        2. 監視器和引數監視器
        3. 樸素引數監視
      2. 有效地引數監視
        1. 演算法C<X>
        2. 啟用優化
        3. 演算法D<X>
      3. 索引
        1. 集中化索引
        2. 優化:分散化索引
      4. 結合模型和關聯
    5. BusMOP
      1. PCI匯流排
      2. 監視裝置
        1. PCI核心模組
        2. 第N系統模組
        3. 總結介面模組
        4. 監視器模組
      3. BusMOP評價
    6. 邏輯外掛
      1. 有限狀態機器
      2. 擴充套件正規表示式
      3. 線性時序邏輯(未來時間)
      4. 過去時間線性時序邏輯
      5. 上下文無關文法
      6. 過去時間線性時序邏輯的呼叫與返回
    7. 結論

相關文章