软件质量经济学
上QQ阅读APP看书,第一时间看更新

3.1.1 20世纪70年代IBM进行缺陷预防研究的早期历史

20世纪70年代,IBM软件团队注意到软件应用程序正在变得越来越大,越来越复杂。缺陷随着应用程序规模的增大而增长,而且应用程序的规模正在迅速地增大。IBM优秀的质量度量计划(program)还注意到,对于超过1000个功能点的应用程序来说,测试不足以达到高质量水平。

对于大型的应用程序,测试覆盖会下降到80%以下,缺陷清除效率水平常常低于85%。大多数形式的测试单独使用的缺陷清除效率都低于35%。即使是6~8种不同的测试加在一起,缺陷清除效率也低于85%。

IBM改进软件质量的一条研究主线是对需求、设计文档、源代码和其他可交付成果进行正式审查。对审查的度量有清除的缺陷数目以及审查需要的时间和精力。审查过程起源于IBM Kingston,作为Michael Fagan、Lew Priven、Ron Radice、Roger Stewart和其他同事的工作的一部分。

在很短的时间内(大概6个月),他们发现对设计文档和源代码的正式审查使缺陷清除效率超过了85%,这比当时可用的任何形式的测试等效率都高。在大概一年之内,他们还发现,跟使用了相同测试阶段但没有经过审查的类似应用程序相比,经过审查的应用程序的测试缺陷清除效率要高出5%。审查给测试人员提供了更完整、更准确的需求和规格说明书文档,正是因为测试前的这些审查,他们创建出了更好、更完整的测试用例。

正式审查和正式测试的组合使缺陷清除效率达到了97%,这是一个非常显著的提升。更好的是,经过审查的项目的累积工作量和总工期比只有测试没有审查的类似应用程序都低大约15%。原因是审查在测试开始之前清除了很多bug,所以测试的工期被减半了,有时候甚至比一半还多。

随着审查开始从IBM Kingston扩展到IBM其他的开发实验室,用到审查的项目以及没有用到审查的项目的数据被持续地收集。

在大概3年的数据收集和分析之后,人们发现IBM中参与了审查过程的开发团队会自然地避免犯在审查中发现的各种错误。换句话说,人们发现审查不仅能清除已经发生的缺陷,也能预防缺陷的发生。就本书的一位作者所知,1973年前后,IBM发现正式审查降低了潜在缺陷的这次研究是软件缺陷预防方面的第一次研究。

表3-1给出了来自IBM在20世纪70年代的早期研究的大概的缺陷预防和缺陷清除数据。这个表格反映了使用审查约18个月后收集的数据,这个时候缺陷预防刚开始成为一个可见的现象。

很容易就能看到,为什么使用了测试前审查时测试工期被显著地减少了。使用测试前审查,测试开始时仍然存在的缺陷数目只是那些没有使用测试前审查项目中的一小部分。(顺便说一下,在测试开始前时采用静态分析工具等现代的测试前方法也会有同样的效果。)

从这以后,IBM和其他主要公司开始持续地收集可以用来研究缺陷预防和缺陷清除的数据。缺陷清除研究一般可以展示大约50个或更少样本项目在6~12个月内的量化结果。

而缺陷预防一般需要几百个项目和24~48个月的时间。缺陷预防需要更多的数据点来展示出具体方法与潜在缺陷之间有说服力的相关性,因为需要比较使用了和没有使用该方法的项目。

跨多个公司的缺陷预防分析很难做。最好的数据来源是大型公司(如IBM、微软、摩托罗拉和雷神等),他们拥有较好的和一致的度量计划和许多不同的软件开发实验室,这些实验室使用了不同的方法和工具组合。

(本书的一位作者曾经与大约600家公司合作过,其中有世界500强中的约150家公司和30个政府机构。这些组织中只有20家拥有足够范围的数据可以用来判断缺陷预防效率。其他很多家实际上使用了改进预防的方法中的其中一些,但是他们没有度量这些方法的效果。)

IBM在20世纪70年代考查的其他一些方法论包括联合应用设计(JAD)、高级编程语言(如PL/I和APL)、净室开发(clean-room development)、软件质量保证团队,以及使用可重用的设计和代码。

缺陷预防是希望找到减少潜在缺陷的方法,IBM还发现有一小部分实践产生了高于公司平均潜在缺陷值的潜在缺陷。这些消极的实践包括每个自然月超过1%的需求变更,还包括因肆意压缩关键任务(如设计审查)可用时间引起的过度进度压力。

尽管缺陷预防仍然是一个有待探索的困难且复杂的主题,但截至2011年,人们已经收集了足够的数据,这些数据可以展示大量方法和实践的大概结果。

表3-2有较大的误差范围,但它展示了65种或者减少了潜在缺陷(在表格的顶部)或者使缺陷预防变得更糟(在表格的底部)的方法的一个样本。表3-2是以一个额定1000个功能点的应用程序为基础的,这里平均潜在缺陷大概是每个功能点5.0个。假设缺陷随着应用程序规模的增长而增长,这个表对于10000个功能点规模范围的较大应用程序就不再适用了。

表3-2有较大的误差范围,但是因为多年的持续度量,所以研究缺陷预防是可行的。大多数与缺陷预防相关的度量都来自大型公司(如IBM、摩托罗拉及AT&T),这些公司具有超过35年在质量度量方面的丰富经验。

缺陷预防分析比缺陷清除需要更多的数据。缺陷预防数据需要能够反映出使用了特定的方法和没有使用该方法的相似的应用程序。评估缺陷预防的一个最小化的样本是大约10个使用了特定方法(如正式审查)的项目,这些项目用于与10个没有使用该方法的项目进行比较。