第4章单元测试

上传人:沈*** 文档编号:151079824 上传时间:2022-09-12 格式:PPT 页数:36 大小:376KB
收藏 版权申诉 举报 下载
第4章单元测试_第1页
第1页 / 共36页
第4章单元测试_第2页
第2页 / 共36页
第4章单元测试_第3页
第3页 / 共36页
资源描述:

《第4章单元测试》由会员分享,可在线阅读,更多相关《第4章单元测试(36页珍藏版)》请在装配图网上搜索。

1、l单元测试的定义;l单元测试同集成测试和系统测试的区别;l单元测试环境的组成;l单元测试的分析方法;l单元测试的用例设计方法;l单元测试的过程。本章要点本章要点第四章第四章 单元测试单元测试举例认识单元测试举例认识单元测试假如写了一个加法函数:int add(int a,int b)return a-b;问:问:他有什么功能,举个例子看看?答:答:可实现两数相加,得到结果。输入两个1,就会返回它们的和:2问:问:真的吗?执行一下看答:答:写个驱动执行一下(代码在下一页),哦,不对,返回了0,有错误。单元测试代码单元测试代码void test_add()int a=1;int b=1;int r

2、et=add(a,b);ASSERT(ret=2);int main()test_add();结果:不是结果:不是2,而是,而是0,说明此函数存在错误。说明此函数存在错误。定义:在软件开发过程中要进行的最低级别的测试活动 针对软件设计的最小单位程序模块,进行正确性 检验的测试工作。目的:发现每个程序模块内部可能存在的差错。人工静态检查人工静态检查动态执行跟踪动态执行跟踪4.1 单元测试概述单元测试概述方式4.1.1 单元测试的误区单元测试的误区 1、单元测试是一种浪费时间的工作 2、单元测试只能证明代码做了什么 原因:无规格说明 3、我是个很棒的程序员,我是不是可以不进行单元测试?人非圣贤,孰

3、能无过 4、集成测试能捕捉到所有的Bug 清洗豆浆机 5、单元测试的成本效率不高单元测试(跳过)集成测试直接程序存在BUG定位(难)3.25小时6.25小时11.5小时单元测试单元测试集成测试集成测试系统测试系统测试图图4-1 测试成本效率对比测试成本效率对比单元模块的可靠性系统总体可靠性90%99%99.9%34.87%90.44%99.9%若某系统由10个单元模块组成,那么每个单元的可靠性和系统总体可靠性的关系如下:4.1.2单元测试与集成测试区别单元测试与集成测试区别角度角度单元测试单元测试集成测试集成测试方法方法时间时间主要内容主要内容白盒早程序(模块内)黑盒、白盒晚接口、组合4.1.

4、3单元测试与系统测试区别单元测试与系统测试区别角度角度单元测试单元测试系统测试系统测试时间时间人员人员错误定位错误定位早开发者易晚用户难4.2 单元测试环境单元测试环境 建立原因:一个模块或一个方法与外界的联系是必然的。辅助模块(用于模拟与所测模块相联系的其它模块)分为两种:驱动模块(driver):相当于所测模块的主程序。桩模块(stub):用于代替所测模块调用的子模块。所测模块和与它相关的驱动模块及桩模块共同构成了一个“测试环境”。被测单元驱动模块桩模块1桩模块桩模块N测试结果测试用例输入数据输入数据输出结果输出结果图4-2 单元测试环境调用调用如:main()主函数4.3 单元测试策略单

5、元测试策略功能测试静态测试白盒测试状态转换测试非功能测试单元测试的单元测试的 测试技术测试技术单元测试的单元测试的 测试策略测试策略自顶向下的单元测试策略自底向上的单元测试策略孤立的单元测试策略 4.3.1自顶向下的单元测试策略自顶向下的单元测试策略步骤:1.从最顶层开始,把顶层调用的单元做成桩模块。2.对第二层测试,使用上面已测试的单元做驱动模块。3.依次类推,直到全部单元测试结束。优点:可以在集成测试之前为系统提供早期的集成途径。缺点:单元测试被桩模块控制,成本都不断增加;低层次的结构覆盖率难以得到保证;更改任何一个单元时,就必须重新测试该单元下层调用的所有单元(因为上层驱动改变);无法进

6、行并行测试,延长测试周期。总结:要做桩模块,成本要高于孤立的单元测试成本,因此从测试成本方面来考虑,并不是最佳的单元测试策略。4.3.2自底向上的单元测试策略自底向上的单元测试策略步骤:步骤:1、先对模块调用图上的最底层模块开始测试,模拟调用该模块的模块为驱动模块。2、其次,对上一层模块进行单元测试,用已经被测试过的模块做桩模块。3、依次类推,直到全部单元测试结束。优点:优点:不需要单独设计桩模块。缺点:缺点:随着单元测试的不断进行,测试过程会变得越来越复杂,测试周期延长,测试和维护的成本增加;随着各个基本单元逐步加入,系统会变得异常庞大,因此测试人员不容易控制;越接近顶层的模块的测试其结构覆

7、盖率就越难以保证;任何一个模块修改之后,直接或间接调用该模块的所有单元都要重新测试(调用的下层程序改变)。并行性不好。自底向上的单元测试也不能和详细设计、编码同步进行。总结:相对其它测试策略而言,该测试策略比较合理,尤其是需要考虑 对象或复用时。它属于面向功能的测试,而非面向结构的测试。对那些以高覆盖率为目标或者软件开发时间紧张的软件项目来说,这种测试方法不适用。4.3.3 孤立测试孤立测试步骤:分别为每个模块单独设计桩模块和驱动模块,逐一完成所有单元模块的测试。优点:该方法简单、容易操作,因此所需测试时间短,能够达到高覆盖率。缺点:不能为集成测试提供早期的集成途径。依赖结构设计信息,需要设计

8、多个桩模块和驱动模块,增加了额外的测试成本。总结:该方法是比较理想的单元测试方法。如辅助适当的集成测试策略,有利于缩短项目的开发时间。4.3.4 综合测试综合测试 在单元测试中,为了有效地减少开发桩模块的工作量,可以考虑综合自底向上测试策略和孤立测试策略。4.4单元测试分析(一)单元测试分析(一)注:不能仅仅测试最理想的情况。(轮船引擎)从如下几方面进行分析和测试:1、判断得到的结果是否正确?如:加法函数功能 2、判断是否满足所有的边界条件?1)输入一个格式错误的数据。如:年月YYYY-MM 2)提供一个空值或者不完整的值。如:主键为空 3)与意料之中的值相差很远的值。年龄:10000 4)要

9、求唯一,可以输入两个或多个相同的数值来进行测试。4.4单元测试分析(二)单元测试分析(二)6)如果要求按照一定的顺序来存储一些数据,那么可以输入一些顺序打乱的数据来做测试。7)对于一些做了安全限制的部分,尽量通过各种途径尝试能否绕过安全限制的测试。如:ATM取款未输入密码,能否显示余额和取款 8)如果功能的启用有一定的顺序限制,就用和期望不一致的顺序来进行测试。4.4单元测试分析(三)单元测试分析(三)3、分析能否使用反向关联检查?如:检查插入功能是否正确,可以使用查询验证。4、分析是否能使用其他手段来交叉检查一下结果?一般而言,对某个值进行计算会有一种以上的算法,但我们会因考虑到运行效率或其

10、他方面的原因而选择其中的一种。如:判断三角形全等。SSS、AAS、SAS 5、分析是否可以强制一些错误发生?如:网络故障、内存不足、磁盘空间不足等。4.4单元测试分析(四)单元测试分析(四)6、分析模块接口 如:数据能正确流入、流出模块的前提下,其他测试才有意义。7、分析局部数据结构 8、分析独立路径 保证每条语句至少执行一次。9、分析出错处理是否正确 预设各种出错处理通路。4.5单元测试用例设计单元测试用例设计 测试的完整性度量以白盒测试为主:语句覆盖(100%)判定覆盖(100%)条件覆盖 判定-条件覆盖 路径覆盖(主要)l测试用例的4 个关键元素:初始状态声明;输入数据;实际测试的代码;

11、期望输出结果。4.5.1 测试用例设计步骤测试用例设计步骤 步骤1:使被测单元运行;(尽量简单)适合的技术有:模块设计说明导出的测试 对等区间划分 步骤2:正面测试(Positive Testing)适合的技术:设计说明导出的测试 对等区间划分 状态转换测试 步骤3:负面测试(Negative Testing)错误猜测边界值分析内部边界值测试状态转换测试 步骤4:模块设计需求中其它测试特性用例设计 如:性能、余量、安全等。步骤5:覆盖率测试用例设计 分支测试 条件测试 数据定义使用测试 状态转换测试 步骤6:测试执行 步骤7:完善代码覆盖 适合的技术:分支测试 条件测试 设计定义试验测试 状态

12、转换测试4.5.2面向对象应用程序的面向对象应用程序的 单元测试用例设计单元测试用例设计 两种测试方式 1、功能性测试 两个层次:类的规格说明(概念和方法)方法的规格说明(前置/后置条件)2、结构性测试 类作为一个单元来进行测试。(1)方法的单独测试:(2)方法的综合测试:黑盒测试白盒测试主要是对类和对象状态的测试!主要是对类和对象状态的测试!继承和多态涉及少!继承和多态涉及少!3、基于对象状态转移图的OO软件测试 结点:表示对象的某个可能状态 有向边:“事件动作”ABe/a图4-3 对象-状态转换图 对象处于状态A 时,若接收到事件e 则执行相应的操作a且转移到状态B1)状态的处理:)状态的

13、处理:列出对象的逻辑状态,而非所有实际状态。列出对象的逻辑状态,而非所有实际状态。理论上,所有数据成员状态的笛卡尔积。理论上,所有数据成员状态的笛卡尔积。实际上,不可能全部列出,类似等价类划分。实际上,不可能全部列出,类似等价类划分。如:如:public class Accout string name;int accNum;int balance;易知:易知:a.特殊值情况:特殊值情况:name=NULL,accNum0,balance0;2)主要步骤:)主要步骤:依据设计文档,或者通过分析对象数据成员的取值情况空间,得到被测试类的状态转移图;给被测试的类加入用于设置和检查对象状态的新方法,

14、导出对象的逻辑状态;如set()、get()等 对于状态转移图中的每个状态,确定该状态是哪些方法的合法起始状态,即在该状态时,对象允许执行哪些操作;在每个状态,从类中方法的调用关系图最下层开始,逐一测试类中的方法;测试每个方法时,根据对象当前状态确定出对方法的执行路径有特殊影响的参数值,将各种可能组合作为参数进行测试。4、类的数据流测试l是一种白盒测试方法,它利用程序的数据流之间的关系来指导测试的选择。l对类进行三级测试,定义如下:A.方法内部测试:测试单个方法,相当于单元测试;B.方法间测试:在类中与其它方法一起测试一个直接或间接调用的公开方法,相当于集成测试;C.类内部测试:测试公开方法在

15、各种调用顺序时的相互作用关系,只能测试其中一个子集。例:例:下面的程序代码是一个计算学生成绩的例子,包括方法:Student(),addCourse(int grade),deleteCourse(int courseNum),display()等。(P119-P120)public class Student /Student类 int N=10;private String name;private int idNumber;private float average;private int aN;public Student(String name,int idNumber1)/构造方法

16、 name=name;idNumber=idNumber1;Average=0;For(int i=0;iN;i+)ai=-1;/求平均分的方法private float averageGrade()int i;int j=0;float sum=0;for(i=0;i=0)sum+=ai;j+;float average1=sum/j;return average1;/添加新科目的成绩,并重求平均分public boolean addCourse(int grade)int i;for(i=0;iN;i+)if(ai0)break;if(iN)return false;else for(i=

17、0;iN;i+)if(i=courseNum-1)/可以删除,存在此门课的成绩 break;ai=-1;/以下是删除过程 average=averageGrade();return true;public void display()System.out.println(name+“的平均成绩是”+average);StudentaddCoursedeleteCoursedisplayaverageGrade图4-4 Students的类调用图l方法内部测试方法内部测试:每一个(共5个)l方法间测试方法间测试l类内部测试类内部测试,如:Student,addCourse,display无穷多个

18、Student,display,等同方法内部测试addCourse,deleteCourse,需与averageGrade集成4.6单元测试过程单元测试过程 一、单元测试进入和退出准则 如表4-1和表4-2所示:表4-1 进入准则要素判断准则详细设计说明书单元测试用例 经过审查 获得批准 进入配置库 要素判断准则源代码文件源代码文件清单 源代码文件获得批准 源代码文件进入配置库的源代码区 测试用例源代码通过同级评审软件Bug 清单单元测试报告 提交测试负责人 提交软件产品配置管理表4-2 退出准则二、单元测试过程详 细 设 计 说 明 书原 程 序 文 件测 试 用 例 文 件单 元 测 试 报 告软 件 Bug清 单准备代码编制代码审查单元测试图4-5 单元测试工作过程(1)准备阶段:培训、环境、工具、测试用例等(2)编制阶段:编码、测试用例的修改等(3)代码审查阶段:各种语法检查和算法逻辑等(4)单元测试阶段:执行测试用例,并记录测试结果(5)评审、提交阶段:评审结论、提交相关文档源程序文件测试用例文件单元测试报告软件Bug清单

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!