Program Slicing

 

       在計算機編程程序切片是一組程序語句的計算,切片可用於調試以更容易地定位錯誤源。切片的其他應用包括軟件維護優化程序分析信息流控制

      自Mark Weiser最初的定義以來,切片技術一直在迅速發展。最初,切片只是靜態的,即應用於源代碼而沒有除源代碼之外的其他信息。Bogdan KorelJanusz Laski介紹了動態切片,它適用於程序的特定執行(對於給定的執行跟蹤)

      靜態切片 VS 動態切片

      (1)靜態切片

      僅僅是靜態可用的信息
      沒有對輸入做任何假設
      計算切片通常是不準確的
      識別最小切片是一個不可確定的問題
      結果可能並不有用 

     (2)動態切片

      對給定的輸入進行計算
      實際而不是
      適用於調試和測試等應用程序

    Examples1:(static backward slice)

     使用後向靜態切片,關於程序點p和程序變量組V的程序的後向切片;關於程序點p和程序變量集V的程序的後向切片由程序中的所有語句和謂詞組成,這些語句和謂詞可能影響V中的變量值;程序點p和變量集V一起形成切片標準,通常寫爲<p,V>。

    一般方法:向後遍歷程序流程
    切片從點p開始(C =(p,V))
    檢查可以執行的語句
    在p之前(不只是在p之前出現的語句)
    添加影響p的值或執行的語句以獲得p
    考慮傳遞依賴

 

     程序執行方式:

     如果切片中的語句形成可以執行的語法正確的程序,則切片是可執行的。
     如果正確(安全地)計算切片,則運行作爲可執行切片的程序的結果對於所有輸入的V中的變量產生相同的結果。

     執行結果:

     Examples2:(Dynamic slice)

    對於程序的特定執行e,關於程序點p處的變量v的輸入值的程序的動態切片是程序中影響v的值的所有語句的集合。
    程序點p,變量V和e的輸入i形成切片標準,通常寫爲<i,v,p>。 切片使用輸入i的程序的執行歷史或軌跡。

     Compare the static slice with dynamic slice

     Method for computing slices

     流程圖上的數據流
     過程內:控制流圖(CFG)
     過程間:過程間控制 - 流程圖
     依賴圖中的可達性
     過程內:程序依賴圖(PDG)
     過程間:系統依賴圖(SDG)
     數據流方程(CFG上的數據流)
           迭代過程(通過CFG)
                  使用數據依賴性爲CFG中的每個節點計算連續的“相關”變量集
                  不明確計算控制依賴性
                  控制謂詞的變量(if,while)如果其身體中的任何一個陳述相關,則“間接相關”
          從切片準則開始:C =(p,V)
         繼續,直到達到一個固定點(即,最後一次迭代沒有找到新的相關語句)

    關於一些程序分片的源碼,可在github上參考:https://github.com/search?q=programming+slice

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章