描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111647607
内容简介
本书深入探讨了软件数据分析的技术与艺术,来自微软、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 Mozilla项目56
4.3.2 WebKit项目57
4.3.3 Blink项目57
4.4 生命周期分析57
4.4.1 Mozilla 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.9 评估的影响335
15.9.1 示例:自动化构建管理335
15.9.2 示例:风险文件管理的部署336
15.9.3 客户质
译者序
本书作者
第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 Mozilla项目56
4.3.2 WebKit项目57
4.3.3 Blink项目57
4.4 生命周期分析57
4.4.1 Mozilla 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.9 评估的影响335
15.9.1 示例:自动化构建管理335
15.9.2 示例:风险文件管理的部署336
15.9.3 客户质
评论
还没有评论。