代码审查是发现故障或缺陷的重要技术,因此也成为确认和保障软件质量乃至可信性的实用手段。为了保障软件质量,在开发过程中必须对代码进行必要的审查。
  审查(Inspection)是由Michael Fagan在1976年首次提出的,它的目标是判定并消除工程产品中的错误,确定产品创建过程中存在的系统缺陷。代码审查(code inspection)主要检查代码和设计的一致性、逻辑的正确性、代码的可读性、结构的合理性等,可以发现程序中的逻辑错误、异常处理中的疏漏、违背程序编写标准的问题、影响软件移植的因素等。经验表明,组织良好的代码审查,可以发现程序中30%-70%的编码和逻辑设计错误。
  Fagan代码审查法是历史上的软件审查方法之一,它分为四个阶段,共包含七个步骤,包括准备阶段(计划、概述、会前个人准备)、审查会议阶段(召开审查会议)、缺陷纠正阶段(过程改进、修改缺陷)和后继阶段(相关后继活动)等。三十年来,人们还提出一些适应不同行业、不同企业的软件审查方法,如Yourdon审查法、二人审查法、无会议审查法等,其中大多数是对Fangan四阶段审查法的某种改进。无论采用何种代码审查方法,都要求审查者依据检查单(checklist)对代码中的缺陷和疑点实施检查,检查单中定义的缺陷类型和缺陷检测规则直接影响着审查过程对缺陷的覆盖程度和审查效果。程序代码的审查离不开软件可视化技术的支持,可视化技术用简捷的图形来揭示程序复杂的结构,使之适合于人的直观理解。近年来,围绕面向对象程序的逆向分析和可视化建模方法的研究很多。常见的类图、函数或方法调用图和控制流程图等不仅能够帮助程序员很快地了解程序代码的结构,也可以帮助审查人员找出软件结构及源代码中问题和缺陷。
  代码审查和语法错误检查是两个不同层次的概念。语法错误是低层次、强制性的检查。而代码审查是高级别, 非强制性的检查, 它对语法正确的程序施加了更高更严格的要求, 从而增加程序的可读性, 降低因变量命名、方法定义、程序逻辑的不完整性等问题而导致的程序潜在出错机率, 提高程序的可维护性和健壮性。
  审查过程是一种静态证明文档( 程序) 有效性的严格方法。审查团队由文档作者, 一个负责人, 一个记录员以及一些审查员组成。首先需要一系列的准备工作, 包括参与者的挑选和材料的准备以及审查表的构建。然后是个人准备阶段, 每个小组成员各自熟悉材料。个人准备阶段后, 是实际的审查会议。在会议上, 小组按照审查表对代码进行审查, 并将问题记录下供作者修正。会议后是作者的返工, 作者汇报每个缺陷, 后确认每个缺陷已经被陈述过了。
  代码审查过程中, 审查员都会有一份审查表。审查表是一份为审查员准备的列表, 在审查表里注明了审查的内容和方面。审查表是审查代码中存在问题的依据, 审查员根据审查表来发现并判断问题。
  代码审查表中记录了所有需要检测的缺陷, 以及缺陷的各种特征, 缺陷特征描述如下:
  1) 缺陷出现的区域: 分别为表达式级、语句级、声明级、模板缺陷、预处理缺陷、类级缺陷以及性能缺陷。表达式级、语句级、声明级以及预处理级的缺陷,类似于面向过程程序中的缺陷; 而模板缺陷、类级缺陷, 则是针对面向对象软件的特点提出的; 代码冗余等归为性能缺陷。
  2) 缺陷的检测内容: 分为冲突检测、一致性检测两种。冲突检测, 即对应于文献中的基于确定性“信念”的判定, 而一致性检测对应于基于可能性“信念”的判定。
  3) 缺陷对代码的危害: 按照缺陷对代码的危害,一般分为警告、错误、严重、非常严重四级。