●章 緒論 1
1.1 序言 1
1.2 軟件維護 2
1.3 軟件演化 3
1.4 軟件演化的分類 3
1.5 軟件演化的層次 4
1.6 軟件演化過程 6
1.7 當前軟件演化研究概述 7
1.7.1 語言層面上的研究 7
1.7.2 模型方面的研究 8
1.7.3 運行環境方面的研究 9
1.7.4 動態配置方法的研究 10
1.8 軟件演化研究的意義 11
1.9 本書的特點 12
參考文獻 13
第2章 可演化性預測 15
2.1 引言 15
2.2 預備知識 17
2.2.1 分組處理方法 17
2.2.2 半監督標簽傳播算法 18
2.3 基於半監督數據分組的軟件可演化性預測模型 18
2.3.1 指標度量 19
2.3.2 數據標簽傳播 20
2.3.3 不平衡數據采樣 21
2.3.4 基於數據分組方法可演化性預測模型 22
2.4 方法有效性驗證 23
2.4.1 評價指標 23
2.4.2 實驗過程 24
2.4.3 實驗結果與分析 26
參考文獻 29
第3章 面向行為主題的特征定位方法 32
3.1 引言 32
3.1.1 動態方法 32
3.1.2 靜態方法 33
3.1.3 基於文本的方法 33
3.1.4 混合方法 35
3.2 相關知識 35
3.2.1 TF-IDF 35
3.2.2 LSI 36
3.2.3 Kmeans聚類算法 37
3.3 面向行為主題的特征定位方法 37
3.3.1 面向行為主題的特征定位方法概述 37
3.3.2 軟件行為獲取 38
3.3.3 執行跡主題建模 39
3.3.4 定位特征 41
3.4 方法有效性驗證 42
3.4.1 實驗數據 42
3.4.2 驗證過程 43
3.4.3 實驗標準的定義 44
3.4.4 實驗結果與分析 45
3. 5 小結 48
參考文獻 49
第4章 特征定位算法的改進 51
4.1 引言 52
4.2 相關知識 54
4.2.1 LDA 54
4.2.2 doc2vec 55
4.2.3 集成方法 55
4.3 面向特征定位問題的相似性計算方法 56
4.3.1 詞性過濾 56
4.3.2 相似性計算 58
4.4 方法有效性驗證 63
4.4.1 驗證數據 63
4.4.2 評價標準 63
4.4.3 驗證過程 64
4.4.4 驗證結果 66
4.5 小結 69
參考文獻 69
第5章 影響範圍分析 71
5.1 引言 71
5.1.1 靜態分析方法 71
5.1.2 動態分析方法 72
5.1.3 基於軟件資源庫挖掘的分析方法 72
5.1.4 混合分析方法 72
5.2 相關知識 73
5.2.1 傳遞閉包 73
5.2.2 關聯規則學習 74
5.3 基於文本、執行跡的混合影響範圍分析方法 75
5.3.1 執行跡獲取 75
5.3.2 基於領域知識的執行跡降噪 76
5.3.3 波及效應分析 78
5.4 有效性驗證 85
5.4.1 驗證過程 86
5.4.2 評價標準 86
5.4.3 結果 89
5.5 結論 94
參考文獻 94
第6章 超協調軟件建模基礎 96
6.1 引言 96
6.2 相關知識 97
6.2.1 軟件演化模型的非協調性 97
6.2.2 多值時序邏輯 98
6.2.3 模型檢測 99
6.3 超協調軟件模型 100
6.4 基於SAM的軟件演化活動驗證 103
6.4.1 SAM模型的屬性 103
6.4.2 基於多值時序邏輯的模型檢測算法基礎 105
參考文獻 113
第7章 動態演化算法 115
7.1 引言 115
7.2 代碼的靜止狀態 115
7.3 動態演化算法 117
7.3.1 刪除算法 117
7.3.2 添加算法 118
7.3.3 替換算法 119
7.4 有效性驗證 120
7.4.1 待演化繫統用例 121
7.4.2 待演化繫統構件圖 121
7.4.3 待演化繫統的SAM模型 122
7.4.4 待演化繫統演化需求 125
7.4.5 執行動態演化算法 125
7.5 小結 129
參考文獻 129
第8章 結構約束性確認 130
8.1 引言 130
8.2 軟件確認研究綜述 130
8.3 軟件的行為 131
8.4 事務原子性約束和保序性約束 133
8.5 繫統活性和公平性 135
8.6 小結 137
參考文獻 138
第9章 功能語義約束確認 139
9.1 研究綜述 139
9.2 確認過程 139
9.2.1 源數據獲取及處理 140
9.2.2 確認過程 141
9.3 有效性驗證 142
9.3.1 實驗數據及其獲取 142
9.3.2 實驗過程 143
9.3.3 結果和分析 144
9.4 小結 148
參考文獻 148
內容簡介
軟件演化的本質是由用戶預期偏差所驅動的對軟件的修改過程。要成功實施演化活動,涉及兩個核心問題:“演化什麼”和“如何演化”。其中“演化什麼”定義在何處和什麼範圍內對軟件繫統實施演化活動;“如何演化”明確實現演化活動的方法、理論和技術。從這個意義上來說“演化什麼”是“如何演化”的前提。《軟件演化關鍵技術》圍繞上述兩個核心問題,從特征定位、影響範圍分析、演化算法和演化評價四個方面展開論述,提出了一套數據驅動的軟件演化方法。