第四章 缺陷管理
u 什么是缺陷
u 缺陷查找技术
u 代码复查
u 缺陷预测
4.3 代码复查
代码复查就是研究源代码,并从中发现错误。代码复查更有效的原因是:在复查时看到的是问题本身而不是征兆。从头到尾复查代码时,考虑的是程序应该做什么。因此,当看到某些地方不正确时,就可以看到可能的问题是什么,并立即去验证代码。复查的缺点是:非常耗时,而且很难恰当的进行;复查时一种技能,当然可以通过学习和实践来提高。
代码复查的第一步是了解自己引入的缺陷的种类,这是收集缺陷数据的主要原因。因为在下一个程序中引入的缺陷种类一般会与前面的基本类似,只要采用同样的软件开发方法,情况会一直如此。另一方面来说,当你有了技能和经验或改变了过程,缺陷的类型和数目会随之变化。但是到了一定程度后,改进就变得非常困难了。这是,就必须研究缺陷,这可以帮助你找到更好的发现和修复缺陷的方法。
如何进行代码复查。代码复查的目标是在软件过程中尽可能早和尽可能多的发现缺陷,缺陷发现时间越少越好。采用表4.3描述的一个有序的检查方法,在编译之前进行代码复查,是完成目标最好的方法。
表4.3 代码复查脚本
入口条件
在复查前,检查下列产品是否已经准备好:
u 需求规格说明;
u 程序设计文档;
u 程序的源代码清单;
u 编码标准;
u 代码复查检查表;
一般性说明
使用代码复查检查表;
在复查时遵照代码复查检查表的使用说明;
在复查结束时,填写累计、累计百分比和总结栏目;
1 复查规程
首先,完成源程序编码;
然后,在进行编译和测试之前,打印一份源程序清单;
下一步,进行代码复查;
进行代码复查时,仔细检查每一行源程序,以尽可能多地发现和修复缺陷;
2 修复缺陷
修复所发现的每一个缺陷;
确保所作的修复正确无误;
将缺陷登入在缺陷记录日志。
3 覆盖率复查
验证程序设计覆盖了需求规格说明中描述的每一个功能;
验证程序代码实现了所有的设计。
4 程序逻辑复查
验证程序设计在逻辑上是正确的;
验证程序代码正确的实现了设计中的逻辑。
5 命名和类型检查
验证所有的名字和类型已经正确的声明;
检查整型、长整型和浮点型是否正确声明。
6 变量检查
确保每个变量已初始化;
检查上溢、下溢或越界问题。
7 程序语法检查
验证程序代码符合编程语言的规格说明
出口条件
在复查结束时,应该有:
完整的、修复过的源程序清单;
填写完整的时间记录日志;
填写完成的缺陷记录日志。
编译之前进行复查。有几个原因说明应在编译之前进行代码复查:不论编译前或编译后,进行完整的代码复查的时间大约相同;不论编译前或编译后,对检查语法有效性的效果是一样的;先做复查将节省大量编译时间,若不做代码复查,一般要花12%~15%的开发时间进行编译,一旦使用代码复查后,编译时间可以缩短至3%或更少;编译程序后,代码一般复查很难彻底的进行; 经验证明,在编译阶段有大量的缺陷时,一般在测试阶段也有许多缺陷。
建立个人代码复查检查表。如果想发现和改正程序中的每一个缺陷,就必须遵照一个精确的规程。检查表可以确保遵循这个规程,它包括一系列程式的步骤。按照检查表去作时,就知道如何进行代码复查。
如果能够正确使用检查表,还能知道每个步骤发现了多少缺陷。这样就能测量出复查过程的效率,并进一步改进检查表。检查表包括了个人的经验。通过不断的使用和改进个人检查表,就可以帮助你用较少的时间发现这些缺陷。表4.4是一个C++程序代码复查表的范例。