出版者的话
译者序
本书作者
章软件数据分析的过去、现在与未来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.3PR-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.3n-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.1Mozilla项目56
4.3.2WebKit项目57
4.3.3Blink项目57
4.4生命周期分析57
4.4.1MozillaFirefox项目57
4.4.2WebKit项目60
4.4.3Blink项目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.1Eclipse使用型数据收集器68
5.3.2Mylyn和EclipseMylynMonitor75
5.3.3CodingSpectator77
5.3.4为VisualStudio创建收集工具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.2LDA在软件分析中的应用107
6.3LDA工作原理108
6.4LDA教程110
6.4.1LDA来源110
6.4.2获取软件工程数据111
6.4.3文本分析和数据转换111
6.4.4LDA应用113
6.4.5LDA输出概要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.1CVSS概述169
8.3.2CVSS应用示例170
8.3.3CVSS的隐患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.2OSS代码评审179
9.3.3微软的代码评审180
9.3.4基于Google的Gerrit代码评审180
9.3.5GitHub中的拉取请求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.2Linux中多次提交的分支如何评审192
9.6.3封闭式编码:GitHub和Gerrit上的分支或修订193
9.6.4理解拉取请求为什么被拒绝193
9.7结论194
参考文献195
0章挖掘安卓应用程序中的异常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.4CHABADA作为恶意软件检测器208
10.4实验评估209
10.4.1RQ1:异常检测209
10.4.2RQ2:特征选择211
10.4.3RQ3:恶意软件检测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
1章软件制品间的修改耦合:从历史修改中学习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
第三部分实战经验
2章软件数据分析在工业实践中的应用:当研究遇上实践250
12.1引言250
12.2背景251
12.2.1Fraunhofer在软件度量方面的经验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
3章在软件工程中使用数据进行决策:为软件健康提供一种分析方法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
4章基于社区数据进行开源软件使用的风险管理287
14.1引言287
14.2背景288
14.2.1风险和开源软件的基本概念288
14.2.2建模和分析技术290
14.3OSS使用风险管理的一种方法292
14.4OSS社区结构和行为分析:XWiki案例293
14.4.1OSS社区的社交网络分析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.1OSS社区的数据分析308
14.6.2通过目标导向技术进行风险建模和分析309
14.7结论309
致谢310
参考文献310
5章大型企业软件状态评估—12年历程312
15.1引言312
15.2过程和评估的演变313
15.3Avaya软件状态报告的影响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.9评估的影响335
15.9.1示例:自动化构建管理335
15.9.2示例:风险文件管理的部署336
15.9.3客户质量度量的改进336
……
6章从软件解析实践中获得的经验教训341
第四部分不错主题
7章提高软件质量的代码注释分析370
8章基于日志挖掘的目标驱动型软件根本原因分析389
9章分析产品发布计划417
第五部分大规模数据分析(大数据)
第20章Boa:一种支持超大规模MSR研究的使能语言和基础设施446
第21章可扩展的并行化分布式规约挖掘469
参考文献486