资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,*,第,2,章:单元测试,主讲,:,林跃进,2024/11/26,1,3.1,单元测试概述,定义:单元测试又称程序模块测试,是检验程序的最小的单位测试。,单元测试的主要任务,:,单元测试针对每个程序的模块,主要测试,5,个方面的问题:,模块接口、局部数据结构、边界条件、独立的路径、错误处理,2024/11/26,2,3.1,单元测试概述,模块接口,这是对模块接口进行的测试,检查进出程序单元的数据流是否正确。模块接口测试必须在任何其它测试之前进行。,2024/11/26,3,3.1,单元测试概述,模块接口测试至少需要如下的测试项目:,(1),调用所测模块时的输入参数与模块的形式参数在个数、类型、顺序上是否一致;,(2),所测模块调用子模块时,它输入给子模块的参数与子模块中的形式参数在个数、类型、顺序上是否一致;,(3),是否会修改只是作为输入值的形式参数,(4),调用标准函数的参数在个数、类型、顺序上是否正确;,(5),全局变量的定义在各模块中是否一致。,2024/11/26,4,3.1,单元测试概述,局部数据结构,在模块工作过程中,必须测试模块内部的数据能否保持完整性,包括内部数据的内容、形式及相互关系不发生错误。,2024/11/26,5,对于局部数据结构,应该在单元测试中注意发现以下几类错误:,(1),变量从来没有被使用,包括可能别的地方使用了外部变量或函数。,(2),变量没有初始化。,(3),错误的类型转换。,(4),数组越界。,(5),变量或函数名称拼写错误,包括使用了外部变量或者函数。,2024/11/26,6,3.1,单元测试概述,边界条件测试:,主要检查临界数据是否正确处理。,(,1,)普通合法数据是否正确处理;,(,2,)普通非法数据是否正确处理;,(,3,)边界内最接近边界的(合法,/,非法)数据是否正确处理。,2024/11/26,7,3.1,单元测试概述,独立路径测试,在单元测试中,最主要的测试是针对路径的测试。测试用例必须能够发现由于计算错误、不正确的判定或不正常的控制流而产生的错误。,2024/11/26,8,3.1,单元测试概述,常见的错误有:,死代码,错误的计算优先级;,精度错误,包括比较运算错误、赋值错误;,表达式的不正确符号,包括,=,=,=,!=,;,循环变量的使用错误,包括错误赋值。,2024/11/26,9,3.1,单元测试概述,出错处理,测试出错处理的重点是模块在工作中发生了错误,其中的出错处理设施是否有效。,检验程序中的出错处理可能面对的情况有:,2024/11/26,10,3.1,单元测试概述,(1),是否检查错误出现,包括资源使用前后、其它模块使用前后;,(2),出现错误是否进行处理,包括抛出错误、通知用户、进行记录。,(3),错误处理是否有效,包括在系统干预前处理、报告和记录的错误都应真实详细。,2024/11/26,11,3.2,单元测试的执行过程,单元测试的执行过程,单元测试常常是和代码编写工作同时进行的,在完成了程序编写、复查和语法正确性验证后,就应进行单元测试用例设计。,在单元测试时,如果模块不是独立的程序,需要设置一些,辅助测试模块,。辅助测试模块有两种:,2024/11/26,12,3.2,单元测试的执行过程,(,1,),驱动模块,(Drive),用来模拟被测试模块的上一级模块,相当于被测模块的主程序。它接收数据,将相关数据传送给被测模块,启动被测模块,并打印出相应的结果。,(,2,),桩模块,(Stub),用来模拟被测模块工作过程中所调用的模块。它们一般只进行很少的数据处理。,2024/11/26,13,1.,单元测试,2024/11/26,14,3.2,单元测试的执行过程,驱动模块和桩模块都是额外的开销,虽然在单元测试中必须编写,,但并不需要作为最终的产品提供给用户。,2024/11/26,15,单元测试,#include,void,iszero(int,m),if(m,!=0),printf(“%d”,m,);,else printf(“%d”,1);,void main(void),int,a5;,int,i=0;,printf,(“,输入,5,个整数,:n,”);,for(i,=0;i=4;i+),scanf(“%d”,&ai,);,iszero(ai,);,2024/11/26,16,3.3,单元测试的执行过程,在代码编写完成后的单元测试工作主要分为两个步骤:人工静态检查(静态测试)和动态执行跟踪(动态测试)。,2024/11/26,17,3.3,单元测试的执行过程,静态测试是指测试不运行的部分,只是检查和审阅。,动态测试是指通常意义上的测试,运行和使用软件。,单元测试的依据是详细设计和概要设计!,2024/11/26,18,3.3,单元测试的执行过程,静态测试,不运行程序,通过程序员本人或其它人员执行人工检查,主要检查:,代码风格和规则检查,程序设计和结构的检查,业务逻辑检查,同行评审:走读、小组评审、审查。(,p.23,),2024/11/26,19,静态测试,(,1,)走读,一般检查代码,也可以是检查设计文档。,一般是项目内部的其它开发人员,不涉及公司高层或外部专家。,2024/11/26,20,静态测试,(,2,)小组评审,由一个正式的组织对产品进行评价。确认任何与需求规格、设计规格或标准不一致的地方或者在检查后给出可替换的建议。,参与者主要是公司技术领导或权威公司及外部专家,主要适用于需求规格和概要设计的评审。,2024/11/26,21,静态测试,(,3,)审查,遵循严格的过程,人员经过培训,检查过程有标准,检查针对实际的产品或半成品,目的是发现存在的错误。,参加人员:公司内部设计、开发、测试、质量等部门中的工作性相关的员工组成。,2024/11/26,22,静态测试,详细设计静态测试(,p.25,),代码静态测试(,p.26,),2024/11/26,23,动态测试,动态测试,黑盒测试,白盒测试,2024/11/26,24,3.4,基于,JUnit,的单元测试,详细见实验指导书,2024/11/26,25,作业,1,。简述单元测试的步骤,2,。什么是驱动模块和桩模块?为下面的函数构造一个驱动模块,并至少设计,5,条测试用例。,/*,计算两个整数的除法运算,将结果转换为单一精度输出*,/,float,divide(int,a,int,b),float c;,if(b,=0),printf,(“,除数不能为,0,!”,);,return 0;,c=(float)a/b;,return c;,2024/11/26,26,
展开阅读全文