收藏 分享(赏)

第3章 软件测试.ppt

上传人:Facebook 文档编号:2268511 上传时间:2018-09-08 格式:PPT 页数:40 大小:690KB
下载 相关 举报
第3章 软件测试.ppt_第1页
第1页 / 共40页
第3章 软件测试.ppt_第2页
第2页 / 共40页
第3章 软件测试.ppt_第3页
第3页 / 共40页
第3章 软件测试.ppt_第4页
第4页 / 共40页
第3章 软件测试.ppt_第5页
第5页 / 共40页
点击查看更多>>
资源描述

1、,第三章 单元测试,本章要点 单元测试的定义; 单元测试同集成测试和系统测试的区别; 单元测试环境的组成; 单元测试的分析方法; 单元测试的用例设计方法; 单元测试的过程; 单元测试举例。,本章目标 掌握单元测试的概念; 了解单元测试的误区; 了解单元测试与集成测试和系统测试的区别; 掌握单元测试的策略; 掌握单元测试分析的方法; 掌握单元测试用例设计方法。,3.1单元测试概述通常而言,单元测试是在软件开发过程中要进行的最低级别的测试活动,或者说是针对软件设计的最小单位程序模块,进行正确性检验的测试工作。其目的在于发现每个程序模块内部可能存在的差错。在单元测试活动中,软件的独立单元将在与程序的

2、其他部分相隔离的情况下进行测试,主要工作分为两个步骤:人工静态检查和动态执行跟踪。 单元测试的分工大致如下:一般由开发组在一般由开发组在开发组组长监督下进行,保证使,用合适的测试技术,根据单元测试计划和测试说明文档中制定的要求,执行充分的测试;由编写该单元的开发组中的成员设计所需要的测试用例,测试该单元并修改缺陷。3.1.1单元测试误区1、单元测试是一种浪费时间的工作2、单元测试只能证明代码做了什么3、我是个很棒的程序员, 我是不是可以不进行单元测试?4、集成测试能捕捉到所有的Bug5、单元测试的成本效率不高,其实,在经过了单元测试之后,系统集成过程将会大大地简化。3.1.2单元测试与集成测试

3、区别单元测试与集成测试的主要区别在于测试的对象不同。单元测试对象是实现具体功能的单元,一般对应详细设计中所描述的设计单元。集成测试是针对概要设计所包含的模块以及模块组合进行的测试。单元测试所使用的主要测试方法是基于代码的白盒测试。而集成测试所使用的主要测试方法是基于功能的黑盒测试。,因为集成测试要在所有要集成的模块都通过了单元测试之后才能进行,也就是说在测试时间上,集成测试要晚于单元测试,所以单元测试的好坏直接影响着集成测试。单元测试的工作内容包括模块内程序的逻辑、功能、参数传递、变量引用、出错处理、需求和设计中有具体的要求等方面测试。集成测试的工作内容主要是验证各个接口、接口之间的数据传递关

4、系、模块组合后能否达到预期效果。虽然单元测试和集成测试有一些区别,但是二者之间也有着千丝万缕的联系。目前集成测试和单元测试的界限趋向模糊。,3.1.3单元测试与系统测试区别单元测试与系统测试的区别不仅仅在于测试的对象和测试的层次的不同,最重要的区别是测试性质不同。在单元测试过程中,单元测试的执行早于系统测试,测试的是软件单元的具体实现、内部逻辑结构以及数据流向等。系统测试属于后期测试,主要是根据需求规格说明书进行的,是从用户角度来进行的功能测试和性能测试等等,证明系统是否满足用户的需求。单元测试中发现的错误容易进行定位,并且多个单元测试可以并行进行;而系统测试发现的错误比较难定位。,3.2单元

5、测试环境由于一个模块或一个方法(Method)并不是一个独立的程序,在考虑测试它时要同时考虑它和外界的联系,因此要用到一些辅助模块,来模拟与所测模块相联系的其他模块。一般把这些辅助模块分为两种:1、驱动模块(driver):相当于所测模块的主程序。2、桩模块(stub):用于代替所测模块调用的子模块。那么,所测模块和与它相关的驱动模块及桩模块共同构成了一个“测试环境”,如图3-2所示。,图3-2 单元测试环境,3.3单元测试策略单元测试涉及到的测试技术通常有:针对被测单元需求的功能测试、用于代码评审和代码走读的静态测试、白盒测试、状态转换测试和非功能测试。为了提高单元测试的质量,只了解这些单元

6、测试技术还远远不够,还要选择合适的测试策略。在选择测试策略时,主要考虑如下3种方式:自顶向下(Top Down Unit Testing)的单元测试策略、自底向上的单元测试策略(Bottom up Unit Testing)和孤立的单元测试策略。,3.3.1自顶向下的单元测试策略一)步骤: 1. 从最顶层开始,把顶层调用的单元做成桩模块。2. 对第二层测试,使用上面已测试的单元做驱动模块。3. 依次类推,直到全部单元测试结束。二)优点:可以在集成测试之前为系统提供早期的集成途径。三)缺点:单元测试被桩模块控制,随着单元测试的不断进行,测试过程也会变得越来越复杂,测试难度以及开发和维护的成本都不

7、断增加;,要求的低层次的结构覆盖率也难以得到保证;由于需求变更或其他原因而必须更改任何一个单元时,就必须重新测试该单元下层调用的所有单元;低层单元测试依赖顶层测试,无法进行并行测试,使测试进度受到不同程度的影响,延长测试周期。四)总结:从上述分析中,不难看出该测试策略的成本要高于孤立的单元测试成本,因此从测试成本方面来考虑,并不是最佳的单元测试策略。3.3.2自底向上的单元测试一)步骤:1、先对模块调用图上的最底层模块开始测试,模拟调用该模块的模块为驱动模块。,2、其次,对上一层模块进行单元测试,用已经被测试过的模块做桩模块。3、依次类推,直到全部单元测试结束。二)优点:不需要单独设计桩模块。

8、三)缺点:随着单元测试的不断进行,测试过程会变得越来越复杂,测试周期延长,测试和维护的成本增加;随着各个基本单元逐步加入,系统会变得异常庞大,因此测试人员不容易控制;越接近顶层的模块的测试其结构覆盖率就越难以保证;另外,顶层测试易受底层模块变更的影响,任何一个模块修改之后,直接或间接调用该模块的所有单元都要重新测试。,由于只有在底层单元测试完毕之后才能够进行顶层单元的测试,所以并行性不好。另外,自底向上的单元测试也不能和详细设计、编码同步进行。四)总结:相对其它测试策略而言,该测试策略比较合理,尤其是需要考虑对象或复用时。它属于面向功能的测试,而非面向结构的测试。对那些以高覆盖率为目标或者软件

9、开发时间紧张的软件项目来说,这种测试方法不适用。 3.3.3孤立测试一)步骤:无需考虑每个模块与其他模块之间的关系,分别为每个模块单独设计桩模块和驱动模块,逐一完成所有单元模块的测试。,二)优点:该方法简单、容易操作,因此所需测试时间短,能够达到高覆盖率。三)缺点:不能为集成测试提供早期的集成途径。依赖结构设计信息,需要设计多个桩模块和驱动模块,增加了额外的测试成本。四)总结:该方法是比较理想的单元测试方法。如辅助适当的集成测试策略,有利于缩短项目的开发时间。3.3.4综合测试在单元测试中,为了有效地减少开发桩模块的工作量,可以考虑综合自底向上测试策略和孤立测试策略。,3.4单元测试分析一般可

10、以从如下几个方面进行分析和测试,即:1、判断得到的结果是否正确?因为,对于测试而言,首要的任务就是察看一下所期望的结果是否正确,即对结果进行验证。 2、判断是否满足所有的边界条件?边界条件是指软件计划的操作界限所在的边缘条件。边界条件测试是单元测试中最后也是最重要的一项任务。在使用边界值测试的方法时,不妨结合实际项目参考以下测试技巧:输入了完全伪造或者和要求不一致的数据。1)输入一个格式错误的数据。,2)提供一个空值或者不完整的值。 3)与意料之中的值相差很远的值。4)假如一个列表中不允许有重复的数值存在,就可以给它传入一组存在重复数值的列表;如果某个字段的值要求唯一,那么可以输入两个或多个相

11、同的数值来进行测试。5)假如一个列表中不允许有重复的数值存在,就可以给它传入一组存在重复数值的列表;如果某个字段的值 要求唯一,那么可以输入两个或多个相同的数值来进行测试。6) 如果要求按照一定的顺序来存储一些数据,那么可以输入一些顺序打乱的数据来做测试。,7)对于一些做了安全限制的部分,尽量通过各种途径尝试能否绕过安全限制的测试。8) 如果功能的启用有一定的顺序限制,就用和期望不一致的顺序来进行测试。3、分析能否使用反向关联检查?在实际程序中,有一些方法可以使用反向的逻辑关系来验证它们。 4、分析是否能使用其他手段来交叉检查一下结果?一般而言,对某个值进行计算会有一种以上的算法,但我们会因考

12、虑到运行效率或其他方面的原因而选择其中的一种。5、分析是否可以强制一些错误发生?,在实际使用过程当中,总会有意想不到各种各样的情况和错误发生。6、分析模块接口数据在接口处出错就好像丢掉了进入大门的钥匙,无法进行下一步的工作,只有在数据能正确流入、流出模块的前提下,其他测试才有意义。7、分析局部数据结构局部数据结构往往是错误的根源,对其检查主要是为了保证临时存储在模块内的数据在程序执行过程中完整、正确,因此应仔细设计测试用例。 8、 分析独立路径,在模块中应对每一条独立执行路径进行测试,单元测试的基本任务是保证模块中每条语句至少执行一次。9、 分析出错处理是否正确一个好的设计应能预见各种出错条件

13、,并进行适当的出错处理,即预设各种出错处理通路。3.5单元测试用例设计单元测试用例的设计既可以使用白盒测试也可以使用黑盒测试,但以白盒测试为主。白盒测试进入的前提条件是测试人员已经对被测试对象有了一定的了解,基本上明确了被测试软件的逻辑结构。,黑盒测试是要首先了解软件产品具备的功能和性能等需求,再根据需求设计一批测试用例以验证程序内部活动是否符合设计要求的活动。测试人员在实际工作中至少应该设计能够覆盖如下需求的基于功能的单元测试用例: 测试程序单元的功能是否实现;测试程序单元性能是否满足要求(可选);是否有可选的其它测试特性,如边界、余量、安全性、可靠性、强度测试、人机交互界面测试等。无论是白

14、盒测试还是黑盒测试,每个测试用例都应该包含下面4 个关键元素:,(1) 被测单元模块初始状态声明,即测试用例的开始状态(仅适用于被测单元维持了调用中间状态的情况);(2) 被测单元的输入,包含由被测单元读入的任何外部数据值;(3) 该测试用例实际测试的代码,用被测单元的功能和测试用例设计中使用的分析来说明,如:单元中哪一个决策条件被测试;(4) 测试用例的期望输出结果(在测试进行之前的测试说明中定义)。一、测试用例设计步骤以下描述进行测试用例设计的6步通用过程。,步骤1:首先使被测单元运行;这个阶段适合的技术有:模块设计说明导出的测试 对等区间划分步骤2:正面测试(Positive Testi

15、ng)这个阶段适合的技术:设计说明导出的测试对等区间划分状态转换测试步骤3:负面测试(Negative Testing)适合的技术有:错误猜测,边界值分析内部边界值测试状态转换测试步骤4: 模块设计需求中其它测试特性用例设计适合的技术:设计说明导出的测试步骤5:覆盖率测试用例设计 适合的技术:分支测试条件测试数据定义使用测试状态转换测试步骤6:测试执行,步骤7:完善代码覆盖 适合的技术:分支测试条件测试 设计定义试验测试状态转换测试,3.6单元测试过程图3-7从宏观的角度概括了单元测试的工作过程图。一、单元测试进入和退出准则如表3-1和表3-2所示:,表3-1 进入准则,表3-2 退出准则,二

16、、单元测试过程,图3-7 单元测试工作过程,(1)准备阶段 (2)编制阶段 (3)代码审查阶段 (4)单元测试阶段 (5)评审、提交阶段,3.7单元测试举例一、单元测试计划1. 简介这份文档的目标是详细描述对两票系统的可以实现在二次系统图上进行图形开票模块的功能验证的测试过程。2. 本测试的总目标: 是否实现了需求文档中定义的所有功能。3. 完整性需求在测试该模块是否实现了需求文档中定义的所有功能之前,应该做如下两项工作:,测试数据初始化是否无误;测试二次图开票GUI界面是否与系统维护模块显示一致。4. 单元测试终止标准硬件资源不足或故障造成软件无法运行软件运行后无法正确显示(如:因数据初始化

17、有误造成GUI界面同系统维护模块显示不一致或不正确等);所有功能测试均已经完成5. 资源需求软件资源操作系统:windows 2000,web服务器:Tomcat 5.0数据库服务器:SQL Server 2000浏览器:Microsoft IE 6.0测试工具:Junit硬件资源同开发用pc机配置相同即可。测试进度,表3-3 二次系统图图形开票模块,6. 准备测试的特征以下特征将被测试,以确保该模块能满足需求规格说明书中指定的需求:需求2.2.1 用户界面需求2.2.2 弹出菜单需求2.2.3图形开票7. 不准备测试的特征本次测试将不考虑是否能够同一次系统图图形开票模块的集成。8. 测试方法

18、该单元测试方法包括功能测试、GUI测试。,9. 通过/失败标准10. 测试结束后须提交的产物包括以下几个文档:本测试计划测试规格说明文档测试结果报告向测试经理和开发经理提交的每日测试状态报告缺陷报告11、测试执行人员12、风险和应急计划,二、测试的设计和开发测试设计和开发要以测试计划作为输入。在设计测试时,首先应明确测试目标(细化测试的方法和范围);确定每个测试的输入规格说明;确定每个测试使用的测试配置;复查测试设计的覆盖率和测试的准确度。 在对本单元进行测试时所采用的方法是:先完成黑盒测试,然后统计白盒覆盖率,针对未覆盖的逻辑单位设计测试用例覆盖它。然后,就应该开发测试用例,应该注意的是在测

19、试用例中应该尽可能详细地描述测试过程,对于耗时的测试进行自动化。最后,验证和调试测试。,3.8单元测试经验总结测试人员在进行测试的工作过程中,应该注意积累测试工作经验,这样可以缩短单元测试的时间,提高测试效果和效率。如:1、在做单元测试的过程中,要灵活选用测试用例设计技术,如本章中的两票系统单元测试过程中,首先使用黑盒测试用例设计技术,然后根据相应的覆盖率统计再补充白盒测试用例。既减少了测试工作的重复,又保证了单元测试的完整性。2、应该尽量开发简单测试驱动代码,增强其可读性。最重要的是,单元测试代码中不能包含分支和逻辑语句,因为这意味着有多个测试在同时进行。这样将会使测试代码变得难以理解和维护

20、。,本章小结通过单元测试,我们验证开发人员所书写的编码是可以按照其所设想的方式执行的,产出了符合预期值的结果。这就实现了单元测试的目的。相比后面阶段的测试,单元测试的创建更简单,维护更容易,并且可以更方便的进行重复。从全程的费用来考虑, 相比起那些复杂且旷日持久的集成测试,或是不稳定的软件系统来说,单元测试所需的费用是很低的。模块单元设计完毕之后的开发阶段就是单元测试。,值得注意的是,如果在书写代码之前就进行单元测试,测试设计就会显得更加灵活,因为一旦代码完成,对软件的测试可能就受制于代码,倾向于测试该段代码完成什么功能,而不是真正的测试,我们需要的做的应该是测试这段代码应该做什么。因此,应该把单元测试的设计放在详细设计阶段。,习 题 什么是单元测试? 测试用例设计的步骤有哪些? 单元测试的策略有哪些?每种测试策略具有哪些优点和缺点? 单元测试与集成测试、系统测试各有哪些区别? 针对你所熟悉的一个简单的小程序,根据其特点考虑一下如何对其进行单元测试。并试着使用基本的黑盒或白盒测试技术设计一些测试用例和测试数据?,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报