虽然软件系统和业务飞速地发展,但是我们的研发组织存在很多问题,阻碍了软件系统的快速 发展。当然在整个软件系统快速发展过程中,遇到的最大挑战是如何最大可能性地减少缺陷的数量。 因为缺陷太多会导致校正和返工的时间成本增加,进而导致研发成本上升。很多缺陷是由过程导致 的,而非人为原因导致的,所以如何完善过程来预防缺陷的发生变得尤为重要。这就是要讨论的缺陷预防(Defect Prevention)
缺陷引入与移除矩阵 在我们分析缺陷的遏制能力时必须分析缺陷引入的情况,缺陷“注入阶段”和“发现阶段”是 分析缺陷的两个重要指标。 在上面的章节中我们介绍了缺陷引入的阶段,缺陷注入阶段主要包括:需求阶段、设计阶段和 编码阶段。 在对缺陷进行遏制分析时,除了需要分析缺陷注入阶段,还需要从“注入阶段”和“发现阶段” 两个维度对缺陷进行分析,这就是通常所说的“注入阶段”和“发现阶段”矩阵。 “注入阶段”和“发现阶段”矩阵见表 9-10。
该矩阵中,横向指的是缺陷引入的几个阶段,纵向指的是研发的几个阶段。通过这张表可以进 行以下几个方面内容的分析: (1)确定每个阶段注入缺陷的比例 通常缺陷的引入是有三个阶段:需求、设计和编码三个阶段,这张表中可以清晰的分析出每个 阶段所引入的缺陷数占所有缺陷的比例。表中显示一共发现 298 个缺陷;需求一共发现 22 个缺陷, 占总缺陷的 7.4%;设计阶段一共发现 97 个缺陷,占总缺陷的 32.6%;编码阶段一共发现 179 个缺 陷,占总缺陷的 60%。 通过分析这个数据,可以发现每个阶段所发现缺陷的比例是否合理,一般需求阶段所引入的缺 陷占总缺陷的 22%左右,设计阶段所引入的缺陷占 33%左右,编码阶段引入的缺陷占 55%左右。 这样对照上面的数据发现,需求引入的缺陷明显少于 22%,这说明缺陷的修复成本将变得更高。 因为需求阶段的缺陷大部分是在需求评审和设计阶段才发现的,如果在需求阶段可以发现更多的问 题,就可以降低编码阶段引入的缺陷数,这样显然缺陷修复的成本就更低些。 所以通过对每个阶段引入的缺陷进行分析,可以确定每个阶段引入缺陷的比例是否合理,是否 与历史数据相悖。
(2)确定每个阶段缺陷移除率 缺陷移除率的公式如下: 缺陷移除率=(本阶段发现的缺陷总数/本阶段注入的缺陷总数)×100% 确定缺陷移除率主要用来分析每个阶段移除缺陷的情况,在这里显然希望需求和设计阶段移除 的缺陷越多越好,否则可能会导致绝大部分的缺陷遗留在系统测试阶段,这样不仅增加了缺陷修复 的成本,还增大了系统发布的风险。那么为了尽可能在前期发现更多的缺陷,可以对需求分析得更 彻底一些、对设计的方案分析得更全面些,同时可以将单元测试和集成测试做得更深入一些。 (3)分析整个研发过程中需要改进的地方 关于缺陷引入和移除矩阵表,除了可以分析上面两个维度的内容外,还可以用来分析整个研发 过程中是否有需要改进的地方。 分析需要改进的内容,主要包括整个研发阶段发现缺陷的分布,这样可以确定研发过程每个阶 段的工作是否到位,进而确定做得不好的阶段。 而缺陷移除阶段的分布可以确定我们每个测试阶段和研发阶段评审工作是否正确,特别是前期 的阶段。如果前期需求、设计阶段没做好,那么遗留的问题都会在系统测试阶段中得到体现。