《软件工程技术丛书:软件质量经济学》是软件质量经济学领域的唯一著作,也被誉为软件工程领域最重要的图书之一,由软件工程领域的泰斗撰写。全书以大量行业数据和真实案例为驱动,从经济学角度讲解了度量软件质量的各项指标和方法,从而为有效管理软件质量和项目进度提供帮助和指导,更重要的是,本书还深入讨论了软件质量的经济学影响和商业价值。
《软件工程技术丛书:软件质量经济学》共7章,第1章定义了软件质量和经济价值,分析了软件质量对不同企业和用户的经济价值;第2章阐述了软件质量的估算和度量,介绍了功能点度量指标和结构质量度量指标;第3章讨论了软件缺陷预防,介绍了软件缺陷预防的历史及缺陷预防结果的分析方法;第4章研究测试前缺陷清除,主要讨论了同行评审、正式审查及静态分析等25种不同的测试前缺陷清除方法;第5章介绍软件测试,介绍了40余种软件测试方法;第6章讨论发布后缺陷清除,分析了来自发布后缺陷的用户和行业的成本;第7章整合了所有的数据,给出了低质量和高质量软件的经济影响。
1.1 引言
本书讨论两个多年来一直模棱两可、很难讲明白的主题:软件质量和经济价值。
正如前言中所提到的,模棱两可的原因是存在很多不同的观点,每种观点对这两个术语的解释都不相同。比如,软件质量的含义对客户来说和对开发人员来说就是不同的。经济价值的含义对厂商来说和对消费者来说也是不一样的。对厂商来说,收益是价值的关键因素,而对于消费者来说,工作特性才是首要的价值。这些会在本书后续章节加以讨论。
通过研究广泛的观点并从每个观点中提取其要点,作者希望能给出可行的、相对比较明确的定义。
本书中所说的软件质量,远远超出了功能性质量(除了可用性和可靠的性能外,客户可能会作出反应的这种事)。质量当然也包括这些方面,但可以进一步扩展到非功能性质量(软件对其应该做的事做得有多好)和结构化质量(随着业务需求因业务条件的变化而变化,软件持续满足业务需求的能力有多好)。软件质量为什么重要
在工业化国家,人们从6岁甚至更早就开始使用计算机。而在美国,16岁的年轻人中将近60%有计算机和软件使用知识。某些技术高超的黑客被捕时只有16岁。
根据美国人口普查局的估计,2010年美国人口约为309800135人。每天使用计算机进行工作或娱乐,或者两者兼而有之的人数占总人口的30%。也就是说,大约有92940040个美国人每天都会使用计算机。
大约65%仑的美国人通过各种方式使用嵌入式软件,如智能手机、数码相机、电子表、汽车制动系统和引擎控制装置、家用电器和娱乐设备。很多人没有意识到嵌入式软件在控制这些设备,但事实就是这样。换句话说,大约有201370087个美国人拥有并使用含有嵌入式软件的设备。
几乎100%的美国人将个人数据存储在各种各样的在线数据库中,这些数据库可能由美国人口调查局、美国国家税务局、、美国州政府、市政府、银行、保险公司、信用卡公司以及信用评级公司来维护。
再来看一下商业方面。来自多方面的数据(如《福布斯》、Manta、《商业周刊》、美国商务部劳工统计局和其他来源)显示,美国有大约22553779家公司(截至2010年年底)。
……
对本书的赞誉
译者序
序
前言
第1章 定义软件质量和经济价值
1.1 引言
1.2 定义软件质量
1.3 定义经济价值和定义软件质量的价值
1.3.1 软件和质量对构建自用内部软件的企业的经济价值
1.3.2 软件和质量对内部软件用户的经济价值
1.3.3 软件和质量对商业软件厂商的经济价值
1.3.4 软件和质量对COTS用户和客户的经济价值
1.3.5 软件和质量对嵌入式软件公司的经济价值
1.3.6 软件和质量对嵌入式软件设备用户的经济价值
1.3.7 软件和软件质量对其他企业部门的经济价值
1.3.8 同时担当多种角色
1.4 总结和结论
第2章 估算和度量软件质量
2.1 引言
2.2 使用功能点度量方法来量化潜在缺陷
2.3 软件潜在缺陷
2.3.1 软件需求的专门案例
2.3.2 软件需求的起源
2.3.3 软件需求的规模、结构和完整性
2.3.4 最小化软件需求缺陷
2.3.5 软件需求缺陷结论
2.3.6 编码缺陷的专门案例
2.2 估计软件缺陷预防
2.3 估计软件缺陷检测和缺陷清除
2.4 度量应用程序结构质量
2.4.1 度量可靠性
2.4.2 度量性能效率
2.4.3 度量安全性
2.4.4 度量可维护性
2.4.5 度量规模
2.4.6 应用程序结构质量度量属性总结
2.5 结构质量评估案例
2.5.1 绕过架构
2.5.2 无法控制处理的数据量
2.5.3 应用程序资源失衡
2.5.4 安全弱点
2.5.5 缺乏防御机制
2.5.6 对评估结构质量的系统的要求
2.6 歪曲软件经济学分析的三大问题
2.6.1 软件历史数据的泄漏
2.6.2 LOC度量方法的经济学问题
2.6.3 单位缺陷成本度量方法的经济学问题
2.6.4 案例A:质量低劣
2.6.5 案例B:质量良好
2.6.6 案例C:零缺陷
2.6.7 预测软件潜在缺陷的有用经验法则
2.7 总结和结论
第3章 软件缺陷预防
3.1 引言
3.1.1 20世纪70年代IBM进行缺陷预防研究的早期历史
3.1.2 缺陷预防方法的协同组合
3.1.3 潜在缺陷和缺陷起源
3.1.4 缺陷预防、模式、认证的可重用材料
3.1.5 软件缺陷预防和应用程序规模
3.2 缺陷预防结果的分析
3.2.1 敏捷嵌入式用户
3.2.2 自动化的质量预测
3.2.3 软件质量数据的基准
3.2.4 能力成熟度模型集成(CMMI)
3.2.5 认证方案
3.2.6 单位缺陷成本度量
3.2.7 质量成本
3.2.8 圈复杂度度量(及相关的复杂度度量)
3.2.9 缺陷度量和缺陷跟踪
3.2.10 正式审查
3.2.11 功能点质量度量
3.2.12 ISO 质量标准、IEEE质量标准及其他行业标准
3.2.13 质量功能展开(QFD)
3.2.14 风险分析
3.2.15 六西格玛
3.2.16 静态分析
3.3 总结和结论
第4章 测试前缺陷清除
4.1 引言
4.2 小型项目的测试前缺陷清除
4.3 大型系统的测试前缺陷清除
4.4 测试前缺陷清除活动的分析
4.4.1 个人桌面检查
4.4.2 非正式的同行评审
4.4.3 文档的自动化文本检查
4.4.4 正确性证明
4.4.5 Scrum 会议
4.4.6 Poka Yoke
4.4.7 Kaizen
4.4.8 结对编程
4.4.9 规格说明书的客户评审
4.4.10 独立验证和确认
4.4.11 SQA评审
4.4.12 阶段评审
4.4.13 审查(需求、架构、设计、代码及其他可交付成果)
4.4.14 用户文档的编辑和校对
4.4.15 源代码的自动静态分析
4.5 总结和结论
第5章 软件测试
5.1 引言
5.1.1 黑盒与白盒测试
5.1.2 功能和非功能测试
5.1.3 自动化和手动测试
5.1.4 软件测试通用形式的讨论
5.1.5 子例程测试
5.1.6 PSP/TSP 单元测试
5.1.7 XP单元测试
5.1.8 单元测试
5.1.9 新功能测试
5.1.10 回归测试
5.1.11 集成测试
5.1.12 系统测试
5.1.13 专门的软件测试
5.1.14 压力或容量测试
5.1.15 性能测试
5.1.16 病毒防护测试
5.1.17 渗透测试
5.1.18 安全性测试
5.1.19 平台测试
5.1.20 供应链测试
5.1.21 净室测试
5.1.22 诉讼测试
5.1.23 云测试
5.1.24 SOA测试
5.1.25 独立测试
5.1.26 本土化测试
5.1.27 案例研究测试
5.1.28 涉及用户或客户的测试形式
5.1.29 敏捷测试
5.1.30 可用性测试
5.1.31 现场Beta测试
5.1.32 实验室测试
5.1.33 客户验收测试
5.1.34 测试计划编制
5.1.35 测试用例设计方法
5.1.36 测试用例中的错误和bug
5.1.37 软件项目的测试阶段数
5.1.38 按行业和软件类型分类的不同测试模式
5.1.39 按应用程序规模分类的不同测试模式
5.1.40 在指控质量低劣的诉讼案中记录的测试阶段
5.1.41 使用功能点估算测试用例数
5.1.42 使用功能点估算测试人员的数量
5.1.43 使用功能点估算测试工作量和成本
5.1.44 由开发人员或由专业测试人员执行的测试
5.2 总结和结论
第6章 发布后缺陷清除
6.1 引言
6.1.1 发布后缺陷严重程度等级
6.1.2 从结构质量的观点看严重程度等级
6.1.3 软件的可维护性
6.1.4 按软件应用程序用户分类的缺陷发现率
6.1.5 无效缺陷报告
6.1.6 发生在独特情况下的暂时搁置的缺陷
6.1.7 很多客户报告的重复缺陷
6.1.8 第一年缺陷发现率
6.1.9 度量DDE和DRE
6.1.10 发布后缺陷报告的变化
6.1.11 报告软件缺陷的方法的变化
6.1.12 缺陷在报告后由谁修复
6.1.13 案例1:开发人员负责缺陷修复
6.1.14 案例2:维护专家负责缺陷修复
6.1.15 案例研究对比
6.1.16 由低劣质量引起的诉讼
6.1.17 发布后的缺陷修复成本模式
6.1.18 参与缺陷修复的软件职业团队
6.1.19 检查发布后缺陷修复的自变量
6.1.20 按功能点计算的应用程序规模
6.1.21 软件应用程序中容易出错模块
6.2 来自发布后缺陷的用户和行业的成本
6.2.1 安全漏洞对企业和政府机构的影响
6.2.2 用于缺陷报告和修复安装的客户后勤
6.2.3 案例1:一个小公司的小型应用程序
6.2.4 案例2:大公司的大型应用程序
6.2.5 在维护和发布后缺陷修复中的度量问题
6.3 总结和结论
第7章 软件质量的经济学分析
7.1 引言
7.2 软件的经济价值
7.2.1 度量价值的方法
7.2.2 资金投入批准和应用程序规模
7.2.3 软件构建难度对软件质量的影响
7.2.4 来自于软件的收入产生
7.2.5 软件行业和其他行业之间的差异
7.2.6 软件带来的成本降低
7.3 低质量和高质量软件的经济影响
7.3.1 软件开发和维护
7.3.2 软件作为市场上销售的商品
7.3.3 软件作为减少人力的一种方法
7.3.4 软件和创新性的新型产品
7.3.5 技术债务:度量软件质量对软件成本影响的方法
7.3.6 量化商业价值的框架
7.3.7 超越功能质量
7.3.8 软件结构对质量的影响
7.3.9 员工培训对质量的影响
7.3.10 职业资格认证对质量的影响
7.3.11 技术投资对质量的影响
7.3.12 项目管理对质量的影响
7.3.13 质量控制方法论和工具对质量的影响
7.3.14 高质量和低质量对软件进度的影响
7.3.15 高质量和低质量对软件人员配置的影响
7.3.16 高质量和低质量对软件开发工作量的影响
7.3.17 高质量和低质量对开发生产率的影响
7.3.18 高质量和低质量对软件开发成本的影响
7.3.19 高质量和低质量对每个功能点的开发成本的影响
7.3.20 高质量和低质量对项目取消率的影响
7.3.21 高质量和低质量对取消项目的时间安排的影响
7.3.22 高质量和低质量对取消的项目工作量的影响
7.3.23 高质量和低质量对相对平均项目的工作量的影响
7.3.24 高质量和低质量对软件测试阶段的影响
7.3.25 高质量和低质量对测试占开发百分比的影响
7.3.26 高质量和低质量对每个功能点的测试用例的影响
7.3.27 高质量和低质量对创建的测试用例数的影响
7.3.28 高质量和低质量对测试覆盖的影响
7.3.29 专业测试人员对高质量和低质量的影响
7.3.30 高质量和低质量对软件潜在缺陷的影响
7.3.31 高质量和低质量对总体软件缺陷的影响
7.3.32 高质量和低质量对DDE的影响
7.3.33 高质量和低质量对DRE的影响
7.3.34 高质量和低质量对总缺陷清除的影响
7.3.35 高质量和低质量对已交付给客户的缺陷的影响
7.3.36 高质量和低质量对每功能点交付的缺陷的影响
7.3.37 高质量和低质量对交付的缺陷严重程度等级的影响
7.3.38 高质量和低质量对每功能点严重缺陷数的影响
7.3.39 高质量和低质量对软件可靠性的影响
7.3.40 高质量和低质量对维护和支持的影响
7.3.41 高质量和低质量对维护和支持成本的影响
7.3.42 高质量和低质量对维护缺陷容量的影响
7.3.43 高质量和低质量对软件改进的影响
7.3.44 高质量和低质量对改进成本的影响
7.3.45 高质量和低质量对维护和改进人员配置的影响
7.3.46 高质量和低质量对5年的总工作量的影响
7.3.47 高质量和低质量对TCO的影响
7.3.48 高质量和低质量对COQ的影响
7.3.49 高质量和低质量对每个功能点的TCO和COQ的影响
7.3.50 高质量和低质量对应用程序使用寿命的影响
7.3.51 高质量和低质量对软件应用程序有形资产价值的影响
7.3.52 高质量和低质量对ROI的影响
7.3.53 高质量和低质量对于被取消项目的影响
7.3.54 高质量和低质量对取消成本差异的影响
7.3.55 高质量、平均质量和低质量的软件项目的分布
7.4 总结和结论
7.4.1 对于10000 个功能点的高质量结果
7.4.2 10000个功能点的低质量软件结果
参考文献和延伸阅读