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