1 代码审查

    代码审查的测试内容:检查代码和设计的一致性;检查代码执行标准的情况;检查代码逻辑表达的正确性;检查代码结构的合理性;检查代码的可能性。

    代码审查的组织:由4人以上组成、分别为组长、资深程序员、程序编写者与专职测试人员。组长不能是被测试程序的编写者,组长负责分配资料、安排计划、主持开会、记录并保存被发现的差错。

    代码审查过程:

  • 准备阶段:组长分发有关材料,被测程序的设计和编码人员向审查组详细说明有关材料,并回答审查组成员提出的有关问题。

  • 程序阅读:审查组人员仔细阅读代码和相关材料,对照代码审查单,记录问题及明显缺陷;

  • 会议审查:组长主持会议,程序员逐句阐明程序的逻辑,其他人员提出问题,利用代码审查单进行分析讨论,对讨论的各个问题形成结论性意见;

  • 形成报告

推荐的代码审查单

寄存器使用(仅限定在机器指令和汇编语言时考虑)

  • 如果需要一个专用寄存器,指定了吗?

  • 宏扩展或子程序调用使用了已使用着的寄存器而未保存数据吗?

  • 默认使用的寄存器的值正确吗?


格式

  • 嵌套的IF是否已正确缩进?

  • 注释准确并有意义吗?

  • 是否使用了有意义的标号?

  • 代码是否基本上与开始时的模块模式一致?

  • 是否遵循全套的编程标准?

入口和出库连接

  • 初始入口的最终出口正确吗?

  • 对另一模块的每一次调用:全部所需的参数是否已传送给每一个被调用的模块?被传送的参数值的设定是否正确?栈状态和指针状态是否正确?    

程序语言的使用

  • 模块中是否使用语言完整定义的有限子集?

  • 未使用内存的内容是否影响系统安全?处理是否得当?

存储器使用

  • 每一个域在第一次使用前正确地初始化了吗?

  • 规定的域正确吗?

  • 每个域是否由正确的变量类型声明?

  • 存储重复使用吗?可能产生冲突吗?

测试和转移

  • 是否进行了浮点相等比较?

  • 测试条件正确吗?

  • 用于测试的变量正确吗?

  • 每个转换目标正确并至少执行一次?

  • 三种情况(大于0,小于0,等于0)是否已全部测试?

性能

  • 逻辑是否被最佳地编码

  • 提供的是一般的出差处理还是异常的例程

可维护性

  • 所提供的列表控制是否有利于提高可读性

  • 标号和子程序名符合代码的意义

逻辑

  • 全部设计是否均已实现

  • 编码是否做了设计所规定的内容

  • 每个循环是否执行了正确的次数

  • 是否已直接测试了输入参数的所有异常值

软件多余物

  • 是否有不可能执行到的代码

  • 是否有即使不执行也不影响程序功能的指令

  • 是否有未引用的变量、标号和常量

  • 是否有多余的程序单元

2 代码走查

    代码走查的测试内容与代码审查的基本一样

3 静态分析

    一般包括控制流分析、数据流分析、接口分析、表达式分析;此外,静态分析还可以完成下述工作

  • 提供间接涉及程序缺陷的信息

    • 每一类型语句出现的次数

    • 所有变量和常量的交叉引用表

    • 标识符的使用方式

    • 过程的调用层次

    • 违背编码规则

    • 程序结构图和程序流程图

    • 子程序规模、调用 被调用关系、扇出、扇入数

  • 进行语法、语义分析,提出语义或结构要点,供进一步分析。

  • 进行符合求值

  • 为动态测试选择测试用例进行预处理。

    (1)控制流分析

    是使用控制流程图系统地检查被测程序的结构的工作。控制流按照结构化程序规则和程序结构的基本要求进行程序结构检查 ;这些要求是被测程序不应该包含:

  • 转向并不存在的语句标号

  • 没有使用的语句标号

  • 没有使用的子程序定义

  • 调用并不存在的子程序

  • 从程序入口进入后无法达到的语句

  • 不能到达停止语句的语句

    (2)数据流分析

    是用控制流程图来分析数据发生的异常情况,这些异常包括被被初始化、被赋值被引用过程中行为序列的异常,数据流分析也作为数据流测试的预处理过程。

    可以查出引用未定义变量、对以前未使用的变量再次赋值等程序差错或异常情况

    (3)接口分析

    主要用程序静态分析和设计分析,接口一致性的设计分析涉及模块之间接口的一致性以及模块与外部数据库之间的一致性。程序的接口分析涉及子程序以及函数之间的接口一致性,包括检查形参与实参的类型、数量、维数、顺序以及使用的一致性。

    (4)表达式分析

    主要有以下几种,括号使用不正确,数组引用错误,作为除数的变量可能为零,作为开平方的变量可能为负,作为正切值的变量可能为∏/2,浮点数变量比较时产生错误。