人为错误可在任何阶段发生,比如:需求分析阶段漏掉用户的一个需求点,设计的时候对需求的理解偏差等等。由于人为错误必然会引入一个或者多个缺陷。换句话说也就是:缺陷可在任何阶段被引入。
越早发现缺陷,修复缺陷的成本就越低。举个例子:如果在编码阶段才发现有个需求点理解偏差,那么相应的需求,设计,编码都要修改。如果在需求阶段就发现,则只需要修改需求文档。据统计每延后一个阶段修复缺陷,修复的成本都呈指数级增长。有过修复生产问题的同学都知道,生产一旦出现问题,往往来自客户和领导的压力非常大,并且经常伴随数据的错误,不仅要修复问题,还要修复数据,而且程序员一般没有生产环境的权限,定位问题还需要运维部门配合,唉,说多了都是泪阿。一起祈祷问题都在上线前都暴露出来吧。
引入缺陷的那个阶段我们称为缺陷的引入阶段或者注入阶段。而发现缺陷的阶段我们称为缺陷的发现阶段。另外,“缺陷修复阶段”照猫画虎就好,不多解释了。举个例子:我们在编码的时候,发现设计有地方没有考虑到,导致需要重新修改设计和代码。那么我们称设计阶段为缺陷的注入阶段,而编码阶段为此缺陷的发现阶段。我们应尽可能在缺陷的注入阶段就发现缺陷,即所谓的尽早发现。
尽早发现不单单是从成本角度考虑,还有另外一个理由。由于每个阶段的职责不同,如果缺陷没有被尽早发现,往往很难在后面阶段被发现。直到有一天在生产环境缺陷被激活,然后被暴怒的客户投诉,被领导训斥,想想就可怕。因此,我们要熟悉每个阶段的工作目标和方法,并做好每个阶段的工作。同样为了便于理解,这里也举几个例子:如果详细设计阶段遗漏了某个小的需求点,由于编码和单元测试是以详细设计文档为基础,因此很难发现这个缺陷。再比如:单元测试如果遗漏了临界值测试,集成测试时,由于重点在于测试接口间的协作,因此很难发现这个缺陷,除非正好撞大运啦。
拒绝碎片化知识,订阅本专栏(免费)并关注大虾,系统化学习程序员需要掌握的质量知识,一起感受不同于技术的别样魅力,拓宽视野,为职业发展打好基础。