软件工程(第二版)教学课件(闫菲) 第八章

上传人:w****i 文档编号:94561688 上传时间:2019-08-08 格式:PPT 页数:62 大小:507.50KB
返回 下载 相关 举报
软件工程(第二版)教学课件(闫菲) 第八章_第1页
第1页 / 共62页
软件工程(第二版)教学课件(闫菲) 第八章_第2页
第2页 / 共62页
软件工程(第二版)教学课件(闫菲) 第八章_第3页
第3页 / 共62页
软件工程(第二版)教学课件(闫菲) 第八章_第4页
第4页 / 共62页
软件工程(第二版)教学课件(闫菲) 第八章_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《软件工程(第二版)教学课件(闫菲) 第八章》由会员分享,可在线阅读,更多相关《软件工程(第二版)教学课件(闫菲) 第八章(62页珍藏版)》请在金锄头文库上搜索。

1、8.1 软件测试的基本概念,8.2 软件测试方法,8.3 测试用例的设计,8.4 软件测试的步骤,8.5 调试,退出,第八章 软件测试,8.6 软件可靠性,8.7 测试工具,8.1 软件测试的基本概念,8.1.1 软件测试的定义,8.1.2 软件测试的基本原则,退出,8.1.3 软件测试的步骤,8.1.4 软件测试的信息流计,关于测试目的,G.J.Myers给出了以下的观点:,测试的定义:为了发现程序中的错误而执行程序的过程。具体地说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计出一批测试用例,并利用测试用例来运行程序,以发现程序错误的过程。,8.1.1 软件测试的定义,(

2、1)测试是为了发现程序中的错误而执行程序的过程; (2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案; (3)成功的测试是发现了至今为止尚未发现的错误的测试。,8.1.2 软件测试的基本原则,(1)尽早地、不断地进行软件测试。 (2)设计测试用例时,要给出测试的预期结果。 (3)开发小组和测试小组分开。 (4)要设计非法输入的测试用例。 (5)在对程序修改之后要进行回归测试。 (6)程序中尚未发现的错误的数量往往与在该段程序中已发现的错误的数量成正比。,8.1.3 软件测试的步骤,1单元测试 又称模块测试。每个程序模块完成一个相对独立的子功能,所以可以对该模块进行单独的测试。由于每

3、个模块都有清晰定义的功能,所以通常比较容易设计相应的测试方案,以检验每个模块的正确性。,2集成测试 在单元测试完成后,要考虑将模块集成为系统的过程中可能出现的问题,例如,模块之间的通信和协调问题,所以在单元测试结束之后还要进行集成测试。这个步骤着重测试模块间的接口,子功能的组合是否达到了预期要求的功能,全程数据结构是否有问题等。,3有效性测试,4系统测试 系统测试是把通过有效性测试的软件,作为基于计算机系统的一个整体元素,与整个系统的其他元素结合起来,在实际运行环境下,对计算机系统进行一系列的集成测试和有效性测试。,集成测试通过后,应在用户的参与下进行有效性测试。这个时候往往使用实际数据进行测

4、试,从而验证系统是否能满足用户的实际需要。,8.1.4 软件测试信息流,8. 2 软件测试方法,8.2.1 黑盒测试,8.2.2 白盒测试,退出,8.2.1 黑盒测试,任何产品都可以使用以下两种方法进行测试: (1)如果已知产品的功能,则可以对它的每一个功能进行测试,看是否都达到了预期的要求; (2)如果已知产品的内部工作过程,则可以对它的每种内部操作进行测试,看是否符合设计要求。 第一种方法是黑盒测试,第二种方法是白盒测试。,黑盒测试时完全不考虑程序内部的结构和处理过程,只按照规格说明书的规定来检查程序是否符合它的功能要求。黑盒测试是在程序接口进行的测试,又称为功能测试。,黑盒测试检查的主要

5、方面有: 程序的功能是否正确或完善; 数据的输入能否正确接收,输出是否正确; 是否能保证外部信息(如数据文件)的完整性等。 用黑盒法设计测试用例时,必须用所有可能的输入数据来检查程序是否都能产生正确的输出。,黑盒测试不可能实现穷尽测试:,假设有一个很简单的小程序,输入量只有两个:A和B,输出量只有一个:C。如果计算机的字长为32位,A和B的数据类型都只是整数类型。利用黑盒法进行测试时,将A和B的可能取值进行排列组合,输入数据的可能性有:232232264种。假设这个程序执行一次需要1毫秒,要完成所有的测试,计算机需要连续工作5亿年。显然,这是不能容忍的,而且,设计测试用例时,不仅要有合法的输入

6、,而且还应该有非法的输入,在这个例子中,输入还应该包括实数、字符串等,这样,输入数据的可能性就更多了。所以说,穷尽测试是不可能实现的。,白盒测试时将程序看作是一个透明的盒子,也就是说测试人员完全了解程序的内部结构和处理过程。所以测试时按照程序内部的逻辑测试程序、检验程序中的每条通路是否都能按预定的要求正确工作。白盒测试又称为结构测试。 利用白盒测试设计测试用例时,应包括以下三类测试: (1)语句测试:要求程序中的每个语句至少测试一次; (2)分支测试:要求程序中的每个分支至少测试一次; (3)路径测试:要求程序中的每条路径至少测试一次。,8.2.2 白盒测试,白盒测试也不能实现穷尽测试:,左图

7、所示的一个小程序的控制流程,其中每个圆圈代表一段源程序(或语句块),图中的曲线代表执行次数不超过20的循环,循环体中共有5条通路。这样,可能执行的路径有520条,近似为1014条可能的路径。如果完成一个路径的测试需要1毫秒,那么整个测试过程需要3170年。显然,这也是不能接受的。,8.3 测试用例的设计,8.3.1 逻辑覆盖,8.3.2 等价类划分,退出,8.3.3 边界值分析,8.3.4 错误推测法,逻辑覆盖是以程序的内部逻辑结构为基础的测试用例设计技术,属于白盒测试。它要求测试人员十分清楚程序的逻辑结构,考虑的是测试用例对程序内部逻辑覆盖的程度。 根据覆盖的目标,逻辑覆盖又可以分为: 语句

8、覆盖 判定覆盖 条件覆盖 判定条件覆盖 条件组合覆盖,8.3.1 逻辑覆盖,1、语句覆盖,语句覆盖就是设计足够的调试用例,使得程序中的每个语句至少执行一次。,左图程序段中共有4条路径:P1(ace)、P2(abd)、P3(abe)、P4(acd)。,语句覆盖不能发现判断中的逻辑运算中的错误。第一个判断中的逻辑运算符“&”若错写成了“|”,利用上面的输入数据则检查不出这个错误。,P1正好满足语句覆盖的条件。可以设计如下的输入数据: A2,B0,x4,2、判定覆盖,判定覆盖就是设计足够的测试用例,使得程序中每个判定的取“真”分支和取“假”分支至少都执行一次,判定覆盖又称分支覆盖。,测试用例如果能够

9、测试路径P1(ace)和P2(abd),就可以满足判定覆盖要求。可以设计如下两组输入数据: A2,B0,x4 A1,B1,x1 也可以让测试用例测试路径P3(abe)和P4(acd)。相应的两组输入数据如下: A2,B1,x1 A4,B0,x4 判定覆盖比语句覆盖强,但是仍不能保证判断条件的正确性。例如:第二个判断条件中的x1若错写成了x1,利用上面的输入数据就不能检查出这个错误。,3、条件覆盖,条件覆盖就是设计足够的测试用例,使得程序判定中的每个条件能获得各种可能的结果。,条件:A1,B0,A2,x1。需要有足够的测试用例使得上述四个条件都能有满足和不满足的情况。以下这两组输入数据能满足这些

10、要求: A2,B0,x4 A1,B1,x1 这两组数据不仅满足条件覆盖的要求,而且也满足判定覆盖的要求。但并不是所有的满足条件覆盖要求的数据都满足判定覆盖的要求。下面的两组数据满足条件覆盖的要求: A1,B0,x3 A2,B1,x1 但是这组数据不满足判定覆盖的要求。为了解决这个问题,可以采用下面的判定条件覆盖。,4、判定条件覆盖,判定条件覆盖就是设计足够的测试用例,使得判定中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果。,对于上面的例子,下述两组输入数据能满足这些要求: A2,B0,x4 A1,B1,x1 判定条件覆盖仍有缺陷。从表面上看,它测试了所有条件的所有可能

11、结果,但事实上并不是这样。因为某些条件掩盖了另一些条件。例如,在逻辑表达式中,如果“与”表达式中某一条件为“假”,则整个表达式的值为“假”,这个表达式中另外的几个条件就不起作用了。同样地,如果在“或”表达式中,某一条件为“真”,则整个表达式的值为“真”,其它条件也就不起作用了。因此,采用判定条件覆盖时,逻辑表达式中的错误不一定能测试出来。,5、条件组合覆盖,条件组合覆盖就是设计足够的测试用例,使得每个判定中的条件的各种可能组合都至少出现一次。,可能的条件组合: (1)A1,B0 (2)A1,B0 (3)A1,B0 (4)A1,B0 (5)A2,x1 (6)A2,x1 (7)A2,x1 (8)A

12、2,x1,相应的输入数据: A2,B0,x4 满足(1)和(5) A2,B1,x1 满足(2)和(6) A1,B0,x2 满足(3)和(7) A1,B1,x1 满足(4)和(8),显然,满足条件组合覆盖的测试数据,也一定满足判定覆盖、条件覆盖和判定条件覆盖标准。但是,满足条件组合覆盖标准的测试数据并不一定覆盖了程序中的每条路径,例如,利用上述四组测试数据就遗漏了路径P4(acd)。,8.3.2 等价类划分,等价类划分是一种实用的测试技术,属于黑盒测试。与逻辑覆盖不同,使用等价类划分设计测试用例时,完全不需要考虑程序的内部逻辑结构,而主要依据程序的功能说明。 穷尽测试是不可能实现的,实际上也是不

13、必要的,我们可以从所有可能的输入数据中选择一个子集来进行测试。如何选择这个子集,使得这个子集具有代表性,能尽可能多地发现程序中的错误,等价类划分就是基于这种考虑的一种实现方法。该方法根据输入数据和输出数据的特点,将程序输入域划分成若干个部分,即子集,然后从每个子集中选取具有代表性的数据作为测试用例。,1、划分等价类,等价类的划分在很大程度上依靠的是测试人员的经验,下面给出几条基本原则: (1)如果输入条件规定了取值范围,则可划分出一个有效的等价类(输入值在此范围内)和两个无效的等价类(输入值小于最小值、输入值大于最大值)。 (2)如果输入条件规定了输入数据的个数,则可相应地划分出一个有效的等价

14、类(输入数据的个数等于给定的个数要求)和两个无效的等价类(输入数据的个数少于给定的个数要求、输入数据的个数多于给定的个数要求)。 (3)如果输入条件规定了输入数据的一组可能的值,而且程序对这组可能的值做相同的处理,则可将这组可能的值划分为一个有效的等价类,而这些值以外的值划分成无效的等价类。,(4)如果输入条件规定了输入数据的一组可能的值,但是程序对不同的输入值做不同的处理,则每个输入值是一个有效的等价类,此外还有一个无效的等价类(所有不允许值的集合)。,(5)如果输入条件规定了输入数据必须遵循的规则,则可以划分一个有效的等价类(符合规则)和若干个无效的等价类(从各种角度违反规则)。,2、确定

15、测试用例,划分出等价类后,根据以下原则设计测试用例: (1)为每个等价类编号。 (2)设计一个新的测试用例,使它能包含尽可能多的尚未被覆盖的有效等价类。重复这一过程,直到所有的有效等价类都被覆盖。 (3)设计一个新的测试用例,使它包含一个尚未被覆盖的无效等价类。重复这一过程,直到所有的无效等价类都被覆盖。,8.3.3 边界值分析,人们在长期的测试中发现,程序往往在处理边界值的时候容易出错,比如数组的下标,循环的上下界等。针对这种情况设计测试用例的方法就是边界值分析方法。 使用边界值分析方法设计测试用例时,首先要确定边界情况。通常输入等价类和输出等价类的边界,就是应该着重测试的程序边界情况。也就

16、是说,应该选取恰好等于、小于和大于边界的值作为测试数据,而不是选取每个等价类内的典型值或任意值作为测试数据。 边界值分析也属于黑盒测试,可以看作是对等价类划分的一个补充。在设计测试用例时,往往联合等价类划分和边界值分析这两种方法。,8.3.4 错误推测法,错误推测法的基本想法是:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例。 例如,输入数据为零或输出数据为零的地方往往容易出错;各模块间对公有变量的引用也是容易出错的地方。,8.4 软件测试的步骤,8.4.1 单元测试,8.4.2 集成测试,退出,8.4.3 有效性测试,8.4.4 系统测试,单元测试又称模块测试,集中对软件设计的最小单位模块进行测试,主要是为了发现模块内部可能存在的各种错误和不足。 进行单元测试时,根据程序的内部结构设计测试用例,主要使用白盒测

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号