第12章软件测试.ppt
《第12章软件测试.ppt》由会员分享,可在线阅读,更多相关《第12章软件测试.ppt(157页珍藏版)》请在三一文库上搜索。
1、第12章 软件测试,第12章 软件测试,1)软件测试的概念 2)黑盒测试和白盒测试方法 3)单元测试过程 4)集成测试,系统测试,验收测试的基本过程,掌握 掌握 理解 了解,要求,12.1软件测试的概念,1963年, 美国,飞往火星的火箭爆炸,损失$ 10 million。 原因: FORTRAN循环: DO 5 I = 1, 3 误写为 DO 5 I = 1.3 软件测试的工作量约占整个项目工作量的40左右,对于要求极高的系统测试工作量还要成倍增加。 微软Exchange 2000和Windows 2000中的人员结构,软件测试的目的?,为什么需要这么多人、花这么多代价进行测试?目的何在?
2、“证明程序正确!” 对吗? Myers对软件测试目的提出以下观点: (1)软件测试是为了发现错误而执行程序的过程。 (2)一个好的测试用例能够发现至今尚未发现的错误。 (3)一个成功的测试是发现了至今尚未发现的错误的测试。,5,在测试阶段测试人员努力设计出一系列测试方案,目的却是为了“破坏”已经建造好的软件系统竭力证明程序中有错误不能按照预定要求正确工作。 暴露问题并不是软件测试的最终目的,发现问题是为了解决问题,测试阶段的根本目标是尽可能多地发现并排除软件中潜藏的错误,最终把一个高质量的软件系统交给用户使用。,6,通常想象的“测试是为了表明程序是正确的”,“成功的测试是没有发现错误的测试”是
3、不正确的。 测试的目的决定了测试方案的设计。如果为了表明程序是正确的而进行测试,就会设计一些不易暴露错误的测试方案;相反,如果测试是为了发现程序中的错误,就会力求设计出最能暴露错误的测试方案。,测试决不能证明软件是正确的,也不能证明错误的不存在,它只能证明错误的存在。,测试的定义 从广义上讲是指软件产品生存周期内所有的检查、评审和确认活动 从狭义上讲,软件测试是为了发现错误而执行程序的过程 软件测试是根据软件开发各阶段的规格说明和程序内部结构而精心设计的一批测试用例,用这些测试用例运行程序,以发现程序错误的过程。 一个测试用例是一组输入数据及其对应的预期输出结果。,测试的工作量,一般性软件其测
4、试工作量大约占整个开发工作量的40% 系统软件或关系到人的生命财产安全的重要软件,其测试工作量通常可能达到整个开发工作量的35倍,软件测试的目标,优秀的测试用例:以最小的代价、在最短的时间内,尽可能多地发现软件中的错误 。,10,软件测试原则,(1) 应该把测试贯穿在整个开发过程之中。事实上从需求分析阶段开始,每个阶段结束之前都要进行阶段审查,目的是尽早发现和纠正错误。 概要设计时应完成测试计划,详细的测试用例定义可在设计模型确定后开始,所有测试可在任何代码被产生之前进行计划和设计。,11,软件测试原则,软件测试不等于程序测试。 据美国一家公司统计,查出的软件错误中,属于需求分析和软件设计的错
5、误约占 64%,属于程序编写的错误仅占 36%。程序编写的许多错误是“先天的”。,12,测试与开发前期工作的关系,决定软件与系统的配合关系,需求分析,概要设计,详细设计,编 码,单元测试,集成测试,确认测试,系统测试,13,开发前期出现错误的扩展,计划,需求 分析,设 计,编 码,测 试,A,B,14,(2)测试用例应由输入数据和预期的输出结果两部分组成,并兼顾合理的输入和不合理的输入数据。在实际操作中可以列出一张电子表格,包括每个测试用例的编号、类型、输入数据、预期输出结果、实际输出结果、出错原因分析。,15,(3)穷举测试是不可能的。 所谓穷举测试就是把程序所有可能的执行路径都检查一遍的测
6、试。,例:输入 三条边长 可采用的测试用例数 (设字长16位) 执行时间: 设测试一次需1ms 共需一万年.,=2 X2 X2 3X10,16,16,16,14,穷举测试实例: 设程序含5个分支,循环次数 20,从A到B的可能路径 执行时间: 设测试一次需2ms 穷举测试需5亿年.,=5+5 +5 +5 10,20,1,2,19,14,A,B,18,(4)程序员应该尽量避免检查自己编写的代码。 为了达到最佳的测试效果,应该由独立的第三方从事测试工作。 所谓“最佳效果”是指有最大可能性发现错误的测试。开发软件的软件工程师(心理)并不是完成全部测试工作的最佳人选(通常他们主要承担模块测试工作)。,
7、测试原则续,(5)在设计测试用例时,应该包括有效的、期望的输入情况,也要包括无效的和不期望的输入情况。即能够验证程序正常运行的合理输入,也能够验证对异常情况处理的不合理输入数据以及临界数据输入。 在测试时,人们常常过多地考虑合法和期望的输入条件,以检查程序是否做了它应该做的事情,而忽视了不合法的和预想不到的输入条件。 用户在使用系统时,输入一些错误指令和参数是经常发生的,如果软件遇到这种情况不能做出适当的反应,给出相应的提示信息,可能会误导用户,甚至会造成严重损失。,测试原则续,(6)软件中遗留的错误数量与已经发现的错误数量成正比。根据这个规律对测试中发现错误成堆的模块更要仔细测试。例如,在某
8、个著名的操作系统中,44%的错误仅与4%的模块有关。 (7)回归测试的关联性要特别引起注意,修改一个错误而引起更多错误的现象并不少见。,测试原则续,(8)严格执行测试计划。在测试之前应该有明确的测试计划,内容包括:要测试的软件功能和内容、测试用例和预期结果、测试的进度安排、需要的工具和资源、测试控制方式和过程等。 (9)做好测试记录,为统计和维护提供基础数据,软件测试的对象,软件测试并不等于程序测试。软件测试应贯穿于软件定义与开发的整个期间。 需求分析、概要设计、详细设计以及程序编码等各阶段所得到的文档,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序,都应成为软件测试的对象。
9、为把握软件开发各个环节的正确性,需要进行各种确认和验证工作。,验证和有效性确认,验证(Verification):通过检查和提供客观证据,表明规定要求已经满足的认可。 在软件生存期各个阶段,验证是指检测各个阶段结束时的工作产品是否满足对上一阶段的结束后的工作产品所定义的规格的验证过程 有效性确认(Validation):通过检查和提供客观证据,表明一些针对某一特定预期用途的要求已经满足的认可。 在软件生存周期各个阶段,确认是指检测各个阶段结束时的工作产品是否满足在软件生存周期初期在系统需求文档中描述的各项软件规格的确认过程。 都是测试活动。,验证和有效性确认,验证(Verification):
10、 有效性确认(Validation): 都是测试活动。,测试的层次和类型层次,单元测试:针对模块代码的测试,测试的粒度最小 集成测试:把经过单元测试的模块组合在一起,重点测试模块之间的接口。 系统测试:系统集成后,对整个系统包括硬件等环境的综合测试。 验收测试:以用户为主,对软件功能、性能进行全面测试。验证软件是否满足需求规格说明书的要求,检查所有的配置成份是否齐全。,测试的层次和类型类型,静态测试:主要通过代码审查和静态分析,检查源代码中存在的问题。 过程:代码审查由有经验的程序设计人员根据软件详细设计说明书,阅读程序来发现源程序中类型、引用、参数传递、表达式等不必运行程序就能够发现的错误。
11、 特点:这种方法不需要专门的测试工具和设备,一旦发现错误就能定位,但是此方法具有一定的局限性。静态分析主要对程序进行控制流分析、数据流分析、接口分析和表达式分析等,测试的层次和类型类型,动态测试:在指定的环境上运行被测程序,输入测试数据,获得测试结果,将获得的测试结果与预期的结果进行比较,发现程序的错误 。 过程:设计测试用例,运行被测程序。 特点:需要有程序的运行环境,必要时要编写测试驱动程序和桩程序。,测试的层次和类型类型,功能测试:验证软件是否提供了预期服务。 过程:根据软件需求规格说明书设计测试用例,并按照测试用例的要求运行被测程序。 特点:将被测程序看成是一个黑盒子,着重验证软件功能
12、和性能的正确性,其典型测试方法包括价类划分、边值分析、因果分析、猜测错误等。,测试的层次和类型类型,结构测试:对程序结构的检查,也称为白盒测试。采用这种测试方法,测试者需要了解被测程序的内部结构。白盒测试通常根据覆盖准则设计测试用例,有语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖和条件组合覆盖等。,测试的层次和类型类型,用户界面测试:对软件提供的用户界面、系统接口的测试。验证其正确性、可操作性、可理解性。 性能测试:测试程序的响应时间、并发性、吞吐量、处理精度。 负载测试:测试一个软件在重负荷下的运行情况。例如,测试一个 Web应用软件在大量的负荷下,何时系统的响应会退化或失败 强度测试:在异
13、乎寻常的重载下系统运行情况,如某个动作或输入的不断重复;大量数据的输入;对一个数据库应用系统大量的复杂查询等。,测试的层次和类型类型,安全性测试:检查系统对非法侵入的防范能力。测试人员假扮非法入侵者,采用各种办法试图突破防线。例如,截取或破译口令、破坏系统的保护机制、故意导致系统失败、试图通过浏览非保密数据,推导所需信息等 网络通信测试:软件中的网络通信的速度、容量、安全性、延迟处理等方面的测试。,测试的层次和类型类型,恢复测试:恢复测试主要检查系统的容错能力。当系统出错时,能否在指定时间内修正错误并重新启动系统。 恢复测试首先要采用各种办法强迫系统失败,然后验证系统是否能尽快恢复。对于自动恢
14、复需验证重新初始化、数据恢复、重新启动等机制的正确性;对于人工干预的恢复系统,还需估测平均修复时间,确定其是否在可接受的范围内。,测试的难点,测试用例是设计者对测试对象的理解,因此,其质量很大程度上取决于设计者的分析、理解和设计能力。这是一种缺乏指导性方法的、不易制订标准规范的、需要“技巧”的设计活动。 开发组织与测试组织难一很好的配合。长期以来,大都数软件开发人员认为测试活动是对开发人员劳动成果的不断“挑剔”。但实际上,测试工作的出发点是确保开发人员的劳动成果成为可接收的、高品质的软件产品。 有效的测试工作需要投入足够的人力和物力,需要对工作的难度和消耗有充分的估计。,测试的产品,软件测试工
15、作所产生的文档、程序、服务、以及相关的文件总和称之为软件测试产品 。 测试配置包括:测试计划;测试方案(包括测试输入数据、测试的功能、测试预期结果);文档审查项列表;代码审查项列表;软件测试报告;软件问题报告;软件变更报告;软件测试日志。,35,测试阶段的信息流,测试,软件配置,结果 分析,测试结果,排错,改正的 软件,预期结果,可靠性 分析,预测的 可靠性,错误,出错率 数据,测试配置,测试工具,需求规格说明书 软件设计说明书 被测源程序,测试计划 测试用例 (测试数据) 测试驱动程序,测试数据自动生成程序、静态分析程序、动态分析程序、测试结果分析程序、以及驱动测试的测试数据库等。,12.2
16、设计测试用例,测试用例是用于软件测试的输入数据及预期结果 。 一个好的测试用例有以下几个特征: 是最有可能发现错误的; 不是重复的、多余的; 通常先按黑盒测试法设计基本测试用例,发现软件功能和性能上的问题,然后再用白盒测试方法补充一些测试用例,发现程序逻辑结构的错误。,黑盒测试,这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。 黑盒测试又叫做功能测试或数据驱动测试。,黑盒测试的作用,黑盒测试方法是在程序接口上进行测试,主要是为了发现以下错误: 是否有不正确或遗漏了的功能? 在接口上,输入能否正确
17、地接受? 能否输出正确的结果? 是否有数据结构错误或外部信息(例如数据文件)访问错误? 性能上是否能够满足要求? 是否有初始化或终止性错误?,黑盒测试的局限,用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。 但这是不可能的。,示例,假设一个程序P有输入量X和Y及输出量Z。在字长为32位的计算机上运行。若X、Y取整数,按黑盒方法进行穷举测试: 可能采用的测试数据组:232232264 如果测试一 组数据需要1毫秒,一年工作365 24小时,完成所有测试需5亿年。,黑盒测试法,等价类划分 边值分析 因果分析 猜测错误,白盒测试,此方法
18、把测试对象看做一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。 通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。,白盒测试的作用,软件人员使用白盒测试方法,主要想对程序模块进行如下的检查: 对程序模块的所有独立的执行路径至少测试一次; 对所有的逻辑判定,取“真”与取“假”的两种情况都至少测试一次; 在循环的边界和运行界限内执行循环体; 测试内部数据结构的有效性,等。,白盒测试的局限,对一个具有多重选择和循环嵌套的程序,不同的路径数目可能是天文数字。给出一个小程序的流程图,它
19、包括了一个执行20次的循环。 包含的不同执行路径数达520条,对每一条路径进行测试需要1毫秒,假定一年工作365 24小时,要想把所有路径测试完,需3170年。,白盒测试与黑盒测试对比,白盒测试法,语句覆盖 判定覆盖 条件覆盖 判定/条件覆盖 条件组合覆盖 路径覆盖,48,逻辑覆盖测试的5种标准,例子,func(int A,B,X) if(A1) ,测试覆盖率示例(1),测试覆盖率示例(2),语句覆盖,语句覆盖:选择足够的测试用例,使得程序中每个语句至少都能被执行一次。,语句覆盖例,测试用例的设计格式如下 【输入的(A, B, X),输出的(A, B, X)】 正好所有的可执行语句都在路径L1
20、上 测试用例 【(2, 0, 4),(2, 0, 3)】,54,只需设计一个测试用例: 输入数据:A=2, B=0, X=4 即达到了语句覆盖。,语句覆盖是最弱的 逻辑覆盖 (如:OR 写成 AND,X1 写成 X 1,查不出来),分支覆盖,分支覆盖又称判定覆盖。 分支覆盖:执行足够的测试用例,使得程序中每个判定都获得一次“真”值和“假”值,或者说使得程序中的每一个分支至少都通过一次。,分支覆盖例,选择路径L1和L2 【(2, 0, 4),(2, 0, 3)】 覆盖 ace【L1】 【(1, 1, 1),(1, 1, 1)】 覆盖 abd【L2】 或选择路径L3和L4 【(2, 1, 1),(
21、2, 1, 2)】 覆盖 abe【L3】 【(3, 0, 3),(3, 0, 1)】 覆盖 acd【L4】,条件覆盖,条件覆盖:执行足够的测试用例,使得判定中的每个子条件都获得所有可能的结果。,条件覆盖例,设条件的取值标记,判定/条件覆盖可选取的 测试用例 如下表,【(1, 0, 3),(1, 0, 4)】,abe(L3),b,e,【(2, 1, 1),(2, 1, 2)】,abe(L3),b,e,T1 T2 T3 T4,T1 T2 T3 T4,判定/条件覆盖,判定/条件覆盖:执行足够的测试用例, 使得判定中每个子条件取到各种可能的值,并使每个判定取到各种可能的结果。,分支/条件覆盖例,设条件
22、的取值标记,判定/条件覆盖可选取的 测试用例 如下表,【(2, 0, 4),(2, 0, 3)】,ace(L1),c,e,【(1, 1, 1),(1, 1, 1)】,abd(L2),b,d,T1 T2 T3 T4,条件组合覆盖,条件组合覆盖:执行足够的测试用例,使得每个判定中各条件的所有可能的组合都出现一次。,条件组合覆盖例,A1 B=0,A1 B 0,A 1 B = 0,A 1 B 0,设条件的取值标记,T1 T2, 取真分支, 取假分支, 取假分支, 取假分支,条件组合覆盖例,设条件的取值标记,A=2 X1,A=2 X1,A2 X1,A2 X1,T3 T4, 取真分支, 取真分支, 取真分
23、支, 取假分支,条件组合覆盖例,【(2, 0, 4), (2, 0, 3)】,ace L1,T1 T2 T3 T4,【(2, 1, 1), (2, 1, 2)】,abe L3,【(1, 0, 3), (1, 0, 4)】,abe L3,【(1, 1, 1), (1, 1, 1)】,abd L2,路径覆盖,路径测试就是设计足够的测试用例,覆盖程序中每一条可能的执行路径。,例子,func(int A,B,X) if(A1) ,路径,L1 ( a c e )= (A1) and (B=0) and (A=2) or (X/A1) = (A1) and (B=0) and (A=2) or (A1)
24、and (B=0) and (X/A1) = (A=2) and (B=0) or (A1) and (B=0) and (X/A1) L2 ( a b d )= not(A1) and (B=0) and not(A=2) or (X1) = not (A1) or not (B=0) and not (A=2) and not (X1) = not (A1) and not (A=2) and not (X1) or not (B=0) and not (A=2) and not (X1) L3 ( a b e)= not (A1) and (B=0) and (A=2) or (X1)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 12 软件 测试
链接地址:https://www.31doc.com/p-2547463.html