《开发者测试》第五章 单元测试
5.1 单元测试概述
·定义:软件测试的基础,对软件基本组成单元的测试;
·目的:检测和判断每个程序模块的行为是否与期望一致;
·合格代码:
·正确性:代码逻辑必须正确,能够实现预期功能;(优先级最高)
·清晰性:代码必须简明易懂,注释准确没有歧义;
·规范性:代码必须符合企业或部门所定义的共同规范(如命名规则、代码风格);
·高效性:尽可能降低代码的运行时间;
·单元:在不同编程环境下各有不同:
·C语言:函数或子过程;
·C++或Java:类或类所包含的方法;
·最好是开发进行时协同开展单元测试。
5.2 单元测试框架(Java)
·被测单元通常不是一个完整的程序,需要一些 辅助模块 来驱动运行;
·辅助模块:
①驱动模块:
·定义:被测单元的主程序;
·目的:模拟被测单元的上层模块;
·注意事项:尽量保证每个测试用例只对应一个被测单元,而不要将多个被测单元用一个测试用例进行测试;
②测试桩模块(存根模块):
·定义:被测单元的子模块;
·目的:模拟被测单元所调用的子模块,接受被测单元的调用,并返回调用结果给被测单元;
5.3 单元测试内容
单元测试的主要任务:验证程序单元实现已达到详细设计的预期要求。
5.3.1 算法逻辑
·检查算法及其内部各处理逻辑的正确性;
·例:a < b 时逻辑处理未正确实现:
5.3.2 模块接口
·检查模块接口的正确性:参数个数、类型、次序、返回值类型;
·检查模块调用其他模块代码的正确性:实际参数个数、类型、次序、返回值;
·例:参数data为String类型,应转换为数值型计算,不应该直接累加计算:
5.3.3 数据结构
·检查全局和局部数据结构的定义是否正确实现和使用;
·例:先来先服务的调度任务应采用 队列 数据结构,测试时检查队列是否正确实现或是否误用 栈等其他数据结构。
5.3.4 边界条件
·检查程序中每个边界条件是否实现正确;
·边界:
·本身的边界;
·变量类型本身的边界;
·例:有两个判定准则:
①依次判断构造三角形每条边的取值是否在正常范围内;
②使用diffOfBorders方法测试是否所有两边之差都小于第三条边:
5.3.5 独立路径
·检查是否存在遗漏或未正确实现的处理逻辑;
·处理逻辑遗漏通常会造成部分独立路径缺失。
·例:未对三角形边C进行数值验证,同时未将A和C两边之差与边B的数值进行对比:
5.3.6 错误处理
·检查单元模块是否包含了正确的错误处理代码;
·目的:避免程序出现错误或异常时直接崩溃;
·存在以下情况认为模块未提供有效的错误处理功能:
①错误描述难以理解,不能提供有效的错误处理功能;
②错误描述与实际情况不符;
③错误处理不正确,或错误处理滞后。
·例:计算平均值之前,未对double数组进行校验,没有对潜在的除零错误进行处理:
5.3.7 输入数据
·检查输入数据的正确性、规范性和合理性。
·例:应录入一些不合理便(如0、-10)进行测试:
5.3.8 表达式与SQL语句
·检查单元模块所包含表达式及SQL语句语法和逻辑的正确性;
·表达式应保证不含二义性。
5.4 慕测单元测试实例
略