第五章结构化实现

上传人:s9****2 文档编号:568549599 上传时间:2024-07-25 格式:PPT 页数:186 大小:1.11MB
返回 下载 相关 举报
第五章结构化实现_第1页
第1页 / 共186页
第五章结构化实现_第2页
第2页 / 共186页
第五章结构化实现_第3页
第3页 / 共186页
第五章结构化实现_第4页
第4页 / 共186页
第五章结构化实现_第5页
第5页 / 共186页
点击查看更多>>
资源描述

《第五章结构化实现》由会员分享,可在线阅读,更多相关《第五章结构化实现(186页珍藏版)》请在金锄头文库上搜索。

1、第五章 结构化实现通常将编码和测试统称为实现。编码1.选择程序设计语言适当的程序设计语言可以使:程序员在根据设计编码时遇到的困难最少;可以减少需要的程序测试量;可以写出更容易阅读和维护的程序。编码为了使程序容易测试和维护以减少生命周期的总插拔选用的高级语言应该有理想的模块化机制,及可读性好的控制结构和数据结构;为了便于调试和提高软件可靠性选用的高级语言应该使编译程序能够尽可能多的发现程序中的错误;为了减低软件开发和维护的成本选用的高级语言应该有良好的独立编译机制。编码选择程序设计语言重要的实用标准:系统用户的要求;可以使用的编译程序;可以得到的软件工具;工程规模;程序员的知识;软件可移植性要求

2、;软件的应用领域。编码编码风格:程序内部的文档包括适当的标识符、适当的注解、适当的程序视觉组织等;数据说明数据说明的次序应该标准化;当多个变量名在一个语句中说明时,应该按字母顺序排列这些变量;如果使用了一个复杂的数据结构,应该用注解说明程序设计语言实现这个数据结构的方法和特点。编码语句构造每个语句都应该简单直接;不能为了提高效率而使得程序变得复杂:不要为了节省空间而将多个语句写在一行;尽量避免复杂的条件测试;尽量减少对“非”条件的测试;避免大量使用循环嵌套和条件嵌套;利用括号使逻辑表达式的运算次序清晰直观。编码输入/输出:对所有输入数据都进行检验;检查输入项重要组合的合法性;保持输入格式简单;

3、使用数据结束标记,不要要求用户指定数据的数目;明确提示交互式输入的请求,详细说明可用的选择或边界数值;当程序设计语言对格式有严格要求时,应保持输入格式一致;设计良好的输出报表;给所有输出数据加标志。编码效率:效率是性能要求,因此应该在需求分析阶段确定效率方面的要求;效率考好的设计来提高的;程序的效率和程序的简单程度是一致的。编码效率:程序运行时间:写程序前简化算术的和逻辑的表达式;仔细研究嵌套的循环,以确定是否有语句可以从内层往外移;尽量避免使用多维数组;尽量避免使用指针和复杂的表;使用执行时间短的算术运算;不要混合使用不同的数据类型;尽量使用整数运算和布尔表达式。测试 软件测试概述; 软件测

4、试技术; 软件测试用例设计软件测试用例设计 软件测试策略软件测试策略 软件测试种类软件测试种类 程序调试程序调试 在开发软件的过程中,我们使用了保证软件质量 的方法分析、设计和实现软件,但难免还会在工作中 犯错误。这样,在软件产品中就会隐藏着许多错误和 缺陷 。特别是对于规模大、 复杂性高的软件更是如 此。在这些错误中,有些是致命性的错误如果不排除 ,就会导致生命与财产的重大损失。DO 5 I =1, , 3DO 5 I =1. . 3软件测试是在软件投入运行前,对软件需软件测试是在软件投入运行前,对软件需求分析,设计规格说明和编码的最终复审,求分析,设计规格说明和编码的最终复审,是软件质量保

5、证的关键步骤。是软件质量保证的关键步骤。如果下定义:如果下定义:软件测试是为了发现错误而软件测试是为了发现错误而执行程序的过程。执行程序的过程。或者说或者说软件测试是根据软件测试是根据软件开发各阶段的规格说明和程序的内部软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例,并利用这结构而精心设计一批测试用例,并利用这些测试用例去运行程序,以发现程序错误些测试用例去运行程序,以发现程序错误的过程。的过程。软件测试的定义软件测试的定义软件测试的基础软件测试的基础软件测试的目的软件测试的目的软件测试的原则软件测试的原则软件测试的对象软件测试的对象测试信息流测试信息流测试与软件开发各阶段的关

6、系测试与软件开发各阶段的关系软件测试的目的软件测试的目的基于不同的立场,存在着两种完全不基于不同的立场,存在着两种完全不同的测试目的。同的测试目的。从从用户的角度用户的角度出发,普遍希望通过软出发,普遍希望通过软件测试件测试暴露软件中隐藏的错误和缺陷暴露软件中隐藏的错误和缺陷,以考虑是否可接受该产品。以考虑是否可接受该产品。从从软件开发者的角度软件开发者的角度出发,则希望测出发,则希望测试成为试成为表明软件产品中不存在错误表明软件产品中不存在错误的的过程,验证该软件已正确地实现了用过程,验证该软件已正确地实现了用户的要求,确立人们对软件质量的信户的要求,确立人们对软件质量的信心。心。Myers

7、软件测试目的软件测试目的(1) 测试是测试是程序的执行过程程序的执行过程,目,目的在于的在于发现错误发现错误;(2) 一个好的测试用例在于一个好的测试用例在于能发能发现至今未发现的错误现至今未发现的错误;(3) 一个成功的测试是一个成功的测试是发现了至发现了至今未发现的错误的测试今未发现的错误的测试。换言之,测试的目的是换言之,测试的目的是系统地找出软件中潜在的各种错误系统地找出软件中潜在的各种错误和缺陷和缺陷。 能够证明软件的功能和性能与需求能够证明软件的功能和性能与需求说明相符合说明相符合。测试不能表明软件中不存在错误,测试不能表明软件中不存在错误,它只能说明软件中存在错误。它只能说明软件

8、中存在错误。软件测试的原则软件测试的原则1. 应当把应当把“尽早地和不断地进行软尽早地和不断地进行软件测试件测试”作为软件开发者的座右铭。作为软件开发者的座右铭。2. 测试用例应由测试用例应由测试输入数据测试输入数据和对和对应的应的预期输出结果预期输出结果这两部分组成。这两部分组成。3. 程序员应避免检查自己的程序。程序员应避免检查自己的程序。4. 在设计测试用例时,应当包括在设计测试用例时,应当包括合合理的输入条件和不合理的输入条件理的输入条件和不合理的输入条件。5. 充分注意测试中的群集现象。充分注意测试中的群集现象。经验表明,测试后经验表明,测试后程序中残存的错程序中残存的错误数目与该程

9、序中已发现的错误数误数目与该程序中已发现的错误数目成正比目成正比。6. 严格执行测试计划,排除测试的严格执行测试计划,排除测试的随意性随意性。7. 应当对每一个测试结果做全面检应当对每一个测试结果做全面检查。查。8. 妥善保存测试计划,测试用例,妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护出错统计和最终分析报告,为维护提供方便。提供方便。软软 件件 测测 试试 的的 对对 象象软件测试并不等于程序测试。软件测试并不等于程序测试。软件软件测试应贯穿于软件定义与开发的整测试应贯穿于软件定义与开发的整个期间个期间。需求分析需求分析、概要设计概要设计、详细设计以详细设计以及程序编码及程序

10、编码等各阶段所得到的等各阶段所得到的文档文档,包括需求规格说明、概要设计规格包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程说明、详细设计规格说明以及源程序,序,都应成为软件测试的对象都应成为软件测试的对象。为把握软件开发各个环节的正确性,为把握软件开发各个环节的正确性,需要进行各种需要进行各种确认确认和和验证验证工作。工作。确认确认(Validation),是一系列的活动是一系列的活动和过程,目的是想证实在一个给定的和过程,目的是想证实在一个给定的外部环境中软件的逻辑正确性。外部环境中软件的逻辑正确性。 需求规格说明的确认需求规格说明的确认 程序的确认程序的确认验证验证(Veri

11、fication),试图证明在软试图证明在软件生存期各个阶段,以及阶段间的逻件生存期各个阶段,以及阶段间的逻辑协调性、完备性和正确性。辑协调性、完备性和正确性。软件生存期各阶段之间需要保持的正确性软件生存期各阶段之间需要保持的正确性测试信息流测试信息流测试信息流测试信息流软件配置软件配置:软件需求规格说明、软:软件需求规格说明、软件设计规格说明、源代码等;件设计规格说明、源代码等;测试配置测试配置:测试计划、测试用例、:测试计划、测试用例、测试程序等;测试程序等;测试工具测试工具:测试数据自动生成程序、:测试数据自动生成程序、静态分析程序、动态分析程序、测静态分析程序、动态分析程序、测试结果分

12、析程序、以及驱动测试的试结果分析程序、以及驱动测试的测试数据库等等。测试数据库等等。测试结果分析测试结果分析:比较实测结果与:比较实测结果与预期结果,评价错误是否发生。预期结果,评价错误是否发生。排错排错( (调试调试) ):对已经发现的错误:对已经发现的错误进行错误定位和确定出错性质,进行错误定位和确定出错性质,并改正这些错误,同时修改相关并改正这些错误,同时修改相关的文档。的文档。修正后的文档再测试修正后的文档再测试:直到通过:直到通过测试为止。测试为止。通过收集和分析测试结果数据,对通过收集和分析测试结果数据,对软件建立可靠性模型软件建立可靠性模型利用可靠性分析,评价软件质量:利用可靠性

13、分析,评价软件质量: 软件的质量和可靠性达到可以接受软件的质量和可靠性达到可以接受的程度;的程度; 所做的测试不足以发现严重的错误;所做的测试不足以发现严重的错误;如果测试发现不了错误,可以肯定,如果测试发现不了错误,可以肯定,测试配置考虑得不够细致充分,错测试配置考虑得不够细致充分,错误仍然潜伏在软件中。误仍然潜伏在软件中。测试与软件开发各阶段的关系测试与软件开发各阶段的关系软件开发过程是一个自顶向下,逐步软件开发过程是一个自顶向下,逐步细化的过程细化的过程软件计划阶段定义软件作用域软件计划阶段定义软件作用域软件需求分析建立软件信息域、功能软件需求分析建立软件信息域、功能和性能需求、约束等和

14、性能需求、约束等软件设计把设计用某种程序设计语言软件设计把设计用某种程序设计语言转换成程序代码转换成程序代码测试过程是依相反顺序安排的自底向测试过程是依相反顺序安排的自底向上,逐步集成的过程。上,逐步集成的过程。 测试工具软件开发工程师(Software Development Engineer in Test,简称SDE/T)软件测试人员 软件测试工程师(Software Test Engineer ,简称STE)SDE/T 负责写测试工具代码,并利用测试工具对软件进行测试;或者开发测试工具为软件测试工程师服务。负责理解产品的功能要求,然后对其进行测试,检查软件有没有错误(BugBugBug

15、Bug),决定软件是否具有稳定性,并写出相应的测试规范和测试案例。STE Exchange 2000Exchange 2000Windows 2000Windows 2000项目经理25人约 250人开发人员140人约 1700人测试人员350人约 3200人开发人员/测试人员2: 51: 9Exchange 2000 和 Windows 2000 的人员结构 Exchange 2000Windows 2000Windows 2000Windows 2000Windows 2000项目经理25人约约约约 250250250250人人人人开发人员140人约约约约 1700170017001700

16、人人人人测试人员350人约约约约 3200320032003200人人人人测试人员/开发人员2: 51: 91: 91: 91: 9软件测试人员的任务很清楚,就是软件测试人员的任务很清楚,就是站在使用者的角度上,通过不断地站在使用者的角度上,通过不断地使用和攻击刚开发出来的软件产品使用和攻击刚开发出来的软件产品尽量多地找出产品存在的问题,也尽量多地找出产品存在的问题,也就是我们所称的就是我们所称的 Bug Bug 。软件测试设计的方法 软件的测试设计与软件产品的设计一样,是一项需要 花费许多人力和时间的工作,我们希望以最少量的时间和 人力,最大可能地发现最多的错误。测试技术1、白盒测试(Whi

17、te Box Testing)2、黑盒测试(Black Box Testing) 也叫玻璃盒测试(Glass Box Testing)。 对软件的过程性细节做细致的检查。这一方法是把测试对象看作一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,来设计或选择测试用例,对程序所有逻辑路径进行测试。 白盒测试(White Box Testing)白盒测试的内容对程序模块的所有独立执行路径至少测试一次对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测试一次。 在循环的边界和运行边界限内执行循环体 测试内部数据结构的有效性。 已知产品的功能设计规格,可以进行测试证明每个实现了的功能是

18、否符合要求。 黑盒测试(Black Box Testing)黑盒测试的内容 Alpha/Beta Testing菜单/帮助测试发行测试回归测试白盒测试用例的设计 逻辑覆盖测试方法通常采用流程图来设计测试用例,它考察的重点是图中的判定框,因为这些判定通常是与选择结构有关或是与循环结构有关,是决定程序结构的关键成分。 一、逻辑覆盖法发现错误的能力标 准含 义 1 1 1 1(弱)语句覆盖每条语句至少执行一次 2 2 2 2判定覆盖每一判定的每个分支至少执行一次 3 3 3 3条件覆盖每一判定中的每个条件,分别按“真”、“假”至少各执行一次4 4 4 4 判定/条件覆盖同时满足判定覆盖和条件覆盖的要

19、求5 5 5 5 (强) 条件组合覆盖求出判定中所有条件的各种可能组合值,每一可能的条件组合至少执行一次 逻辑覆盖测试的5种标准 覆盖标准程序结构举例测试用例应满足的条件语句覆盖AB=.T.判定覆盖AB=.T.AB=.F.ABABTFABABTF覆盖标准程序结构举例测试用例应满足的条件条件覆盖A=.T. A=.F.B=.T. B=.F.判定/条件覆盖AB=.T. , AB=.F.A=.T. A=.F. B=.T. B=.F.条件组合覆盖 A=.T. B=.T. A=.T. B=.F.A=.F. B=.TA=.F. B=.F.ABABTFABABTFABABTFb bd da a输出的: A,B

20、,X语句覆盖c ce e(A1) (B=0)X=X/ATF(A=2) V (X1)X=X+1TF输入的: A,B,X2,0,42,0,3满足语句覆盖的测试用例如下a ac ce e-ace (L1)ace (L1)abdabd (L2) (L2)abeabe (L3) (L3)acdacd (L4) (L4)L1L1判定覆盖(分支覆盖) 所谓的判定覆盖就是设计若干个测试用 例,运行被测程序,使得程序中每个判断的 取真真分支和取假假分支至少经历一次。b bd da ac ce e(A1) (B=0)X=X/ATF(A=2) V (X1)X=X+1TF2,0,42,0,3取“真”分支测试用例如下a

21、 ac ce e-a ab bd d-1,1,11,1,1取“假”分支测试用例如下L1L1L2L22,1,12,1,2取“真假”分支测试用例如下a ab be e-b bd da ac ce e(A1) (B=0)X=X/ATF(A=2) V (X1)X=X+1TFL3L33,0,33,0,1取“真假”分支测试用例如下b bd da ac ce e(A1) (B=0)X=X/ATF(A=2) V (X1)X=X+1TFa ac cd d-L4L4条件覆盖所谓的条件覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。 b bd da ac ce e(A1

22、) (B=0)X=X/ATF(A=2) V (X1)X=X+1TF判断条件取真值取假值判断(一)A1T1T1B=0T2T2判断(二)A=2T3T3X1T4T4设条件的取值标记b bd da ac ce e(A1) (B=0)X=X/ATF(A=2) V (X1)X=X+1TF判断判断条件条件取真值取真值取假值取假值判断判断( (一一) )A1T1T1B=0T2T2判断判断( (二二) )A=2T3T3X1T4T4设条件的取值标记 条件覆盖可选取的 (第一组测试用例)如下表 测试用例通过路径条件取值覆盖分支 (2,0,4),(2,0,3)(2,0,4),(2,0,3)ace(L1)ace(L1)

23、T2T2 T3T3 T4T4c,ec,e(1,0,1),(1,0,1)(1,0,1),(1,0,1)abd(L2)abd(L2)T1T1b,db,dT1T1 T2T2 T3T3 T4T4b bd da ac ce e(A1) (B=0)X=X/ATF(A=2) V (X1)X=X+1TF判断判断条件条件取真值取真值取假值取假值判断判断( (一一) )A1T1T1B=0T2T2判断判断( (二二) )A=2T3T3X1T4T4设条件的取值标记 条件覆盖可选取的 (第二组测试用例)如下表 测试用例通过路径条件取值覆盖分支 (1,0,3),(1,0,4)(1,0,3),(1,0,4)abe(L3)a

24、be(L3)T1 T2 T3 T4T1 T2 T3 T4b,eb,e(2,1,1),(2,1,2)(2,1,1),(2,1,2)abe(L3)abe(L3)b,eb,eT1 T2 T3 T4T1 T2 T3 T4判定/条件覆盖 所谓的判定/条件覆盖就是设计足够的测试用 例,使得 判断中每个条件的所有可能取值至少执 行一次, 同时每个判断本身的所有可能判断结果 至少执行一次。 b bd da ac ce e(A1) (B=0)X=X/ATF(A=2) V (X1)X=X+1TF判断判断条件条件取真值取真值取假值取假值判断判断( (一一) )A1T1T1B=0T2T2判断判断( (二二) )A=2

25、T3T3X1T4T4设条件的取值标记 判定/ /条件覆盖可选取的 测试用例 如下表 测试用例通过路径条件取值覆盖分支 (2,0,4),(2,0,3)(2,0,4),(2,0,3)ace(L1)ace(L1)T1 T2 T3 T4T1 T2 T3 T4c,ec,e(1,1,1),(1,1,1)(1,1,1),(1,1,1)abd(L2)abd(L2)b,db,dT1 T2 T3 T4T1 T2 T3 T4条件组合覆盖 所谓的 条件组合覆盖就是设计足够的测试用 例,运行被测程序,使得 每个判断的所有可能的 条件取值组合至少执行一次。条件标记第一个判断取真假分支 b bd da ac ce e(A1

26、) (B=0)X=X/ATF(A=2) V (X1)X=X+1TFA1B=0A1B 0A 1B = 0A 1B 0判断判断条件条件取真值取真值取假值取假值判断判断( (一一) )A1T1T1B=0T2T2判断判断( (二二) )A=2T3T3X1T4T4设条件的取值标记T1 T2T1 T2 取真分支T1 T2T1 T2T1 T2T1 T2 取假分支 取假分支 取假分支T1 T2T1 T2条件标记第二个判断取真假分支 b bd da ac ce e(A1) (B=0)X=X/ATF(A=2) V (X1)X=X+1TFA=2X1A=2X 1A 2X 1A 2X 1判断判断条件条件取真值取真值取假

27、值取假值判断判断( (一一) )A1T1T1B=0T2T2判断判断( (二二) )A=2T3T3X1T4T4设条件的取值标记T3 T4T3 T4 取真分支T3 T4T3 T4T3 T4T3 T4 取真分支 取真分支 取假分支T3 T4T3 T4b bd da ac ce e(A1) (B=0)(A1) (B=0)X=X/AX=X/AT TF F(A=2) V (X1)(A=2) V (X1)X=X+1X=X+1T TF F设条件的取值标记测试用例通过路径条件取值覆盖组合号 条件标记第一个判断取第一个判断取真假真假分支分支A1 B=0 A1 B=0 T1 T2 T1 T2 取真分支A1 BA1

28、B00 T1 T2T1 T2 取假分支A A 1 B=01 B=0 T1 T2 T1 T2 取假分支A A 1 1 B B00 T1 T2 T1 T2 取假分支(2,0,4),(2,0,3)ace L1L1T1 T2 T3 T4,(2,1,1),(2,1,2)abe L3L3T1 T2 T3 T4, , , ,(1,0,3),(1,0,4)abe L3L3T1 T2 T3 T4, , , ,(1,1,1),(1,1,1)abd L2L2T1 T2 T3 T4, , , , 路径测试就是设计足够的测试用例,覆盖程序中每一条可能的程序执行路径至少测试一次,如果程序中含有循环(在程序图中表现为环)则

29、每个循环至少执行一次。 二、路径测试法abcdea-a-c-ec-e L1 L1a-a-b-db-d L2 L2a-a-b-eb-e L3 L3a-a-c-dc-d L4 L4b bd da ac ce e(A1) (B=0)X=X/ATF(A=2) V (X1)X=X+1TF点覆盖边覆盖b bd da ac ce e(A1) (B=0)(A1) (B=0)X=X/AX=X/AT TF F(A=2) V (X1)(A=2) V (X1)X=X+1X=X+1T TF F判断判断条件条件取真值取真值取假值取假值判断判断( (一一) )A1T1T1B=0T2T2判断判断( (二二) )A=2T3T3

30、X1T4T4 路径测试可选取的 测试用例 如下表 测试用例通过路径条件取值 ace L1L1 abd L2L2 abe L3L3 acd L4L4 (2,0,4),(2,0,3)T1 T2 T3 T4(1,1,1),(1,1,1)(1,1,2),(1,1,3)(3,0,3),(3,0,1)T1 T2 T3 T4T1 T2 T3 T4T1 T2 T3 T4测试路径覆盖结点/边覆盖标准 点覆盖 边覆盖 路径覆盖 根据左侧给出的程序图,请填写下列表1 1a ab bc cd de e2 23 34 4a-a-c-dc-da-a-c-dc-d, , b-eb-ea,b,c,d,ea,b,c,d,ea-

31、a-e-d,b-ee-d,b-e a-a-e,b-c-de,b-c-da,b,c,d,ea,b,c,d,einputA5X=1y=2z=3b10X=10y=20z=30c15printTFTTFF语句覆盖的测试案例路径覆盖的测试案例黑盒测试用例的设计 黑盒测试法是根据被测程序功能来进行测试,所以通常也称为功能测试。用黑盒测试法设计测试用例,有4 种常用技术: 等价分类法 边界值分析 错误猜测法 因果图法一、等价分类法 所谓等价分类,就是把输入数据的可能值划分为 若干等价类(等价类是指某个输入域的子集合。 在该 集合中,各个输入数据对于揭露程序中的错误都是等 价的)。 因此,可以把全部输入数据合

32、理地划分为若 干等价类,在每一个等价类中取一个数据作为测试的 输入条件,这样就可以少量的代表性测试数据,来取 得较好的测试结果。 是指对于程序的规格说明来说,是合理的 有意义的输入数据构成的集合。利用它可以检 验程序是否实现预先规定的功能和性能。 有效等价类 是指对于程序的规格说明来说,是不合理 的,是无意义的输入数据构成的集合。程序员 主要利用这一类测试用例来检查程序中功能和 性能的实现是否不符合规格说明要求。 无效等价类 1、如果输入条件规定了取值范围,或者是值 的个数,则可以确立一个有效等价类和两个无效 等价类。确定等价类的原则:例如: 序号值可以从 1到999 一个有效等价类: 1 序

33、号值 999 两个无效等价类: 序号值 999 2、如果输入条件规定了输入值的集合,或 者是规定了“必须如何”的条件,这时 可确立一 个有效等价类和一个无效等价类。例如:在 C 语言中对变量标识符规定为 “以字母打头的 串”。 所有以字母打头的构成为有效等价 类; 而不在此集合内(不以字母打头)归于无价等 价。 3、如果输入条件是一个布尔量,则可以确 定一个有效等价类和一个无效等价类。 4、如果规定了输入数据是一组值, 而且程 序要对每个输入值分别进行处理。这时可为每一 个输入值确立一个有效等价类此外再针对这组确 立一个无效等价类,它应是所有不允许输入值的 集合。例如:在教师分房方案中规定对教

34、授、副教授、讲师 和助教分别计算分数,做相应的处理。因此可 以确定4 4个有效等价类为教授、 副教授、讲师 和助教,以及 1 1个无效等价类它应是所有不符 合以上身份的人员的输入值的集合。 5、如果规定了输入数据必须遵守的规 则,则可以确定一个有效等价类(符合规则) ,和若干个无效等价类(从不同角度违反则)。 例如:在C C 语言中规定了“一个语句必须以分号; 作为结束”,这时,可以确定一个有效等价 类,以 “;”结束,而若干个无效等价类应 以“:,、:,、:,、:,、” 等。 6、如果确知,已划分的等价类中各元素 在程序中的处理方式不同, 则应将此等价类 进一步划分成更小的等价类。 1、划分

35、等价类不仅要要考虑代表“有效”输 入值的有效等价类,还需考虑代表 “无效”输入 值的无效等价类。采用这一技术要注意以下两点: 2、每一无效等价类至少要用一个测试用例 ,不然就可能漏掉某一类错误,但允许若干有 效等价类合用同一个测试用例,以便进一步减 少测试的次数。 二、确立测试用例输入条件有效等价类无效等价类 确立测试用例原则 为每一个等价类规定一个唯一的编号。 设计一个新的测试用例,使其尽可能地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止。 设计一个新的测试用例,使其仅覆盖尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。 在某一个PASCAL

36、 语言版本中规定 1、标识符是由字母开头,后跟字母或数字 的任意组合构成。有效字符数为8个,最大 字符数为80 个; 2、标识符必须先说明,后使用; 3、在同一个说明语句中,标识符至少必须 有一个。 请利用等价分类法为以下提供的内容设计测试用例输入条件有效等价类无效等价类标识符个数标识符字符数标识符组成第一个字符标识符使用1个(1)(1)(1)(1),多个(2)(2)(2)(2)0个 (3)(3)(3)(3) 1个(4)(4)(4)(4)0个(5)(5)(5)(5),8 8 8 8个个个个(6) (6) (6) (6) ,80808080个个个个(7)(7)(7)(7)字母(8)(8)(8)(

37、8),数字(9)(9)(9)(9)非字母数字字符(10)(10)(10)(10),保留字(11)(11)(11)(11)字母(12)(12)(12)(12) 非字母(13)(13)(13)(13) 先说明后使用(14)(14)(14)(14) 未说明已使用(15)(15)(15)(15) 输入条件有效等价类无效等价类标识符个数1个(1)(1)(1)(1),多个(2)(2)(2)(2)0个 (3)(3)(3)(3)标识符字符数1个(4)(4)(4)(4)0个(5)(5)(5)(5),8 8 8 8个个个个(6) (6) (6) (6) ,80808080个个个个(7)(7)(7)(7)标识符组成

38、字母(8)(8)(8)(8),数字(9)(9)(9)(9)非字母数字字符(10)(10)(10)(10),保留字(11)(11)(11)(11)第一个字符字母(12)(12)(12)(12)非字母(13)(13)(13)(13) 标识符使用先说明后使用(14)(14)(14)(14)未说明已使用(15)(15)(15)(15) VAR x, T1234567: REAL; BEGIN x:=3.414; T1234567:=2.732; 输入条件有效等价类无效等价类标识符个数1个(1)(1)(1)(1),多个(2)(2)(2)(2)0个 (3)(3)(3)(3)标识符字符数1个(4)(4)(4

39、)(4)0个(5)(5)(5)(5),8 8 8 8个个个个(6) (6) (6) (6) ,80808080个个个个(7)(7)(7)(7)标识符组成字母(8)(8)(8)(8),数字(9)(9)(9)(9)非字母数字字符(10)(10)(10)(10),保留字(11)(11)(11)(11)第一个字符字母(12)(12)(12)(12)非字母(13)(13)(13)(13) 标识符使用先说明后使用(14)(14)(14)(14)未说明已使用(15)(15)(15)(15) VAR : REAL; VAR T12345678: REAL; VAR T$: CHAR; VAR GOTO: IN

40、TEGER; (11)输入条件有效等价类无效等价类标识符个数1个(1)(1)(1)(1),多个(2)(2)(2)(2)0个 (3)(3)(3)(3)标识符字符数1个(4)(4)(4)(4)0个(5)(5)(5)(5),8 8 8 8个个个个(6) (6) (6) (6) ,80808080个个个个(7)(7)(7)(7)标识符组成字母(8)(8)(8)(8),数字(9)(9)(9)(9)非字母数字字符(10)(10)(10)(10),保留字(11)(11)(11)(11)第一个字符字母(12)(12)(12)(12)非字母(13)(13)(13)(13) 标识符使用先说明后使用(14)(14)

41、(14)(14)未说明已使用(15)(15)(15)(15) VAR 2T: REAL; (13) VAR PAR: REAL; BEGIN PAP:=SIN(3.14*0.8)/6; (15) 某工厂公开招工,规定报名者年龄应在161635 35 周岁之间(到1995年6月30日为止),即出生年月不早于1960年7月,不晚于1979年6月。 报名程序具有自动检验输入数据的功能。如出生年月不在上述范围内, 将拒绝接受,并显示“年龄不合格”等出错信息。 请试用等价分类法, 设计出生年月的等价分类表 。二、请利用等价分类法为以下提供的内容设计测试用例 假定已知出生年月是由 6 位数字字符表示,前4

42、 位代表年,后2 位代表月,则可以划分为 3 个有效等价类和 7 个无效等价类。1、划分出生年月等价分类表输入数据有效等价类无效等价类出生年月个数内容 6位有效数字字符 有非数字字符 少于6个数字字符 多于6个数字字符 对应数值 取值范围 196007-197906196007-197906 196007 197906 197906月份对应数值 在1-12之间 等于 “0” 122、设计有效等价类需要的测试用例输入数据有效等价类无效等价类出生年月 6位有效数字字符 有非数字字符 少于6个数字字符 多于6个数字字符 对应数值 196007-197906196007-197906 196007 1

43、97906 197906月份对应数值 在1-12之间 等于 “0” 12测试数据期望结果测试范围 197011输入有效、输入数据有效等价类无效等价类出生年月 6位有效数字字符 有非数字字符 少于6个数字字符多于6个数字字符 对应数值 196007-197906196007-197906196007-197906196007-197906 196007 196007 196007 197906 197906 197906 197906月份对应数值 在1-12之间 等于 “0” 12测试数据期望结果测试范围 MAY,70MAY,70输入无效 有非数字字符1970519705输入无效输入无效 少于6

44、个数字字符19680111968011196008196008195512195512196200196200197222197222年龄不合格年龄不合格输入无效输入无效 多于6个数字字符 197906 等于 “0” 123、为每一个无效等价类至少设计一个测试用例二、边界值分析法 采用边界值分析法来选择测试用例,可使 得被测程序能在边界值及其附近运行,从而更 有效地暴露程序中潜藏的错误。 If (196007 = value(birthdate) = 197906) Then read(birthday) Else write “invalid age!” 35 周岁周岁 16周岁周岁1960

45、06197907不合格年龄月份对应数值月份值为 1 月月份值为 12 月 196701 197412输入有效月份值 12 196700 197413 输入无效1、等价分类法的测试数据是在各个等价类允许的值域内 任意选取的,而边界值分析法的测试数据必须在边界 值附近选取。2、在公开招工的例子中,采用等价分类法设计了 8 8 8 8个测试 用例而边界值分析法则设计了13 13 13 13 个, 所以,一般来说 ,用边界值分析法设计的测试用例要比等价分类法的代 表性更广,发现错误的能力也更强。但是对边界的分析 与确定比较复杂,它要求测试人员具有更多的经验和长 找性。等价分类法与边界值分析法的比较三、

46、错误猜测法 所谓猜测,就是猜测被测程序在哪些地方容易 出错,然后针对可能的薄弱环节来设计测试用例。 显然它比前两种方法更多地依靠测试人员的直觉与 经验。所以一般都先用前两方法设计测试用例然后 再用猜测法去补充一些例子作为辅助的手段。四、因果图法 因果图是借助图形来设计测试用例的一种系 统方法。它适用于被测程序具有多种输入条件, 程序的输出又依赖于输入条件的各种组合的情况 因果图是一种简化了的逻辑图,它能直观地 表明程序输入条件(原因)和输出动作(结果) 之间的相互关系。1、利用因果图产生测试用例的基本步骤 1、分析软件规格说明书中,哪些是原因(即输 入条件或输入条件的等价类),哪些是结果(即

47、输出条件)并给每个原因和结果赋予一个标识。 2、分析软件规格说明书中所描述的语义,找出 原因与结果之间、原因与原因之间对应的是什么 关系?根据这些关系画出因果图。 3、由于语法或环境的限制,有些原因与原因 之间、原因与结果之间的组合情况不可能出现 。为表明这些特殊情况,在因果图上用一些记 号标明约束或限制条件。 4、把因果图转换为判断表 5、把判断表的每一列拿出来作为依据,设计 测试用例。2、在因果图中出现的基本符号C1E1恒等: 表示原因与结果之间是一对一的 对应关系。若原因出现,则结果 出现。若原因不出现,则结果也 不出现。 C1E1非: 表示原因与结果之间的一种否定关 系。若原因出现,则

48、结果不出现。 若原因不出现,反而结果出现。通常在因果图中用通常在因果图中用 CiCi 来表示原因,用来表示原因,用EiEi表示结果表示结果其基本符号如下图所示。其中各其基本符号如下图所示。其中各结点结点表示表示状态状态,可取,可取值为值为“0 0”或或“1 1”。“0 0”表示表示某状态不出现某状态不出现,“1 1”表示表示某某状态出现状态出现。主要的原因和结果之间的关系如下。主要的原因和结果之间的关系如下: :或或或或()()()(): 表示若几个原因中有一个出 现,则结果出现,而当这几 个原因都不出现时,结果才 不出现。C1C1E1E1C2C2C1C1E1E1C2C2与与与与():():(

49、):(): 表示若几个原因都出现,则结果 才出现若几个原因中有一个不出 现,结果就不出现。4、把因果图转换为判断表把因果图转换为判断表5、把判断表的每一列拿出来作为依据,设计测试用例把判断表的每一列拿出来作为依据,设计测试用例一、在一、在 因果图中出现的基本符号因果图中出现的基本符号通常在因果图中用通常在因果图中用 CiCi 来表示原因,用来表示原因,用EiEi表示结果表示结果其基本符号如下图所示。其中各其基本符号如下图所示。其中各结点结点表示表示状态状态,可取,可取值为值为“0 0”或或“1 1”。“0 0”表示表示某状态不出现某状态不出现,“1 1”表示表示某某状态出现状态出现。主要的原因

50、和结果之间的关系如下。主要的原因和结果之间的关系如下: :举例举例 设有一个处理单价为设有一个处理单价为5 5角钱饮料自动售货机角钱饮料自动售货机其规格说明为,若投入其规格说明为,若投入5 5角钱角钱或或1 1元钱元钱的硬币的硬币 ,再按下,再按下橙汁橙汁或或啤酒按钮啤酒按钮,则相应的饮料就送出来;若售货机,则相应的饮料就送出来;若售货机 没有另钱没有另钱找找,则一个显示,则一个显示另钱已找完另钱已找完的的红灯亮红灯亮,这时在投入,这时在投入1 1元硬币元硬币并按下按钮后,饮料不送出来而且并按下按钮后,饮料不送出来而且1 1元硬币也退出来元硬币也退出来; ;若有另钱若有另钱找,则应显示找,则应

51、显示零钱找完零钱找完的红灯灭的红灯灭, 在送出饮料的同时退还在送出饮料的同时退还5 5角硬币。角硬币。利用因果图设计测试用例的步骤利用因果图设计测试用例的步骤1 1、分析这一段说明,列出原因和结果、分析这一段说明,列出原因和结果序号序号原原 因因序号序号结结 果果1.售货机有零钱找售货机有零钱找2.1售货机售货机 零钱找完零钱找完灯亮灯亮2.投入投入1元硬币元硬币2.2退还退还1元硬币元硬币3.投入投入5角硬币角硬币2.3退还退还5角硬币角硬币4.按下橙汁按钮按下橙汁按钮2.4送出橙汁饮料送出橙汁饮料5.按下啤酒按钮按下啤酒按钮2.5送出啤酒饮料送出啤酒饮料第第9章章 软件测试软件测试2 2、

52、画出因果图、画出因果图序号序号中间结点中间结点11投入投入1元硬币且按下饮料按钮元硬币且按下饮料按钮12按下橙汁或啤酒的按钮按下橙汁或啤酒的按钮13应当找应当找5角零钱并且售货机有零钱找角零钱并且售货机有零钱找14钱已付请钱已付请21 1.22 2.13231112143.24254.5.按下按钮按下按钮该找该找5角角钱已付清钱已付清可找可找5角角售货机有售货机有零钱找零钱找投入投入1元元硬币硬币投入投入5 角角硬币硬币按下橙汁按下橙汁按钮按钮按下啤酒按下啤酒按钮按钮售货机售货机“零钱零钱找完找完”灯亮灯亮退还退还1元元硬币硬币退还退还5角角硬币硬币送出橙汁送出橙汁饮料饮料送出啤酒送出啤酒饮料

53、饮料3 3、将因果图转换成判定表、将因果图转换成判定表1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 01 1 1 1 0 0 0 0 11 1 0 0 1 1 0 0 11 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 0 1 0 1

54、 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 2 3 4 5 6 7 8 910 1 2 3 4 5 6 7 8 920 1 2 3 4 5 6 7 8 930 1 2 1 2345 条条件件 中间中间结果结果 11 121314 1 1 01 1 01 1 01 1 01 1 01 1 01 1 0 1 1 0 0 0 01 1 00 0 01 1 1 0 0 01 1 00 0 00 0 0 1 1 01 1 00 0 00 0 0 0 0 01 1 00 0 01 1 1 0 0 01 1 00 0 00 0 0 21 22232425 结结果

55、果 测试用例测试用例 y y y y y y y y y y y y y y y y 0 0 00 0 01 1 01 0 00 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 00 0 00 0 00 0 00 0 00 0 01 1 11 1 00 0 00 0 00 0 01 1 11 1 10 0 01 0 00 1 0 1 1 1 0 0 00 0 00 0 00 0 0 序序 号号通常在因果图中用通常在因果图中用 CiCi 来表示原因,用来表示原因,用EiEi表示结果表示结果其基本符号如下图所示。其中各其基本符号如下图所示。其中各结点结点表示表示状态状态,可取,可取

56、值为值为“0 0”或或“1 1”。“0 0”表示表示某状态不出现某状态不出现,“1 1”表示表示某某状态出现状态出现。主要的原因和结果之间的关系如下。主要的原因和结果之间的关系如下: :序号序号中间结点中间结点11投入投入1元硬币且按下饮料按钮元硬币且按下饮料按钮12按下橙汁或啤酒的按钮按下橙汁或啤酒的按钮13应当找应当找5角零钱并且售货机有零钱找角零钱并且售货机有零钱找14钱已付请钱已付请 测试方法的选用测试策略 1、在任何情况下都应该使用边界值 分析的方法。 2、必要时用等价类划分法补充测试 方案。 3、必要时再用错误猜测法补充测试 方案。 4、对照程序逻辑,检查已经设计出 出的测试方案。

57、可以根据对程序 可靠性的要求采用不同的逻辑覆 盖标准,如果现有测试方案的逻 辑程度没有达到要求的覆盖标准 则应再补充一些测试方案。策略种类黑盒测试白盒测试测试对象程序的功能程序的结构 测试要求逐一验证程序的功能程序的每一组成部分至少被测试一次 采用技术等价分类法 边界分析法错误猜测法 因果图法 逻辑覆盖法 路径测试法软件测试的策略软件测试的策略测试过程按测试过程按4个步骤进行,即个步骤进行,即单单元测试元测试、组装测试组装测试、确认测试确认测试和和系统测试系统测试。开始是开始是单元测试单元测试,集中对用源,集中对用源代码实现的每一个程序单元进代码实现的每一个程序单元进行测试,检查各个程序模块是

58、行测试,检查各个程序模块是否正确地实现了规定的功能。否正确地实现了规定的功能。组装测试组装测试把已测试过的模块组装起把已测试过的模块组装起来,主要对与设计相关的软件体系来,主要对与设计相关的软件体系结构的构造进行测试。结构的构造进行测试。确认测试确认测试则是要检查已实现的软件则是要检查已实现的软件是否满足了需求规格说明中确定了是否满足了需求规格说明中确定了的各种需求,以及软件配置是否完的各种需求,以及软件配置是否完全、正确。全、正确。系统测试系统测试把已经经过确认的软件纳把已经经过确认的软件纳入实际运行环境中,与其它系统成入实际运行环境中,与其它系统成份组合在一起进行测试。份组合在一起进行测试

59、。单元测试单元测试 (Unit Testing)单元测试又称模块测试,单元测试又称模块测试,是针对软是针对软件设计的最小单位件设计的最小单位 程序模块程序模块,进行正确性检验进行正确性检验的测试工作。其目的测试工作。其目的在于发现各模块内部可能存在的的在于发现各模块内部可能存在的各种差错。各种差错。单元测试需要单元测试需要从程序的内部结构出从程序的内部结构出发设计测试用例发设计测试用例。多个模块可以平。多个模块可以平行地独立进行单元测试。行地独立进行单元测试。1. 单元测试的内容单元测试的内容在单元测试时,测试者需要依据详细设计说在单元测试时,测试者需要依据详细设计说明书和源程序清单,了解该模

60、块的明书和源程序清单,了解该模块的I/O条件条件和模块的逻辑结构,主要采用白盒测试的测和模块的逻辑结构,主要采用白盒测试的测试用例,辅之以黑盒测试的测试用例,使之试用例,辅之以黑盒测试的测试用例,使之对任何合理的输入和不合理的输入,都能鉴对任何合理的输入和不合理的输入,都能鉴别和响应。别和响应。单元测试大要针对模块的单元测试大要针对模块的5个基本特征进行测试个基本特征进行测试 (1) 模块接口测试模块接口测试在单元测试的开始,应对在单元测试的开始,应对通过被测通过被测模块的数据流模块的数据流进行测试。测试项目进行测试。测试项目包括:包括: 调用本模块的输入参数是否正确;调用本模块的输入参数是否

61、正确; 本模块调用子模块时输入给子模块的本模块调用子模块时输入给子模块的参数是否正确;参数是否正确; 全局量的定义在各模块中是否一致;全局量的定义在各模块中是否一致; 在做在做内外存交换(内外存交换(模块通过文件进行输入模块通过文件进行输入模块通过文件进行输入模块通过文件进行输入输出时输出时输出时输出时 )时要考虑:时要考虑: 文件属性是否正确;文件属性是否正确; OPEN与与CLOSE语句是否正确;语句是否正确; 缓冲区容量与记录长度是否匹配;缓冲区容量与记录长度是否匹配; 在进行读写操作之前是否打开了文件;在进行读写操作之前是否打开了文件; 在结束文件处理时是否关闭了文件;在结束文件处理时

62、是否关闭了文件; 正文书写输入错误,正文书写输入错误, IO错误是否检查并做了处理。错误是否检查并做了处理。(2) 局部数据结构测试局部数据结构测试不正确或不一致的数据类型说明不正确或不一致的数据类型说明使用尚未赋值或尚未初始化的变量使用尚未赋值或尚未初始化的变量错误的初始值或错误的缺省值错误的初始值或错误的缺省值变量名拼写错或书写错变量名拼写错或书写错不一致的数据类型不一致的数据类型全局数据对模块的影响全局数据对模块的影响 (3) 路径测试路径测试选择适当的测试用例,对模块中选择适当的测试用例,对模块中重要的执行路重要的执行路径径进行测试。进行测试。应当设计测试用例查找由于应当设计测试用例查

63、找由于错误的计算错误的计算、不正不正确的比较确的比较或或不正常的控制流不正常的控制流而导致的错误。而导致的错误。(计算中常见的错误有:算术运算符优先次序不正确;运算计算中常见的错误有:算术运算符优先次序不正确;运算方式不正确;初始化方式不正确;精确度不够;表达式的符方式不正确;初始化方式不正确;精确度不够;表达式的符号表示错误等。号表示错误等。 )对基本执行路径和循环进行测试可以发现大量对基本执行路径和循环进行测试可以发现大量的路径错误。的路径错误。(条件及控制流向中常见的错误有:不同的数据类型比较;条件及控制流向中常见的错误有:不同的数据类型比较;逻辑运算符不正确或优先次序错误;由于精确度误

64、差造成的逻辑运算符不正确或优先次序错误;由于精确度误差造成的相等比较出错;循环终止条件错误或死循环;错误地修改循相等比较出错;循环终止条件错误或死循环;错误地修改循环变量等。环变量等。)(4) 错误处理测试错误处理测试出错的描述是否难以理解出错的描述是否难以理解出错的描述是否能够对错误定位出错的描述是否能够对错误定位显示的错误与实际的错误是否相符显示的错误与实际的错误是否相符对错误条件的处理正确与否对错误条件的处理正确与否在对错误进行处理之前,错误条件在对错误进行处理之前,错误条件是否已经引起系统的干预等是否已经引起系统的干预等(5) 边界测试边界测试注意数据流、控制流中刚好等于、大于注意数据

65、流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。或小于确定的比较值时出错的可能性。对这些地方要仔细地选择测试用例,认对这些地方要仔细地选择测试用例,认真加以测试。(真加以测试。(如输入输出数据的等价类边如输入输出数据的等价类边界,选择条件和循环条件的边界,复杂数据结构界,选择条件和循环条件的边界,复杂数据结构( (如如表表) )的边界等都应进行测试。的边界等都应进行测试。 )如果对模块运行时间有要求的话,还要如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最坏情专门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的况下和平均意义下影响模块运行时间的因素。

66、因素。2. 单元测试的步骤单元测试的步骤模块并不是一个独立的程序,模块并不是一个独立的程序,在考虑测试模块时,同时要考在考虑测试模块时,同时要考虑它和外界的联系,用一些辅虑它和外界的联系,用一些辅助模块去模拟与被测模块相联助模块去模拟与被测模块相联系的其它模块。系的其它模块。 驱动模块驱动模块 (driver) 桩模块桩模块 (stub) 存根模块存根模块驱动模块驱动模块 (driver) 相当于所测相当于所测模块的主程序。它接收测试数据,模块的主程序。它接收测试数据,把这些数据传送给所测模块,最后把这些数据传送给所测模块,最后再输出实测结果。再输出实测结果。 桩模块桩模块 (stub) 存根

67、模块。用以存根模块。用以代替所测模块调用的子模块。代替所测模块调用的子模块。单元测试的测试环境单元测试的测试环境组装测试(组装测试(Integrated Testing)组装测试组装测试 (集成测试、联合测试)集成测试、联合测试)通常,在单元测试的基础上,需要将所有模块通常,在单元测试的基础上,需要将所有模块按照设计要求组装成为系统。这时需要考虑的按照设计要求组装成为系统。这时需要考虑的问题是:问题是: 在把各个模块连接起来的时侯,在把各个模块连接起来的时侯,穿越模块接口的穿越模块接口的穿越模块接口的穿越模块接口的数据数据数据数据是否会丢失;是否会丢失; 一个模块的功能是否会对另一个模块的功能

68、产生一个模块的功能是否会对另一个模块的功能产生一个模块的功能是否会对另一个模块的功能产生一个模块的功能是否会对另一个模块的功能产生不利的影响不利的影响不利的影响不利的影响;Int abs(int a) int temp; temp=-a;return(a);Int sqrt(int a)int temp; temp=sqrt(a);return(a);Void main() int a,b; a=10;b=abs(a),b=sqtr(b); 各个子功能组合起来各个子功能组合起来,能否达到预期能否达到预期要求的父功能要求的父功能; 全局数据结构是否有问题全局数据结构是否有问题; 单个模块的误差累

69、积起来,是否会放单个模块的误差累积起来,是否会放大大,从而达到不能接受的程度。,从而达到不能接受的程度。在单元测试的同时可进行组装测试在单元测试的同时可进行组装测试,发现并排除在模块连接中可能出现发现并排除在模块连接中可能出现的问题,最终构成要求的软件系统。的问题,最终构成要求的软件系统。 子系统的组装测试特别称为子系统的组装测试特别称为部部件测试件测试,它所做的工作是要找,它所做的工作是要找出组装后的出组装后的子系统与系统需求子系统与系统需求规格说明之间规格说明之间的不一致。的不一致。通常,把模块组装成为系统的通常,把模块组装成为系统的方式有两种方式有两种 一次性组装方式一次性组装方式 增殖

70、式组装方式增殖式组装方式1. 一次性组装方式一次性组装方式 (big bang)它是一种非增殖式组装方式。它是一种非增殖式组装方式。也叫做整体拼装。也叫做整体拼装。使用这种方式,首先对每个模使用这种方式,首先对每个模块分别进行模块测试,然后再块分别进行模块测试,然后再把所有模块组装在一起进行测把所有模块组装在一起进行测试,最终得到要求的软件系统。试,最终得到要求的软件系统。2. 增殖式组装方式增殖式组装方式这种组装方式又称这种组装方式又称渐增式组装渐增式组装首先对一个个模块进行模块测试,首先对一个个模块进行模块测试,然后将这些模块逐步组装成较大的然后将这些模块逐步组装成较大的系统系统在组装的过

71、程中边连接边测试,以在组装的过程中边连接边测试,以发现连接过程中产生的问题发现连接过程中产生的问题通过增殖逐步组装成为要求的软件通过增殖逐步组装成为要求的软件系统。系统。(1) 自顶向下的增殖方式自顶向下的增殖方式这种组装方式将模块这种组装方式将模块按系统程序结按系统程序结构构,沿控制层次自顶向下进行组装沿控制层次自顶向下进行组装。自顶向下的增殖方式在测试过程中自顶向下的增殖方式在测试过程中较早地验证了主要的控制和判断点。较早地验证了主要的控制和判断点。选用按深度方向组装的方式,可以选用按深度方向组装的方式,可以首先实现和验证一个完整的软件功首先实现和验证一个完整的软件功能。能。(2) 自底向

72、上的增殖方式自底向上的增殖方式这种组装的方式是从这种组装的方式是从程序模块结构程序模块结构的最底层的模块开始组装和测试的最底层的模块开始组装和测试。因为模块是自底向上进行组装,对因为模块是自底向上进行组装,对于一个给定层次的模块,它的子模于一个给定层次的模块,它的子模块(包括子模块的所有下属模块)块(包括子模块的所有下属模块)已经组装并测试完成,所以已经组装并测试完成,所以不再需不再需要桩模块要桩模块。在模块的测试过程中需。在模块的测试过程中需要从子模块得到的信息可以直接运要从子模块得到的信息可以直接运行子模块得到。行子模块得到。自顶向下增殖的方式和自底向上自顶向下增殖的方式和自底向上增殖的方

73、式各有优缺点。增殖的方式各有优缺点。一般来讲,一种方式的优点是另一般来讲,一种方式的优点是另一种方式的缺点。一种方式的缺点。(3) 混合增殖式测试混合增殖式测试衍变的自顶向下的增殖测试衍变的自顶向下的增殖测试 首先对输入输出模块和引入首先对输入输出模块和引入新算法模块进行测试新算法模块进行测试; ; 再自底向上组装成为功能相当再自底向上组装成为功能相当完整且相对独立的子系统完整且相对独立的子系统; ; 然后由主模块开始自顶向下进然后由主模块开始自顶向下进行增殖测试。行增殖测试。自底向上自底向上 自顶向下的增殖测试自顶向下的增殖测试 首先对含读操作的子系统自底向上直首先对含读操作的子系统自底向上

74、直至根结点模块进行组装和测试至根结点模块进行组装和测试; ; 然后对含写操作的子系统做自顶向下然后对含写操作的子系统做自顶向下的组装与测试。的组装与测试。回归测试回归测试 这种方式采取自顶向下的方式测试被这种方式采取自顶向下的方式测试被修改的模块及其子模块修改的模块及其子模块; ; 然后将这一部分视为子系统,再自底然后将这一部分视为子系统,再自底向上测试。向上测试。确认测试(确认测试(Validation Testing)确认测试又称确认测试又称有效性测试有效性测试。任务。任务是验证软件的功能和性能及其它是验证软件的功能和性能及其它特性是否与用户的要求一致。特性是否与用户的要求一致。对软件的功

75、能和性能要求在软件对软件的功能和性能要求在软件需求规格说明书中已经明确规定。需求规格说明书中已经明确规定。它包含的信息就是软件确认测试它包含的信息就是软件确认测试的基础。的基础。1. 进行有效性测试(黑盒测试)进行有效性测试(黑盒测试)有效性测试是在模拟的环境有效性测试是在模拟的环境 (可能可能就是开发的环境就是开发的环境) 下,运用黑盒测下,运用黑盒测试的方法,验证被测软件是否满足试的方法,验证被测软件是否满足需求规格说明书列出的需求。需求规格说明书列出的需求。首先制定测试计划,规定要做测试首先制定测试计划,规定要做测试的种类。还需要制定一组测试步骤,的种类。还需要制定一组测试步骤,描述具体

76、的测试用例。描述具体的测试用例。通过实施预定的测试计划和测通过实施预定的测试计划和测试步骤,确定试步骤,确定 软件的特性是否与需求相符;软件的特性是否与需求相符; 所有的文档都是正确且便于使用;所有的文档都是正确且便于使用; 同时,对其它软件需求,例如可同时,对其它软件需求,例如可移植性、兼容性、出错自动恢复、移植性、兼容性、出错自动恢复、可维护性等,也都要进行测试可维护性等,也都要进行测试在全部软件测试的测试用例运行完在全部软件测试的测试用例运行完后,所有的测试结果可以分为两类:后,所有的测试结果可以分为两类: 测试结果与预期的结果相符测试结果与预期的结果相符。这说。这说明软件的这部分功能或

77、性能特征与需明软件的这部分功能或性能特征与需求规格说明书相符合,从而这部分程求规格说明书相符合,从而这部分程序被接受。序被接受。 测试结果与预期的结果不符测试结果与预期的结果不符。这说。这说明软件的这部分功能或性能特征与需明软件的这部分功能或性能特征与需求规格说明不一致,因此要为它提交求规格说明不一致,因此要为它提交一份问题报告。一份问题报告。2. 软件配置复查软件配置复查 软件配置复查的目的是保证软件配置复查的目的是保证 软件配置的所有成分都齐全;软件配置的所有成分都齐全; 各方面的质量都符合要求;各方面的质量都符合要求; 具有维护阶段所必需的细节;具有维护阶段所必需的细节; 而且已经编排好

78、分类的目录。而且已经编排好分类的目录。应当严格遵守用户手册和操作手册应当严格遵守用户手册和操作手册中规定的使用步骤,以便检查这些中规定的使用步骤,以便检查这些文档资料的完整性和正确性。文档资料的完整性和正确性。3.测试和测试和测试测试在软件交付使用之后,用户将在软件交付使用之后,用户将如何实际使用程序,对于开发如何实际使用程序,对于开发者来说是无法预测的。者来说是无法预测的。测试测试是由一个是由一个用户在开发环境用户在开发环境下进行的测试下进行的测试,也可以是,也可以是公司公司内部的用户在模拟实际操作环内部的用户在模拟实际操作环境下进行的测试境下进行的测试。测试测试的目的是评价软件产品的的目的

79、是评价软件产品的FLURPS(即功能、局域化、可使即功能、局域化、可使用性、可靠性、性能和支持)。尤用性、可靠性、性能和支持)。尤其注重产品的界面和特色。其注重产品的界面和特色。测试测试可以从软件产品编码结束之可以从软件产品编码结束之时开始,或在模块(子系统)测试时开始,或在模块(子系统)测试完成之后开始,也可以在确认测试完成之后开始,也可以在确认测试过程中产品达到一定的稳定和可靠过程中产品达到一定的稳定和可靠程度之后再开始。程度之后再开始。测试测试是由软件的是由软件的多个用户在实际多个用户在实际使用环境下进行的测试使用环境下进行的测试。这些用户。这些用户返回有关错误信息给开发者。返回有关错误

80、信息给开发者。测试时,开发者通常不在测试现场。测试时,开发者通常不在测试现场。因而,因而,测试测试是在开发者无法控制是在开发者无法控制的环境下进行的软件现场应用。的环境下进行的软件现场应用。在在测试中,由用户记下遇到的所测试中,由用户记下遇到的所有问题,包括真实的以及主观认定有问题,包括真实的以及主观认定的,定期向开发者报告。的,定期向开发者报告。测试测试主要衡量产品的主要衡量产品的FLURPS。着着重于产品的支持性,包括文档、客重于产品的支持性,包括文档、客户培训和支持产品生产能力。户培训和支持产品生产能力。只有当只有当测试测试达到一定的可靠程度时,达到一定的可靠程度时,才能开始才能开始测试

81、测试。它处在整个测试的。它处在整个测试的最后阶段。同时,产品的所有手册最后阶段。同时,产品的所有手册文本也应该在此阶段完全定稿。文本也应该在此阶段完全定稿。4.验验 收收 测测 试试 ( Acceptance Testing)在通过了系统的有效性测试及软件在通过了系统的有效性测试及软件配置审查之后,就应开始系统的验配置审查之后,就应开始系统的验收测试。收测试。验收测试是以用户为主的测试。软验收测试是以用户为主的测试。软件开发人员和件开发人员和QAQA(质量保证)人员质量保证)人员也应参加。也应参加。由用户参加设计测试用例,使用生由用户参加设计测试用例,使用生产中的实际数据进行测试。产中的实际数

82、据进行测试。在测试过程中,除了考虑软件的功在测试过程中,除了考虑软件的功能和性能外,还应对软件的可移植能和性能外,还应对软件的可移植性、兼容性、可维护性、错误的恢性、兼容性、可维护性、错误的恢复功能等进行确认。复功能等进行确认。确认测试应交付的文档有:确认测试应交付的文档有: 确认测试分析报告确认测试分析报告 最终的用户手册和操作手册最终的用户手册和操作手册 项目开发总结报告。项目开发总结报告。系统测试(系统测试(System Testing)系统测试,是将通过确认测试的软系统测试,是将通过确认测试的软件,件,作为整个基于计算机系统的一作为整个基于计算机系统的一个元素个元素,与计算机硬件、外设

83、、某,与计算机硬件、外设、某些支持软件、数据和人员等其它系些支持软件、数据和人员等其它系统元素结合在一起,统元素结合在一起,在实际运行环在实际运行环境下境下,对计算机系统进行一系列的,对计算机系统进行一系列的组装测试和确认测试。组装测试和确认测试。系统测试的目的在于系统测试的目的在于通过与系统的通过与系统的需求定义作比较需求定义作比较, 发现软件与系发现软件与系统的定义不符合或与之矛盾的地方统的定义不符合或与之矛盾的地方。测试种类测试种类软件测试是由一系列不同的测试组软件测试是由一系列不同的测试组成。主要目的是对以计算机为基础成。主要目的是对以计算机为基础的系统进行充分的测试。的系统进行充分的

84、测试。功能测试功能测试功能测试是在规定的一段时间内运功能测试是在规定的一段时间内运行软件系统的所有功能,以验证这行软件系统的所有功能,以验证这个软件系统有无严重错误。个软件系统有无严重错误。可靠性测试可靠性测试如果系统需求说明书中有对可靠性如果系统需求说明书中有对可靠性的要求,则需进行可靠性测试。的要求,则需进行可靠性测试。 平均失效间隔时间平均失效间隔时间 MTBF (Mean Time Between Failures) 是否超是否超过规定时限过规定时限? 因故障而停机的时间因故障而停机的时间 MTTR (Mean Time To Repairs) 在一年中在一年中应不超过多少时间。应不超

85、过多少时间。强度测试强度测试强度测试是要检查在系统运行环境不正强度测试是要检查在系统运行环境不正常乃至发生故障的情况下,系统可以运常乃至发生故障的情况下,系统可以运行到何种程度的测试行到何种程度的测试。强度测试的一个变种就是强度测试的一个变种就是敏感性测敏感性测试试。在程序有效数据界限内一个小。在程序有效数据界限内一个小范围内的一组数据可能引起极端的范围内的一组数据可能引起极端的或不平稳的错误处理出现,或者导或不平稳的错误处理出现,或者导致极度的性能下降的情况发生。此致极度的性能下降的情况发生。此测试用以发现可能引起这种不稳定测试用以发现可能引起这种不稳定性或不正常处理的某些数据组合。性或不正

86、常处理的某些数据组合。性能测试性能测试性能测试是要检查系统是否满足在性能测试是要检查系统是否满足在需求说明书中规定的性能。特别是需求说明书中规定的性能。特别是对于实时系统或嵌入式系统。对于实时系统或嵌入式系统。性能测试常常性能测试常常需要与强度测试结合需要与强度测试结合起来进行,并常常要求同时进行硬起来进行,并常常要求同时进行硬件和软件检测件和软件检测。通常,对软件性能的检测表现在以通常,对软件性能的检测表现在以下几个方面:下几个方面:响应时间响应时间、吞吐量吞吐量、辅助存储区辅助存储区,例如缓冲区,工作区,例如缓冲区,工作区的大小等、的大小等、处理精度处理精度,等等。,等等。恢复测试恢复测试

87、恢复测试是要证实在恢复测试是要证实在克服硬件故障克服硬件故障(包括掉电、硬件或网络出错等包括掉电、硬件或网络出错等)后后,系统能否正常地继续进行工作系统能否正常地继续进行工作,并,并不对系统造成任何损害。不对系统造成任何损害。为此,可采用各种人工干预的手段,为此,可采用各种人工干预的手段,模拟硬件故障,故意造成软件出错。模拟硬件故障,故意造成软件出错。并由此检查:并由此检查: 错误探测功能错误探测功能系统能否发现硬件系统能否发现硬件失效与故障;失效与故障; 能否能否切换或启动备用的硬件切换或启动备用的硬件; 在故障发生时能否在故障发生时能否保护正在运行的作保护正在运行的作业和系统状态业和系统状

88、态; 在系统恢复后能否在系统恢复后能否从最后记录下来的从最后记录下来的无错误状态开始继续执行作业无错误状态开始继续执行作业,等等。,等等。 掉电测试掉电测试:其目的是测试软件系统在:其目的是测试软件系统在发生电源中断时能否发生电源中断时能否保护当时的状态保护当时的状态且不毁坏数据且不毁坏数据,然后在,然后在电源恢复时从电源恢复时从保留的断点处重新进行操作保留的断点处重新进行操作。启动停止测试启动停止测试这类测试的目的是验证这类测试的目的是验证在机器启动在机器启动及关机阶段及关机阶段,软件,软件系统正确处理的系统正确处理的能力能力。这类测试包括这类测试包括 反复启动软件系统反复启动软件系统 (例

89、如,操作系统例如,操作系统自举、网络的启动、应用程序的调用自举、网络的启动、应用程序的调用等等) 在尽可能多的情况下关机在尽可能多的情况下关机。配置测试配置测试这类测试是要检查这类测试是要检查计算机系统内计算机系统内各个设备或各种资源之间的相互各个设备或各种资源之间的相互联结和功能分配中的错误联结和功能分配中的错误。它主要包括以下几种:它主要包括以下几种: 配置命令测试配置命令测试:验证全部配置命:验证全部配置命令的可操作性(有效性);特别对令的可操作性(有效性);特别对最大配置和最小配置要进行测试。最大配置和最小配置要进行测试。软件配置和硬件配置都要测试。软件配置和硬件配置都要测试。 循环配

90、置测试循环配置测试:证明对每个设备物:证明对每个设备物理与逻辑的,逻辑与功能的每次循环理与逻辑的,逻辑与功能的每次循环置换配置都能正常工作。置换配置都能正常工作。 修复测试修复测试:检查每种配置状态及哪:检查每种配置状态及哪个设备是坏的。并用自动的或手工的个设备是坏的。并用自动的或手工的方式进行配置状态间的转换。方式进行配置状态间的转换。安全性测试安全性测试安全性测试是要检验安全性测试是要检验在系统中已经在系统中已经存在的系统安全性、保密性措施是存在的系统安全性、保密性措施是否发挥作用,有无漏洞否发挥作用,有无漏洞。力图破坏系统的保护机构以进入系力图破坏系统的保护机构以进入系统的主要方法有以下

91、几种:统的主要方法有以下几种: 正面攻击或从侧面、背面攻击系统中正面攻击或从侧面、背面攻击系统中易受损坏的那些部分;易受损坏的那些部分; 以系统输入为突破口,利用输入的容以系统输入为突破口,利用输入的容错性进行正面攻击;错性进行正面攻击; 申请和占用过多的资源压垮系统,申请和占用过多的资源压垮系统,以破坏安全措施,从而进入系统;以破坏安全措施,从而进入系统; 故意使系统出错,利用系统恢复的故意使系统出错,利用系统恢复的过程,窃取用户口令及其它有用的信过程,窃取用户口令及其它有用的信息;息; 通过浏览残留在计算机各种资源中通过浏览残留在计算机各种资源中的垃圾(无用信息),以获取如口令,的垃圾(无

92、用信息),以获取如口令,安全码,译码关键字等信息;安全码,译码关键字等信息; 浏览全局数据,期望从中找到进入浏览全局数据,期望从中找到进入系统的关键字;系统的关键字; 浏览那些逻辑上不存在,但物理上浏览那些逻辑上不存在,但物理上还存在的各种记录和资料等。还存在的各种记录和资料等。 可使用性测试可使用性测试可使用性测试主要从使用的可使用性测试主要从使用的合理性合理性和和方便性方便性等角度对软件系统进行检等角度对软件系统进行检查,发现人为因素或使用上的问题。查,发现人为因素或使用上的问题。要保证在足够详细的程度下,要保证在足够详细的程度下,用户用户界面便于使用界面便于使用;对输入量可容错对输入量可

93、容错、响应时间和响应方式合理可行响应时间和响应方式合理可行、输输出信息有意义出信息有意义、正确并前后一致正确并前后一致;出错信息能够引导用户去解决问题出错信息能够引导用户去解决问题;软件文档全面软件文档全面、正规正规、确切确切。可支持性测试可支持性测试这类测试是要验证这类测试是要验证系统的支持策略系统的支持策略对于公司与用户方面是否切实可行对于公司与用户方面是否切实可行。它所采用的方法是它所采用的方法是 试运行支持过程试运行支持过程(如对有错部分打补如对有错部分打补丁的过程,热线界面等丁的过程,热线界面等); 对其结果进行对其结果进行质量分析质量分析; 评审诊断工具评审诊断工具; 维护过程、内

94、部维护文档维护过程、内部维护文档; 修复一个错误所需平均最少时间修复一个错误所需平均最少时间。安装测试安装测试安装测试的目的安装测试的目的不是找软件错误不是找软件错误,而是而是找安装错误找安装错误。在安装软件系统时,会有多种选择。在安装软件系统时,会有多种选择。 要分配和装入文件与程序库要分配和装入文件与程序库 布置适用的硬件配置布置适用的硬件配置 进行程序的联结。进行程序的联结。而安装测试就是要找出在这些安装而安装测试就是要找出在这些安装过程中出现的错误。过程中出现的错误。安装测试是在系统安装之后进行测安装测试是在系统安装之后进行测试。它要检验:试。它要检验: 用户选择的一套任选方案是否相容

95、;用户选择的一套任选方案是否相容; 系统的每一部分是否都齐全;系统的每一部分是否都齐全; 所有文件是否都已产生并确有所需要所有文件是否都已产生并确有所需要的内容的内容; 硬件的配置是否合理,等等。硬件的配置是否合理,等等。过程测试过程测试在一些大型的系统中,部分工作由在一些大型的系统中,部分工作由软件自动完成,其它工作则需由各软件自动完成,其它工作则需由各种人员,包括操作员,数据库管理种人员,包括操作员,数据库管理员,终端用户等,按一定规程同计员,终端用户等,按一定规程同计算机配合,靠人工来完成。算机配合,靠人工来完成。指定由人工完成的过程指定由人工完成的过程也需经过仔也需经过仔细的检查细的检

96、查,这就是所谓的过程测试。,这就是所谓的过程测试。互连测试互连测试互连测试是要验证互连测试是要验证两个或多个两个或多个不同的系统之间的互连性不同的系统之间的互连性。兼容性测试兼容性测试这类测试主要想验证这类测试主要想验证软件产品软件产品在不同版本之间的兼容性在不同版本之间的兼容性。有有两类基本的兼容性测试:两类基本的兼容性测试: 向下兼容向下兼容 交错兼容交错兼容容量测试容量测试容量测试是要检验容量测试是要检验系统的能力最高系统的能力最高能达到什么程度能达到什么程度。例如,。例如, 对于编译程序,让它处理特别长的源对于编译程序,让它处理特别长的源程序;程序; 对于操作系统,让它的作业队列对于操

97、作系统,让它的作业队列“满满员员”; 对于信息检索系统,让它使用频率达对于信息检索系统,让它使用频率达到最大。到最大。在使系统的在使系统的全部资源达到全部资源达到“满负荷满负荷”的情形下,的情形下,测试系统的承受能力测试系统的承受能力。文档测试文档测试这种测试是检查这种测试是检查用户文档用户文档(如用如用户手册户手册)的清晰性和精确性的清晰性和精确性。用户文档中所使用的例子必须用户文档中所使用的例子必须在测试中一一试过,确保叙述在测试中一一试过,确保叙述正确无误。正确无误。调试(调试(Debug)软件调试是在进行了成功的测试之后才软件调试是在进行了成功的测试之后才开始的工作。它与软件测试不同,

98、调试开始的工作。它与软件测试不同,调试的任务是的任务是进一步诊断和改正程序中潜在进一步诊断和改正程序中潜在的错误的错误。调试活动由两部分组成:调试活动由两部分组成: 确定程序中可疑错误的确切性质和位置确定程序中可疑错误的确切性质和位置确定程序中可疑错误的确切性质和位置确定程序中可疑错误的确切性质和位置。 对程序对程序对程序对程序( ( ( (设计设计设计设计, , , ,编码编码编码编码) ) ) )进行修改,排除这个进行修改,排除这个进行修改,排除这个进行修改,排除这个错误错误错误错误。调试工作是一个具有很强技巧性的调试工作是一个具有很强技巧性的工作。工作。软件运行失效或出现问题,往往只软件

99、运行失效或出现问题,往往只是潜在错误的外部表现是潜在错误的外部表现,而外部表,而外部表现与内在原因之间常常没有明显的现与内在原因之间常常没有明显的联系。如果要找出真正的原因,排联系。如果要找出真正的原因,排除潜在的错误,不是一件易事。除潜在的错误,不是一件易事。可以说,可以说,调试是通过现象,找出原调试是通过现象,找出原因的一个思维分析的过程因的一个思维分析的过程。调试的步骤调试的步骤(1) 从错误的外部表现形式入手,从错误的外部表现形式入手,确定程序中出错位置确定程序中出错位置;(2) 研究有关部分的程序,找出错研究有关部分的程序,找出错误的内在原因误的内在原因;(3) 修改设计和代码,以排

100、除这个修改设计和代码,以排除这个错误错误;(4) 重复进行暴露了这个错误的原重复进行暴露了这个错误的原始测试或某些有关测试始测试或某些有关测试。从技术角度来看,查找错误的从技术角度来看,查找错误的难度在于:难度在于: 现象与原因所处的位置可能相现象与原因所处的位置可能相距甚远。距甚远。 当其它错误得到纠正时,这一当其它错误得到纠正时,这一错误所表现出的现象可能会暂时错误所表现出的现象可能会暂时消失,但并未实际排除。消失,但并未实际排除。 现象实际上是由一些非错误原现象实际上是由一些非错误原因因( (例如,舍入不精确例如,舍入不精确) )引起的。引起的。 现象可能是由于一些不容易发现的现象可能是

101、由于一些不容易发现的人为错误引起的。人为错误引起的。 错误是由于时序问题引起的,与处错误是由于时序问题引起的,与处理过程无关。理过程无关。 现象是由于难于精确再现的输入状现象是由于难于精确再现的输入状态(例如,实时应用中输入顺序不确态(例如,实时应用中输入顺序不确定)引起。定)引起。 现象可能是周期出现的。在软、硬现象可能是周期出现的。在软、硬件结合的嵌入式系统中常常遇到。件结合的嵌入式系统中常常遇到。几种主要的调试方法几种主要的调试方法调试的关键在于推断程序内部的错调试的关键在于推断程序内部的错误位置及原因。可以采用以下方法:误位置及原因。可以采用以下方法:强行排错强行排错这种调试方法目前使

102、用较多,效率这种调试方法目前使用较多,效率较低。它不需要过多的思考,比较较低。它不需要过多的思考,比较省脑筋。例如:省脑筋。例如: 通过内存全部打印来调试通过内存全部打印来调试,在这大,在这大量的数据中寻找出错的位置。量的数据中寻找出错的位置。 在程序特定部位设置打印语句在程序特定部位设置打印语句,把打,把打印语句插在出错的源程序的各个关键印语句插在出错的源程序的各个关键变量改变部位、重要分支部位、子程变量改变部位、重要分支部位、子程序调用部位,跟踪程序的执行,监视序调用部位,跟踪程序的执行,监视重要变量的变化。重要变量的变化。 自动调试工具自动调试工具。利用某些程序语言的。利用某些程序语言的

103、调试功能或专门的交互式调试工具,调试功能或专门的交互式调试工具,分析程序的动态过程,而不必修改程分析程序的动态过程,而不必修改程序。序。应用以上任一种方法之前,都应当应用以上任一种方法之前,都应当对错误的征兆进行全面彻底的分析,对错误的征兆进行全面彻底的分析,得出对出错位置及错误性质的推测,得出对出错位置及错误性质的推测,再使用一种适当的调试方法来检验再使用一种适当的调试方法来检验推测的正确性。推测的正确性。回溯法调试回溯法调试这是在小程序中常用的一种有效的这是在小程序中常用的一种有效的调试方法。调试方法。一旦发现了错误,人们先分析错误一旦发现了错误,人们先分析错误征兆,确定最先发现征兆,确定

104、最先发现“症状症状”的位的位置。置。然后,人工沿程序的控制流程,向回追然后,人工沿程序的控制流程,向回追踪源程序代码,直到找到错误根源或确踪源程序代码,直到找到错误根源或确定错误产生的范围。定错误产生的范围。例如,程序中发现错误处是某个打印语例如,程序中发现错误处是某个打印语句。通过输出值可推断程序在这一点上句。通过输出值可推断程序在这一点上变量的值。再从这一点出发,回溯程序变量的值。再从这一点出发,回溯程序的执行过程,反复考虑:的执行过程,反复考虑:“如果程序在如果程序在这一点上的状态(变量的值)是这样,这一点上的状态(变量的值)是这样,那么程序在上一点的状态一定是这样那么程序在上一点的状态

105、一定是这样.”, 直到找到错误的位置。直到找到错误的位置。归纳法调试归纳法调试归纳法是一种从特殊推断一般的系归纳法是一种从特殊推断一般的系统化思考方法。归纳法调试的基本统化思考方法。归纳法调试的基本思想是:从一些线索思想是:从一些线索( (错误征兆错误征兆) )着着手,通过分析它们之间的关系来找手,通过分析它们之间的关系来找出错误。出错误。 收集有关的数据收集有关的数据 列出所有已知的列出所有已知的测试用例和程序执行结果。看哪些输测试用例和程序执行结果。看哪些输入数据的运行结果是正确的,哪些输入数据的运行结果是正确的,哪些输入数据的运行结果有错误。入数据的运行结果有错误。 组织数据组织数据 由

106、于归纳法是从特殊到一般的推断由于归纳法是从特殊到一般的推断过程,所以需要组织整理数据,以过程,所以需要组织整理数据,以发现规律。发现规律。 常以常以3W1H形式组织可用的数据:形式组织可用的数据:“What” 列出一般现象;列出一般现象;“Where”说明发现现象的地点;说明发现现象的地点;“When” 列出现象发生时所有已知情列出现象发生时所有已知情况;况;“How” 说明现象的范围和量级;说明现象的范围和量级;“Yes”描述出现错误的描述出现错误的3W1H;“No”作为比较,描述了没有错误的作为比较,描述了没有错误的3W1H。通过分析找出矛盾来。通过分析找出矛盾来。 提出假设提出假设提出假

107、设提出假设分析线索之间的关系,利用在线索结构中分析线索之间的关系,利用在线索结构中观察到的矛盾现象,设计一个或多个关于观察到的矛盾现象,设计一个或多个关于出错原因的假设。如果一个假设也提不出出错原因的假设。如果一个假设也提不出来,归纳过程就需要收集更多的数据。此来,归纳过程就需要收集更多的数据。此时,应当再设计与执行一些测试用例,以时,应当再设计与执行一些测试用例,以获得更多的数据。获得更多的数据。证明假设证明假设 把假设与原始线索或数据进行比把假设与原始线索或数据进行比较,若它能完全解释一切现象,较,若它能完全解释一切现象,则假设得到证明;否则,就认为则假设得到证明;否则,就认为假设不合理,

108、或不完全,或是存假设不合理,或不完全,或是存在多个错误,以致只能消除部分在多个错误,以致只能消除部分错误。错误。演绎法调试演绎法调试演绎法是一种从一般原理或前提出演绎法是一种从一般原理或前提出发,经过排除和精化的过程来推导发,经过排除和精化的过程来推导出结论的思考方法。演绎法排错是出结论的思考方法。演绎法排错是测试人员首先根据已有的测试用例,测试人员首先根据已有的测试用例,设想及枚举出所有可能出错的原因设想及枚举出所有可能出错的原因做为假设;然后再用原始测试数据做为假设;然后再用原始测试数据或新的测试,从中逐个排除不可能或新的测试,从中逐个排除不可能正确的假设;最后,再用测试数据正确的假设;最

109、后,再用测试数据验证余下的假设确是出错的原因。验证余下的假设确是出错的原因。 列举所有可能出错原因的假设列举所有可能出错原因的假设把所有可能的错误原因列成表。通过把所有可能的错误原因列成表。通过它们,可以组织、分析现有数据。它们,可以组织、分析现有数据。 利用已有的测试数据,排除不正确利用已有的测试数据,排除不正确的假设的假设仔细分析已有的数据,寻找矛盾,力仔细分析已有的数据,寻找矛盾,力求排除前一步列出所有原因。如果所求排除前一步列出所有原因。如果所有原因都被排除了,则需要补充一些有原因都被排除了,则需要补充一些数据数据( (测试用例测试用例) ),以建立新的假设。,以建立新的假设。 改进余

110、下的假设改进余下的假设利用已知的线索,进一步改进余下的假设,利用已知的线索,进一步改进余下的假设,使之更具体化,以便可以精确地确定出错使之更具体化,以便可以精确地确定出错位置。位置。 证明余下的假设证明余下的假设调试原则调试原则在调试方面,许多原则本质上是心在调试方面,许多原则本质上是心理学方面的问题。调试由两部分组理学方面的问题。调试由两部分组成,调试原则也分成两组。成,调试原则也分成两组。确定错误的性质和位置的原则确定错误的性质和位置的原则 用头脑去分析思考与错误征兆有关用头脑去分析思考与错误征兆有关的信息。的信息。 避开死胡同。避开死胡同。 只把调试工具当做辅助手段来只把调试工具当做辅助

111、手段来使用。利用调试工具,可以帮助使用。利用调试工具,可以帮助思考,但不能代替思考。思考,但不能代替思考。 避免用试探法,最多只能把它避免用试探法,最多只能把它当做最后手段。当做最后手段。修改错误的原则修改错误的原则 在出现错误的地方,很可能还有在出现错误的地方,很可能还有别的错误。别的错误。 修改错误的一个常见失误是只修修改错误的一个常见失误是只修改了这个错误的征兆或这个错误改了这个错误的征兆或这个错误的表现,而没有修改错误的本身。的表现,而没有修改错误的本身。 当心修正一个错误的同时有可能当心修正一个错误的同时有可能会引入新的错误。会引入新的错误。 修改错误的过程将迫使人们暂修改错误的过程

112、将迫使人们暂时回到程序设计阶段。时回到程序设计阶段。 修改源代码程序,不要改变目修改源代码程序,不要改变目标代码。标代码。习习 题题1. 软件测试的目的是什么?在软件测试中,应注意哪些原则?2. 什么是白盒测试法?有哪些覆盖标准?试对它们的检错能力进行比较。3. 什么是黑盒测试法?采用黑盒技术设计测试用例有哪几种方法?这些方法各有什么特点?4. 软件测试要经过哪些步骤?这些测试与软件开发各阶段之间有什么关系?5. 单元测试有哪些内容?测试中采用什么方法?6. 什么是集成测试?非渐增式测试与渐增式测试有什么区别?渐增式测试如何组装模块?7. 什么是确认测试?该阶段有哪些工作?8. 调试的目的是什

113、么?调试有哪些技术手段?在白盒测试用例设计中,有语句覆盖、条件覆盖、判定覆盖和路径覆盖等,其中,A 最强的覆盖准则。为了对图所示的程序进行覆盖测试,必须适当地选取测试数据。若X,Y是两个变量,可供选择的测试数据组共有,4组(如表中给出),则实现语句覆盖至少应采用的测试数据组是B ;实现条件覆盖至少应采用的测试数据组是C ;实现路径覆盖至少应采用的测试数据组是D 或E 。供选择的答案:A:(1) 语句覆盖 (2) 条件覆盖 (3) 判定覆盖 (4) 路径覆盖BE:(1) 和组 (2) 和组 (3) 和组 (4) 和组 (5) ,和组 (6) ,和组 (7) ,和组 (8) ,和组请对 “判定三角形类别”程序算法用等价类划分和边界值分析法设计测试用例,并检查逻辑覆盖标准。

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

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

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