3.1.2 缺陷预防方法的协同组合

表3-2展示了多种方法各自独立使用的结果。但在现实中,很多方法是相互促进的,是一起工作的。其他的则在某种程度上相互对立,不能很好地在一起工作。这些缺陷预防方法组合中的一部分说明了协同配合或者对抗的组合,包括以下内容。

认证的重用与模式:认证的可重用组件可以与可重用的“模式”组合,应用在需求、架构、设计、用户文档以及一部分(非全部)编码环节中。这个组合在2011年时还非常罕见,但是理论上有能力将潜在缺陷降低95%。与认证的可重用组件组合的模式匹配是一个潜在的全新软件工程模式,它有希望用基于认证的材料目录和从最成功的应用程序导出的模式的构建,来取代今天的人工的工作量和逐行编码。理论上,模式匹配和认证的可重用组件可以接近零缺陷。这个领域正在获得人们的注意,但是还有非常多的工作需要完成。

小型业务应用程序:对于1000个功能点规模范围的小型业务应用程序,一个有效的组合是嵌入式用户、敏捷开发方法和测试驱动开发,以及自动化的风险分析和全部代码片段的静态分析。这个组合应该能减少45%的潜在缺陷,并且确保缺陷清除效率在95%的范围。

大型业务应用程序:对于10000个功能点规模范围的大型业务应用程序,一个有效的相互促进的组合是联合应用设计(JAD)和自动化的风险分析,需求、设计、关键代码片段的审查,以及100%的代码静态分析。正式的开发方法,如统一软件过程或团队软件过程(TSP),会被使用。质量应该被估算而且应该是所有状态报告中讨论的第一主题。这个组合可以减少约55%的潜在缺陷,并且将缺陷清除效率提升至95%以上。

技术和嵌入式软件:对于技术和嵌入式的应用程序,一个相互促进的组合会包括质量功能展开(QFD),团队软件过程(TSP),关键需求、架构和设计文档的审查,以及全部代码片段的静态分析。使用正式的数学方法设计测试用例,这些方法可以确保较高的覆盖率。圈复杂度会被度量,并且被维持在大概10以下。质量是所有状态报告中讨论的第一主题。这个组合可以减少超过60%的潜在缺陷,并且可能将缺陷清除效率提升至97%。

军事和国防软件:对于军事和国防应用程序,一个有效的组合会包括CMMI 3及更高的等级、质量功能展开(QFD)、对关键可交付成果(如需求和设计)的正式审查,以及全部代码的静态分析。可能使用健壮的开发方法,如统一软件过程(RUP)或者团队软件过程(TSP)。使用数学方法的正式测试用例设计、质量预测、质量度量和质量状态追踪也会是这个组合的一部分。这个组合可能会减少约50%的潜在缺陷,并且将缺陷清除效率提升至96%。

可能不能一起较好地工作的相对抗的方法:并非所有的缺陷预防方法都能很好地适应其他的缺陷预防方法。有一个很好的例子说明这点:敏捷方法在某种程度上与较高的CMMI等级的严格性就是相对抗的。另外一个例子是,代码审查和静态分析覆盖了相似类型的缺陷,或许两者都不需要。如果审查和静态分析同时使用,审查应该检查关键代码片段和寻找静态分析不如审查有效的主题(如安全漏洞)。开发方法,如敏捷开发、统一软件过程(RUP)和团队软件过程(TSP)并不是完全抗衡的,但是通常只选择这些方法中的一个,而不会同时使用它们。混合使用这些方法并在每个方法中选择有用的特性是可以的,但是这样混合的方法需要非常多的技巧才能变得有用。如我们所说的,这些混合中有些是有用的。可能的方法组合有很多,并不是全部的组合都被分析过。即使单个的方法被证明是成功的,也没有足够的数据来判断看上去相对抗或弱协同的几个方法的组合的最终结果。

同时使用有用的和有害的方法的组合:有时候有用的和有害的方法会在同一个项目中被同时使用。例如,某个项目可能开始着手使用质量功能展开(QFD),但是突然客户或者高级主管给的进度压力变大,以致QFD工作被缩减了。遗憾的是,在有用的和有害的缺陷预防方法同时使用的情况下,有害的方法会占上风。也就是说,潜在缺陷会增加,而不是减少。一个通用的法则是,使软件变差要比使它变好容易得多。

增加潜在缺陷的有害组合:看一下表3-2最后的一些有害的方法,有些方法的组合增加了潜在缺陷并且使应用程序失效的风险更大。有害的组合包括但不限于:非正式的需求收集、没有风险分析、没有规模估算;没有质量预测、状态报告中没有质量部分、没有对可交付成果的审查、较差的需求变更控制过程与每自然月大于2%的需求增长;来自客户和管理层的过多的进度压力、“足够好”的质量态度,以及非正式的测试用例设计方法。开发方法可能要么是非正式的,要么最好也只是传统的“瀑布”方法。使用这种组合的应用程序拥有的潜在缺陷比正常的应用程序会至少多50%,而且缺陷清除效率可能会下降到80%以下。使用这种不幸的组合所开发的应用程序被取消的可能性超过30%,主要成本和工期超支的可能性超过75%。