1.6.1 缺陷预防的目的
缺陷预防的目的是识别产生缺陷的原因,从而避免它们的再次发生。
发现程序中缺陷的基本过程包括以下步骤:发现缺陷征兆;从征兆中推断出缺陷的位置;确定程序中的缺陷;决定修复缺陷的方法;修复缺陷;验证修复是否已经解决了问题。
缺陷预防包括分析过去所碰到的缺陷和采取相应的措施,以避免这些缺陷以后再出现。这些缺陷可能发生在当前项目的早期阶段,也可能发生在其他项目中,所以缺陷预防活动是不同项目间互相吸取教训的有效手段。
要根据对项目所定义的软件过程和项目实现情况的了解,来决定缺陷发生的根本原因,以及认清缺陷发生前所具有的征兆。还有,要从项目和组织两方面同时着手采取适当措施来防止缺陷以后再次发生。
在开发生命周期中,发现软件错误越早,修复错误越容易,成本也越低;反之,发现错误越晚,修复软件错误的成本就越高。修复一个由最终用户发现的软件错误花费的成本要比在需求阶段修复的软件错误成本高100或1000倍(参见附录中软件1:10:100 公理的说明),更不用说用户因为软件错误导致工作常常无法继续,而一直等到下一个版本才能解决问题所等待或者耽误的成本。
虽然缺陷总是存在,但在开发过程中尽早发现和修复缺陷还是可能的。如果开发人员能够在编写代码期间发现所有的软件错误,那就再好不过了,尽管这是不现实的。为此,可以使用下述几种手段:首先,开发工程师使用编译器可以发现大部分语法缺陷(注意:编译器最基本的任务是生成目标代码,并且可能会在源程序有缺陷的情况下生成代码);其次,开发人员编写单元测试用例来验证代码;第三,利用代码走查(同行评审的一种),可以更高效地发现缺陷。通过这几种手段,可以在开发阶段尽大限度地降低缺陷残留。
如果缺陷经过了这几个阶段后仍然隐藏下来了,另外一种常用方法就是大家都想到的“测试”,测试可以用来验证程序几乎所有的功能,但有自己的缺点:同编译器一样只能满足缺陷排除的第一个步骤,但仍必须从缺陷征兆找出问题的根源,然后才能修复;随着项目规模的扩大,全面的测试会花费大量的时间,要进行完全测试几乎不可能。同时,测试的质量是由测试用例覆盖所有程序功能的程度决定的。