軟件數據分析的科學與藝術 The Art and Science of Analyzing Software Data

Christian Bird , Tim Menzies ,Thomas Zimmermann 孫小兵李斌汪盛譯譯

商品描述

本書深入探討了軟件數據分析的技術與藝術,來自微軟、
NASA等的多位軟件科學家和數據科學家分享了他們的實踐經驗。
書中內容涵蓋安全數據分析、代碼審查、日誌文檔、用戶監控等,
技術領域涉足共同修改分析、文本分析、主題分析以及概念分析等方面,
還包括發布計劃和源代碼註釋分析等高級主題。
通過閱讀本書,讀者將了解如何在工業領域和開源領域應用數據分析,
以及如何向利益相關者和決策者呈現數據分析結果。

目錄大綱

出版者的話
譯者序
本書作者
第1章軟件數據分析的過去、現在與未來1
1.1定義1
1.2過去(起源)3
1.2.1代:初步工作3
1.2.2第二代:學術實驗4
1.2 .3第三代:工業實驗4
1.2.4第四代:數據科學無處不在4
1.3現狀5
1.4結論8
致謝8
參考文獻9
部分技術教程

第2章利用形式概念分析挖掘模式及其違約12
2.1引言12
2.2模式和塊13
2.3計算所有塊15
2.4使用Colibri挖掘購物車17
2.5違約19
2.6查找違約20
2.7是兩種模式還是一種違約?21
2.8性能22
2.9編碼順序23
2.10內聯24
2.11相關工作24
2.11.1挖掘模式24
2.11.2挖掘違約25
2.11.3 PR-Miner26
2.12結論26
致謝27
參考文獻27

第3章軟件項目中的文本分析29
3.1引言29
3.2軟件項目的文本數據及其檢索29
3.2.1文本數據29
3.2.2文本檢索32
3.3人工編碼33
3.3.1編碼過程34
3.3.2挑戰36
3.4自動化分析37
3.4.1主題建模37
3.4. 2詞性標記和關係抽取38
3.4.3 n-gram模型39
3.4.4克隆檢測40
3.4.5可視化42
3.5兩個工業案例44
3.5.1需求工程的痛點:需求工程調查45
3.5.2需求規約中的克隆檢測49
3.6結論52
參考文獻52

第4章從軟件開發製品中知識54
4.1問題描述54
4.2軟件製品生命週期模型54
4.2.1示例:補丁生命週期55
4.2.2模型抽取56
4.3代碼評審56
4.3.1 Mla項目56
4.3.2 WebKit項目57
4.3.3 Blink項目57
4.4生命週期分析57
4.4.1 Mla Firefox項目57
4.4.2 WebKit項目60
4.4.3 Blink項目61
4.5其他應用62
4.6結論62
參考文獻63

第5章分析IDE使用型數據的實用指南64
5.1引言64
5.2使用型數據的研究概念65
5.2.1使用型數據概念及其分析意義65
5.2.2基於目標選擇相關數據66
5.2.3隱私問題66
5.2.4研究範圍67
5.3如何收集數據67
5.3.1 Eclipse使用型數據收集器68
5.3.2 Mylyn和Eclipse Mylyn Monitor75
5.3.3 CodingSpectator 77
5.3.4為Visual Studio創建收集工具81
5.4如何分析使用型數據87
5.4.1數據匿名87
5.4.2使用型數據的格式87
5.4.3幅度分析88
5.4.4分類分析88
5.4.5序列分析89
5.4.6狀態模型分析90
5.4.7關鍵事件技術92
5.4.8其他來源的數據93
5.5使用型數據學習的局限性93
5.6結論94
5.7代碼清單95
致謝104
參考文獻104

第6章隱含狄利克雷分佈:從軟件工程數據中抽取主題106
6.1引言106
6.2 LDA在軟件分析中的應用107
6.3 LDA工作原理108
6.4 LDA教程110
6.4.1 LDA來源110
6.4.2獲取軟件工程數據111
6.4.3文本分析和數據轉換111
6.4.4 LDA應用113
6.4.5 LDA輸出概要113
6.5陷阱和有效性威脅117
6.5.1標準有效性117
6.5.2構造有效性119
6.5.3內部有效性119
6.5.4外部有效性120
6.5.5可信性120
6.6結論120
參考文獻121

第7章分析產品和過程數據的工具與技術123
7.1引言123
7.2一種合理的分析流程124
7.2.1獲取數據124
7.2.2選擇數據125
7.2.3處理數據126
7.2.4匯總數據127
7.2.5管道128
7.3源代碼分析128
7.3.1啟發式分析128
7.3.2詞法分析129
7.3.3語法和語義分析132
7.3.4第三方工具132
7.4編譯代碼分析137
7.4.1彙編語言137
7.4.2機器碼138
7.4.3命名修飾處理140
7.4.4字節碼140
7.4.5動態鏈接141
7.4.6庫142
7.5配置管理數據分析144
7.5.1獲取存儲庫數據144
7.5.2分析元數據145
7.5.3分析時間序列快照148
7.5.4檢出庫分析150
7.5.5結合文件與元數據分析151
7.5.6組裝存儲庫152
7.6數據可視化153
7.6.1圖153
7.6.2說明圖156
7.6.3圖表157
7.6.4地圖159
7.7結論161
參考文獻161

第二部分關注的數據和問題
第8章安全數據分析166
8.1漏洞166
8.2安全性數據的注意事項167
8.2. 1注意事項1:有漏洞是正常的167
8.2.2注意事項2:“更多的漏洞”並不總是意味著“更不安全”167
8.2.3注意事項3:設計級別的缺陷通常不會被追踪168
8.2.4注意事項4:安全性是被消極定義的168
8.3度量漏洞嚴重性169
8.3.1 CVSS概述169
8.3.2 CVSS應用示例170
8.3.3 CVSS的隱患170
8.4收集、分析漏洞數據的方法170
8.4.1步驟1:追踪漏洞從報告到修復的全過程171
8.4.2步驟2 :聚合源控制日誌171
8.4.3步驟3:確定漏洞覆蓋率172
8.4.4步驟4:根據工程進行分類173
8.5安全數據所提供的信息174
8.5.1漏洞的社會技術要素174
8.5.2漏洞具有長期復雜的歷史175
8.6結論176
參考文獻176

第9章混合的挖掘代碼評審數據的方法:多次提交評審與拉取請求的示例與研究178
9.1引言178
9.2使用混合方法處理的動機178
9.3評審過程和數據179
9.3.1軟件審查179
9.3.2 OSS代碼評審179
9.3.3微軟的代碼評審180
9.3.4基於Google的Gerrit代碼評審180
9.3.5 GitHub中的拉取請求180
9.3.6數據度量和屬性181
9.4定量的可重現性分析:分支的代碼評審182
9.4.1研究問題1:每次評審的提交183
9.4.2研究問題2:提交的大小183
9.4.3研究問題3:評審間隔184
9.4.4研究問題4:評審者的參與過程184
9.4.5小結185
9.5定性分析方法186
9.5.1採樣方法186
9.5.2數據收集187
9.5.3微軟數據的定性分析189
9.5.4將紮根理論應用於歸檔數據以理解OSS評審189
9.6三角互證190
9.6.1使用調查來三角互證定性結果191
9.6.2 Linux中多次提交的分支如何評審192
9.6 .3封閉式編碼:GitHub和Gerrit上的分支或修訂193
9.6.4理解拉取請求為什麼被拒絕193
9.7結論194
參考文獻195

第10章挖掘安卓應用程序中的異常198
10.1引言198
10.2基於描述對應用進行聚類200
10.2.1收集應用程序200
10.2.2基於NLP對描述進行預處理201
10.2.3基於LDA識別主題201
10.2.4基於K-means算法對應用進行聚類203
10.2.5找到佳的集群數量203
10.2.6生成的應用程序集群204
10.3通過API識別異常205
10.3.1提取API的使用205
10.3.2敏感和罕見的API206
10.3.3基於距離的異常值檢測207
10.3.4 CHABADA作為惡意軟件檢測器208
10.4實驗評估209
10.4.1 RQ1:異常檢測209
10.4.2 RQ2:特徵選擇211
10.4. 3 RQ3:惡意軟件檢測211
10.4.4有效性的限制和威脅214
10.5相關工作215
10.5.1挖掘APP描述215
10.5.2行為和描述不匹配215
10.5.3檢測惡意應用216
10.6結論與展望216
致謝216
參考文獻216

第11章軟件製品間的修改耦合:從歷史修改中學習219
11.1引言219
11.2修改耦合220
11.2.1為什麼製品要一起修改?220
11.2.2使用修改耦合的好處221
11.3修改耦合的識別方法222
11.3.1原始計數222
11.3.2關聯規則228
11.3.3時間序列分析232
11.4識別修改耦合的挑戰234
11.4.1提交習慣的影響234
11.4.2檢測修改耦合的實用建議235
11.4.3其他方法237
11.5修改耦合的應用238
11.5.1修改預測和修改影響分析238
11.5.2設計缺陷的發現和重構240
11.5.3評估軟件體系架構243
11.5.4協作需求與社會技術的一致性243
11.6結論244
參考文獻244

第三部分實戰經驗
第12章軟件數據分析在工業實踐中的應用:當研究遇上實踐250
12.1引言250
12.2背景251
12.2.1 Fraunhofer在軟件度量方面的經驗251
12.2.2相關術語252
12.2.3經驗方法252
12.2.4在實踐中應用軟件度量—常規方法253
12.3工業中實施度量方案的六個關鍵問題254
12.3.1利益相關者、需求和規劃:成功度量方案的基礎254
12.3. 2度量收集:如何收集、何時收集、誰收集256
12.3.3空有數據,沒有信息:當數據不是你所需要或期望的257
12.3.4領域專家的關鍵作用259
12.3.5順應不斷變化的需求261
12.3.6向用戶傳達分析結果的有效方法262
12.4結論264
參考文獻265

第13章在軟件工程中使用數據進行決策:為軟件健康提供一種分析方法267
13.1引言267
13.2軟件工程度量簡史268
13.3建立明確的目標269
13.3.1基準270
13.3.2產品目標271
13.4度量評審271
13.4.1上下文度量273
13.4.2約束性度量274
13.4.3開發度量276
13.5軟件項目數據分析面臨的挑戰278
13.5.1數據收集278
13.5.2數據解釋280
13.6示例:通過數據的使用改變產品開發281
13.7用數據驅動軟件工程過程284
參考文獻285

第14章基於社區數據進行開源軟件使用的管理287
14.1引言287
14.2背景288
14.2.1和開源軟件的基本概念288
14.2.2建模和分析技術290
14.3 OSS使用管理的一種方法292
14.4 OSS社區結構和行為分析:XWiki案例293
14.4.1 OSS社區的社交網絡分析294
14.4.2軟件質量、OSS社區行為和OSS項目的統計分析294
14.4.3通過貝葉斯網絡評估指標298
14.4.4基於模型對開源軟件生態建模和推理300
14.4.5整合分析以進行綜合評估302
14.5一個評估的案例:Moodbile案例303
14.6相關工作308
14.6.1 OSS社區的數據分析308
14.6.2通過目標導向技術進行建模和分析309
14.7結論309
致謝310
參考文獻310

第15章大型企業軟件狀態評估—12年曆程312
15.1引言312
15.2過程和評估的演變313
15.3 Avaya軟件狀態報告的影響315
15.4評估方法和機制315
15.5數據來源318
15.5.1數據精度320
15.5.2分析的數據類型321
15.6分析示例321
15.6.1人員分析322
15.6.2可預測性分析324
15.6.3文件管理325
15.7軟件開發實踐328
15.7.1七個原始的關鍵軟件領域329
15.7.2四個有代表性的跟踪實踐330
15.7.3實踐領域示例:設計質量330
15.7.4個體實踐的示例:靜態分析331
15.8評估跟踪:和影響333
15.8.1示例334
15.8.2的部署335
15.估的影響335
15.9.1示例:自動化構建管理335
15.9.2示例:文件管理的部署336
15.9.3客戶質量度量的改進336
15.10結論337
15.11附錄:用於輸入會話的示例問題338
致謝339
參考文獻339

第16章從軟件解析實踐中獲得的經驗教訓341
16.1引言341
16.2問題選擇342
16.3數據收集344
16.3.1數據集344
16.3.2數據抽取350
16.4描述性解析352
16.4.1數據可視化352
16.4.2統計報告353
16.5預測性解析356
16.5.1各種條件下的預測模型356
16.5.2性能評估359
16.5.3規範性解析362
16.6未來之路364
參考文獻365

第四部分主題
第17章提高軟件質量的代碼註釋分析370
17.1引言370
17.1.1研究及分析代碼註釋的益處370
17.1.2研究及分析代碼註釋面臨的挑戰372
17.1.3針對規約挖掘和缺陷檢測的代碼註釋分析372
17.2文本分析:技術、工具和度量374
17.2.1自然語言處理374
17.2.2機器學習374
17.2.3分析工具375
17.2.4評估度量指標375
17.3代碼註釋的相關研究376
17.3.1代碼註釋的內容376
17.3.2代碼註釋的常見主題376
17.4面向規約挖掘和缺陷檢測的自動化代碼註釋分析377
17.4.1應該抽取什麼?378
17.4.2應該如何抽取信息?380
17.4.3閱讀383
17.5 API文檔的研究和分析384
17.5.1 API文檔的研究384
17.5.2 API文檔的分析384
17.6未來的方向和挑戰385
參考文獻386

第18章基於日誌挖掘的目標驅動型軟件根本原因分析389
18.1引言389
18.2根本原因分析方法390
18.2.1基於規則的方法390
18.2.2基於概率統計的方法390
18.2.3基於模型的方法390
18.3根本原因分析框架總覽391
18.4根本原因分析的診斷建模391
18.4.1目標模型391
18.4.2反目標模型393
18.4.3模型註解393
18.4.4貸款申請場景394
18.5日誌約簡396
18.5.1潛在語義索引397
18.5.2概率潛在語義索引397
18.6推理技術397
18.7內部故障引起失效的根本原因分析399
18.7.1知識表示399
18.7.2診斷405
18.8外部威脅引起失效的根本原因分析407
18.8.1反目標模型規則408
18.8.2推理408
18.9實驗評估410
18.9.1檢測內部故障的根本原因410
18.9.2檢測外部操作的根本原因411
18.9 .3性能評估413
18.10結論414
參考文獻415

第19章分析產品發布計劃417
19.1引言和動機417
19.2數據密集型發布計劃問題的分類418
19.2.1發布計劃中應包含什麼418
19.2.2發布計劃的主題418
19.2.3發布計劃的時間418
19.2.4發布計劃的質量419
19.2.5可操作的發布計劃419
19.2.6發布計劃的技術債420
19.2.7涉及系列產品的發布計劃420
19.3軟件發布計劃的信息需求420
19.3.1特徵421
19.3.2特徵價值421
19.3.3特徵依賴422
19.3.4利益相關者422
19.3.5利益相關者意見和優先事項422
19.3.6發布準備423
19.3.7市場趨勢423
19.3.8資源消耗和限制423
19.3.9結果423
19.4基於分析法的開放式創新範式424
19.4.1 AOI@RP平台424
19.4.2分析技術425
19.5分析發布計劃—案例研究428
19.5.1互聯網電視案例研究—背景與內容428
19.5.2問題定義429
19.5.3案例研究過程430
19.5.4特徵依賴和協同作用下的發布計劃431
19.5.5實時的發布計劃433
19.5.6基於眾包聚類的重新規劃436
19.5.7結果討論437
19.6結論與展望438
19.7附錄:特徵依賴約束440
致謝440
參考文獻441

第五部分大規模數據分析(大數據)
第20章Boa:一種支持超大規模MSR研究的使能語言和基礎設施446
20.1目標446
20.2 Boa入門指南446
20.2.1 Boa的架構446
20.2.2提交任務448
20.2.3獲取結果449
20.3 Boa的語法和語義449
20.3.1基本類型和復合類型450
20.3.2輸出聚合451
20.3.3用量詞表示循環453
20.3 .4用戶自定義函數453
20.4挖掘項目和倉庫元數據454
20.4.1挖掘軟件倉庫的類型454
20.4.2示例1:十大編程語言挖掘455
20.4.3內置函數456
20.4.4示例2:挖掘缺陷修復的修訂版本457
20.4.5示例3:計算項目的攪動率457
20.5使用訪問者模式挖掘源代碼458
20.5.1挖掘源代碼的類型458
20.5.2內置函數460
20.5.3訪問者語法461
20.5. 4示例4:挖掘抽象語法樹統計461
20.5.5自定義遍歷策略462
20.5.6示例5:挖掘添加的空檢查463
20.5.7示例6:找到不可達的代碼464
20.6可複現研究的指南465
20.7結論466
20.8動手實踐466
參考文獻467

第21章可擴展的並行化分佈式規約挖掘469
21.1引言469
21.2背景471
21.2.1規約挖掘算法471
21.2.2分佈式計算472
21.3分佈式規約挖掘473
21.3.1原則473
21.3.2特定算法的並行化475
21.4實現和實驗評估480
21.4.1數據集和實驗設置480
21.4.2研究問題和結果480
21.4.3有效性威脅和當前局限性484
21.5相關工作484
21.5.1規約挖掘及其應用485
21.5.2軟件工程中的MapReduce485
21.5.3並行數據挖掘算法486
21.6結論與展望486
參考文獻486