本書主要介紹程序切片的起源和發(fā)展,程序切片技術的圖論基礎,程序切片的各種變體(如靜態(tài)切片、動態(tài)切片、有條件切片、并發(fā)切片、面向對象程序的切片、體系結構切片和規(guī)約切片等),計算程序切片的各種方法,以及程序切片技術在軟件調試、波動分析、軟件測試、度量、重用、程序理解、逆向工程和軟件安全等方面的應用,并討論了程序切片技術的發(fā)展趨向。本書適合作為高等院校計算機軟件專業(yè)學生學習"軟件工程"、"軟件分析與測試"等課程的參考書或工具書,也適合作為軟件分析與測試研究人員的參考書。上篇程序切片技術基本原理第1章 概論1.1 程序切片技術的起源和發(fā)展1.1.1 從數據流方程到程序依賴圖1.1.2 從可執(zhí)行的程序切片到不可執(zhí)行的程序切片1.1.3 靜態(tài)切片、動態(tài)切片和有條件切片1.1.4 后向切片和前向切片1.1.5 從源程序代碼切片到軟件規(guī)約切片1.1.6 從單一切片到多種切片1.2 程序切片技術的應用概述1.2.1 程序調試1.2.2 軟件維護1.2.3 同歸測試1.2.4 軟件度量1.2.5 軟件重用1.2.6 軟件安全1.3 程序切片工具簡介1.3.1 支持C語言的PST1.3.2 支持Ada語言的PST1.3.3 支持Oberon-2語言的PST1.3.4 支持Java語言的PST1.3.5 其他PST小結思考題參考文獻第2章 圖論基礎2.1 控制流圖2.1.1 基本模塊2.1.2 控制流圖定義2.1.3 基本屬性2.2 控制流分析2.2.1 控制流2.2.2 控制流的表示方法2.2.3 支配節(jié)點和后必經節(jié)點2.2.4 循環(huán)識別2.3 數據流分析2.3.1 可到達定義2.3.2 數據流方程2.3.3 活性分析2.4 數據依賴和控制依賴2.4.1 控制依賴2.4.2 數據依賴2.5 程序依賴圖2.5.1 過程內依賴圖2.5.2 過程間依賴圖小結思考題參考文獻第3章 靜態(tài)程序切片3.1 引言3.2 Mark weiser程序切片3.2.1 初步理解3.2.2 基本術語3.2.3 Mark weiser的數據流算法3.3 過程內切片3.3.1 構造程序依賴圖3.3.2 圖可達性算法3.3.3 例子分析3.4 過程間切片3.4.1 構造系統依賴圖3.4.2 構造特征子圖的算法3.4.3 過程間切片的算法小結思考題參考文獻第4章 動態(tài)程序切片4.1 引言4.2 基本術語4.2.1 程序依賴圖和靜態(tài)切片4.2.2 執(zhí)行歷史和動態(tài)切片準則4.3 Agrawal和Horgan的動態(tài)切片4.3.1 動態(tài)切片方法14.3.2 動態(tài)切片方法24.3.3 動態(tài)切片方法34.3.4 動態(tài)切片方法44.4 Korel和Laski的動態(tài)切片小結思考題參考文獻第5章 有條件程序切片5.1 引言5.2 有條件切片5.2.1 準靜態(tài)切片5.2.2 同時動態(tài)切片5.2.3 一般的有條件切片模型5.2.4 有條件切片計算5.3 切片模型關系分析5.4 分割分析小結思考題參考文獻第6章 面向對象程序切片6.1 引言6.2 傳統系統依賴圖的缺陷分析6.3 面向對象系統依賴圖6.3.1 OOSDG的基本組成模型6.3.2 OOSDG對SDG的擴充6.3.3 類依賴圖6.3.4 虛函數調用圖的構造6.3.5 OOSDG的構造算法6.3.6 基于OOSDG的程序切片算法小結思考題參考文獻第7章 并發(fā)程序切片7.1 引言7.2 Cheng的并發(fā)程序切片思想7.3 Krinke多線程程序靜態(tài)切片方法7.3.1 線程控制流圖7.3.2 線程程序依賴圖7.3.3 基于tPDG的切片7.4 Nanda和Ramesh的并發(fā)程序切片方法7.5 并發(fā)程序的動態(tài)切片7.5.1 進程圖和靜態(tài)程序依賴圖7.5.2 進程圖到并發(fā)圖7.5.3 構建DPDG7.6 面向對象并發(fā)程序的切片方法7.6.1 Zhao的早期方法7.6.2 Java并發(fā)程序的切片方法小結思考題參考文獻第8章 規(guī)約切片8.1 形式規(guī)約切片8.1.1 靜態(tài)形式規(guī)約切片8.1.2 動態(tài)形式規(guī)約切片8.1.3 其他形式規(guī)約切片8.2 基于規(guī)約的程序切片8.2.1 前置和后置條件8.2.2 基于規(guī)約的切片8.3 體系結構規(guī)約切片8.3.1 體系結構規(guī)約8.3.2 體系結構切片定義8.3.3 體系結構信息流圖和體系結構切片的計算8.4 動態(tài)軟件體系結構切片8.5 JVM規(guī)約切片小結思考題參考文獻第9章 新型切片變體9.1 無定型切片9.1.1 程序投影9.1.2 無定型簡單性度量9.1.3 無定型靜態(tài)切片9.1.4 無定型有條件切片9.1.5 無定型切片的實現以及相關問題9.2 削片9.2.1 靜態(tài)削片9.2.2 動態(tài)削片9.2.3 削片的性質和構造策略9.3 砍片小結思考題參考文獻中篇程序切片技術的基本應用第lO章 程序調試10.1 引言10.1.1 什么是程序淵試10.1.2 為什么用切片進行調試10.2 如何用切片輔助程序調試10.2.1 調試中的錯誤分析及切片選取10.2.2 面向對象程序切片與調試10.3 基于切片的調試工具10.3.1 C-Debug10.3.2 SPYDER小結思考題參考文獻第11章 波動分析11.1 引言11.2 程序切片與REA過程11.3 后向切片存在的必要性11.3.1 定義修改11.3.2 使用修改11.3.3 控制修改11.4 程序切片運算11.5 直接波動和誘導波動11.5.1 通用程序切片11.5.2 REA例子小結思考題參考文獻第12章 軟件測試12.1 引言12.2 基于程序切片的軟件測試12.2.1 例子簡介12.2.2 依賴圖模型12.2.3 基本性質12.3 回歸測試12.3.1 受影響的定義一使用關系類型12.3.2 BackwardWalk算法12.3.3 ForwardWalk算法12.3.4 進一步討論12.3.5 回歸測試的一般步驟12.4 基于切片技術的軟件測試工具模型小結思考題參考文獻第13章 軟件維護13.1 引言13.2 軟件維護模型13.3 分解切片與軟件維護13.3.1 分解切片13.3.2 使用分解切片的幾條規(guī)則13.4 聯合切片與軟件維護13.4.1 聯合切片13.4.2 利用聯合切片維護軟件13.5 基于切片的軟件維護模型小結思考題參考文獻第14章 復雜性度量14.1 引言14.2 早期基于切片的度量14.3 內聚度量14.3.1 數據切片14.3.2 膠水、強力膠水和粘性14.3.3 內聚度量14.3.4 類內切片和類內聚14.4 耦合度量14.4.1 Java源代碼中存在的耦合問題分析14.4.2 基于切片的Java耦合度量框架小結思考題參考文獻第15章 軟件安全15.1 引言15.2 軟件安全分析的幾種常用方法15.2.1 失效模式效應分析法15.2.2 軟件故障樹分析法15.2.3 Petri網分析法15.3 臨界安全組件與軟件故障樹分析15.3.1 共同模式失效問題15.3.2 臨界安全組件15.4 基于程序切片的共同模式失效分析方法15.4.1 基本原理15.4.2 例子分析小結思考題參考文獻第16章 軟件重用16.1 引言16.2 轉換切片Lj重用16.3 有條件切片與重用16.4 規(guī)約驅動切片與重用16.5 軟件體系結構切片與重用小結思考題參考文獻第17章 應用擴展17.1 程序分析理解17.1.1 Lucia等人的初步思想17.1.2 Korel的大型程序理解手段17.1.3 Kumar的CONCEPT技術17.2 逆向工程和再工程17.2.1 傳統切片17.2.2 接口切片17.3 Tip的類型錯誤定位方法17.3.1 靜態(tài)語義規(guī)約和類型檢17.3.2 項重寫和依賴追蹤17.3.3 切片精確度問題17.4 程序驗證17.5 其他應用小結思考題參考文獻下篇程序切片技術展望第18章 層次切片模型及其實現18.1 面向對象程序的層次結構模型18.2 層次切片模型18.3 SSA算法的基本思想18.4 HSM和SSA的實現18.4.1 代碼信息樹18.4.2 依賴圖的生成算法和切片算法18.5 Jato:Java程序切片工具18.5.1 依賴圖生成層18.5.2 切片生成層18.6 層次切片復雜度小結思考題參考文獻第19章 層次切片模型的應用19.1 靜態(tài)信息流分析19.2 耦合度量19.2.1 方法m1和m2之間的耦合度量19.2.2 類c的耦合度量19.3 內聚度量19.3.1 子功能內聚19.3.2 功能內聚19.4 復雜度度量小結思考題參考文獻第20章 結束語20.1 基本原理總結20.2 基本應用總結20.3 未來研究課題20.3.1 程序切片的形式語義20.3.2 無定型程序切片20.3.3 規(guī)約切片20.3.4 基于規(guī)約程序切片20.3.5 軟件體系結構切片20.3.6 程序切片應用參考文獻附錄附錄A 漢英名詞對照附錄B 縮略語英漢對照