1、第五章第五章 软件测试工程软件测试工程概述概述n 软件软件开发过程必须伴有质量开发过程必须伴有质量保证活动。保证活动。n 软件测试是软件质量保证的软件测试是软件质量保证的关键元素,代表了规约、设计关键元素,代表了规约、设计和编码的最终检查。和编码的最终检查。n 软件产品最大的成本是检测软软件产品最大的成本是检测软 件错误、修正软件错误的成本件错误、修正软件错误的成本。n 在整个软件开发中在整个软件开发中,测试工作量测试工作量 一般占一般占30%30%40%40%,甚至,甚至50%50%。在人命关天的软件在人命关天的软件(如飞机控制、如飞机控制、核反应堆等)测试所花费的时间核反应堆等)测试所花费
2、的时间往往是其它软件工程活动时间之往往是其它软件工程活动时间之和的三到五倍和的三到五倍n软件测试是为了发现错误而执行程序的过程,或者说,软件测试是根据软件的规格说明(例如软件的功能、性能、运行环境等要求)以及程序内部结构而设计一批测试用例,并利用这些测试用例去运行程序,以发现软件错误的过程。n测试用例是为了测试软件而设计的一组数据,它应该包括输入的数据和预期输出的结果两部分。n测试用例=输入数据+预期结果 软件测试背景软件测试背景软件是人编的所以不完美实例实例:IntelIntel的的pentiumpentium处理器处理器19941994年浮点除法缺陷年浮点除法缺陷20002000年年8 8
3、月月2828日,日,1.13MHZ1.13MHZ处理器一个可能导致运行程序处理器一个可能导致运行程序被挂起的执行指令问题被挂起的执行指令问题19991999年年1212月月3 3日日,美国航天局火星极地登陆飞船失美国航天局火星极地登陆飞船失踪踪19911991年爱国者导弹防御系统系统时钟错误积累造年爱国者导弹防御系统系统时钟错误积累造成跟踪系统失去精确度成跟踪系统失去精确度千年虫:世界各地解决千年虫:世界各地解决20002000年错误超过数亿美元年错误超过数亿美元n质量管理领域权威人物质量管理领域权威人物J.M.Juran将质量将质量定义为定义为“决定产品性能和决定产品性能和满意程度满意程度的
4、特征的特征”,测试注重于产品的满意度。测试注重于产品的满意度。n测试应针对这样一种情况:软件产品在测试应针对这样一种情况:软件产品在一些特定的范围内不能满足客户的合理一些特定的范围内不能满足客户的合理要求。要求。n通过通过测试测试过程可以评定过程可以评定质量风险(可能质量风险(可能的错误)的错误),了解被测试系统中存在的,了解被测试系统中存在的错错误模式(观察到的错误症状)误模式(观察到的错误症状)。n软件测试是一个查找错误的过程,所以软件测试是一个查找错误的过程,所以软件测试只能证明错误的存在,而不是软件测试只能证明错误的存在,而不是证明程序无错,不能保证经过测试的程证明程序无错,不能保证经
5、过测试的程序一定没有错误。序一定没有错误。n软件测试仅仅是一个手段,根本的目的软件测试仅仅是一个手段,根本的目的是为了纠错,即纠正软件中的错误,从是为了纠错,即纠正软件中的错误,从而提高软件的质量。而提高软件的质量。n测试不可能发现所有错误,只能在有限测试不可能发现所有错误,只能在有限的时间和经济条件下,尽可能地发现错的时间和经济条件下,尽可能地发现错误。误。质量控制技术质量控制技术质量控制活动分类质量控制活动分类开发方法学开发方法学配置管理配置管理验证技术验证技术评评 审审正确性验证正确性验证性能调试性能调试组件测试组件测试集成测试集成测试系统测试系统测试原子事务原子事务模块冗余性模块冗余性
6、检检 错错质量控制质量控制避免错误避免错误容容 错错调调 试试测测 试试测试的目的与地位测试的目的与地位 G.J.MyersG.J.Myers在在软件测试技巧软件测试技巧中认为中认为:1 1.测试是为了测试是为了寻找寻找错误而错误而运行运行程序的过程序的过程程。2 2.一个好的一个好的测试测试用例是指很可能找到迄用例是指很可能找到迄今为止尚未发现的错误的测试。今为止尚未发现的错误的测试。3.3.一个成功的测试一个成功的测试是是揭示了迄今为止尚揭示了迄今为止尚未发现的错误的测试。未发现的错误的测试。E.W.DijkstraE.W.Dijkstra 指出指出:“程序测试能证明错误的存在程序测试能证
7、明错误的存在,但不能证明错误不存在但不能证明错误不存在。”n 测试的目的是发现程序中的错测试的目的是发现程序中的错误误,是为了是为了证明程序有错证明程序有错,而不而不是证明程序无错。是证明程序无错。n把证明程序无错当作测试目的不仅是把证明程序无错当作测试目的不仅是不正确的不正确的,完全做不到的,而且对做完全做不到的,而且对做好测试没有任何益处,甚至是好测试没有任何益处,甚至是十分有十分有害害的。的。n软件测试要设法使软件发生故障软件测试要设法使软件发生故障,暴暴露软件错误。露软件错误。测试的测试的“成功成功”与与“失败失败”:能:能够发现错误的测试是成功的测试,否够发现错误的测试是成功的测试,
8、否则是失败的测试。则是失败的测试。“测试的目的是说明程序正确地执测试的目的是说明程序正确地执行它应有的功能行它应有的功能”这种说法正确吗?这种说法正确吗?例:程序例:程序TriangleTriangle,输入三个整数,表,输入三个整数,表示一个三角形的三个边长,该程序产生一示一个三角形的三个边长,该程序产生一个结果,指出该三角形是等边三角形、等个结果,指出该三角形是等边三角形、等腰三角形还是不等边三角形。腰三角形还是不等边三角形。为说明其能正确执行它的功能,可使用为说明其能正确执行它的功能,可使用“测试用例测试用例”(3,4,5),(5,5,6),(6,6,6),(3,4,5),(5,5,6)
9、,(6,6,6),程序都能给出正确结果,是否就可认为程程序都能给出正确结果,是否就可认为程序是正确的?序是正确的?(两边之和必须大于第三边)(两边之和必须大于第三边)难以说清的软件缺陷难以说清的软件缺陷 古谚:古谚:“一片树叶飘落在森林中没一片树叶飘落在森林中没有人听见,谁能说它发出了声音?有人听见,谁能说它发出了声音?”由于不能报告没有看见的问题,因由于不能报告没有看见的问题,因此,没有看见就不能说存在软件缺陷。此,没有看见就不能说存在软件缺陷。如果软件中的问题没有人发现如果软件中的问题没有人发现,那么它算不算软件缺陷?,那么它算不算软件缺陷?”只有看到了,才能断言软件缺陷,只有看到了,才能
10、断言软件缺陷,尚未尚未发现的软件缺陷只能说是未知软件缺陷。发现的软件缺陷只能说是未知软件缺陷。眼见为实 测试原则测试原则(1)(1)所有的测试都应追溯到用户需求所有的测试都应追溯到用户需求n最严重的错误最严重的错误(从用户角度从用户角度)是那些导是那些导致软件无法满足需求的错误。致软件无法满足需求的错误。n程序中的问题根源程序中的问题根源可能出现在开发前可能出现在开发前期的各阶段,纠正错误也必须追溯到期的各阶段,纠正错误也必须追溯到前期工作前期工作。测测试试与与开开发发前前期期工工作作的的关关系系决定软件与系统的配合关系决定软件与系统的配合关系需求分析需求分析概要设计概要设计详细设计详细设计
11、编编 码码单元测试单元测试集成测试集成测试确认测试确认测试系统测试系统测试开发前期出现错误的扩展开发前期出现错误的扩展计划计划需求需求分析分析设设计计编编码码测测试试A A AB B软件生存期各阶段间需保持的正确性软件生存期各阶段间需保持的正确性用户要求用户要求用户用户:我要什么我要什么?运行结果运行结果计算机计算机:程序运行得程序运行得到的结果到的结果源程序源程序程序员程序员:我要让计算我要让计算机什么做机什么做?设计说明书设计说明书设计员设计员:我要让软件我要让软件做什么做什么?需求说明书需求说明书分析员分析员:我可以提我可以提供什么供什么?12345理解正确性理解正确性表达正确性表达正确
12、性理解正确性理解正确性设计正确性设计正确性表达正确性表达正确性理解正确性理解正确性编码正确性编码正确性运行正确性运行正确性输入正确性输入正确性相符吗相符吗?测试原则测试原则(2)(2)应该尽早制定测试计划。应该尽早制定测试计划。概要设计时应完成测试计划,概要设计时应完成测试计划,详细的测试用例定义可在设计模型详细的测试用例定义可在设计模型确定后开始,所有测试可在任何代确定后开始,所有测试可在任何代码被产生之前进行计划和设计。码被产生之前进行计划和设计。测试原则测试原则(3)(3)应该由第三方进行测试工作。应该由第三方进行测试工作。一个软件项目的开发人员不应一个软件项目的开发人员不应该同时是该软
13、件的测试人员,基于该同时是该软件的测试人员,基于心理因素,人们往往不愿意否定自心理因素,人们往往不愿意否定自己的工作。己的工作。测试原则测试原则(4)(4)穷举测试是不可能的。穷举测试是不可能的。测试的最高目标是指发现错误测试的最高目标是指发现错误的可能性最高的测试,所以,测试的可能性最高的测试,所以,测试的关键技术是设计一组高产的测试的关键技术是设计一组高产的测试用例,好的测试方案是尽可能发现用例,好的测试方案是尽可能发现至今为止仍未发现的错误。从某种至今为止仍未发现的错误。从某种意义上说,测试是否成功,取决测意义上说,测试是否成功,取决测试用例的选择。试用例的选择。测试原则测试原则(5)(
14、5)充分注意到错误的群集现象充分注意到错误的群集现象 经验表明,测试发现的错误经验表明,测试发现的错误中有中有80%80%的错误很可能是由的错误很可能是由20%20%的的程序模块造成的,这是一种错误程序模块造成的,这是一种错误群集性现象。也就是说,在程序群集性现象。也就是说,在程序段中,发现错误数目多的地方,段中,发现错误数目多的地方,则残存错误的数目也比较多,这则残存错误的数目也比较多,这一现象已为许多程序测试实践所一现象已为许多程序测试实践所证明。证明。测试原则测试原则(6)(6)测试应该从测试应该从“小规模小规模”到到“大规大规模模”通常,最初的测试重点往往是通常,最初的测试重点往往是放
15、在单个的程序模块中,然后,进放在单个的程序模块中,然后,进一步的测试重点放在集成的模块族一步的测试重点放在集成的模块族,最后是对整个系统进行测试。随,最后是对整个系统进行测试。随着测试的逐步深入展开,要集中测着测试的逐步深入展开,要集中测试容易出错的地方。试容易出错的地方。软件测试流软件测试流程程软件软件配置配置测试测试测试测试配置配置测试测试工具工具结果结果分析分析排错排错可靠性可靠性 分析分析测试测试结果结果错误错误预期预期结果结果出错率出错率 改正改正的软件的软件预测预测的可的可靠性靠性需求规格说明书需求规格说明书软件设计说明书软件设计说明书 被测源程序被测源程序 测试计划测试计划 测试
16、用例测试用例(测试数据测试数据)测试驱动程序测试驱动程序n软件配置:需求规格说明、设计说明书、源程序等。软件配置中还应包含测试配置。n测试工具:为软件测试提供的某种服务程序。n评价:测试结果与期望结果比较,如果有差异则往往程序有错,需要改正。n可靠性预测有3种情况可以考虑:n A.如果测试发现严重错误,则软件的质量和可靠性一定不高;n B.如果测试结果是软件功能完成正常,发现的问题不是严重错误,也容易修改,则可能:(1)软件质量和可靠性可以接受;(2)所进行的测试还不足以发现严重错误,错误被潜伏下来。n C.测试没有发现任何错误,则极有可能是测试配置选择不当(测试用例没有选好),错误被深深地潜
17、伏下来,这是极危险。软件测试对象软件测试对象 n软件测试的对象应包括需求分析与设计以及编码等所获得一切的文档和程序。软件测试方法软件测试方法n软件测试方法一般可以分成静态测试和动态测试等。n静态测试实际上是确认在给定的外部环境中软件的逻辑正确性,它应该包括需求规格说明和程序等的确认。n动态测试也称为机器测试,动态测试主要是通过动态分析以及程序测试来检查程序的执行状态,以确认程序的正确性。测试的方法与技术测试的方法与技术软件测试的软件测试的策略和方法策略和方法静态测静态测试方法试方法动态测动态测试方法试方法人工测试方法人工测试方法计算机辅助静计算机辅助静态分析方法态分析方法白盒测试方法白盒测试方
18、法黑盒测试方法黑盒测试方法静态静态和动态和动态测试测试汽车的检查过程汽车的检查过程:踩油门踩油门看车漆看车漆打开前盖检查打开前盖检查发动汽车发动汽车听听发动机声音听听发动机声音上路行使上路行使静态测试静态测试动态动态测试测试静态测试:静态测试:基本特征是对软件进行基本特征是对软件进行 分析、检查和分析、检查和审阅,审阅,不实不实 际运行被测试的软件。际运行被测试的软件。静态测试约可找出静态测试约可找出303070%70%的逻辑设计错误的逻辑设计错误.对对需求规格说明书需求规格说明书、软件设计说明书软件设计说明书、源程序源程序做做检查和检查和审阅审阅,包括:包括:是否符合标准和规范;是否符合标准
19、和规范;通过通过结构分析、流图分析、符号执行结构分析、流图分析、符号执行指出软件缺指出软件缺陷陷;静态测试方法静态测试方法(1 1)人工测试方法。人工测试就是通过人工阅读分析以及)人工测试方法。人工测试就是通过人工阅读分析以及评审软件的文档、程序资料等等,以发现程序中的错误,评审软件的文档、程序资料等等,以发现程序中的错误,尤其是一些设计上的逻辑错误在机器上不易发现,需要人尤其是一些设计上的逻辑错误在机器上不易发现,需要人工复查。根据统计,好的人工评审,可以发现工复查。根据统计,好的人工评审,可以发现30%30%到到70%70%的的编码或逻辑设计错误。编码或逻辑设计错误。(2 2)计算机辅助静
20、态分析。为了提高测试的效率,人们可)计算机辅助静态分析。为了提高测试的效率,人们可以设计一些分析工具对被测试的程序进行静态分析,从中以设计一些分析工具对被测试的程序进行静态分析,从中提取一些信息。例如,检查程序中的局部变量和全局变量提取一些信息。例如,检查程序中的局部变量和全局变量、参数的匹配、判断与循环的嵌套匹配、潜在的死循环、参数的匹配、判断与循环的嵌套匹配、潜在的死循环、不执行的代码、过程调用层次等等。不执行的代码、过程调用层次等等。(3 3)程序正确性说明。程序正确性证明是试图找到某种方)程序正确性说明。程序正确性证明是试图找到某种方法,确切地证明程序是没有错误的。所谓证明,就是确信法
21、,确切地证明程序是没有错误的。所谓证明,就是确信一个断言真实性的论证。这种证明可以形式化的或非形式一个断言真实性的论证。这种证明可以形式化的或非形式化。化。动态测试:动态测试:通过运行软件来检验通过运行软件来检验软件的动态行为和运行结果的正确软件的动态行为和运行结果的正确性。性。动态测试的两个基本要素:动态测试的两个基本要素:u 被测试程序被测试程序u 测试数据(测试用例)测试数据(测试用例)动态测试方法动态测试方法(1)(1)选取定义域有效值选取定义域有效值,或定义域或定义域 外无效值外无效值.(2)(2)对已选取值决定对已选取值决定预期的结果预期的结果(3)(3)用选取值执行程序用选取值执
22、行程序(4)(4)执行结果执行结果 与与(2)(2)结果相比结果相比,不吻和则程序有错不吻和则程序有错.动态黑盒测试动态黑盒测试 闭着眼睛测试软件闭着眼睛测试软件软件输入输入 不深入代码细节的测试方法称为动态黑盒测试。不深入代码细节的测试方法称为动态黑盒测试。软件测试员充当客户来使用它。软件测试员充当客户来使用它。输出输出动态白盒测试动态白盒测试 带上带上X光眼镜测试软件光眼镜测试软件?3581322.293419985680302829734315250*(1+0.015)*(1+0.015)360-1)/0.015250*(1+0.015)*(1+0.015)360-1)/0.015 假如
23、知道一个盒子包含一台计算机假如知道一个盒子包含一台计算机,而另一个而另一个盒子是人用纸笔计算盒子是人用纸笔计算,就会选择不同的测试用例就会选择不同的测试用例了解软件的运作方式会影响测试手段了解软件的运作方式会影响测试手段穷举测试穷举测试例例:输入输入 三条边长三条边长 黑盒测试黑盒测试可采用的测试用例数可采用的测试用例数(设字长设字长1616位位)执行时间执行时间:设测试一次需设测试一次需1ms1ms 共需一万年共需一万年.=2 X2 X2 3X10=2 X2 X2 3X101616161616161414 穷举测试穷举测试 白盒测试白盒测试例例:含含4 4个分支个分支,循环次数循环次数20,
24、20,从从A A到到B B的可能的可能路径路径执行时间执行时间:设测试一次需设测试一次需2ms2ms 穷举测试需穷举测试需5 5亿年亿年.=5+5+.+5+5=5+5+.+5+5 101020201 12 219191414A AB B第一次为5,第二次为5*5 不论黑盒还是白盒测试都不论黑盒还是白盒测试都不能不能进行穷尽测试进行穷尽测试,所以软件测试不可所以软件测试不可能发现程序中存在的所有错误能发现程序中存在的所有错误,因因此需精心设计测试方案此需精心设计测试方案,力争尽可力争尽可能少的次数能少的次数,测出尽可能多的错误测出尽可能多的错误.两种类型的测试两种类型的测试黑盒测试黑盒测试 又称
25、又称:功能测试功能测试 数据驱动测试数据驱动测试 基于规格说明书的测试基于规格说明书的测试 白盒测试白盒测试 又称又称:开盒测试开盒测试 结构测试结构测试 玻璃盒测试玻璃盒测试 基于覆盖的测试基于覆盖的测试.根据被测程序的逻辑结构根据被测程序的逻辑结构设计测试用例设计测试用例;力求提高测试覆力求提高测试覆盖率盖率;黑盒测试与白盒测试比较黑盒测试与白盒测试比较 黑盒测试黑盒测试是从用户观点,按是从用户观点,按规格说明书要求的输入数据与输规格说明书要求的输入数据与输出数据的对应关系设计测试用例出数据的对应关系设计测试用例,是根据程序是根据程序外部特征外部特征进行测试。进行测试。白盒测试白盒测试是根
26、据程序是根据程序内部逻内部逻辑结构辑结构进行测试。进行测试。黑盒测试与白盒测试黑盒测试与白盒测试优缺点优缺点比较比较 黑盒测试黑盒测试 白盒测试白盒测试 优优点点缺缺点点性性质质适用于各阶段测试适用于各阶段测试从产品功能角度测试从产品功能角度测试容易入手生成测试数容易入手生成测试数 据据可构成测试数据使特定程可构成测试数据使特定程 序部分得到测试序部分得到测试有一定的充分性度量手段有一定的充分性度量手段较多工具支持较多工具支持某些代码得不到测试某些代码得不到测试如果规格说明有误,如果规格说明有误,则无法发现则无法发现不易进行充分性测试不易进行充分性测试不易生成测试数据不易生成测试数据(通常通常
27、)无法对未实现规格说明的无法对未实现规格说明的 部分进行测试部分进行测试工作量大,通常只用于单工作量大,通常只用于单 元测试,有应用局限元测试,有应用局限是一种是一种确认确认技术,回答技术,回答:“我们在构造一个正确我们在构造一个正确 的系统吗?的系统吗?”是一种是一种验证验证技术,回答技术,回答:“我们在正确地构造一个系我们在正确地构造一个系 统吗统吗?”黑盒测试与白盒测试能发现的错误黑盒测试与白盒测试能发现的错误C CB BA AD D-只能用黑盒测试发现的错误只能用黑盒测试发现的错误A-只能用白盒测试发现的错误只能用白盒测试发现的错误-两种方法都能发现的错误两种方法都能发现的错误-两种方
28、法都不能发现的错误两种方法都不能发现的错误BCD 测试用例测试用例设计设计 选择测试用例是软件测试员最重要选择测试用例是软件测试员最重要 的一项工作。的一项工作。测试用测试用例例的的属性属性:属性属性 描述描述name name 测试用例的名称测试用例的名称 location location 可执行的完全路径名可执行的完全路径名 input input 输入数据或命令输入数据或命令oracle oracle 与测试输入相比较的期待测试结果与测试输入相比较的期待测试结果log log 测试生产的输出测试生产的输出程序测试举例程序测试举例例:程序例:程序 TriangleTriangle,输入三
29、个整输入三个整 数,表示一个三角形的三个边数,表示一个三角形的三个边 长,该程序产生一个结果,指长,该程序产生一个结果,指 出该三角形是等边三角形、等出该三角形是等边三角形、等 腰三角形还是不等边三角形。腰三角形还是不等边三角形。判断三角型的测试用例设计判断三角型的测试用例设计:输入数据输入数据 预期结果预期结果(1)6;6;6 (1)6;6;6 等边等边(2)8;8;4 (2)8;8;4 等腰等腰(3)4;5;6 (3)4;5;6 一般一般 还应输入还应输入非法数据非法数据:0;7;90;7;9 -7;3;5 -7;3;5 a;2;7 a;2;7 等等白盒测试的测试用例设计白盒测试的测试用例
30、设计 逻辑覆盖法逻辑覆盖法(1)(1)语句覆盖语句覆盖(2)(2)判定覆盖判定覆盖(3)(3)条件覆盖条件覆盖(4)(4)判定判定/条件覆盖条件覆盖(5)(5)条件组合覆盖条件组合覆盖(6)(6)路径覆盖路径覆盖(7)(7)点覆盖点覆盖(8)(8)边覆盖边覆盖例例:PROCEDURE SAMPAL (A,B:REAL;VAR X:REAL);BEGIN IF(A1)AND(B=0)THEN X:=X/A IF(A=2)OR(X1)THEN X:=X+1 END;开始开始(A1)AND(B=0)(A=2)OR(X1)返回返回X=X/AX=X+1FFTTabdce(1)(1)语句覆盖语句覆盖使程序
31、中每个语句至少执行一次使程序中每个语句至少执行一次语句覆盖语句覆盖开始开始(A1)AND(B=0)(A=2)OR(X1)返回返回X=X/AX=X+1FFTTabdce只需设计一个测试用例只需设计一个测试用例:输入数据:输入数据:A=2,B=0,X=4则覆盖则覆盖ace,ace,可以执行程序中的每一可以执行程序中的每一条语句条语句,即达到了语句覆盖即达到了语句覆盖;语句覆盖是语句覆盖是最弱最弱的逻辑覆盖的逻辑覆盖(2)(2)判定覆盖判定覆盖(分支覆盖分支覆盖)使每个判定的真假分支都至少执行一次使每个判定的真假分支都至少执行一次判定覆盖判定覆盖开始开始(A1)AND(B=0)(A=2)OR(X1)
32、返回返回X=X/AX=X+1FFTTabdce例例:可设计两组测试用例可设计两组测试用例:A=3,B=0,X=3 可覆盖可覆盖c、d分支分支 A=2,B=1,X=1 可覆盖可覆盖b、e分支分支 两组测试用例可覆盖所有判定的真假两组测试用例可覆盖所有判定的真假分支。分支。语句覆盖仍是语句覆盖仍是弱弱的逻辑覆盖。的逻辑覆盖。(3)(3)条件覆盖条件覆盖 使每个判定的每个条件的可使每个判定的每个条件的可能取值至少执行一次能取值至少执行一次第一判定表达式第一判定表达式:设设条件条件 A1A1 取真取真 记为记为 T1T1 假假 T1T1 条件条件 B=1B=1 取真取真 记为记为 T2T2 假假 T2
33、T2第二判定表达式第二判定表达式:设设条件条件 A=2A=2 取真取真 记为记为 T3T3 假假 T3T3 条件条件 X1X1 取真取真 记为记为 T4T4 假假 T4T4条件覆盖条件覆盖开始开始(A1)AND(B=0)(A=2)OR(X1)返回返回X=X/AX=X+1FFTTabdce满足条件满足条件:T1,T1,T2,T2 T3,T3 T4,T4测试用例测试用例 通过通过 满足的满足的 覆盖覆盖A B X 路径路径 条件条件 分支分支1 0 3 abe T1,T2,T3,T4 b,e2 1 1 abe T1,T2,T3,T4 b,e 两个测试用例两个测试用例覆盖了四个条件八种可能覆盖了四个
34、条件八种可能取值取值。未覆盖未覆盖c c、d d分支分支,不满足判定覆盖的要,不满足判定覆盖的要求求.条件覆盖不一定包含判定覆盖条件覆盖不一定包含判定覆盖判定覆盖也不一定包含条件覆盖判定覆盖也不一定包含条件覆盖(4)(4)判定判定/条件覆盖条件覆盖 选取足够多的测试用例,使选取足够多的测试用例,使判断中的每个条件的所有可能判断中的每个条件的所有可能取值至少执行一次,同时每个取值至少执行一次,同时每个判断本身的所有可能判断结果判断本身的所有可能判断结果至少执行一次至少执行一次.判定判定/条件条件 覆盖覆盖开始开始(A1)AND(B=0)(A=2)OR(X1)返回返回X=X/AX=X+1FFTTa
35、bdce满足条件满足条件:T1,T1,T2,T2 T3,T3 T4,T4测试用例测试用例 通过通过 满足的满足的 覆盖覆盖A B X 路径路径 条件条件 分支分支2 0 4 ace2 0 4 ace T1,T2,T3,T4 T1,T2,T3,T4 c c,e e2 1 1 abd2 1 1 abd T1,T2,T3,T4 T1,T2,T3,T4 b b,d d 能同时满足判定、条件两种覆盖标能同时满足判定、条件两种覆盖标准取值。准取值。测试用例测试用例 通过通过 满足的满足的 覆盖覆盖A B X A B X 路径路径 条件条件 分支分支2 0 3 ace T1,T2,T3,T4 c,e2 0
36、3 ace T1,T2,T3,T4 c,e2 1 1 abe2 1 1 abe T1,T2,T3,T4 T1,T2,T3,T4 b,e b,e1 0 3 abe1 0 3 abe T1,T2,T3,T4 b,e T1,T2,T3,T4 b,e1 1 1 abd1 1 1 abd T1,T2,T3,T4 b,d T1,T2,T3,T4 b,d (5)(5)条件组合覆盖条件组合覆盖 所有可能的条件取值组合至所有可能的条件取值组合至少执行一次少执行一次 A1,B=0 A1,B0 A1,B=0 A1,B0 A=2,X1 A=2,X1 A2,X1 A2,X1测试用例测试用例 通过通过 满足的满足的 覆盖
37、覆盖ABX 路径路径 条件条件 分支分支204204 aceace T1,T2,T3,T4 c,e T1,T2,T3,T4 c,e211211 abe abe T1,T2,T3,T4 T1,T2,T3,T4 b,e b,e102102 abd abd T1,T2,T3,T4 b,d T1,T2,T3,T4 b,d111111 abd abd T1,T2,T3,T4 b,d T1,T2,T3,T4 b,d 它是这几种覆盖标准中最强的它是这几种覆盖标准中最强的 (6)(6)路径覆盖路径覆盖 覆盖每一个可能的路径覆盖每一个可能的路径测试用例测试用例 通过通过 满足的满足的 覆盖覆盖A B X 路径路
38、径 条件条件 分支分支1 1 1 abd1 1 1 abd T1,T2,T3,T4 b,d T1,T2,T3,T4 b,d1 1 2 abe1 1 2 abe T1,T2,T3,T4 T1,T2,T3,T4 b,e b,e3 0 1 acd3 0 1 acd T1,T2,T3,T4 c,d T1,T2,T3,T4 c,d2 0 4 ace2 0 4 ace T1,T2,T3,T4 c,e T1,T2,T3,T4 c,e循环测试循环测试(1)简单循环测试n假设n是允许通过循环的最大次数,应该进行下列的测试:n跳过整个循环;n只执行循环一次;n执行循环两次;n执行循环m次,其中,mn-1;n执行循
39、环n-1,n,n+1次。(2)嵌套循环测试n如果把简单循环的方法直接用于嵌套循环,可能的测试次数会随着嵌套循环的层数的增加按几何级数增加,导致不现实的测试数目,可以进行下列的测试:n从最内层循环开始测试,把其他循环都设置为最小值;n对最内层循环使用简单测试方法,使外层循环的迭代参数取最小值(例如,循环计算器等),并且,为越界或非法值增加一些额外的测试;n由内向外,对下一个循环进行测试,保持它的所有外层循环为最小值,其他的嵌套循环取“典型”值。如此继续进行,直到测试完所有循环。(3)串接循环测试n如果串接循环的各个循环都彼此独立,则可以使用简单循环测试的方法来进行。但是,如果在两个串接循环中,第
40、一个循环的循环计算器的值是第二个循环的初始值,则这两个循环并不是独立的。这时,建议使用嵌套循环测试方法来进行。基本路径基本路径测试法测试法 通过分析由控制构造的环路的通过分析由控制构造的环路的复杂性,导出基本路径集合,从复杂性,导出基本路径集合,从而设计测试用例,保证这些路径而设计测试用例,保证这些路径至少通过一次。至少通过一次。基本路径测试步骤:基本路径测试步骤:导出程序流程图的拓扑结构导出程序流程图的拓扑结构-流图流图 (程序图程序图)计算流图计算流图G G的环路复杂度的环路复杂度V(G)V(G)确定只包含独立路径的基本路径集确定只包含独立路径的基本路径集 设计测试用例设计测试用例 导出程
41、序流程图的拓扑结构导出程序流程图的拓扑结构-流图流图1 12,32,36 64,54,57 710101111a节点节点边边R4R4区域区域1 12 23 34 45 58 87 76 69 9101111程序流程图程序流程图8 89 9R1R1R2R2R3R3计算流图计算流图G G的环路复杂度的环路复杂度V(G)V(G)V(G)=V(G)=区域个数区域个数=4=4 V(G)=V(G)=边的条数边的条数-节点个数节点个数+2=4+2=4 V(G)=V(G)=判定节点个数判定节点个数+1=4+1=4确定只包含独立路径的基本路径集确定只包含独立路径的基本路径集path1:1-11path1:1-1
42、1path2:1-2-3-4-5-10-1-11path2:1-2-3-4-5-10-1-11path3:1-2-3-6-8-9-10-1-11path3:1-2-3-6-8-9-10-1-11path4:1-2-3-6-7-9-10-1-11path4:1-2-3-6-7-9-10-1-11 一条新路径必须包含一条新边。一条新路径必须包含一条新边。这这4 4条路径组成了一个基本路径集。条路径组成了一个基本路径集。4(4(环环路复杂度路复杂度V(G)V(G)是构成这个基本路径集的独立是构成这个基本路径集的独立路径数的上界,也是设计路径数的上界,也是设计测试用例的数目。测试用例的数目。设计测试用
43、例,保证基本路径集中每条设计测试用例,保证基本路径集中每条路径的执行。路径的执行。黑盒测试的测试用例设计黑盒测试的测试用例设计等价类划分法等价类划分法 把所有可能的输入数据把所有可能的输入数据(有效的有效的和无效的和无效的)划分成若干个等价的子集划分成若干个等价的子集(称为等价类称为等价类),使得每个子集中的使得每个子集中的一个典型值在测试中的作用与这一一个典型值在测试中的作用与这一子集中所有其它值的作用相同子集中所有其它值的作用相同.可从每个子集中选取一组数据可从每个子集中选取一组数据来测试程序来测试程序例例:某报表处理系统要求用户输入处理某报表处理系统要求用户输入处理 报表的日期,日期限制
44、在报表的日期,日期限制在20012001年年1 1 月至月至20052005年年1212月,即系统只能对该月,即系统只能对该 段期间内的报表进行处理,如日期段期间内的报表进行处理,如日期 不在此范围内,则显示输入错误信不在此范围内,则显示输入错误信 息。息。系统日期规定由年、月的系统日期规定由年、月的6 6位数字位数字 字符组成,前四位代表年,后两位字符组成,前四位代表年,后两位 代表月。代表月。如何用等价类划分法设计测试用例如何用等价类划分法设计测试用例,来测试程序的日期检查功能?来测试程序的日期检查功能?如何划分等价类?如何划分等价类?有效等价类有效等价类(合理等价类合理等价类)无效等价类
45、无效等价类(不合理等价类不合理等价类)划分等价类的标准:划分等价类的标准:覆盖覆盖不相交不相交代表性代表性划分等价类的规则划分等价类的规则 (1)(1)如果如果输入输入条件规定了取值条件规定了取值范围范围,可定义可定义一个有效等价类和两个无一个有效等价类和两个无 效等价类。效等价类。例例 输入输入值是学生成绩,范围是值是学生成绩,范围是0 01001000 1000 100 有效有效等价类等价类11成绩成绩100100无效等价类无效等价类 成绩成绩100100 无效等价类无效等价类 成绩成绩00划分等价类的规则:划分等价类的规则:(2)(2)如果如果输入输入条件代表条件代表集合集合的某的某 个
46、元素个元素,则可,则可定义定义一个有效一个有效 等价类和一个无效等价类。等价类和一个无效等价类。划分等价类的规则:划分等价类的规则:(3)(3)如规定了输入数据的一组值,且如规定了输入数据的一组值,且 程序对不同输入值做不同处理,程序对不同输入值做不同处理,则每个允许的输入值是一个有则每个允许的输入值是一个有 效等价类,并有一个无效等价类效等价类,并有一个无效等价类 (所有不允许的输入值的集合所有不允许的输入值的集合)。例:输入条件说明学历可为例:输入条件说明学历可为:专科、本科、专科、本科、硕士、博士硕士、博士四种之一,则分别取这四四种之一,则分别取这四 个值作为个值作为四个有效等价类四个有
47、效等价类,另外把四,另外把四 种学历之外的任何学历作为无效等价类种学历之外的任何学历作为无效等价类划分等价类的规则:划分等价类的规则:(4)(4)如果规定了如果规定了输入输入数据数据必须遵必须遵循循的规的规 则,可则,可确定确定一个有效等价类一个有效等价类(符合符合 规则规则)和若干个无效等价类和若干个无效等价类(从不从不 同角度违反规则同角度违反规则)。(5)(5)如已划分的等价类各元素在程序中如已划分的等价类各元素在程序中 的处理方式不同,则应将此等价的处理方式不同,则应将此等价 类进一步划分成更小的等价类。类进一步划分成更小的等价类。用等价类划分法设计测试用例步骤:用等价类划分法设计测试
48、用例步骤:(1)(1)形成等价类表,每一等价类规定形成等价类表,每一等价类规定 一个唯一的编号;一个唯一的编号;(2)(2)设计一测试用例,使其尽可能多设计一测试用例,使其尽可能多 地覆盖尚未覆盖的有效等价类,地覆盖尚未覆盖的有效等价类,重复这一步骤,直到所有有效等重复这一步骤,直到所有有效等 价类均被测试用例所覆盖;价类均被测试用例所覆盖;(3)(3)设计一新测试用例,使其只覆盖设计一新测试用例,使其只覆盖 一个无效等价类,重复这一步骤一个无效等价类,重复这一步骤 直到所有无效等价类均被覆盖;直到所有无效等价类均被覆盖;第一步:等价类划分第一步:等价类划分输入输入等价类等价类 有效等价类有效
49、等价类 无效等价类无效等价类 报表日期的报表日期的类型及长度类型及长度6 6位数字位数字字符字符(1)(1)有非数字字符有非数字字符 (4)(4)少于少于6 6个个数字数字字符字符 (5)(5)多于多于6 6个个数字数字字符字符 (6)(6)年份范围年份范围在在2001200120052005之间之间 (2)(2)小于小于20012001(7)(7)大于大于2005 2005(8)(8)月份范围月份范围在在1 11212之间之间(3)(3)“报表日期报表日期”输入条件的等价类表输入条件的等价类表小于小于1 1(9)(9)大于大于12 12(10)(10)第二步:第二步:为有效等价类设计为有效等
50、价类设计测试用例测试用例 对表中对表中编号为编号为1,2,31,2,3的的3 3个有效等价类个有效等价类 用用一一个测试用例个测试用例覆盖覆盖:测试数据 期望结果 覆盖范围200105200105等价类等价类(1)(2)(3)(1)(2)(3)输入输入有效有效第第三三步:步:为每一个无效等价类至少设为每一个无效等价类至少设 计一个计一个测试用例测试用例 测试数据 期望结果 覆盖范围001001MAYMAY等价类等价类(4)(4)输入无输入无效效2001520015等价类等价类(5)(5)输入无输入无效效20010052001005等价类等价类(6)(6)输入无输入无效效200020000505