第1章 定义软件质量和经济价值 1
1.1 引言 1
1.2 定义软件质量 6
1.3 定义经济价值和定义软件质量的价值 13
1.3.1 软件和质量对构建自用内部软件的企业的经济价值 14
1.3.2 软件和质量对内部软件用户的经济价值 16
1.3.3 软件和质量对商业软件厂商的经济价值 17
1.3.4 软件和质量对COTS用户和客户的经济价值 18
1.3.5 软件和质量对嵌入式软件公司的经济价值 20
1.3.6 软件和质量对嵌入式软件设备用户的经济价值 21
1.3.7 软件和软件质量对其他企业部门的经济价值 23
1.3.8 同时担当多种角色 23
1.4 总结和结论 23
第2章 估算和度量软件质量 25
2.1 引言 25
2.2 使用功能点度量方法来量化潜在缺陷 27
2.3 软件潜在缺陷 28
2.3.1 软件需求的专门案例 32
2.3.2 软件需求的起源 35
2.3.3 软件需求的规模、结构和完整性 37
2.3.4 最小化软件需求缺陷 39
2.3.5 软件需求缺陷结论 45
2.3.6 编码缺陷的专门案例 46
2.2 估计软件缺陷预防 51
2.3 估计软件缺陷检测和缺陷清除 53
2.4 度量应用程序结构质量 55
2.4.1 度量可靠性 56
2.4.2 度量性能效率 57
2.4.3 度量安全性 57
2.4.4 度量可维护性 58
2.4.5 度量规模 59
2.4.6 应用程序结构质量度量属性总结 59
2.5 结构质量评估案例 62
2.5.1 绕过架构 63
2.5.2 无法控制处理的数据量 64
2.5.3 应用程序资源失衡 65
2.5.4 安全弱点 66
2.5.5 缺乏防御机制 67
2.5.6 对评估结构质量的系统的要求 67
2.6 歪曲软件经济学分析的三大问题 68
2.6.1 软件历史数据的泄漏 69
2.6.2 LOC度量方法的经济学问题 74
2.6.3 单位缺陷成本度量方法的经济学问题 78
2.6.4 案例A:质量低劣 79
2.6.5 案例B:质量良好 79
2.6.6 案例C:零缺陷 80
2.6.7 预测软件潜在缺陷的有用经验法则 81
2.7 总结和结论 82
第3章 软件缺陷预防 84
3.1 引言 84
3.1.1 20世纪70年代IBM进行缺陷预防研究的早期历史 84
3.1.2 缺陷预防方法的协同组合 89
3.1.3 潜在缺陷和缺陷起源 90
3.1.4 缺陷预防、模式、认证的可重用材料 94
3.1.5 软件缺陷预防和应用程序规模 95
3.2 缺陷预防结果的分析 96
3.2.1 敏捷嵌入式用户 97
3.2.2 自动化的质量预测 97
3.2.3 软件质量数据的基准 98
3.2.4 能力成熟度模型集成(CMMI) 99
3.2.5 认证方案 100
3.2.6 单位缺陷成本度量 101
3.2.7 质量成本 104
3.2.8 圈复杂度度量(及相关的复杂度度量) 106
3.2.9 缺陷度量和缺陷跟踪 111
3.2.10 正式审查 113
3.2.11 功能点质量度量 116
3.2.12 ISO质量标准、IEEE质量标准及其他行业标准 121
3.2.13 质量功能展开(QFD) 124
3.2.14 风险分析 126
3.2.15 六西格玛 132
3.2.16 静态分析 133
3.3 总结和结论 135
第4章 测试前缺陷清除 136
4.1 引言 136
4.2 小型项目的测试前缺陷清除 139
4.3 大型系统的测试前缺陷清除 143
4.4 测试前缺陷清除活动的分析 148
4.4.1 个人桌面检查 148
4.4.2 非正式的同行评审 149
4.4.3 文档的自动化文本检查 150
4.4.4 正确性证明 156
4.4.5 Scrum会议 158
4.4.6 Poka Yoke 159
4.4.7 Kaizen 161
4.4.8 结对编程 164
4.4.9 规格说明书的客户评审 166
4.4.10 独立验证和确认 168
4.4.11 SQA评审 169
4.4.12 阶段评审 174
4.4.13 审查(需求、架构、设计、代码及其他可交付成果) 176
4.4.14 用户文档的编辑和校对 187
4.4.15 源代码的自动静态分析 189
4.5 总结和结论 195
第5章 软件测试 196
5.1 引言 196
5.1.1 黑盒与白盒测试 205
5.1.2 功能和非功能测试 206
5.1.3 自动化和手动测试 206
5.1.4 软件测试通用形式的讨论 207
5.1.5 子例程测试 207
5.1.6 PSP/TSP单元测试 208
5.1.7 XP单元测试 208
5.1.8 单元测试 209
5.1.9 新功能测试 210
5.1.10 回归测试 210
5.1.11 集成测试 211
5.1.12 系统测试 212
5.1.13 专门的软件测试 213
5.1.14 压力或容量测试 214
5.1.15 性能测试 214
5.1.16 病毒防护测试 215
5.1.17 渗透测试 217
5.1.18 安全性测试 218
5.1.19 平台测试 219
5.1.20 供应链测试 219
5.1.21 净室测试 220
5.1.22 诉讼测试 220
5.1.23 云测试 221
5.1.24 SOA测试 221
5.1.25 独立测试 222
5.1.26 本土化测试 222
5.1.27 案例研究测试 223
5.1.28 涉及用户或客户的测试形式 224
5.1.29 敏捷测试 224
5.1.30 可用性测试 224
5.1.31 现场Beta测试 225
5.1.32 实验室测试 226
5.1.33 客户验收测试 226
5.1.34 测试计划编制 227
5.1.35 测试用例设计方法 227
5.1.36 测试用例中的错误和bug 229
5.1.37 软件项目的测试阶段数 229
5.1.38 按行业和软件类型分类的不同测试模式 230
5.1.39 按应用程序规模分类的不同测试模式 233
5.1.40 在指控质量低劣的诉讼案中记录的测试阶段 234
5.1.41 使用功能点估算测试用例数 235
5.1.42 使用功能点估算测试人员的数量 238
5.1.43 使用功能点估算测试工作量和成本 240
5.1.44 由开发人员或由专业测试人员执行的测试 244
5.2 总结和结论 245
第6章 发布后缺陷清除 247
6.1 引言 247
6.1.1 发布后缺陷严重程度等级 248
6.1.2 从结构质量的观点看严重程度等级 250
6.1.3 软件的可维护性 255
6.1.4 按软件应用程序用户分类的缺陷发现率 257
6.1.5 无效缺陷报告 258
6.1.6 发生在独特情况下的暂时搁置的缺陷 260
6.1.7 很多客户报告的重复缺陷 260
6.1.8 第一年缺陷发现率 261
6.1.9 度量DDE和DRE 262
6.1.10 发布后缺陷报告的变化 263
6.1.11 报告软件缺陷的方法的变化 266
6.1.12 缺陷在报告后由谁修复 269
6.1.13 案例1:开发人员负责缺陷修复 269
6.1.14 案例2:维护专家负责缺陷修复 270
6.1.15 案例研究对比 270
6.1.16 由低劣质量引起的诉讼 271
6.1.17 发布后的缺陷修复成本模式 272
6.1.18 参与缺陷修复的软件职业团队 273
6.1.19 检查发布后缺陷修复的自变量 277
6.1.20 按功能点计算的应用程序规模 278
6.1.21 软件应用程序中容易出错模块 284
6.2 来自发布后缺陷的用户和行业的成本 286
6.2.1 安全漏洞对企业和政府机构的影响 289
6.2.2 用于缺陷报告和修复安装的客户后勤 290
6.2.3 案例1:一个小公司的小型应用程序 292
6.2.4 案例2:大公司的大型应用程序 293
6.2.5 在维护和发布后缺陷修复中的度量问题 296
6.3 总结和结论 300
第7章 软件质量的经济学分析 301
7.1 引言 301
7.2 软件的经济价值 302
7.2.1 度量价值的方法 302
7.2.2 资金投入批准和应用程序规模 308
7.2.3 软件构建难度对软件质量的影响 309
7.2.4 来自于软件的收入产生 313
7.2.5 软件行业和其他行业之间的差异 315
7.2.6 软件带来的成本降低 316
7.3 低质量和高质量软件的经济影响 320
7.3.1 软件开发和维护 321
7.3.2 软件作为市场上销售的商品 321
7.3.3 软件作为减少人力的一种方法 322
7.3.4 软件和创新性的新型产品 322
7.3.5 技术债务:度量软件质量对软件成本影响的方法 324
7.3.6 量化商业价值的框架 327
7.3.7 超越功能质量 330
7.3.8 软件结构对质量的影响 330
7.3.9 员工培训对质量的影响 331
7.3.10 职业资格认证对质量的影响 332
7.3.11 技术投资对质量的影响 332
7.3.12 项目管理对质量的影响 333
7.3.13 质量控制方法论和工具对质量的影响 334
7.3.14 高质量和低质量对软件进度的影响 336
7.3.15 高质量和低质量对软件人员配置的影响 337
7.3.16 高质量和低质量对软件开发工作量的影响 338
7.3.17 高质量和低质量对开发生产率的影响 339
7.3.18 高质量和低质量对软件开发成本的影响 339
7.3.19 高质量和低质量对每个功能点的开发成本的影响 340
7.3.20 高质量和低质量对项目取消率的影响 341
7.3.21 高质量和低质量对取消项目的时间安排的影响 341
7.3.22 高质量和低质量对取消的项目工作量的影响 343
7.3.23 高质量和低质量对相对平均项目的工作量的影响 343
7.3.24 高质量和低质量对软件测试阶段的影响 344
7.3.25 高质量和低质量对测试占开发百分比的影响 346
7.3.26 高质量和低质量对每个功能点的测试用例的影响 347
7.3.27 高质量和低质量对创建的测试用例数的影响 347
7.3.28 高质量和低质量对测试覆盖的影响 348
7.3.29 专业测试人员对高质量和低质量的影响 349
7.3.30 高质量和低质量对软件潜在缺陷的影响 350
7.3.31 高质量和低质量对总体软件缺陷的影响 352
7.3.32 高质量和低质量对DDE的影响 352
7.3.33 高质量和低质量对DRE的影响 353
7.3.34 高质量和低质量对总缺陷清除的影响 354
7.3.35 高质量和低质量对已交付给客户的缺陷的影响 355
7.3.36 高质量和低质量对每功能点交付的缺陷的影响 355
7.3.37 高质量和低质量对交付的缺陷严重程度等级的影响 355
7.3.38 高质量和低质量对每功能点严重缺陷数的影响 357
7.3.39 高质量和低质量对软件可靠性的影响 357
7.3.40 高质量和低质量对维护和支持的影响 358
7.3.41 高质量和低质量对维护和支持成本的影响 359
7.3.42 高质量和低质量对维护缺陷容量的影响 360
7.3.43 高质量和低质量对软件改进的影响 361
7.3.44 高质量和低质量对改进成本的影响 362
7.3.45 高质量和低质量对维护和改进人员配置的影响 363
7.3.46 高质量和低质量对5年的总工作量的影响 363
7.3.47 高质量和低质量对TCO的影响 366
7.3.48 高质量和低质量对COQ的影响 369
7.3.49 高质量和低质量对每个功能点的TCO和COQ的影响 372
7.3.50 高质量和低质量对应用程序使用寿命的影响 376
7.3.51 高质量和低质量对软件应用程序有形资产价值的影响 377
7.3.52 高质量和低质量对ROI的影响 378
7.3.53 高质量和低质量对于被取消项目的影响 378
7.3.54 高质量和低质量对取消成本差异的影响 379
7.3.55 高质量、平均质量和低质量的软件项目的分布 380
7.4 总结和结论 381
7.4.1 对于10000个功能点的高质量结果 381
7.4.2 10000个功能点的低质量软件结果 382
参考文献和延伸阅读 384