软件工程概论:第10章 软件测试

上传人:人*** 文档编号:570145501 上传时间:2024-08-02 格式:PPT 页数:247 大小:3.42MB
返回 下载 相关 举报
软件工程概论:第10章 软件测试_第1页
第1页 / 共247页
软件工程概论:第10章 软件测试_第2页
第2页 / 共247页
软件工程概论:第10章 软件测试_第3页
第3页 / 共247页
软件工程概论:第10章 软件测试_第4页
第4页 / 共247页
软件工程概论:第10章 软件测试_第5页
第5页 / 共247页
点击查看更多>>
资源描述

《软件工程概论:第10章 软件测试》由会员分享,可在线阅读,更多相关《软件工程概论:第10章 软件测试(247页珍藏版)》请在金锄头文库上搜索。

1、软件测试的重要性软件测试的重要性随着软件逐渐渗透到社会生产和生活的方方面面,软随着软件逐渐渗透到社会生产和生活的方方面面,软件的质量对于我们的影响越来越大,软件的质量就是件的质量对于我们的影响越来越大,软件的质量就是软件的生命。软件的生命。软件系统的规模和复杂性正在不断超出人类驾驭的范软件系统的规模和复杂性正在不断超出人类驾驭的范围。围。作为社会信息基础的软件呈现出脆弱和难以信任的特作为社会信息基础的软件呈现出脆弱和难以信任的特征,任何机构和个人都无法确保所开发的软件一定没征,任何机构和个人都无法确保所开发的软件一定没有问题。有问题。 2024/8/21软件测试的重要性软件测试的重要性1996

2、年年6月月4日,欧洲阿丽亚娜日,欧洲阿丽亚娜5型火箭因软件失效在型火箭因软件失效在发射发射40秒后爆炸,原因是惯性参考系统秒后爆炸,原因是惯性参考系统软件的数据转软件的数据转换异常换异常造成的失效造成的失效.2004年年12月月20日,美国空军第日,美国空军第422测试评估大队的一测试评估大队的一架架F-22战斗机因战斗机因软件问题软件问题在起飞过程中失控坠毁在起飞过程中失控坠毁. 2005年年11月月1日,东京证券交易所因日,东京证券交易所因软件升级软件升级出现系出现系统故障,导致早间股市统故障,导致早间股市“停摆停摆”.统计资料显示,在统计资料显示,在1990年到年到2000年之间,由于年

3、之间,由于软件故软件故障障导致约导致约200,000个心脏起搏器和去纤颤器等嵌入式个心脏起搏器和去纤颤器等嵌入式医疗器械被召回。医疗器械被召回。铁道部铁道部12306售票系统售票系统其他其他软件测试的重要性软件测试的重要性2002年年估计软件问题造成美国年经济损失约估计软件问题造成美国年经济损失约600亿美元,占亿美元,占GDP的的0.6%。软件产品没有软件产品没有“质保质保”,没有,没有“三包三包”。Microsoft的承诺(就间接损害不赔付责任):在的承诺(就间接损害不赔付责任):在法律所允许的最大范围内,法律所允许的最大范围内,Microsoft Corporation或其他供应商绝不就

4、因使用或不能使用本或其他供应商绝不就因使用或不能使用本“软件软件产品产品”所发生的其他损害负赔偿责任,即使所发生的其他损害负赔偿责任,即使Microsoft Corporation事先被告知该损害发生的可事先被告知该损害发生的可能性。能性。软件测试的重要性软件测试的重要性如何高效地开发可信软件系统?如何高效地开发可信软件系统?为了保证软件的质量,人们在长期的开发过程中积累为了保证软件的质量,人们在长期的开发过程中积累了许多经验并形成了许多行之有效的方法,这就是软了许多经验并形成了许多行之有效的方法,这就是软件测试技术。件测试技术。软件测试是最有效的排除和防止软件缺陷与故障的手软件测试是最有效的

5、排除和防止软件缺陷与故障的手段,并由此促进了软件测试理论与技术实践的快速发段,并由此促进了软件测试理论与技术实践的快速发展。软件测试技术职业也同步完善和健全起来。展。软件测试技术职业也同步完善和健全起来。第第10章章 软件测试软件测试10.1 软件测试概述软件测试概述10.2 软件测试过程软件测试过程10.3 软件测试方法软件测试方法10.4 纠错纠错10.5 对对OOA和和OOD模型的测试模型的测试10.6 面向对象的测试策略面向对象的测试策略10.7 OO软件的测试用例设计软件的测试用例设计10.8 其他专门环境要求的测试其他专门环境要求的测试10.1 软件测试概述软件测试概述软件测试的发

6、展历程及趋势软件测试的发展历程及趋势软件测试是伴随着软件的产生而产生的,有了软软件测试是伴随着软件的产生而产生的,有了软件的生成和运行就必然有软件测试。件的生成和运行就必然有软件测试。早期:测试等同于早期:测试等同于“调试调试”,目的是纠正软件中,目的是纠正软件中已经知道的故障,常常由软件开发人员自己完成已经知道的故障,常常由软件开发人员自己完成这部分工作。对测试的投入极少,测试介入得也这部分工作。对测试的投入极少,测试介入得也晚,常常是等到形成代码,产品已经基本完成时晚,常常是等到形成代码,产品已经基本完成时才进行测试。才进行测试。10.1 软件测试概述软件测试概述1957年:软件测试才开始

7、与调试区别开来,成为年:软件测试才开始与调试区别开来,成为一种发现软件缺陷的活动。一种发现软件缺陷的活动。 20世纪世纪80年代早期:测试不单纯是一个发现缺陷年代早期:测试不单纯是一个发现缺陷的过程,而且包含软件质量评价的内容。软件开的过程,而且包含软件质量评价的内容。软件开发人员和测试人员合作,制定了各类标准。发人员和测试人员合作,制定了各类标准。20世纪世纪90年代:测试工具终于盛行起来。年代:测试工具终于盛行起来。2002年:软件测试的进一步定义:年:软件测试的进一步定义:“测试是为了测试是为了度量和提高被测软件的质量,对测试软件进行工度量和提高被测软件的质量,对测试软件进行工程设计、实

8、施和维护的整个生命周期过程程设计、实施和维护的整个生命周期过程”。近近20年来:软件测试技术的研究也取得了很大的年来:软件测试技术的研究也取得了很大的突破。突破。10.1 软件测试概述软件测试概述软件测试软件测试的定义的定义IEEE1983:软件测试是使用人工和:软件测试是使用人工和自动手段来运行或测试某个系统的过程,其目的在于自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清楚预期结果与实际检验它是否满足规定的需求或弄清楚预期结果与实际结果之间的差别。结果之间的差别。 软件测试的目的:以最少的人力、物力和时间找出软软件测试的目的:以最少的人力、物力和时间找出软件中潜

9、在的各种错误和缺陷,通过修正各种错误和缺件中潜在的各种错误和缺陷,通过修正各种错误和缺陷提高软件质量,回避软件发布后由于潜在的软件缺陷提高软件质量,回避软件发布后由于潜在的软件缺陷和错误造成的隐患所带来的商业风险。陷和错误造成的隐患所带来的商业风险。软件测试的工作量往往占软件开发总工作量的软件测试的工作量往往占软件开发总工作量的40以以上。上。10.1 软件测试概述软件测试概述Glen Myers提出的关于软件测试的说法:提出的关于软件测试的说法:测试是为了发现程序中的错误而执行程序的过程。测试是为了发现程序中的错误而执行程序的过程。好的测试方案是尽可能发现迄今为止尚未发现的错好的测试方案是尽

10、可能发现迄今为止尚未发现的错误的测试方案。误的测试方案。成功的测试是发现了至今为止尚未发现的错误的测成功的测试是发现了至今为止尚未发现的错误的测试。试。10.1 软件测试概述软件测试概述软件测试的方法(分类)软件测试的方法(分类)按测试技术,软件测试可以分为:按测试技术,软件测试可以分为:白盒测试白盒测试 :通过对程序内部结构的分析、检测:通过对程序内部结构的分析、检测来寻找问题,即检查程序内部操作是否按规定执来寻找问题,即检查程序内部操作是否按规定执行,程序各个部分功能是否得到充分使用。行,程序各个部分功能是否得到充分使用。白盒测试又称为结构测试或逻辑驱动测试。白盒测试又称为结构测试或逻辑驱

11、动测试。 黑盒测试黑盒测试:通过软件的外部表现来发现其缺陷和:通过软件的外部表现来发现其缺陷和错误,即测试人员完全不考虑程序内部的逻辑结错误,即测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书和构和内部特性,只依据程序的需求规格说明书和用户手册,检查程序的功能是否符合它的功能说用户手册,检查程序的功能是否符合它的功能说明,以及性能是否满足用户的要求。明,以及性能是否满足用户的要求。黑盒测试又称为功能测试或数据驱动测试。黑盒测试又称为功能测试或数据驱动测试。10.1 软件测试概述软件测试概述软件测试的方法(分类)软件测试的方法(分类)按测试方式,软件测试分为:按测试方式

12、,软件测试分为:静态测试静态测试:静态分析,不执行被测试软件,而对需:静态分析,不执行被测试软件,而对需求分析说明书、软件设计说明书、源程序做结构检求分析说明书、软件设计说明书、源程序做结构检查、流程图分析等找出软件缺陷。静态测试可以人查、流程图分析等找出软件缺陷。静态测试可以人工进行分析,也可以由静态分析测试工具来自动分工进行分析,也可以由静态分析测试工具来自动分析,它将被测试程序的正文作为输入,经静态分析析,它将被测试程序的正文作为输入,经静态分析程序分析得出测试结果。程序分析得出测试结果。 动态测试动态测试:执行被测程序,通过执行结果分析软件:执行被测程序,通过执行结果分析软件可能出现的

13、缺陷。即计算机必须真正运行被测试的可能出现的缺陷。即计算机必须真正运行被测试的程序,通过输入测试用例,对其运行情况即输入与程序,通过输入测试用例,对其运行情况即输入与输出的对应关系进行分析,以达到检测的目的。输出的对应关系进行分析,以达到检测的目的。 10.1 软件测试概述软件测试概述软件测试的方法(分类)软件测试的方法(分类)按测试阶段分,软件测试分为按测试阶段分,软件测试分为:(:(测试阶段的说明以测试阶段的说明以ppt为准为准)单元测试单元测试:又称为模块测试,对软件设计的最小:又称为模块测试,对软件设计的最小单元单元模块进行正确性检验的测试工作。模块进行正确性检验的测试工作。目的:主要

14、是测试模块在语法、格式和逻辑上目的:主要是测试模块在语法、格式和逻辑上的缺陷。的缺陷。集成测试集成测试:又称为组装:又称为组装/联合测试,按设计要求联合测试,按设计要求把通过单元测试的各个模块组装在一起之后所进把通过单元测试的各个模块组装在一起之后所进行的测试。行的测试。目的:检查模块间的接口关系,以便发现与接目的:检查模块间的接口关系,以便发现与接口有关的各种缺陷。口有关的各种缺陷。10.1 软件测试概述软件测试概述软件测试的方法(分类)软件测试的方法(分类)按测试阶段分,软件测试分为:按测试阶段分,软件测试分为:系统测试系统测试:将已经集成好的软件系统置于实际运行:将已经集成好的软件系统置

15、于实际运行环境中所进行的测试。环境中所进行的测试。目的:根据需求分析时确定的标准检验软件是否满目的:根据需求分析时确定的标准检验软件是否满足功能、行为、性能和系统协调性等方面的要求。足功能、行为、性能和系统协调性等方面的要求。验收测试验收测试:又称为确认测试,是软件开发结束后,:又称为确认测试,是软件开发结束后,用户对软件产品投入实际应用前,进行的最后一次用户对软件产品投入实际应用前,进行的最后一次质量检验活动。它要回答开发的软件产品是否符合质量检验活动。它要回答开发的软件产品是否符合预期的各项要求,以及用户能否接受的问题。包括预期的各项要求,以及用户能否接受的问题。包括测试和测试和测试测试目

16、的:验证软件功能的正确性和需求的符合性。目的:验证软件功能的正确性和需求的符合性。10.1 软件测试概述软件测试概述补充:补充:回归测试回归测试回归测试的定义回归测试的定义是指软件系统被修改或扩充后重新进行的测试是指软件系统被修改或扩充后重新进行的测试软件增加了新的功能,软件增加了新的功能,软件中的缺陷被修正,软件中的缺陷被修正,软件系统运行环境改变软件系统运行环境改变是为了保证对软件所做的修改正确,且没有引入是为了保证对软件所做的修改正确,且没有引入新的错误而重复进行的测试新的错误而重复进行的测试10.1 软件测试概述软件测试概述回归测试的必要性回归测试的必要性每当软件增加了新的功能,或者软

17、件中的缺陷被修每当软件增加了新的功能,或者软件中的缺陷被修正,这些变更都有可能影响软件原有的功能和结构正,这些变更都有可能影响软件原有的功能和结构为了防止软件的变更产生无法预料的副作用,不仅为了防止软件的变更产生无法预料的副作用,不仅要对内容进行测试,还要重复进行过去已经进行过要对内容进行测试,还要重复进行过去已经进行过的测试,以证明修改没有引起未曾预料的后果,或的测试,以证明修改没有引起未曾预料的后果,或证明修改后的软件仍能满足具体的需求证明修改后的软件仍能满足具体的需求在理想的测试环境中,程序每改变一次,测试人员在理想的测试环境中,程序每改变一次,测试人员都要重新执行回归测试。都要重新执行

18、回归测试。回归测试需要反复进行回归测试需要反复进行 10.1 软件测试概述软件测试概述回归测试的范围回归测试的范围在回归测试范围的选择上,一个最简单的方法是在回归测试范围的选择上,一个最简单的方法是每次回归执行所有在前期测试阶段建立的测试,每次回归执行所有在前期测试阶段建立的测试,来确认问题修改的正确性,及没有造成对其他功来确认问题修改的正确性,及没有造成对其他功能的不利影响能的不利影响常用的用例选择方法可以分为以下常用的用例选择方法可以分为以下3种种局限在修改范围内的测试局限在修改范围内的测试在受影响功能范围内回归在受影响功能范围内回归根据一定的覆盖率指标选择回归测试根据一定的覆盖率指标选择

19、回归测试10.1 软件测试概述软件测试概述软件测试的方法(分类)软件测试的方法(分类)按测试实施组织,软件测试可分为:按测试实施组织,软件测试可分为:开发方测试开发方测试:又称为内部测试,主要指在软件开发完:又称为内部测试,主要指在软件开发完成后,开发方要对提交的软件进行全面的自我检查与成后,开发方要对提交的软件进行全面的自我检查与验证,验证软件的实现是否满足软件需求说明的要求。验证,验证软件的实现是否满足软件需求说明的要求。(例如,(例如,测试)测试)用户方测试用户方测试 :是在用户的应用环境下,由用户通过:是在用户的应用环境下,由用户通过运行和使用软件,验证软件实现是否符合自己期望的运行和

20、使用软件,验证软件实现是否符合自己期望的要求。由用户找出软件的应用中发现的问题与缺陷,要求。由用户找出软件的应用中发现的问题与缺陷,并对使用质量进行评价。(例如,并对使用质量进行评价。(例如, 测试)测试)第三方测试第三方测试:又称为独立测试,由在技术、管理和财:又称为独立测试,由在技术、管理和财务上和开发方和用户方相对独立的组织进行的测试。务上和开发方和用户方相对独立的组织进行的测试。软件质量工程强调开展独立的验证和确认工作。软件质量工程强调开展独立的验证和确认工作。10.1 软件测试概述软件测试概述软件测试与软件开发各阶段的关系软件测试与软件开发各阶段的关系开发过程是自顶向下、逐步细化的过

21、程。测试过程则开发过程是自顶向下、逐步细化的过程。测试过程则是自底向上、逐步集成的过程。是自底向上、逐步集成的过程。单元和集成测试应检测程序的执行是否满足软件单元和集成测试应检测程序的执行是否满足软件设计的要求;设计的要求;系统测试应检测系统功能、性能的质量特性是否系统测试应检测系统功能、性能的质量特性是否达到系统要求的指标;达到系统要求的指标;验收测试确定软件的实现是否满足用户需求或合验收测试确定软件的实现是否满足用户需求或合同的要求。同的要求。10.1 软件测试概述软件测试概述测试过程模型:测试过程模型:V模型模型特点:实现了测试设计和测试执行相分离,揭示特点:实现了测试设计和测试执行相分

22、离,揭示了软件测试活动分层和分阶段的本质特性,测试了软件测试活动分层和分阶段的本质特性,测试执行的顺序与开发活动相反(对应关系)执行的顺序与开发活动相反(对应关系)10.1 软件测试概述软件测试概述测试活动的时间安排测试活动的时间安排10.1 软件测试概述软件测试概述回归测试和回归测试和V模型之间的关系模型之间的关系10.1 软件测试概述软件测试概述测试信息流测试信息流测试过程需要的输入测试过程需要的输入软件配置软件配置测试配置测试配置测试工具测试工具测试之后,用实测结果与预期结果进行比较。如发现测试之后,用实测结果与预期结果进行比较。如发现出错的数据,就要进行调试。对已经发现的错误进行出错的

23、数据,就要进行调试。对已经发现的错误进行错误定位和确定出错性质,并纠正这些错误,同时修错误定位和确定出错性质,并纠正这些错误,同时修改相关的文档。修正后的文档一般都要经过再次测试,改相关的文档。修正后的文档一般都要经过再次测试,直到通过测试为止(回归测试)直到通过测试为止(回归测试) 。10.1 软件测试概述软件测试概述软件测试中使用的各种术语软件测试中使用的各种术语软件错误:软件错误:在软件生存期内的不希望或不可接受的在软件生存期内的不希望或不可接受的人为错误人为错误。其结果是其结果是导致软件缺陷导致软件缺陷的产生。的产生。 软件缺陷:软件缺陷:存在于软件(文档、数据、程序)之中的那些不希存

24、在于软件(文档、数据、程序)之中的那些不希望或不可接受的望或不可接受的偏差偏差。其结果是软件运行于某一特定条件时其结果是软件运行于某一特定条件时出现软件故障出现软件故障,即缺陷被激活。即缺陷被激活。 10.1 软件测试概述软件测试概述软件故障软件故障软件运行时过程中出现的一种不希望或不可接受软件运行时过程中出现的一种不希望或不可接受的的内部状态内部状态。软件故障将软件故障将触发软件失效触发软件失效。 软件失效软件失效软件运行时产生的一种不希望或不可接受的软件运行时产生的一种不希望或不可接受的外部外部行为结果行为结果。相互关系:相互关系:软件错误软件错误软件缺陷软件缺陷软件故障软件故障软件失效软

25、件失效10.1 软件测试概述软件测试概述软件缺陷软件缺陷:软件在生命周期各个阶段存在的一种不满:软件在生命周期各个阶段存在的一种不满足给定需求属性的问题。足给定需求属性的问题。缺陷(缺陷(Bug)不等于失效()不等于失效(Failure)软件缺陷是由很多原因造成的,软件缺陷是由很多原软件缺陷是由很多原因造成的,软件缺陷是由很多原因造成的,需求规格说明书是软件缺陷出现最多的地因造成的,需求规格说明书是软件缺陷出现最多的地方,其次是设计、编码。方,其次是设计、编码。10.1 软件测试概述软件测试概述错误(缺陷)分类错误(缺陷)分类1.按错误的影响和后果分类按错误的影响和后果分类较小错误较小错误中等

26、错误中等错误较严重错误较严重错误严重错误严重错误非常严重的错误非常严重的错误最严重的错误最严重的错误10.1 软件测试概述软件测试概述2.按错误的性质和范围分类按错误的性质和范围分类功能错误:规格说明错误、功能错误、测试错误、功能错误:规格说明错误、功能错误、测试错误、测试标准引起的错误测试标准引起的错误系统错误:外部接口错误、内部接口错误、硬件结系统错误:外部接口错误、内部接口错误、硬件结构错误、操作系统错误、软件结构错误、控制与顺构错误、操作系统错误、软件结构错误、控制与顺序错误、资源管理错误序错误、资源管理错误加工错误:算术与操作错误、初始化错误、控制和加工错误:算术与操作错误、初始化错

27、误、控制和次序错误、静态逻辑错误次序错误、静态逻辑错误数据错误:动态数据错误、静态数据错误、数据内数据错误:动态数据错误、静态数据错误、数据内容错误、数据结构错误、数据属性错误容错误、数据结构错误、数据属性错误代码错误:主要包括语法错误、打字错误、对语句代码错误:主要包括语法错误、打字错误、对语句或指令不正确理解所产生的错误。或指令不正确理解所产生的错误。10.1 软件测试概述软件测试概述3.按软件生存期阶段分类按软件生存期阶段分类问题定义错误问题定义错误规格说明错误:不一致性错误、冗余性错误、不完规格说明错误:不一致性错误、冗余性错误、不完整性错误、不可行错误、不可测试错误整性错误、不可行错

28、误、不可测试错误设计错误:设计不完全错误、算法错误、模块接口设计错误:设计不完全错误、算法错误、模块接口错误、控制逻辑错误、数据结构错误错误、控制逻辑错误、数据结构错误编码错误:数据说明错误、数据使用错误、计算错编码错误:数据说明错误、数据使用错误、计算错误、比较错误、控制流错误、界面错误、输入输误、比较错误、控制流错误、界面错误、输入输出错误及其他错误等出错误及其他错误等10.1 软件测试概述软件测试概述软件测试的原则(经验):软件测试的原则(经验):经验经验1、尽量由独立的测试人员进行测试、尽量由独立的测试人员进行测试 程序开发者在测试自己的程序时存在的弊病。程序开发者在测试自己的程序时存

29、在的弊病。应由独立的第三方来构造测试。应由独立的第三方来构造测试。经验经验2、关键是注重测试用例的设计、关键是注重测试用例的设计 测试工作的核心应该是测试用例的设计工作,而不是测试工作的核心应该是测试用例的设计工作,而不是测试用例的执行,正如软件开发过程一样,软件开发测试用例的执行,正如软件开发过程一样,软件开发的关键是软件系统的设计,而不是编码。的关键是软件系统的设计,而不是编码。测试用例应由测试输入数据和与之对应的预期输出结测试用例应由测试输入数据和与之对应的预期输出结果这两部分组成。兼顾合理的输入和不合理的输入数果这两部分组成。兼顾合理的输入和不合理的输入数据。据。10.1 软件测试概述

30、软件测试概述软件测试的原则(经验):软件测试的原则(经验):经验经验3、测试中的、测试中的群集现象群集现象应当被充分的重视应当被充分的重视 经验表明,一段程序中若发现缺陷的数量越多,则此段经验表明,一段程序中若发现缺陷的数量越多,则此段程序中残存的缺陷数量越多。程序中残存的缺陷数量越多。10.1 软件测试概述软件测试概述经验经验4、完全的测试是不可能的、完全的测试是不可能的包含所有可能情况的测试称为穷尽测试,对于实际程包含所有可能情况的测试称为穷尽测试,对于实际程序而言,穷尽测试通常是不可能做到的。序而言,穷尽测试通常是不可能做到的。测试只能查找出程序中的缺陷,不能证明程序中没有测试只能查找出

31、程序中的缺陷,不能证明程序中没有缺陷。缺陷。(不可能发现程序中的所有缺陷)(不可能发现程序中的所有缺陷)原因:软件太复杂,资源不容许等等。原因:软件太复杂,资源不容许等等。测试需要终止。测试需要终止。措施:需要根据实际情况来决定资源的分配,对措施:需要根据实际情况来决定资源的分配,对测试程度和范围进行有效的控制,只有这样才能测试程度和范围进行有效的控制,只有这样才能投入最少的成本获得最大的回报。投入最少的成本获得最大的回报。10.1 软件测试概述软件测试概述软软件件缺缺陷陷故故障障数数量量测试工作量测试工作量测试中测试中测试后测试后测试费用测试费用遗漏缺陷数目遗漏缺陷数目优化测试量优化测试量1

32、0.1 软件测试概述软件测试概述软件测试的原则(经验):软件测试的原则(经验):经验经验5、修复缺陷后,一定要进行回归测试。、修复缺陷后,一定要进行回归测试。缺陷关联现象缺陷关联现象:某个缺陷会因为其他缺陷而出现或消:某个缺陷会因为其他缺陷而出现或消失。失。经验经验6 :不能修复所有的软件故障:不能修复所有的软件故障原因:没有足够的资源进行修复;修复的风险较大;原因:没有足够的资源进行修复;修复的风险较大;不值得修复。不值得修复。结论:关键是要进行正确的判断、合理的取舍,根据结论:关键是要进行正确的判断、合理的取舍,根据风险分析决定哪些故障必须修复,哪些故障可以不修风险分析决定哪些故障必须修复

33、,哪些故障可以不修复。复。 10.1 软件测试概述软件测试概述软件测试的原则(经验):软件测试的原则(经验):其他经验:其他经验:软件测试的目标在于揭示缺陷。测试人员要始终软件测试的目标在于揭示缺陷。测试人员要始终站在用户的角度去看问题。站在用户的角度去看问题。软件测试必须基于软件测试必须基于“质量第一质量第一”的思想去开展各的思想去开展各项工作。项工作。所有的测试都应追溯到用户需求。所有的测试都应追溯到用户需求。事先定义好产品的质量标准。只有建立了质量标事先定义好产品的质量标准。只有建立了质量标准,才能根据测试的结果,对产品的质量进行分准,才能根据测试的结果,对产品的质量进行分析和评估。析和

34、评估。10.1 软件测试概述软件测试概述软件测试的原则(经验):软件测试的原则(经验):其他经验:其他经验:软件项目一启动,软件测试也就开始,而不是等软件项目一启动,软件测试也就开始,而不是等程序写完,才开始进行测试。程序写完,才开始进行测试。应当把应当把“尽早地和不断地进行软件测试尽早地和不断地进行软件测试”作为软作为软件测试者的座右铭。件测试者的座右铭。pareto原则原则:测试发现的缺陷中:测试发现的缺陷中80%很可能起源很可能起源于于20%的模块中。应孤立这些疑点模块,进行重的模块中。应孤立这些疑点模块,进行重点测试。点测试。要严格执行测试计划,尽量避免测试的随意性。要严格执行测试计划

35、,尽量避免测试的随意性。妥善保存测试计划、测试用例、出错统计和最终妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。分析报告,为维护提供方便。10.2 软件测试过程软件测试过程1、单元测试单元测试单元即软件设计的最小单位,又称为模块。单元即软件设计的最小单位,又称为模块。单元具有一些基本属性,如:明确的功能、规格定义,单元具有一些基本属性,如:明确的功能、规格定义,与其他部分明确的接口定义等,可以清晰地与同一程与其他部分明确的接口定义等,可以清晰地与同一程序的其他部分划分开来。序的其他部分划分开来。在结构化编程语言中,一个函数就是一个单元。在结构化编程语言中,一个函数就是一个

36、单元。在面向对象语言中,一个类或者一个类方法就是在面向对象语言中,一个类或者一个类方法就是一个单元。一个单元。目前,在某种意义上单元的概念已经扩展为组件目前,在某种意义上单元的概念已经扩展为组件(component)。)。10.2 软件测试过程软件测试过程什么是单元测试?什么是单元测试?单元测试是对软件基本组成单元进行测试。检验单元测试是对软件基本组成单元进行测试。检验程序最小单元(具有基本属性)的实现是否和该程序最小单元(具有基本属性)的实现是否和该单元的说明一致,有无错误。单元的说明一致,有无错误。单元测试是一种细粒度的测试。单元测试是一种细粒度的测试。何时进行单元测试?何时进行单元测试?

37、单元测试常常是和代码编写工作同时进行的,在单元测试常常是和代码编写工作同时进行的,在完成了程序编写、复查和语法正确性验证后,就完成了程序编写、复查和语法正确性验证后,就应进行单元测试用例设计应进行单元测试用例设计 。单元测试的意义:尽早发现错误,错误发现越早,成单元测试的意义:尽早发现错误,错误发现越早,成本越低。本越低。10.2 软件测试过程软件测试过程单元测试的主要任务单元测试的主要任务单元测试针对每个程序的模块,主要测试单元测试针对每个程序的模块,主要测试5个方面个方面的问题:的问题:模块接口、局部数据结构、边界条件、模块接口、局部数据结构、边界条件、独立的路径、错误处理独立的路径、错误

38、处理。模块模块模块接口模块接口局部数据结构局部数据结构路径测试路径测试出错处理出错处理边界条件边界条件10.2 软件测试过程软件测试过程模块接口模块接口对模块接口进行的测试,检查进出程序单元的数据流是对模块接口进行的测试,检查进出程序单元的数据流是否正确。否正确。模块接口测试是单元测试的基础。只有在数据能正确流模块接口测试是单元测试的基础。只有在数据能正确流入、流出模块的前提下,其他测试才有意义。模块接口入、流出模块的前提下,其他测试才有意义。模块接口测试必须在任何其它测试之前进行。测试必须在任何其它测试之前进行。模块接口测试至少需要如下的测试项目:调用所测模块模块接口测试至少需要如下的测试项

39、目:调用所测模块时的输入参数与模块的形式参数在个数、属性、顺序上时的输入参数与模块的形式参数在个数、属性、顺序上是否匹配;调用子模块时,它输入给子模块的参数与子是否匹配;调用子模块时,它输入给子模块的参数与子模块中的形式参数在个数、属性、顺序上是否匹配;是模块中的形式参数在个数、属性、顺序上是否匹配;是否修改了只做输入用的形式参数;调用标准函数的参数否修改了只做输入用的形式参数;调用标准函数的参数在个数、属性、顺序上是否正确;全局变量的定义在各在个数、属性、顺序上是否正确;全局变量的定义在各模块中是否一致。模块中是否一致。10.2 软件测试过程软件测试过程局部数据结构局部数据结构在模块工作过程

40、中,必须测试模块内部的数据能在模块工作过程中,必须测试模块内部的数据能否保持完整性,包括内部数据的内容、形式及相否保持完整性,包括内部数据的内容、形式及相互关系不发生错误。互关系不发生错误。局部数据结构往往是错误的根源。对于局部数据局部数据结构往往是错误的根源。对于局部数据结构,应该在单元测试中注意发现以下几类错误:结构,应该在单元测试中注意发现以下几类错误:不正确的或不一致的类型说明;错误的初始化或不正确的或不一致的类型说明;错误的初始化或默认值;错误的变量名,如拼写错误或书写错误;默认值;错误的变量名,如拼写错误或书写错误;下溢、上溢或者地址错误。下溢、上溢或者地址错误。10.2 软件测试

41、过程软件测试过程路径测试路径测试在单元测试中,最主要的测试是针对路径的测试。在单元测试中,最主要的测试是针对路径的测试。测试用例必须能够发现由于计算错误、不正确的判测试用例必须能够发现由于计算错误、不正确的判定或不正常的控制流而产生的错误。定或不正常的控制流而产生的错误。常见的错误有:误解的或不正确的算术优先级;混常见的错误有:误解的或不正确的算术优先级;混合模式的运算;错误的初始化;精确度不够精确;合模式的运算;错误的初始化;精确度不够精确;表达式的不正确符号表示。表达式的不正确符号表示。针对判定和条件覆盖,测试用例还要能够发现如下针对判定和条件覆盖,测试用例还要能够发现如下错误:不同数据类

42、型的比较;不正确的逻辑操作或错误:不同数据类型的比较;不正确的逻辑操作或优先级;应当相等的地方由于精确度的错误而不能优先级;应当相等的地方由于精确度的错误而不能相等;不正确的判定或不正确的变量;不正确的或相等;不正确的判定或不正确的变量;不正确的或不存在的循环终止;当遇到分支循环时不能退出;不存在的循环终止;当遇到分支循环时不能退出;不适当地修改循环变量。不适当地修改循环变量。10.2 软件测试过程软件测试过程边界条件边界条件采用边界值分析方法来设计测试用例,认真仔细地测试采用边界值分析方法来设计测试用例,认真仔细地测试为限制数据处理而设置的边界处,看模块是否能够正常为限制数据处理而设置的边界

43、处,看模块是否能够正常工作。工作。一些可能与边界有关的数据类型如数值、字符、位置、一些可能与边界有关的数据类型如数值、字符、位置、数量、尺寸等,还要注意这些边界的首个、最后一个、数量、尺寸等,还要注意这些边界的首个、最后一个、最大值、最小值、最长、最短、最高、最低等特征。最大值、最小值、最长、最短、最高、最低等特征。在边界条件测试中,应设计测试用例检查以下情况:在在边界条件测试中,应设计测试用例检查以下情况:在n次循环的第次循环的第0次、次、1次、次、n次是否有错误;运算或判断中次是否有错误;运算或判断中取最大值、最小值时是否有错误;数据流、控制流中刚取最大值、最小值时是否有错误;数据流、控制

44、流中刚好等于、大于、小于确定的比较值是否出现错误。好等于、大于、小于确定的比较值是否出现错误。10.2 软件测试过程软件测试过程出错处理出错处理一个好的设计应能预见各种出错条件,并预设各种出一个好的设计应能预见各种出错条件,并预设各种出错处理通路。错处理通路。测试出错处理的重点是模块在工作中发生了错误,其测试出错处理的重点是模块在工作中发生了错误,其中的出错处理设施是否有效。中的出错处理设施是否有效。检验程序中的出错处理可能面对的情况有:对运行发检验程序中的出错处理可能面对的情况有:对运行发生的错误描述难以理解;所报告的错误与实际遇到的生的错误描述难以理解;所报告的错误与实际遇到的错误不一致;

45、出错后,在错误处理之前就引起系统的错误不一致;出错后,在错误处理之前就引起系统的干预;例外条件的处理不正确;提供的错误信息不足,干预;例外条件的处理不正确;提供的错误信息不足,以至于无法找到错误的原因。以至于无法找到错误的原因。10.2 软件测试过程软件测试过程在单元测试时,如果模块不是独立的程序,要考虑它在单元测试时,如果模块不是独立的程序,要考虑它和外界的联系,需要设置一些辅助测试模块。辅助测和外界的联系,需要设置一些辅助测试模块。辅助测试模块有两种:试模块有两种:驱动模块驱动模块(Drive) :用来模拟被测试模块的上:用来模拟被测试模块的上一级模块,相当于被测模块的主程序。它接收数一级

46、模块,相当于被测模块的主程序。它接收数据,将相关数据传送给被测模块,启动被测模块,据,将相关数据传送给被测模块,启动被测模块,并打印出相应的结果。并打印出相应的结果。桩模块桩模块(Stub) (又称存根模块或连接模块)(又称存根模块或连接模块) :用以代替被测模块所调用的子模块,相当于被测用以代替被测模块所调用的子模块,相当于被测模块工作过程中所调用的模块。模块工作过程中所调用的模块。10.2 软件测试过程软件测试过程被测模块、与被测模块相关的驱动模块和桩模块共同被测模块、与被测模块相关的驱动模块和桩模块共同构成了一个测试环境。构成了一个测试环境。驱动模块和桩模块都是额外的开销,虽然在单元测试

47、驱动模块和桩模块都是额外的开销,虽然在单元测试中必须编写,但并不需要作为最终的产品提供给用户。中必须编写,但并不需要作为最终的产品提供给用户。 测试用例测试用例被测模块被测模块驱动模块驱动模块测试结果测试结果桩模块桩模块1桩模块桩模块2桩模块桩模块3桩模块桩模块n桩模块桩模块10.2 软件测试过程软件测试过程2、集成测试集成测试什么是集成测试?什么是集成测试?集成测试是在单元测试的基础上,将所有模块按集成测试是在单元测试的基础上,将所有模块按照概要设计要求组装成为子系统或系统所进行的照概要设计要求组装成为子系统或系统所进行的测试。测试。集成测试又称组装测试、联合测试、部件测试集成测试又称组装测

48、试、联合测试、部件测试10.2 软件测试过程软件测试过程集成测试的主要任务:解决以下集成测试的主要任务:解决以下5个方面的测试问题个方面的测试问题将各模块连接起来,检查模块相互调用时,数据将各模块连接起来,检查模块相互调用时,数据经过接口是否丢失。经过接口是否丢失。将各个子功能组合起来,检查能否达到预期要求将各个子功能组合起来,检查能否达到预期要求的各项功能。的各项功能。一个模块的功能是否会对另一个模块的功能产生一个模块的功能是否会对另一个模块的功能产生不利的影响。不利的影响。全局数据结构是否有问题,会不会被异常修改。全局数据结构是否有问题,会不会被异常修改。单个模块的误差积累起来,是否被放大

49、,从而达单个模块的误差积累起来,是否被放大,从而达到不可接受的程度。到不可接受的程度。10.2 软件测试过程软件测试过程把模块组装成为系统的方式(把模块组装成为系统的方式(集成策略集成策略):):一次性集成方式一次性集成方式(整体拼装,(整体拼装,非增量式非增量式集成)集成)大爆炸集成大爆炸集成 Big bang integration 增殖式集成方式增殖式集成方式(增量式增量式集成)集成)自顶向下集成自顶向下集成 Top down integration 自底向上集成自底向上集成 Bottom up integration三明治集成三明治集成 Sandwich integration10.2

50、 软件测试过程软件测试过程大爆炸集成大爆炸集成 Big bang integration先对每一个子模块进行测试(单元测试阶段),先对每一个子模块进行测试(单元测试阶段),然后将所有模块一次性的全部集成起来进行集成然后将所有模块一次性的全部集成起来进行集成测试测试 。(整体拼装)。(整体拼装)10.2 软件测试过程软件测试过程优点:优点:可以并行测试所有模块。可以并行测试所有模块。需要的测试用例数目少。需要的测试用例数目少。测试方法简单、易行。测试方法简单、易行。缺点缺点由于不可避免存在模块间接口、全局数据结构等由于不可避免存在模块间接口、全局数据结构等方面的问题,所以一次运行成功的可能性不大

51、。方面的问题,所以一次运行成功的可能性不大。如果一次集成的模块数量多,集成测试后可能会如果一次集成的模块数量多,集成测试后可能会出现大量的错误。另外,修改了一处错误之后,出现大量的错误。另外,修改了一处错误之后,很可能新增更多的新错误,新旧错误混杂,给程很可能新增更多的新错误,新旧错误混杂,给程序的错误定位与修改带来很大的麻烦。序的错误定位与修改带来很大的麻烦。即使集成测试通过,也会遗漏很多错误。即使集成测试通过,也会遗漏很多错误。 10.2 软件测试过程软件测试过程自顶向下集成(自顶向下集成(Top down integration )逐步集成和逐步测试是按照结构图自上而下进行逐步集成和逐步

52、测试是按照结构图自上而下进行的。的。模块集成的顺序是首先集成主控模块(主程序),模块集成的顺序是首先集成主控模块(主程序),然后依照控制层次结构向下进行集成。然后依照控制层次结构向下进行集成。从属于主控模块的模块按深度优先方式(纵向)从属于主控模块的模块按深度优先方式(纵向)或者广度优先方式(横向)集成到结构中去。或者广度优先方式(横向)集成到结构中去。10.2 软件测试过程软件测试过程自顶向下集成的两种形式自顶向下集成的两种形式深度优先深度优先方式的集成:首先集成在结构中的一个方式的集成:首先集成在结构中的一个主控路径下的所有模块,主控路径的选择是任意主控路径下的所有模块,主控路径的选择是任

53、意的。的。 广度优先广度优先方式的集成:首先沿着水平方向,把每方式的集成:首先沿着水平方向,把每一层中所有直接隶属于上一层的模块集成起来,一层中所有直接隶属于上一层的模块集成起来,直到底层。直到底层。10.2 软件测试过程软件测试过程集成测试的整个过程由集成测试的整个过程由3个步骤完成:个步骤完成:主控模块作为测试驱动器,把对主控模块进行单元主控模块作为测试驱动器,把对主控模块进行单元测试时引入的被调用模拟子模块用实际模块替代。测试时引入的被调用模拟子模块用实际模块替代。根据集成的方式(深度或广度),下层的桩模块一根据集成的方式(深度或广度),下层的桩模块一次一次地被替换为真正的模块。次一次地

54、被替换为真正的模块。在每个模块被集成时,都必须进行单元测试。在每个模块被集成时,都必须进行单元测试。重复第重复第2步,直到整个系统被测试完成。步,直到整个系统被测试完成。10.2 软件测试过程软件测试过程 A B C D E F A S1 S2 S3 A B C D S4 S5 A B C D E F(1)(2)(3)广度优先方式广度优先方式10.2 软件测试过程软件测试过程 A B C D E F A S1 S2 S3 A B S2 S3 E A B C S3 E(1)(2)(3)深度优先方式深度优先方式(4)10.2 软件测试过程软件测试过程深度优先:M1, M2, M5, M8, M6,

55、 M3, M7, M4广度优先:M1, M2, M3, M4, M5, M6, M7, M810.2 软件测试过程软件测试过程优点优点测试和集成可以较早开始测试和集成可以较早开始减少了驱动器的开发减少了驱动器的开发如果底层接口未定义或可能修改,则可以避免提如果底层接口未定义或可能修改,则可以避免提交不稳定的接口交不稳定的接口缺点缺点桩的开发代价较大桩的开发代价较大在底层模块中一个无法预料的需求可能迫使顶层在底层模块中一个无法预料的需求可能迫使顶层模块的修改模块的修改要充分测试底层模块可能比较困难要充分测试底层模块可能比较困难10.2 软件测试过程软件测试过程自底向上集成自底向上集成 Botto

56、m up integration逐步集成和逐步测试的工作是按结构图自下而上进逐步集成和逐步测试的工作是按结构图自下而上进行的,即从程序模块结构的最底层模块开始集成和行的,即从程序模块结构的最底层模块开始集成和测试。测试。由于是从最底层开始集成,对于一个给定层次的模由于是从最底层开始集成,对于一个给定层次的模块,它的子模块(包括子模块的所有下属模块)已块,它的子模块(包括子模块的所有下属模块)已经集成并测试完成,所以不再需要使用桩模块进行经集成并测试完成,所以不再需要使用桩模块进行辅助测试。在模块的测试过程中需要从子模块得到辅助测试。在模块的测试过程中需要从子模块得到的信息可以直接运行子模块得到

57、。的信息可以直接运行子模块得到。10.2 软件测试过程软件测试过程集成测试的整个过程由集成测试的整个过程由3个步骤完成:个步骤完成:从最底层的模块开始,按结构图自下而上逐步进行从最底层的模块开始,按结构图自下而上逐步进行集成和测试(形成子功能的族)。集成和测试(形成子功能的族)。依照所选用的模块集成策略,将驱动模块依照所选用的模块集成策略,将驱动模块 用实际模用实际模块代替。块代替。在每个模块被集成时,都必须立即进行一遍测试在每个模块被集成时,都必须立即进行一遍测试重复第重复第2步,直到整个系统被测试完成。步,直到整个系统被测试完成。10.2 软件测试过程软件测试过程10.2 软件测试过程软件

58、测试过程优点优点无需构造桩模块,桩模块往往千差万别。无需构造桩模块,桩模块往往千差万别。驱动模块具有某种统一性,且随着测试层次的提驱动模块具有某种统一性,且随着测试层次的提供,驱动模块数量减少。供,驱动模块数量减少。涉及复杂算法和真正输入、输出的模块一般在底涉及复杂算法和真正输入、输出的模块一般在底层,且是较易出错的模块。可以尽早发现错误。层,且是较易出错的模块。可以尽早发现错误。各子树的集成和测试可以并行。各子树的集成和测试可以并行。 缺点缺点驱动器的开发成本大驱动器的开发成本大高层模块的可操作性和互操作性测试得不充分高层模块的可操作性和互操作性测试得不充分10.2 软件测试过程软件测试过程

59、三明治集成三明治集成 Sandwich integration(混合集成)(混合集成)三明治集成是一种混合增殖式测试策略,综合了三明治集成是一种混合增殖式测试策略,综合了自顶向下和自底向上两种集成方法,把系统划分自顶向下和自底向上两种集成方法,把系统划分成三层,中间一层为目标层,目标层上采用自顶成三层,中间一层为目标层,目标层上采用自顶向下集成,目标层下采用自底向上集成。向下集成,目标层下采用自底向上集成。目的:综合利用自顶向下和自底向上两种集成测试策目的:综合利用自顶向下和自底向上两种集成测试策略的优点略的优点10.2 软件测试过程软件测试过程三明治集成方法三明治集成方法10.2 软件测试过

60、程软件测试过程优点:优点:将自顶向下和自底向上的集成方法有机地结合起将自顶向下和自底向上的集成方法有机地结合起来,不需要写桩程序因为在测试初自底向上集成来,不需要写桩程序因为在测试初自底向上集成已经验证了底层模块的正确性。已经验证了底层模块的正确性。缺点:缺点:在真正集成之前每一个独立的模块没有完全测试在真正集成之前每一个独立的模块没有完全测试过。过。10.2 软件测试过程软件测试过程改进的三明治集成方法:不仅自两头向中间集成,而改进的三明治集成方法:不仅自两头向中间集成,而且保证每个模块得到单独的测试,使测试进行得比较且保证每个模块得到单独的测试,使测试进行得比较彻底。彻底。10.2 软件测

61、试过程软件测试过程改进的三明治集成方法改进的三明治集成方法10.2 软件测试过程软件测试过程3、系统测试系统测试什么是系统测试?什么是系统测试?系统测试是将集成好的软件系统,作为整个基于计系统测试是将集成好的软件系统,作为整个基于计算机系统的一个元素,与计算机硬件、外设、支持算机系统的一个元素,与计算机硬件、外设、支持软件、数据等其它系统元素结合在一起,在实际运软件、数据等其它系统元素结合在一起,在实际运行(使用)环境下所进行的一系列测试活动。行(使用)环境下所进行的一系列测试活动。在软件需求规格说明书中描述了全部用户可见的软件在软件需求规格说明书中描述了全部用户可见的软件属性,它包含的信息就

62、是软件系统测试的基础。属性,它包含的信息就是软件系统测试的基础。系统测试的目的系统测试的目的通过与系统的需求定义比较,检查软件是否存在与通过与系统的需求定义比较,检查软件是否存在与系统定义不符合或与之矛盾的地方,以验证软件系系统定义不符合或与之矛盾的地方,以验证软件系统的功能和性能等满足其规约所指定的要求。统的功能和性能等满足其规约所指定的要求。10.2 软件测试过程软件测试过程系统测试与集成测试的区别系统测试与集成测试的区别集成测试的测试对象是模块间的接口,其目的是集成测试的测试对象是模块间的接口,其目的是找出模块接口上和体系结构上的问题,测试依据找出模块接口上和体系结构上的问题,测试依据来

63、源于系统的详细设计来源于系统的详细设计系统测试的测试对象是整个系统及系统交互的软系统测试的测试对象是整个系统及系统交互的软件和硬件平台。模拟系统的运行以验证系统是否件和硬件平台。模拟系统的运行以验证系统是否达到了功能和性能要求。其测试依据来自于系统达到了功能和性能要求。其测试依据来自于系统的概要设计的概要设计10.2 软件测试过程软件测试过程根据系统测试的目标不同,系统测试一般包含以下几根据系统测试的目标不同,系统测试一般包含以下几种类型:种类型:功能测试功能测试性能测试性能测试负载测试负载测试 强度强度/压力测试压力测试容量测试容量测试安全测试安全测试配置测试配置测试恢复测试恢复测试安装测试

64、安装测试 文档测试文档测试 用户界面测试用户界面测试可靠性测试可靠性测试 10.2 软件测试过程软件测试过程功能测试(功能测试(Functional Testing)验证软件是否满足需求规格中的功能,侧重于核实验证软件是否满足需求规格中的功能,侧重于核实测试对象按计划运行,提供需求的服务、方法或用测试对象按计划运行,提供需求的服务、方法或用例的测试。例的测试。系统数据测试:数据驱动的系统数据测试:数据驱动的“转换式转换式”系统系统系统端口事件测试:事件驱动的系统端口事件测试:事件驱动的“反应式反应式”系统系统针对不同的测试对象实施和执行,包括单元、已集针对不同的测试对象实施和执行,包括单元、已

65、集成单元、应用程序和系统。成单元、应用程序和系统。10.2 软件测试过程软件测试过程性能测试(性能测试(Performance Testing)检查系统在实际环境下是否满足在需求说明书中检查系统在实际环境下是否满足在需求说明书中规定的性能。特别是对于实时系统或嵌入式系统。规定的性能。特别是对于实时系统或嵌入式系统。性能测试常常需要与负载测试、强度测试、容量性能测试常常需要与负载测试、强度测试、容量测试结合起来进行,并常常要求同时进行硬件和测试结合起来进行,并常常要求同时进行硬件和软件检测。软件检测。通常,对软件性能的检测表现在以下几个方面:通常,对软件性能的检测表现在以下几个方面:响应时间、吞

66、吐量、辅助存储区,例如缓冲区,响应时间、吞吐量、辅助存储区,例如缓冲区,工作区的大小等、处理精度,等等。工作区的大小等、处理精度,等等。10.2 软件测试过程软件测试过程负载测试(负载测试(Load Testing)测试系统在给定负载下是否能达到预期性能指标,测试系统在给定负载下是否能达到预期性能指标,即在临界状态下运行的稳定性。即在临界状态下运行的稳定性。在测试的系统保持不变的情况下,核实和评估系在测试的系统保持不变的情况下,核实和评估系统在不同负载下操作极限的可接受性。统在不同负载下操作极限的可接受性。 评测包括负载和响应时间的特征。评测包括负载和响应时间的特征。10.2 软件测试过程软件

67、测试过程强度测试(强度测试(Stress Testing) :性能测试的一种:性能测试的一种测试系统在短期内遇到异常条件时能否按预期运测试系统在短期内遇到异常条件时能否按预期运行:通过不断向系统施加行:通过不断向系统施加“压力压力”,测试系统在,测试系统在压力情况下的性能表现,检查在系统运行环境不压力情况下的性能表现,检查在系统运行环境不正常乃至发生故障的情况下,系统可以运行到何正常乃至发生故障的情况下,系统可以运行到何种程度的测试。种程度的测试。系统面对的工作强度可以包括过大的工作量、不系统面对的工作强度可以包括过大的工作量、不充足的内存、不可用的服务充足的内存、不可用的服务/硬件或过低的共

68、享资硬件或过低的共享资源。源。可以模拟巨大的工作负荷以查看应用程序在峰值可以模拟巨大的工作负荷以查看应用程序在峰值使用情况下如何执行操作。例如:把输入数据速使用情况下如何执行操作。例如:把输入数据速率提高一个数量级,确定输入功能将如何响应。率提高一个数量级,确定输入功能将如何响应。10.2 软件测试过程软件测试过程容量测试(容量测试(Volume Testing) :性能测试的一种:性能测试的一种多数情况针对数据库而言,侧重于核实测试对象对于多数情况针对数据库而言,侧重于核实测试对象对于大量数据(输入和输出或驻留在数据库内)的处理能大量数据(输入和输出或驻留在数据库内)的处理能力。力。根据预先

69、分析出的某项指标极限值,测试系统在其极根据预先分析出的某项指标极限值,测试系统在其极限值状态下是否能保持正常运行。限值状态下是否能保持正常运行。包括多种测试策略,例如:包括多种测试策略,例如:存储或读取一个超长的文件;存储或读取一个超长的文件;创建返回整个数据库内容的查询;创建返回整个数据库内容的查询;或者对查询设置很多限制,以至不返回数据;或者对查询设置很多限制,以至不返回数据;或者返回每个字段中最大数据量的数据条目。或者返回每个字段中最大数据量的数据条目。完成标准可定义为:所计划的测试已全部执行,而且完成标准可定义为:所计划的测试已全部执行,而且达到或超出指定的系统限制没有出现任何软件故障

70、。达到或超出指定的系统限制没有出现任何软件故障。10.2 软件测试过程软件测试过程安全测试(安全测试(Security Testing)验证软件的安全性能,确保只有预期的主角才可验证软件的安全性能,确保只有预期的主角才可以访问测试对象、数据(或系统)。以访问测试对象、数据(或系统)。检验在系统中已经存在的系统安全性、保密性措检验在系统中已经存在的系统安全性、保密性措施是否发挥作用,有无漏洞,以检查系统对非法施是否发挥作用,有无漏洞,以检查系统对非法侵入的防范能力。侵入的防范能力。测试人员扮演非法入侵者。测试人员扮演非法入侵者。系统安全设计的准则是:使非法侵入的代价超过系统安全设计的准则是:使非

71、法侵入的代价超过被保护信息的价值。被保护信息的价值。10.2 软件测试过程软件测试过程配置测试(配置测试(Configuration Testing)一个软件是在一定的配置环境下才能工作的,配一个软件是在一定的配置环境下才能工作的,配置项包括硬件配置项和软件配置项。置项包括硬件配置项和软件配置项。硬件配置项包括内存大小、硬件大小、显存大硬件配置项包括内存大小、硬件大小、显存大小、监视器大小、主频等。小、监视器大小、主频等。软件的配置项包括操作系统、数据库、浏览器软件的配置项包括操作系统、数据库、浏览器等。等。确保测试对象在不同的硬件和确保测试对象在不同的硬件和/或软件配置上按预或软件配置上按预

72、期运行,在不同的系统配置下是否有错误。期运行,在不同的系统配置下是否有错误。10.2 软件测试过程软件测试过程恢复测试(恢复测试(Recovery Testing)硬件故障或用户不良数据或操作可能会引起软件硬件故障或用户不良数据或操作可能会引起软件故障,需要测试软件系统从故障中恢复的能力。故障,需要测试软件系统从故障中恢复的能力。验证软件在支撑软件或硬件失败中恢复的能力:验证软件在支撑软件或硬件失败中恢复的能力:系统能否正常地继续进行工作,并不对系统造成系统能否正常地继续进行工作,并不对系统造成任何损害。任何损害。错误探测功能错误探测功能系统能否发现硬件失效与故障;系统能否发现硬件失效与故障;

73、能否切换或启动备用的硬件;能否切换或启动备用的硬件;在故障发生时能否保护正在运行的作业和系统在故障发生时能否保护正在运行的作业和系统状态;状态;在系统恢复后能否从最后记录下来的无错误状在系统恢复后能否从最后记录下来的无错误状态开始继续执行作业,等等。态开始继续执行作业,等等。10.2 软件测试过程软件测试过程安装测试(安装测试(Installation Testing)目的不是找软件错误,而是找安装错误。目的不是找软件错误,而是找安装错误。在安装软件系统时,会有多种选择。在安装软件系统时,会有多种选择。 要分配和装入文件与程序库要分配和装入文件与程序库 布置适用的硬件配置布置适用的硬件配置 进

74、行程序的联结。进行程序的联结。侧重于确保测试对象在不同的硬件和侧重于确保测试对象在不同的硬件和/或软件配置或软件配置上,以及在不同的条件下(磁盘空间不足或电源上,以及在不同的条件下(磁盘空间不足或电源中断)按预期安装。中断)按预期安装。10.2 软件测试过程软件测试过程文档测试(文档测试(Documentation Testing)检查用户文档的清晰性和精确性。检查用户文档的清晰性和精确性。用户界面测试(用户界面测试(GUI Testing)界面实现与界面设计的吻合情况界面实现与界面设计的吻合情况确认界面处理的正确性确认界面处理的正确性确认用户界面的易用性确认用户界面的易用性10.2 软件测试

75、过程软件测试过程可靠性测试可靠性测试 (Reliability Testing)检验系统的可靠性是否达到预期目标而进行的测检验系统的可靠性是否达到预期目标而进行的测试。试。平均失效间隔时间平均失效间隔时间 MTBF (Mean Time Between Failures) 是否超过规定时限是否超过规定时限因故障而停机的时间因故障而停机的时间 MTTR (Mean Time To Repairs) 在一年中应不超过多少时间在一年中应不超过多少时间10.2 软件测试过程软件测试过程4、验收测试验收测试为什么要引入验收测试?为什么要引入验收测试?软件开发设计人员在软件开发设计时,不可能完软件开发设计

76、人员在软件开发设计时,不可能完全预见用户实际使用软件系统的情况全预见用户实际使用软件系统的情况当一个软件产品可能拥有众多用户时,不可能由当一个软件产品可能拥有众多用户时,不可能由每个用户验收,此时多采用验收测试,以发现那每个用户验收,此时多采用验收测试,以发现那些似乎只有最终用户才能发现的问题些似乎只有最终用户才能发现的问题10.2 软件测试过程软件测试过程系统测试完成后,并使系统试运行了预定的时间以后系统测试完成后,并使系统试运行了预定的时间以后对系统所进行的测试称为验收测试对系统所进行的测试称为验收测试验收测试是以用户为主的测试,强调用户的参与,软验收测试是以用户为主的测试,强调用户的参与

77、,软件开发人员和件开发人员和QA(质量保证)人员也应参加。由用(质量保证)人员也应参加。由用户参加设计测试用例,使用用户界面输入测试数据,户参加设计测试用例,使用用户界面输入测试数据,并分析测试的输出结果。并分析测试的输出结果。在测试过程中,除了考虑软件的功能和性能外,还应在测试过程中,除了考虑软件的功能和性能外,还应对软件的可移植性、兼容性、可维护性、错误的恢复对软件的可移植性、兼容性、可维护性、错误的恢复功能等进行确认。功能等进行确认。10.2 软件测试过程软件测试过程测试数据测试数据只要有可能,在验收测试中就应该使用真实数据只要有可能,在验收测试中就应该使用真实数据 在不使用真实数据的情

78、况下,应该考虑使用真实在不使用真实数据的情况下,应该考虑使用真实数据的一个拷贝。拷贝数据的质量、精度和数据数据的一个拷贝。拷贝数据的质量、精度和数据量必须尽可能地代表真实的数据量必须尽可能地代表真实的数据仍然有必要引入一些手工数据,例如,可手工创仍然有必要引入一些手工数据,例如,可手工创建一些测试边界条件或错误条件的数据建一些测试边界条件或错误条件的数据10.2 软件测试过程软件测试过程验收测试的主要任务验收测试的主要任务文档资料的审查验收文档资料的审查验收功能测试功能测试性能测试性能测试安装测试安装测试用户操作测试用户操作测试10.2 软件测试过程软件测试过程验收测试中的角色及工作职责验收测

79、试中的角色及工作职责验收测试一般在测试组的协助下,由用户代表执验收测试一般在测试组的协助下,由用户代表执行行测试组长负责保证在合理的质量控制和监督下使测试组长负责保证在合理的质量控制和监督下使用合适的测试技术执行充分测试用合适的测试技术执行充分测试测试人员在验收测试工作中将协助用户代表执行测试人员在验收测试工作中将协助用户代表执行测试,并和测试观察员一起向用户解释测试用例测试,并和测试观察员一起向用户解释测试用例的结果的结果10.2 软件测试过程软件测试过程通常的验收测试有两种形式:通常的验收测试有两种形式:Alpha测试测试( 测试)测试)Beta测试测试( 测试)测试)这是软件产品在正式发

80、布前经常需要进行的两种不同这是软件产品在正式发布前经常需要进行的两种不同类型的测试。类型的测试。 10.2 软件测试过程软件测试过程测试是指软件开发公司组织内部人员模拟各类用户测试是指软件开发公司组织内部人员模拟各类用户行对即将面市软件产品(称为行对即将面市软件产品(称为版本)进行测试,试版本)进行测试,试图发现错误并修正。图发现错误并修正。在在软软件件开开发发单单位位内内部部模模拟拟运运行行环环境境下下/ /受受控控制制环环境境下的验收测试下的验收测试在在软软件件开开发发单单位位内内部部组组织织人人员员,模模拟拟各各类类用用户户行行为为对对即即将将面面市市的的软软件件产产品品进进行行测测试试

81、,试试图图发发现现并并修改错误修改错误观察实验室观察实验室10.2 软件测试过程软件测试过程测试是指软件开发公司组织各方面的典型用户在日测试是指软件开发公司组织各方面的典型用户在日常工作中实际使用常工作中实际使用版本,并要求用户报告异常情况、版本,并要求用户报告异常情况、提出批评意见。然后软件开发公司再对提出批评意见。然后软件开发公司再对版本进行改版本进行改错和完善。错和完善。经过经过测试调整的软件产品称为测试调整的软件产品称为版本版本测测试试是是指指软软件件开开发发单单位位组组织织各各方方面面的的典典型型用用户户在在日日常常工工作作中中实实际际使使用用版版本本,并并要要求求用用户户报报告告异

82、异常常情情况况,提提出出批批评评意意见见。然然后后软软件件开开发发公公司司再再对对版本进行改错和完善版本进行改错和完善10.2 软件测试过程软件测试过程测试测试 VS 测试测试测试:早期的、不稳定的软件版本所进行的验收测试:早期的、不稳定的软件版本所进行的验收测试,受控的实验室测试测试,受控的实验室测试测试:晚期的、更加稳定的软件版本所进行的验测试:晚期的、更加稳定的软件版本所进行的验收测试,不受控的非实验室测试收测试,不受控的非实验室测试10.2 软件测试过程软件测试过程公共公共测试的局限性:测试的局限性:测试通常不是专业测试人员,问题往往停留在易测试通常不是专业测试人员,问题往往停留在易用

83、性上;用性上;环境不可控,使用不当引起的问题居多;环境不可控,使用不当引起的问题居多;为了评价软件或获得软件而参与测试;为了评价软件或获得软件而参与测试;反馈信息简单,经常无法重现。反馈信息简单,经常无法重现。10.2 软件测试过程软件测试过程平行运行:就是同时运行新开发出来的系统和将被它平行运行:就是同时运行新开发出来的系统和将被它取代的旧系统,以便比较新旧两个系统的处理结果。取代的旧系统,以便比较新旧两个系统的处理结果。平行运行的目的:平行运行的目的:可以在准生产环境中运行新系统而又不冒风险;可以在准生产环境中运行新系统而又不冒风险;用户能有一段熟悉新系统的时间;用户能有一段熟悉新系统的时

84、间;可以验证用户指南和使用手册之类的文档;可以验证用户指南和使用手册之类的文档;能够以准生产模式对新系统进行全负荷测试,可能够以准生产模式对新系统进行全负荷测试,可以用测试结果验证性能指标。以用测试结果验证性能指标。10.3 软件测试方法软件测试方法测试方案包括预定要测试的功能,应该输入的测试数测试方案包括预定要测试的功能,应该输入的测试数据和预期的结果,其中最困难的问题是设计测试用的据和预期的结果,其中最困难的问题是设计测试用的输入数据(即测试用例)。输入数据(即测试用例)。测试用例测试用例:以发现软件缺陷为目的精心设计的一组测:以发现软件缺陷为目的精心设计的一组测试数据和操作步骤。试数据和

85、操作步骤。测试用例可以简单的表示为如下元组:测试用例可以简单的表示为如下元组:(ID)输入数)输入数据,预期输出结果据,预期输出结果10.3 软件测试方法软件测试方法例如:要测试下述程序的例如:要测试下述程序的“求积求积”功能是否存在缺陷,功能是否存在缺陷,我们可以设计如下的测试数据:我们可以设计如下的测试数据:被乘数被乘数乘数乘数期望的期望的乘积乘积1221.11.11.21一个测试用例10.3 软件测试方法软件测试方法白盒测试:根据程序内部的结构来测试程序。白盒测试:根据程序内部的结构来测试程序。程序的内部结构可以用流程图来表示。从流程图上,程序的内部结构可以用流程图来表示。从流程图上,我

86、们可以看出,程序的内部结构包含以下这些元素:我们可以看出,程序的内部结构包含以下这些元素:语句,判定,条件,循环,路径等,通过对这些元素语句,判定,条件,循环,路径等,通过对这些元素的测试就形成了以下不同的白盒测试方法的测试就形成了以下不同的白盒测试方法:逻辑覆盖法逻辑覆盖法:在测试过程中,以覆盖某些程序元:在测试过程中,以覆盖某些程序元素为测试目标的测试。包括:语句覆盖、判定覆素为测试目标的测试。包括:语句覆盖、判定覆盖、条件覆盖、判定盖、条件覆盖、判定/条件覆盖、条件组合覆盖条件覆盖、条件组合覆盖路径覆盖法路径覆盖法:从流程图上讲,程序的一次执行对:从流程图上讲,程序的一次执行对应于从入口

87、到出口的一条路径,针对路径的测试应于从入口到出口的一条路径,针对路径的测试即为路径测试。从广义的角度讲,任何有关路径即为路径测试。从广义的角度讲,任何有关路径分析的测试都可以被称为路径测试。分析的测试都可以被称为路径测试。10.3 软件测试方法软件测试方法逻辑覆盖逻辑覆盖是以程序内部的逻辑结构为基础的设计测试是以程序内部的逻辑结构为基础的设计测试用例的技术,是通过对程序逻辑结构的遍历实现程序用例的技术,是通过对程序逻辑结构的遍历实现程序的覆盖,它是的覆盖,它是一系列测试过程的总称一系列测试过程的总称,这组测试过程,这组测试过程逐渐进行越来越完整的通路测试。逐渐进行越来越完整的通路测试。这一方法

88、要求测试人员对程序的逻辑结构有清楚的了这一方法要求测试人员对程序的逻辑结构有清楚的了解,甚至要能掌握源程序的所有细节。它属于动态测解,甚至要能掌握源程序的所有细节。它属于动态测试。试。10.3 软件测试方法软件测试方法根据根据覆盖目标(覆盖源程序语句的详细程度)覆盖目标(覆盖源程序语句的详细程度)的不同,的不同,逻辑覆盖可分为:逻辑覆盖可分为:语句覆盖语句覆盖判定覆盖判定覆盖条件覆盖条件覆盖判定判定/条件覆盖条件覆盖条件组合覆盖条件组合覆盖根据对程序路径的覆盖程度的不同:根据对程序路径的覆盖程度的不同:路径覆盖路径覆盖点覆盖点覆盖边覆盖边覆盖10.3 软件测试方法软件测试方法案例案例Tdbas

89、FF入口入口返回返回(y1)&(z=0)(y=2)|(x1)x = x / yx = x +1Tce10.3 软件测试方法软件测试方法1、语句覆盖语句覆盖 为了暴露程序中的错误,程序中的每条语句至少应该为了暴露程序中的错误,程序中的每条语句至少应该执行一次。执行一次。语句覆盖的含义:是指通过选择足够的测试用例,使语句覆盖的含义:是指通过选择足够的测试用例,使得运行这些测试用例时,得运行这些测试用例时,被测程序的每个语句至少被被测程序的每个语句至少被执行一次执行一次。 10.3 软件测试方法软件测试方法案例案例TdbasFF入口入口返回返回(y1)&(z=0)(y=2)|(x1)x = x /

90、yx = x +1Tce10.3 软件测试方法软件测试方法语句覆盖的测试用例语句覆盖的测试用例 语句覆盖并不充分:语句覆盖并不充分: 当第一个判定中的当第一个判定中的&写成写成|时,时,对于对于CASE1程序仍按程序仍按sacbed执行。执行。测试用例测试用例输入输入预期输出预期输出被测路径被测路径CASE1CASE1x=4x=4, y=2y=2,z=0z=0x=3x=3sacbedsacbed10.3 软件测试方法软件测试方法2、判定覆盖判定覆盖 判定覆盖又称为分支覆盖,是指通过设计足够的测试判定覆盖又称为分支覆盖,是指通过设计足够的测试用例,使得程序中的每一个判定至少都获得一次用例,使得程

91、序中的每一个判定至少都获得一次“真真值值”和和“假值假值”,或者说使得程序中的,或者说使得程序中的每一个分支都每一个分支都至少通过一次至少通过一次。 判定覆盖比语句覆盖稍强。判定覆盖比语句覆盖稍强。10.3 软件测试方法软件测试方法案例案例TdbasFF入口入口返回返回(y1)&(z=0)(y=2)|(x1)x = x / yx = x +1Tce10.3 软件测试方法软件测试方法判定覆盖的测试用例判定覆盖的测试用例判定覆盖包含语句覆盖,判定覆盖也不充分:判定覆盖包含语句覆盖,判定覆盖也不充分: 当第当第2个判定中的个判定中的x1写成写成x1)&(z=0)(y=2)|(x1)x = x / y

92、x = x +1Tce10.3 软件测试方法软件测试方法条件覆盖的测试用例条件覆盖的测试用例对判定对判定1:(y1)&(z=0)条件条件 y1 取真、假分别记为取真、假分别记为 T1 ,-T1条件条件 z=0 取真、假分别记为取真、假分别记为 T2 ,-T2判定判定2:(y=2)|(x1)条件条件 y=2取真、假分别记为取真、假分别记为 T3 ,-T3条件条件 x1 取真、假分别记为取真、假分别记为 T4 ,-T4测试用例用例输入入预期期输出出覆盖条件覆盖条件覆盖分支覆盖分支被被测路径路径CASE4x=0,y=2,z=0 x=1T1, T2T3,-T4ac,besacbed CASE5x=2,

93、y=1,z=1 x=3 -T1,-T2-T3,T4ab,besabed 10.3 软件测试方法软件测试方法条件覆盖并不能包含判定覆盖,对于上述测试用例,条件覆盖并不能包含判定覆盖,对于上述测试用例,分支分支bd并未出现。并未出现。10.3 软件测试方法软件测试方法4、判定判定/条件覆盖条件覆盖 判定判定/条件覆盖的含义:是指通过设计足够多的测试条件覆盖的含义:是指通过设计足够多的测试用例,使得运行这些测试用例时,用例,使得运行这些测试用例时,判定中的每个条件的所有可能结果至少出现一次判定中的每个条件的所有可能结果至少出现一次每个判定本身的所有可能结果也至少出现一次每个判定本身的所有可能结果也至

94、少出现一次 10.3 软件测试方法软件测试方法案例案例TdbasFF入口入口返回返回(y1)&(z=0)(y=2)|(x1)x = x / yx = x +1Tce10.3 软件测试方法软件测试方法判定判定/条件覆盖的测试用例条件覆盖的测试用例对判定对判定1:(y1)&(z=0) 条件条件 y1 取真、假分别记为取真、假分别记为 T1 ,-T1 条件条件 z=0 取真、假分别记为取真、假分别记为 T2 ,-T2判定判定2:(y=2)|(x1) 条件条件 y=2取真、假分别记为取真、假分别记为 T3 ,-T3 条件条件 x1 取真、假分别记为取真、假分别记为 T4 ,-T4测试用例用例输入入预期

95、期输出出覆盖条件覆盖条件覆盖分支覆盖分支被被测路径路径CASE6x=4,y=2,z=0 x=3 T4,T1T3,T2ac,besacbed CASE7x=1,y=1,z=1 x=1 -T4,-T1-T3,-T2ab,bdsabd 10.3 软件测试方法软件测试方法判定判定/条件覆盖同时包含判定覆盖和条件覆盖。条件覆盖同时包含判定覆盖和条件覆盖。10.3 软件测试方法软件测试方法5、条件组合覆盖条件组合覆盖 条件组合覆盖也称为多条件覆盖,是指通过设计足够条件组合覆盖也称为多条件覆盖,是指通过设计足够多的测试用例,使得运行这些测试用例时,多的测试用例,使得运行这些测试用例时,每个判定每个判定中条件

96、结果的所有可能组合至少出现一次中条件结果的所有可能组合至少出现一次。显然满足多条件覆盖的测试用例是一定满足判定覆盖、显然满足多条件覆盖的测试用例是一定满足判定覆盖、条件覆盖和条件判定组合覆盖的。条件覆盖和条件判定组合覆盖的。多条件覆盖的组合数目较大。多条件覆盖的组合数目较大。注意:注意:针对每个判定针对每个判定,而非整个程序中的所有判定,而非整个程序中的所有判定 。10.3 软件测试方法软件测试方法案例案例TdbasFF入口入口返回返回(y1)&(z=0)(y=2)|(x1)x = x / yx = x +1Tce10.3 软件测试方法软件测试方法条件组合覆盖包含覆盖:条件组合覆盖包含覆盖:编

97、号编号判定判定1 1各条件组合各条件组合编号编号判定判定2 2各条件组合各条件组合1 1y1,z=0y1,z=05 5y=2, x1y=2, x12 2y1,z!=0y1,z!=06 6y=2, x=1 y=2, x=1 3 3y1y1y!=2, x14 4y1,z!=0y1,z!=08 8 y!=2, x=1 y!=2, x1)&(z=0)(y=2)|(x1)x = x / yx = x +1Tce10.3 软件测试方法软件测试方法路径覆盖的测试用例路径覆盖的测试用例评价:路径覆盖实际上考虑了程序中各种判定结果的评价:路径覆盖实际上考虑了程序中各种判定结果的所有可能组合,但它并未考虑判定中的

98、条件组合。因所有可能组合,但它并未考虑判定中的条件组合。因此,虽然说路径覆盖是一种非常强的覆盖度量标准,此,虽然说路径覆盖是一种非常强的覆盖度量标准,但并不能代替条件组合覆盖。但并不能代替条件组合覆盖。测试用例测试用例输入输入预期输出预期输出被测路径被测路径CASE8CASE8x=4x=4,y=2y=2,z=0 z=0 x=3 x=3 sacbed sacbed CASE9CASE9x=1x=1,y=2y=2,z=1 z=1 x=2 x=2 sabed sabed CASE10CASE10x=1x=1,y=3y=3,z=0 z=0 x=1/3x=1/3sacbd sacbd CASE11CAS

99、E11x=1x=1,y=1y=1,z=1 z=1 x=1 x=1 sabd sabd 10.3 软件测试方法软件测试方法点覆盖点覆盖:如果连通图:如果连通图G的子图的子图G是连是连通的,而且包含通的,而且包含G的所有节点,则称的所有节点,则称G是是G的点覆盖。的点覆盖。从程序流程图导出程序图:在正常情从程序流程图导出程序图:在正常情况下程序图是连通的有向图,图中每况下程序图是连通的有向图,图中每个节点相当于程序流程图的一个框个节点相当于程序流程图的一个框(一个或多个语句)。(一个或多个语句)。满足点覆盖标准要求选取足够多的测满足点覆盖标准要求选取足够多的测试数据,使程序执行路径至少经过程试数据

100、,使程序执行路径至少经过程序图中每个节点一次。序图中每个节点一次。10.3 软件测试方法软件测试方法边覆盖边覆盖:如果连通图:如果连通图G的子图的子图G是连通的,而且包是连通的,而且包含含G的所有边,则称的所有边,则称G是是G的边覆盖。的边覆盖。为了满足边覆盖的测试标准,要求选取足够多的测试为了满足边覆盖的测试标准,要求选取足够多的测试数据,使程序执行路径至少经过程序图中每条边一次。数据,使程序执行路径至少经过程序图中每条边一次。习题习题void DoWork (int x,int y,int z) int k=0,j=0; if ( (x3)&(z5) ) j=x*y+10; /语句块语句块

101、2 j=j%3; /语句块语句块3对上述程序画出程序流程图,试用逻辑覆盖法设计测试用例。对上述程序画出程序流程图,试用逻辑覆盖法设计测试用例。习题讲评习题讲评画出流程图画出流程图习题讲评习题讲评1、语句覆盖测试用例、语句覆盖测试用例测试用例输入为:测试用例输入为: x=4、y=5、z=5 程序执行的路径是:程序执行的路径是:abd2、判定覆盖测试用例、判定覆盖测试用例要实现要实现DoWork函数的判定覆盖,需要设计两个测试函数的判定覆盖,需要设计两个测试用例:用例:测试用例的输入为:测试用例的输入为:x=4、y=5、z=5;x=2、y=5、z=5程序执行的路径分别是:程序执行的路径分别是:ab

102、d;ace习题讲评习题讲评3、条件覆盖测试用例、条件覆盖测试用例1对对DoWork函数的各个判定的各种条件取值加以标记函数的各个判定的各种条件取值加以标记对于第一个判定(对于第一个判定( (x3)&(z3 取真值记为取真值记为T1,取假值记为,取假值记为-T1条件条件z5) ):):条件条件x=4 取真值记为取真值记为T3,取假值记为,取假值记为-T3 条件条件y5 取真值记为取真值记为T4,取假值记为,取假值记为-T4习题讲评习题讲评测试用例测试用例 测试用例测试用例 执行路径执行路径 覆盖条件覆盖条件 覆盖分支覆盖分支 x=4、y=6、z=5 abdT1、T2、T3、T4 bd x=2、y

103、=5、 z=15 ace -T1、-T2、 -T3、-T4 ce习题讲评习题讲评4、判定、判定/条件覆盖测试用例条件覆盖测试用例测试用例测试用例 执行路径执行路径 覆盖条件覆盖条件覆盖分支覆盖分支x=4、y=6、z=5 abdT1、T2、T3、T4 bdx=2、y=5、z=15ace-T1、-T2、-T3、-T4 ce习题讲评习题讲评5、条件组合覆盖测试用例、条件组合覆盖测试用例组合覆盖的目的是要使设计的测试用例能覆盖每一个判定组合覆盖的目的是要使设计的测试用例能覆盖每一个判定的所有可能的条件取值组合。的所有可能的条件取值组合。对对DoWork函数中的各个判定的条件取值组合加以标记:函数中的各

104、个判定的条件取值组合加以标记:x3, z3, z=10 记做记做T1 -T2,第一个判定的取假分支,第一个判定的取假分支x=3, z10 记做记做-T1 T2,第一个判定的取假分支,第一个判定的取假分支x=10 记做记做-T1 -T2,第一个判定的取假分支,第一个判定的取假分支x=4, y5 记做记做T3 T4,第二个判定的取真分支,第二个判定的取真分支x=4, y5 记做记做-T3 T4,第二个判定的取真分支,第二个判定的取真分支x!=4, y=5 记做记做-T3 -T4,第二个判定的取假分支,第二个判定的取假分支习题讲评习题讲评测试用例测试用例 执行路径执行路径 覆盖条件覆盖条件覆盖组合号

105、覆盖组合号x=4、y=6、z=5 abd T1、T2、T3、T4 1和和5 x=4、y=5、z=15 acd T1、-T2、T3、-T4 2和和6 x=2、y=6、z=5 acd -T1、T2、-T3、T4 3和和7 x=2、y=5、z=15 ace -T1、-T2、-T3、-T4 4和和8习题讲评习题讲评6、路径覆盖测试用例、路径覆盖测试用例测试用例测试用例 执行路径执行路径 x=4、y=6、z=5 abd x=4、y=5、z=15 acd x=2、y=5、z=15 acex=5、y=5、z=5 abe10.3 软件测试方法软件测试方法黑盒测试黑盒测试黑盒测试是把测试对象看做一个不能打开黑盒

106、子,测黑盒测试是把测试对象看做一个不能打开黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。符合它的功能说明。黑盒测试方法是在程序接口上进行测试,通过软件的黑盒测试方法是在程序接口上进行测试,通过软件的外部表现来发现其缺陷和错误。外部表现来发现其缺陷和错误。10.3 软件测试方法软件测试方法黑盒测试:在程序接口上进行测试,通过软件的外部表黑盒测试:在程序接口上进行测试,通过软件的外部表现来发现其缺陷和错误。现来发现其缺陷和错误。常用的

107、黑盒测试方法常用的黑盒测试方法等价类划分法等价类划分法边界值分析法边界值分析法因果图法因果图法决策表法决策表法正交表法正交表法场景法场景法错误推测法错误推测法功能图法功能图法10.3 软件测试方法软件测试方法等价类划分法等价类划分法划分划分含义:互不相交的一组子集,这些子集的并是整含义:互不相交的一组子集,这些子集的并是整个集合个集合作用:完备性、无冗余性作用:完备性、无冗余性等价类等价类:某个输入域的子集:某个输入域的子集A等价关系等价关系:每一类的代表性数据在测试中的作用等价:每一类的代表性数据在测试中的作用等价于这一类中的其他值,也就是说,如果某一类中的一于这一类中的其他值,也就是说,如

108、果某一类中的一个例子发现了错误,这一等价类中的其他例子也能发个例子发现了错误,这一等价类中的其他例子也能发现同样的错误;反之,如果某一类中的一个例子没有现同样的错误;反之,如果某一类中的一个例子没有发现错误,则这一类中的其他例子也不会查出错误。发现错误,则这一类中的其他例子也不会查出错误。10.3 软件测试方法软件测试方法等价类划分法等价类划分法基本思想:是把程序的输入基本思想:是把程序的输入/输出域划分成若干部输出域划分成若干部分,然后从每个部分中选取少数分,然后从每个部分中选取少数代表性数据代表性数据当作当作测试用例。测试用例。优点:以较少的具有代表性的数据进行测试,而优点:以较少的具有代

109、表性的数据进行测试,而取得较好的测试效果。取得较好的测试效果。使用这一方法设计测试用例,首先必须在分析需求规使用这一方法设计测试用例,首先必须在分析需求规格说明的基础上划分等价类,列出格说明的基础上划分等价类,列出等价类表等价类表。10.3 软件测试方法软件测试方法程序的程序的输入输入/输出域输出域一般可以划分为两种等价类:一般可以划分为两种等价类:有效等价类有效等价类:是指对软件规格说明而言,是有意义:是指对软件规格说明而言,是有意义的、合理的输入的、合理的输入/输出数据所组成的集合。利用有输出数据所组成的集合。利用有效等价类,能够检验程序是否实现了规格说明中预效等价类,能够检验程序是否实现

110、了规格说明中预先规定的功能和性能。先规定的功能和性能。无效等价类无效等价类:是指对软件规格说明而言,是无意义:是指对软件规格说明而言,是无意义的、不合理的输入的、不合理的输入/输出数据所构成的集合。利用输出数据所构成的集合。利用无效等价类,可以鉴别程序异常处理的情况。无效等价类,可以鉴别程序异常处理的情况。 设计测试用例时,要同时考虑这两种等价类。因为软设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接收合理的数据,也要能经受意外的考验。件不仅要能接收合理的数据,也要能经受意外的考验。这样的测试才能确保软件具有更高的可靠性。这样的测试才能确保软件具有更高的可靠性。10.3 软件测试方法

111、软件测试方法等价类划分规则等价类划分规则(1)按照区间划分)按照区间划分 在输入条件规定了取值范围、或者值的个数的情况下,在输入条件规定了取值范围、或者值的个数的情况下,可以确定一个有效等价类和两个无效等价类。可以确定一个有效等价类和两个无效等价类。例:程序输入条件为小于例:程序输入条件为小于100大于大于10的整数的整数x,则有效,则有效等价类为等价类为10x100,两个无效等价类为,两个无效等价类为x10和和x100。例:学生选课允许例:学生选课允许2门到门到4门,有效等价类为选课门,有效等价类为选课2到到4门,两个无效等价类为只选门,两个无效等价类为只选1门或未选课,以及选课门或未选课,

112、以及选课超过超过4门。门。10.3 软件测试方法软件测试方法(2)按照数值划分)按照数值划分 在规定了一组输入数据(假设包括在规定了一组输入数据(假设包括 n个输入值),并个输入值),并且程序要对每一个输入值分别进行处理的情况下,可且程序要对每一个输入值分别进行处理的情况下,可确定确定 n 个有效等价类(每个值确定一个有效等价类)个有效等价类(每个值确定一个有效等价类)和一个无效等价类(所有不允许的输入值的集合)。和一个无效等价类(所有不允许的输入值的集合)。例:程序输入例:程序输入x取值于一个固定的枚举类型取值于一个固定的枚举类型1,3,7,15,且程序中对这,且程序中对这4个数值分别进行了

113、处理,则有效等个数值分别进行了处理,则有效等价类为价类为x=1、x=3、x=7、x=15,无效等价类为,无效等价类为x1,3,7,15的值的集合。的值的集合。10.3 软件测试方法软件测试方法(3)按照数值集合划分)按照数值集合划分 在输入条件规定了输入值的集合或规定了在输入条件规定了输入值的集合或规定了“必须如何必须如何”的条件下,可以确定一个有效等价类和一个无效等的条件下,可以确定一个有效等价类和一个无效等价类(该集合有效值之外)。价类(该集合有效值之外)。例:程序输入条件为取值为奇数的整数例:程序输入条件为取值为奇数的整数x,则有效等,则有效等价类为价类为x的值为奇数的整数,无效等价类为

114、的值为奇数的整数,无效等价类为x的值不为的值不为奇数的整数。奇数的整数。10.3 软件测试方法软件测试方法(4)按照限制条件或规则划分)按照限制条件或规则划分 在规定了输入数据必须遵守的规则或限制条件的情况在规定了输入数据必须遵守的规则或限制条件的情况下,可确定一个有效等价类(符合规则)和若干个无下,可确定一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。效等价类(从不同角度违反规则)。例:程序输入条件为以字符例:程序输入条件为以字符a开头、长度为开头、长度为8的字的字符串,并且字符串不包含符串,并且字符串不包含a z之外的其它字符,之外的其它字符,则有效等价类为满足了上述所

115、有条件的字符串,无效则有效等价类为满足了上述所有条件的字符串,无效等价类为不以等价类为不以a开头的字符串、长度不为开头的字符串、长度不为8的字符的字符串和包含了串和包含了a z之外其它字符的字符串。之外其它字符的字符串。10.3 软件测试方法软件测试方法(5)按布尔量划分)按布尔量划分在规定了输入数据是一个布尔值的情况下,则可以确在规定了输入数据是一个布尔值的情况下,则可以确定一个有效等价类和一个无效等价类。定一个有效等价类和一个无效等价类。10.3 软件测试方法软件测试方法(6)细分等价类)细分等价类 在确知已划分的等价类中各元素在程序中的处理方式在确知已划分的等价类中各元素在程序中的处理方

116、式不同的情况下,则应再将该等价类进一步划分为更小不同的情况下,则应再将该等价类进一步划分为更小的等价类,并建立等价类表。的等价类,并建立等价类表。 10.3 软件测试方法软件测试方法上述规则说明针对输入值域进行等价类划分,该方法上述规则说明针对输入值域进行等价类划分,该方法同样适用于对输出值域进行等价类划分同样适用于对输出值域进行等价类划分输入值域:输入等价类输入值域:输入等价类输出值域:输出等价类输出值域:输出等价类操作集合:操作等价类(特殊情况)操作集合:操作等价类(特殊情况)10.3 软件测试方法软件测试方法利用等价类选择测试用例的方法:等价类覆盖法利用等价类选择测试用例的方法:等价类覆

117、盖法等价类覆盖法设计测试用例的步骤如下:等价类覆盖法设计测试用例的步骤如下:1.首先给出等价类表,为等价类表中的每一个等价首先给出等价类表,为等价类表中的每一个等价类分别规定一个唯一的编号。类分别规定一个唯一的编号。2.设计一个新的测试用例,使它能够设计一个新的测试用例,使它能够尽量覆盖尚未尽量覆盖尚未覆盖的有效等价类覆盖的有效等价类。重复这个步骤,直到所有的。重复这个步骤,直到所有的有效等价类均被测试用例所覆盖。有效等价类均被测试用例所覆盖。3.设计一个新的测试用例,使它设计一个新的测试用例,使它仅覆盖一个尚未覆仅覆盖一个尚未覆盖的无效等价类盖的无效等价类。重复这一步骤,直到所有的无。重复这

118、一步骤,直到所有的无效等价类均被测试用例所覆盖。效等价类均被测试用例所覆盖。10.3 软件测试方法软件测试方法为什么对有效等价类和无效等价类的覆盖方式不一样为什么对有效等价类和无效等价类的覆盖方式不一样?对于有效等价类,采取尽量覆盖的方式是为了全对于有效等价类,采取尽量覆盖的方式是为了全面考察软件的功能。面考察软件的功能。对于无效等价类,采取每次只覆盖一个的方式是对于无效等价类,采取每次只覆盖一个的方式是因为通常程序发现一类错误后就不再检查是否还因为通常程序发现一类错误后就不再检查是否还有其他错误,因此,应该使每个测试用例只覆盖有其他错误,因此,应该使每个测试用例只覆盖一个无效等价类。一个无效

119、等价类。10.3 软件测试方法软件测试方法常见的等价类测试用例设计法常见的等价类测试用例设计法弱一般等价类测试用例设计法弱一般等价类测试用例设计法强一般等价类测试用例设计法强一般等价类测试用例设计法弱健壮等价类测试用例设计法弱健壮等价类测试用例设计法强健壮等价类测试用例设计法强健壮等价类测试用例设计法等价类测试的分类依据等价类测试的分类依据单缺陷与多缺陷假设单缺陷与多缺陷假设:产生弱等价类和强等价类:产生弱等价类和强等价类测试之分测试之分是否进行无效数据的处理是否进行无效数据的处理:产生健壮与一般等价:产生健壮与一般等价类测试之分类测试之分10.3 软件测试方法软件测试方法示例:用不同等价类划

120、分方法设计测试用例示例:用不同等价类划分方法设计测试用例对于函数对于函数F(X,Y),其输入变量),其输入变量X和和Y的取值边界定的取值边界定义如下:义如下:X a, b)b, c) c, d(不同的处理)(不同的处理) ; Y e, f)f, g (不同的处理)(不同的处理) 。可得到可得到X,Y的等价类如下表的等价类如下表试用前述几种等价类测试用例设计法设计测试用例试用前述几种等价类测试用例设计法设计测试用例输入入变量量有效等价有效等价类编号号无效等价无效等价类编号号Xa, b)1Xd7Ye, f)4Yg910.3 软件测试方法软件测试方法示例:等价类划分坐标图如下示例:等价类划分坐标图如

121、下agedYXfbc10.3 软件测试方法软件测试方法1、弱一般等价类弱一般等价类测试用例设计法测试用例设计法“单缺陷单缺陷”假设:失效假设:失效极少极少是由两个(或多个)缺陷是由两个(或多个)缺陷的的同时同时发生引起的。发生引起的。测试用例测试用例从每个有效等价类中选取一个值从每个有效等价类中选取一个值。agedYXfbc10.3 软件测试方法软件测试方法示例示例测试用例测试用例XY预期输出预期输出WR1XabYefF1WR2XbcYfgF2WR3XcdYefF3从X的三个有效等价类中分别选一个值从Y的两个有效等价类中分别选一个值10.3 软件测试方法软件测试方法一个变量个数为一个变量个数为

122、n的函数的弱一般等价类测试会产生的函数的弱一般等价类测试会产生多少个测试用例?多少个测试用例?变量对应有效等价类数的最大值变量对应有效等价类数的最大值10.3 软件测试方法软件测试方法2、强一般等价类强一般等价类测试用例设计法测试用例设计法“多缺陷多缺陷”假设。假设。测试用例测试用例从有效等价类的笛卡儿积中选取从有效等价类的笛卡儿积中选取。agedYXfbc10.3 软件测试方法软件测试方法一个变量个数为一个变量个数为n的函数的强一般等价类测试会产生的函数的强一般等价类测试会产生多少个测试用例?多少个测试用例?变量对应有效等价类数的乘积变量对应有效等价类数的乘积 10.3 软件测试方法软件测试

123、方法3、弱健壮等价类弱健壮等价类测试用例设计法测试用例设计法“单缺陷单缺陷”假设,考虑无效值假设,考虑无效值对于有效等价类,对于有效等价类,从每个有效等价类选取一个值从每个有效等价类选取一个值。对于无效等价类,对于无效等价类,使用一个无效值,并保持其余的值都是使用一个无效值,并保持其余的值都是有效的有效的。agedYXfbc10.3 软件测试方法软件测试方法示例示例有效等价类:同前有效等价类:同前1无效等价类:无效等价类:(Xd, Yef)、(Xcd, Yg)10.3 软件测试方法软件测试方法一个变量个数为一个变量个数为n的函数的弱健壮等价类测试会产生的函数的弱健壮等价类测试会产生多少个测试用

124、例?多少个测试用例?变量对应有效等价类数的最大值变量对应有效等价类数的最大值 +各个变量的无各个变量的无效等价类数之和效等价类数之和10.3 软件测试方法软件测试方法4、强健壮等价类强健壮等价类测试用例设计法测试用例设计法“多缺陷多缺陷”假设,考虑无效值。假设,考虑无效值。测试用例测试用例从所有等价类(包括有效和无效等价类)笛卡从所有等价类(包括有效和无效等价类)笛卡儿乘积中选取儿乘积中选取。agedYXfbc10.3 软件测试方法软件测试方法一个变量个数为一个变量个数为n的函数的强健壮等价类测试会产生的函数的强健壮等价类测试会产生多少个测试用例?多少个测试用例?(变量对应有效等价类数(变量对

125、应有效等价类数+变量的无效等价类数)变量的无效等价类数)的乘积的乘积 10.3 软件测试方法软件测试方法案例案例1:NextDate(次日)问题(次日)问题NextDate是一个有三个变量(月份、日期和年)的函是一个有三个变量(月份、日期和年)的函数。函数返回输入日期后面的那个日期。数。函数返回输入日期后面的那个日期。 变量月份、日期和年都为整数,且满足以下条件:变量月份、日期和年都为整数,且满足以下条件: C1. 1月份月份 12 C2. 1 日期日期 31 C3. 1912 年年 2012 试用前述几种等价类测试用例设计法设计测试用例试用前述几种等价类测试用例设计法设计测试用例10.3 软

126、件测试方法软件测试方法划分等价类划分等价类输入入变量量有效等价有效等价类编号号无效等价无效等价类编号号m1m121m125d1d312d317y1912y20123y2012910.3 软件测试方法软件测试方法1、弱一般等价类测试用例设计法、弱一般等价类测试用例设计法变量对应有效等价类数的最大值:变量对应有效等价类数的最大值:MAX(1,1,1)=1测试用例测试用例月份月份日期日期年年预期输出预期输出T161519121912年年6月月16日日10.3 软件测试方法软件测试方法2、强一般等价类测试用例设计法、强一般等价类测试用例设计法变量对应有效等价类数的乘积:变量对应有效等价类数的乘积:11

127、1=1强一般等价类测试用例和弱一般等价类测试用例相同。强一般等价类测试用例和弱一般等价类测试用例相同。为什么为什么?测试用例测试用例月份月份日期日期年年预期输出预期输出T1615191219121912年年6 6月月1616日日10.3 软件测试方法软件测试方法3、弱健壮等价类测试用例设计法、弱健壮等价类测试用例设计法变量对应有效等价类数的最大值变量对应有效等价类数的最大值 +各个变量的无效等各个变量的无效等价类数之和:价类数之和: MAX(1,1,1)+2+2+2=7测试用例测试用例月份月份日期日期年年预期输出预期输出WR161519121912年年6月月16日日WR2-1151912月份不

128、在有效值内月份不在有效值内WR313151912月份不在有效值内月份不在有效值内WR46-11912日期不在有效值内日期不在有效值内WR56321912日期不在有效值内日期不在有效值内WR66151811年不在有效值内年不在有效值内WR76152013年不在有效值内年不在有效值内10.3 软件测试方法软件测试方法4、强健壮等价类测试用例设计法、强健壮等价类测试用例设计法(变量对应有效等价类数(变量对应有效等价类数+变量的无效等价类数)的变量的无效等价类数)的乘积:(乘积:(1+2) (1+2) (1+2) =27部分强健壮等价类测试用例:部分强健壮等价类测试用例:测试用例测试用例月份月份日期日

129、期年年预期输出预期输出SR1-1151912月份不在有效值内月份不在有效值内SR26-11912日期不在有效值内日期不在有效值内SR36151811年不在有效值内年不在有效值内SR4-1-11912月份和日期不在有效值内月份和日期不在有效值内SR56-11811日期和年不在有效值内日期和年不在有效值内SR6-1151811月份和年不在有效值内月份和年不在有效值内SR7-1-11811月份月份, ,日期和年不在有效值内日期和年不在有效值内10.3 软件测试方法软件测试方法思考:对日期进行处理的方法思考:对日期进行处理的方法如果不是某个月的最后一天,则函数会直接对日如果不是某个月的最后一天,则函数

130、会直接对日期加期加1到了月末,下一个日期是到了月末,下一个日期是1,月份加,月份加1到了年末,下一个日期的日期和月份都会复位到到了年末,下一个日期的日期和月份都会复位到1,年加,年加1闰年问题要确定有关的月的最后一天闰年问题要确定有关的月的最后一天10.3 软件测试方法软件测试方法其他等价类划分:按照对日期进行处理的划分其他等价类划分:按照对日期进行处理的划分M1=月份月份:每月有每月有30天天M2=月份月份:每月有每月有31天,天,12月除外月除外M3=月份月份:此月是此月是12月月M4=月份月份:此月是此月是2月月D1=日期日期:1=日期日期0 4种可能的输出:等边三角形、等腰三角形、普通

131、三角种可能的输出:等边三角形、等腰三角形、普通三角形、不构成三角形形、不构成三角形试用前述几种等价类测试用例设计法设计测试用例。试用前述几种等价类测试用例设计法设计测试用例。10.3 软件测试方法软件测试方法划分等价类划分等价类(1)先根据输入限制条件粗分等价类)先根据输入限制条件粗分等价类输入入变量量有效等价有效等价类无效等价无效等价类aa0a0bb0b0cc0c010.3 软件测试方法软件测试方法(2)再根据)再根据输出输出值域细分等价类(得到的等价类成为值域细分等价类(得到的等价类成为输出等价类)输出等价类)输出值域等价类:输出值域等价类:R1=:有三条边:有三条边a、b和和c的等边三角

132、形的等边三角形R2=:有三条边:有三条边a、b和和c的等腰三角形的等腰三角形R3=:有三条边:有三条边a、b和和c的普通三角形的普通三角形R4=:三条边:三条边a、b和和c不构成三角形不构成三角形10.3 软件测试方法软件测试方法输入入变量量有效等价有效等价类编号号无效等价无效等价类编号号aa0a|a,b,c组成等成等边三角形三角形1a05a|a,b,c组成等腰三角形成等腰三角形2a|a,b,c组成普通三角形成普通三角形3a|a,b,c不能构成三角形不能构成三角形4bb0b|a,b,c组成等成等边三角形三角形1b06b|a,b,c组成等腰三角形成等腰三角形2b|a,b,c组成普通三角形成普通三

133、角形3b|a,b,c不能构成三角形不能构成三角形4cc0c|a,b,c组成等成等边三角形三角形1c07c|a,b,c组成等腰三角形成等腰三角形2c|a,b,c组成普通三角形成普通三角形3c|a,b,c不能构成三角形不能构成三角形410.3 软件测试方法软件测试方法1、弱一般等价类测试用例设计法、弱一般等价类测试用例设计法变量对应有效等价类数的最大值:变量对应有效等价类数的最大值:MAX(1,1,1) +(4-1) =4测试用例用例abc预期期输出出WN1555等等边三角形三角形WN2223等腰三角形等腰三角形WN3345一般三角形一般三角形WN4412不构成三角形不构成三角形10.3 软件测试

134、方法软件测试方法2、强一般等价类测试用例设计法、强一般等价类测试用例设计法变量对应有效等价类数的乘积变量对应有效等价类数的乘积 :111 +(4-1) =4强一般等价类测试用例和弱一般等价类测试用例相同。强一般等价类测试用例和弱一般等价类测试用例相同。为什么为什么?由于变量由于变量a、b、c没有区间需要特殊处理,强一般等价没有区间需要特殊处理,强一般等价类与弱一般等价类测试用例相同类与弱一般等价类测试用例相同10.3 软件测试方法软件测试方法3、弱健壮等价类测试用例设计法、弱健壮等价类测试用例设计法变量对应有效等价类数的最大值变量对应有效等价类数的最大值 +各个变量的无效等各个变量的无效等价类

135、数:价类数:MAX(1,1,1) +1+1+1 +(4-1) =7测试用例用例abc预期期输出出WR1555等等边三角形三角形WR2223等腰三角形等腰三角形WR3345一般三角形一般三角形WR4412不构成三角形不构成三角形a,b,c取有效值10.3 软件测试方法软件测试方法3、弱健壮等价类测试用例设计法、弱健壮等价类测试用例设计法测试用例用例abc预期期输出出WR5-155a值超出超出输入入值定定义域域WR65-15b值超出超出输入入值定定义域域WR755-1c值超出超出输入入值定定义域域a,b,c取无效值10.3 软件测试方法软件测试方法4、强健壮等价类测试用例设计法、强健壮等价类测试用

136、例设计法(变量对应等价类数(变量对应等价类数+变量的无效输入区间数)的乘变量的无效输入区间数)的乘积:积: (1+1) (1+1) (1+1) +(4-1) = 11三维立方体的一个角三维立方体的一个角测试用例用例abc预期期输出出SR1555等等边三角形三角形SR2223等腰三角形等腰三角形SR3345一般三角形一般三角形SR4412不构成三角形不构成三角形a,b,c取有效值10.3 软件测试方法软件测试方法4、强健壮等价类测试用例设计法、强健壮等价类测试用例设计法测试用例用例abc预期期输出出SR5-155a取无效取无效值SR65-15b取无效取无效值SR755-1c取无效取无效值SR8-

137、1-15a、b取无效取无效值SR95-1-1b、c取无效取无效值SR10-15-1a、c取无效取无效值SR11-1-1-1a、b、c取无效取无效值a,b,c取无效值10.3 软件测试方法软件测试方法其他等价类划分:其他等价类划分:以以“整数相等整数相等”关系划分的等价类关系划分的等价类D1=: a=b=cD2=: a=b, acD3=: a=c, abD4=: b=c, abD5=: ab, ac, bc10.3 软件测试方法软件测试方法其他等价类划分:其他等价类划分:以两边之和与第三边关系划分的等价类以两边之和与第三边关系划分的等价类D6=: ab+cD7=: ba+cD8=: ca+b等价

138、类等价类D6的进一步划分的进一步划分D6=: a=b+cD6”=: ab+c思考题思考题对于三角形问题的改进版本,若规定对于三角形问题的改进版本,若规定0a,b,c 200,如何用前述几种等价类测试用例设计法设计测试用例如何用前述几种等价类测试用例设计法设计测试用例?思考题讲评思考题讲评输入入变量量有效等价有效等价类编号号无效等价无效等价类编号号a02006a|a,b,c不能构成三角形不能构成三角形4b02008b|a,b,c不能构成三角形不能构成三角形4c020010c|a,b,c不能构成三角形不能构成三角形4思考题讲评思考题讲评 4、强健壮等价类测试用例设计法、强健壮等价类测试用例设计法测

139、试用例:(变量对应有效等价类数测试用例:(变量对应有效等价类数+变量的无效等变量的无效等价类数)的乘积价类数)的乘积 (1+2) (1+2) (1+2) +(4-1) = 30思考题讲评思考题讲评测试用例用例abc预期期输出出SR1555等等边三角形三角形SR2223等腰三角形等腰三角形SR3345一般三角形一般三角形SR4412不构成三角形不构成三角形a,b,c取有效值思考题讲评思考题讲评测试用例用例abc预期期输出出SR5-155a取无效取无效值SR65-15b取无效取无效值SR755-1c取无效取无效值SR8-1-15a、b取无效取无效值SR95-1-1b、c取无效取无效值SR10-15

140、-1a、c取无效取无效值SR11-1-1-1a、b、c取无效取无效值a,b,c取无效值思考题讲评思考题讲评测试用例用例abc预期期输出出SR1220155a取无效取无效值SR1352015b取无效取无效值SR1455201c取无效取无效值SR152012015a、b取无效取无效值SR165201201b、c取无效取无效值SR172015201a、c取无效取无效值SR18201201201a、b、c取无效取无效值a,b,c取无效值思考题讲评思考题讲评测试用例用例abc预期期输出出SR19-12015a、b取无效取无效值SR20201-15a、b取无效取无效值SR215-1201b、c取无效取无效

141、值SR225201-1b、c取无效取无效值SR23-15201a、c取无效取无效值SR242015-1a、c取无效取无效值a,b,c取无效值思考题讲评思考题讲评测试用例用例abc预期期输出出SR25-1201201a、b、c取无效取无效值SR26201-1201a、b、c取无效取无效值SR27201201-1a、b、c取无效取无效值SR28-1-1201a、b、c取无效取无效值SR29201-1-1a、b、c取无效取无效值SR30-1201-1a、b、c取无效取无效值a,b,c取无效值10.3 软件测试方法软件测试方法边界值分析法边界值分析法为什么使用边界值分析法?为什么使用边界值分析法?长期

142、的测试工作经验告诉我们,长期的测试工作经验告诉我们,大量的错误是发大量的错误是发生在输入或输出范围的边界上(极值附近)生在输入或输出范围的边界上(极值附近),而,而不是发生在输入输出范围的内部。例如:不是发生在输入输出范围的内部。例如:计数器常常计数器常常“少记一次少记一次”C语言程序中数组下标:语言程序中数组下标:int A10:A0A9 A1A10 循环条件可能在应该给出循环条件可能在应该给出 时给出了时给出了10.3 软件测试方法软件测试方法什么是边界值分析法?什么是边界值分析法?边界值分析法边界值分析法就是对输入或输出的边界值进行测就是对输入或输出的边界值进行测试的一种黑盒测试方法。试

143、的一种黑盒测试方法。基本原理:针对各种边界情况,从中标识测试用基本原理:针对各种边界情况,从中标识测试用例,可以查出更多的错误。例,可以查出更多的错误。通常边界值分析法是作为对等价类划分法的补充,通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。这种情况下,其测试用例来自等价类的边界。10.3 软件测试方法软件测试方法如何确定边界值?如何确定边界值?基本思想:对每个变量,在下面几处取值基本思想:对每个变量,在下面几处取值略小于最小略小于最小值min-最小最小值min略大于最小略大于最小值min+正常正常值nom略小于最大略小于最大值max-最大最大值max略大

144、于最大略大于最大值max+10.3 软件测试方法软件测试方法边界条件测试用例设计法边界条件测试用例设计法一般边界条件测试用例设计法(普通、一般)一般边界条件测试用例设计法(普通、一般)健壮性边界条件测试用例设计法(普通、健壮)健壮性边界条件测试用例设计法(普通、健壮)最坏边界条件测试用例设计法(最坏、一般)最坏边界条件测试用例设计法(最坏、一般)健壮最坏边界条件测试用例设计法(最坏、健壮)健壮最坏边界条件测试用例设计法(最坏、健壮)区分边界值分析方法:区分边界值分析方法:正常值与健壮值正常值与健壮值:不考虑:不考虑/考虑无效取值范围(考虑无效取值范围(min-、max+)普通与最坏情况普通与最

145、坏情况:基于:基于“单缺陷单缺陷”假设假设/“多缺陷多缺陷”假设(单个变量取极值、多个变量取极值)假设(单个变量取极值、多个变量取极值)10.3 软件测试方法软件测试方法示例:用不同边界值分析方法设计测试用例示例:用不同边界值分析方法设计测试用例对于函数对于函数F(X1,X2),其输入变量),其输入变量X1和和X2的取值边界定的取值边界定义如下:义如下:aX1 b ; cX2 d 试用前述几种边界条件测试用例设计法设计测试用例试用前述几种边界条件测试用例设计法设计测试用例边界条件坐标图如下边界条件坐标图如下adcbx2x110.3 软件测试方法软件测试方法1、一般边界条件一般边界条件测试用例设

146、计法测试用例设计法每次保留程序中一个变量,让其余的变量取正常每次保留程序中一个变量,让其余的变量取正常值,被保留的变量依次取值,被保留的变量依次取min、min+、nom、max-和和max。 对程序中的每个变量重复对程序中的每个变量重复adcbx2x110.3 软件测试方法软件测试方法示例示例注:(注:(X1nom,X2nom)重复出现)重复出现测试用例用例X1X2预期期输出出T1X1nomX2minF1T2X1nomX2min+F2T3X1nomX2nomF3T4X1nomX2max-F4T5X1nomX2maxF5T6X1minX2nomF6T7X1min+X2nomF7T8X1max-

147、X2nomF8T9X1maxX2nomF9X1取正常值X2依次取各种边界值X2取正常值X1依次取各种边界值10.3 软件测试方法软件测试方法对于一个对于一个n变量函数,一般边界条件测试用例设计法变量函数,一般边界条件测试用例设计法生成的测试用例数为生成的测试用例数为4n+1个个10.3 软件测试方法软件测试方法2、健壮性边界条件健壮性边界条件测试用例设计法测试用例设计法每次保留程序中一个变量,让其余的变量取正常每次保留程序中一个变量,让其余的变量取正常值,被保留的变量依次取值,被保留的变量依次取min-、 min、min+、nom、max- 、 max和和max+ 。 对程序中的每个变量重复对

148、程序中的每个变量重复 adcbx2x110.3 软件测试方法软件测试方法对于一个对于一个n变量函数,健壮性边界条件测试用例设计变量函数,健壮性边界条件测试用例设计法生成的测试用例数为法生成的测试用例数为6n+1个个10.3 软件测试方法软件测试方法3、最坏边界条件最坏边界条件测试用例设计法测试用例设计法所有变量均可取所有变量均可取min、min+、nom、max-和和max这五个边界值中的任何一个。这五个边界值中的任何一个。测试用例为五个集合的笛卡儿乘积。测试用例为五个集合的笛卡儿乘积。adcbx2x110.3 软件测试方法软件测试方法对于一个对于一个n变量函数,最坏边界条件测试用例设计法变量

149、函数,最坏边界条件测试用例设计法生成的测试用例数为生成的测试用例数为5n个。个。一般边界条件测试与最坏边界条件测试的比较一般边界条件测试与最坏边界条件测试的比较一般边界条件测试用例是最坏边界条件测试用例一般边界条件测试用例是最坏边界条件测试用例的真子集的真子集最坏边界条件测试用例显然更彻底最坏边界条件测试用例显然更彻底最坏边界条件测试工作量大得多:最坏边界条件测试工作量大得多:4n+1、5n (指数级)(指数级)10.3 软件测试方法软件测试方法4、健壮最坏边界条件健壮最坏边界条件测试用例设计法测试用例设计法所有变量均可取所有变量均可取min-、 min、min+、nom、max- 、 max

150、和和max+这七个边界值中的任何一个。这七个边界值中的任何一个。测试用例为七个集合的笛卡儿乘积。测试用例为七个集合的笛卡儿乘积。adcbx2x110.3 软件测试方法软件测试方法对于一个对于一个n变量函数,健壮最坏边界条件测试用例设变量函数,健壮最坏边界条件测试用例设计法生成的测试用例数为计法生成的测试用例数为7n个。个。10.3 软件测试方法软件测试方法案例案例 1:三角形问题:三角形问题假设三角形问题假设三角形问题a、b、c,必须满足以下条件:,必须满足以下条件: 1 a,b,c 200试用前述几种边界条件测试用例设计法设计测试用例。试用前述几种边界条件测试用例设计法设计测试用例。对对a、

151、b、c,min-、 min、min+、nom、max- 、 max和和max+分别为:分别为:0、1、2、100、199、200、20110.3 软件测试方法软件测试方法1、一般边界条件测试用例设计法、一般边界条件测试用例设计法 测试用例测试用例4n+1(n=3)用例用例a ab bc c预期输出预期输出1 11001001001001 1等腰三角形等腰三角形2 21001001001002 2等腰三角形等腰三角形3 3100100100100100100等边三角形等边三角形4 4100100100100199199非三角形非三角形5 5100100100100200200等腰三角形等腰三角形

152、6 61001001 1100100等腰三角形等腰三角形7 71001002 2100100等腰三角形等腰三角形8 8100100199199100100等腰三角形等腰三角形9 9100100200200100100非三角形非三角形10101 1100100100100等腰三角形等腰三角形11112 2100100100100等腰三角形等腰三角形1212199199100100100100等腰三角形等腰三角形1313200200100100100100非三角形非三角形10.3 软件测试方法软件测试方法2、健壮性边界条件测试用例设计法、健壮性边界条件测试用例设计法 测试用例测试用例6n+1 (n

153、=3) 部分测试用例(部分测试用例(a取边界值的测试用例未列入)取边界值的测试用例未列入)用例用例a ab bc c预期输出预期输出1 11001001001000 0c c超过取值范围超过取值范围2 21001001001001 1等腰三角形等腰三角形3 31001001001002 2等腰三角形等腰三角形4 4100100100100100100等边三角形等边三角形5 5100100100100199199非三角形非三角形6 6100100100100200200等腰三角形等腰三角形7 7100100100100201201c c超过取值范围超过取值范围8 81001000 0100100

154、b b超过取值范围超过取值范围9 91001001 1100100等腰三角形等腰三角形10101001002 2100100等腰三角形等腰三角形1111100100199199100100等腰三角形等腰三角形1212100100200200100100非三角形非三角形1313100100201201100100b b超过取值范围超过取值范围10.3 软件测试方法软件测试方法3、最坏边界条件测试用例设计法、最坏边界条件测试用例设计法 (思考题)测试用例(思考题)测试用例5n(n=3)4、健壮最坏边界条件测试用例设计法、健壮最坏边界条件测试用例设计法(思考题)测试用例(思考题)测试用例7n(n=3

155、)10.3 软件测试方法软件测试方法案例案例 2 NextDate问题问题对于对于NextDate问题,试用前述几种边界条件测试用例问题,试用前述几种边界条件测试用例设计法设计测试用例。设计法设计测试用例。对对C1,min-、 min、min+、nom、max- 、 max和和max+分别为:分别为:0、1、2、6、11、12、13;对对C2,min-、 min、min+、nom、max- 、 max和和max+分别为:分别为:0、1、2、15、30、31、32;对对C3,min-、 min、min+、nom、max- 、 max和和max+分别为:分别为:1899、1900、1901、200

156、0、2099、2100、2101;10.3 软件测试方法软件测试方法1、一般边界条件测试用例设计法、一般边界条件测试用例设计法2、健壮性边界条件测试用例设计法、健壮性边界条件测试用例设计法3、最坏边界条件测试用例设计法、最坏边界条件测试用例设计法4、健壮最坏边界条件测试用例设计法、健壮最坏边界条件测试用例设计法(思考题)(思考题)10.3 软件测试方法软件测试方法思考:特殊值测试思考:特殊值测试边界值分析假定边界值分析假定n个变量是相互独立的,没有考虑个变量是相互独立的,没有考虑这些变量之间的相互依赖关系。前述次日问题的这些变量之间的相互依赖关系。前述次日问题的边界值分析测试用例是不充分的:边

157、界值分析测试用例是不充分的:没有强调没有强调2月和闰年月和闰年月、日、年变量之间存在着依赖关系月、日、年变量之间存在着依赖关系特殊值测试使用领域知识和类似程序的经验来开特殊值测试使用领域知识和类似程序的经验来开发测试用例的特殊值发测试用例的特殊值设计多个测试用例会涉及设计多个测试用例会涉及2月月28日、日、2月月29日和日和闰年闰年10.3 软件测试方法软件测试方法边界值分析的原则边界值分析的原则:1.如果输入条件规定了值的范围,则应取刚达到这个范围的如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入边界的值,以及刚刚超越这个范围边界的值作为测

158、试输入数据(数据( min-、min、min+、nom、max- 、max、max+)例如,如果程序的规格说明中规定:例如,如果程序的规格说明中规定:“重量在重量在10公斤至公斤至50公斤范围内的邮件,其邮费计算公式为公斤范围内的邮件,其邮费计算公式为”。作为。作为测试数据,我们应取测试数据,我们应取10及及50,还应取,还应取10.01,49.99,9.99及及50.01等。等。2.如果输入条件规定了值的个数,则用最大个数,最小个数,如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据。比最小个数少一,比最大个数多一的数作为测试数据。例如,一个输

159、入文件应包括例如,一个输入文件应包括1255个记录,则测试数据个记录,则测试数据可取可取1和和255,还应取,还应取0及及256等。等。10.3 软件测试方法软件测试方法3.将规则将规则1和和2应用于输出条件,即设计测试用例使输应用于输出条件,即设计测试用例使输出值达到边界值及其左右的值。出值达到边界值及其左右的值。例如,某程序的规格说明要求计算出例如,某程序的规格说明要求计算出每月保险金每月保险金扣除额为扣除额为0至至1165.25元元,其测试用例可取,其测试用例可取0.00及及1165.24、还可取一、还可取一0.01及及116526等。等。再如,一程序属于情报检索系统,要求每次再如,一程

160、序属于情报检索系统,要求每次最少最少显示显示1条、最多显示条、最多显示4条情报摘要条情报摘要,这时我们应考,这时我们应考虑的测试用例包括虑的测试用例包括1和和4,还应包括,还应包括0和和5等。等。 10.3 软件测试方法软件测试方法4.如果程序的规格说明给出的输入域或输出域是有序如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素集合,则应选取集合的第一个元素和最后一个元素作为测试用例。作为测试用例。5.特殊边界值:特殊边界值:默认值、空值、空格、零、无效数据等。默认值、空值、空格、零、无效数据等。10.3 软件测试方法软件测试方法常见的边界值:常见的边界值

161、:对对16-bit 的整数而言的整数而言 32767 和和 -32768 是边界是边界屏幕上光标在最左上、最右下位置屏幕上光标在最左上、最右下位置报表的第一行和最后一行报表的第一行和最后一行数组元素的第一个和最后一个数组元素的第一个和最后一个循环的第循环的第 0 次、第次、第 1 次和倒数第次和倒数第 2 次、最后一次次、最后一次10.3 软件测试方法软件测试方法前述边界值我们可以从软件的规格说明或常识中得到。前述边界值我们可以从软件的规格说明或常识中得到。那还有没有从软件的规格说明中看不到的边界值呢?那还有没有从软件的规格说明中看不到的边界值呢?有些边界值条件在软件内部,用户几乎看不到,但同

162、有些边界值条件在软件内部,用户几乎看不到,但同时确实属于检验范畴内的边界条件,称为内部边界值时确实属于检验范畴内的边界条件,称为内部边界值条件(次边界值条件、子边界值条件)。条件(次边界值条件、子边界值条件)。常见的内部边界值条件有下面两种:常见的内部边界值条件有下面两种:数值的边界值:数值的边界值:2的幂的幂字符的边界值:字符的边界值: ASCII码码10.3 软件测试方法软件测试方法内部边界值:数值的边界值内部边界值:数值的边界值计算机是基于二进制进行工作的,因此,软件的计算机是基于二进制进行工作的,因此,软件的任何数值运算都有一定的范围限制。任何数值运算都有一定的范围限制。例如,一个程序

163、有一个输入变量例如,一个程序有一个输入变量X的范围是(的范围是(0,10000),但是在程序内部,当),但是在程序内部,当X255时用一个字表示,那么,时用一个字表示,那么,255就是一个内部边界值。就是一个内部边界值。项项范围或值范围或值位(位(bit)0 或或 1字节(字节(byte)0 255字(字(word)065535(单字)或(单字)或 04294967295(双字)(双字)10.3 软件测试方法软件测试方法内部边界值:字符的边界值内部边界值:字符的边界值例如,某个文本框只接受字符例如,某个文本框只接受字符AZ,那么,字符,那么,字符“”和字符和字符“”就为内部边界值。因为在就为内

164、部边界值。因为在ASCII表中表中在在A之前,之前,在在Z之后。之后。在实际的测试用例设计中,需要将基本的软件设计要在实际的测试用例设计中,需要将基本的软件设计要求和程序定义的要求结合起来,即结合基本边界值条求和程序定义的要求结合起来,即结合基本边界值条件和内部边界值条件来设计有效的测试用例。件和内部边界值条件来设计有效的测试用例。10.3 软件测试方法软件测试方法黑盒测试和白盒测试的对比黑盒测试和白盒测试的对比测试方法测试方法测试方法测试方法特征特征特征特征依据依据依据依据测试人员测试人员测试人员测试人员测试驱动测试驱动测试驱动测试驱动程序程序程序程序黑盒测试黑盒测试黑盒测试黑盒测试只关心软

165、件的只关心软件的只关心软件的只关心软件的外部表现,不外部表现,不外部表现,不外部表现,不关心内部设计关心内部设计关心内部设计关心内部设计与实现与实现与实现与实现软件需求软件需求软件需求软件需求任何人(包任何人(包任何人(包任何人(包括开发人员、括开发人员、括开发人员、括开发人员、独立测试人独立测试人独立测试人独立测试人员)员)员)员)一般无需编一般无需编一般无需编一般无需编写额外的测写额外的测写额外的测写额外的测试驱动程序试驱动程序试驱动程序试驱动程序白盒测试白盒测试白盒测试白盒测试关注软件的内关注软件的内关注软件的内关注软件的内部设计与实现,部设计与实现,部设计与实现,部设计与实现,要跟踪源

166、代码要跟踪源代码要跟踪源代码要跟踪源代码的运行的运行的运行的运行设计文档设计文档设计文档设计文档由开发人员由开发人员由开发人员由开发人员兼任测试人兼任测试人兼任测试人兼任测试人员的角色员的角色员的角色员的角色需要编写额需要编写额需要编写额需要编写额外的测试驱外的测试驱外的测试驱外的测试驱动程序动程序动程序动程序10.3 软件测试方法软件测试方法不论黑盒测试还是白盒测试,是否可能穷举测试?不论黑盒测试还是白盒测试,是否可能穷举测试? 不能!不能!10.3 软件测试方法软件测试方法黑盒测试黑盒测试假设一个程序假设一个程序P有输入量有输入量X和和Y及输出量及输出量Z。在字长为。在字长为32位的计算机

167、上运行。若位的计算机上运行。若X、Y取整数,按黑盒方法取整数,按黑盒方法进行穷举测试:进行穷举测试:可能采用的测试数据组可能采用的测试数据组 232232264 如果测试一组数据需要如果测试一组数据需要1毫秒,一年工作毫秒,一年工作365 24小时,小时,完成所有测试需完成所有测试需5亿年亿年。10.3 软件测试方法软件测试方法白盒测试白盒测试对一个具有多重选择和循环嵌套的程序,不同的路径数目对一个具有多重选择和循环嵌套的程序,不同的路径数目可能是天文数字。可能是天文数字。给出一个小程序的流程图,它包括了一个执行给出一个小程序的流程图,它包括了一个执行20次的循环。次的循环。包含的不同执行路径

168、数达包含的不同执行路径数达520条,对每一条路径进行测试条,对每一条路径进行测试需要需要1毫秒,假定一年工作毫秒,假定一年工作365 24小时,要想把所有路小时,要想把所有路径测试完,需径测试完,需3170年。年。10.3 软件测试方法软件测试方法对软件系统进行实际测试时,应该联合使用各种设计对软件系统进行实际测试时,应该联合使用各种设计测试方案的方法,形成一种综合策略。通常的做法是,测试方案的方法,形成一种综合策略。通常的做法是,用黑盒法设计基本的测试方案,再用白盒法补充一些用黑盒法设计基本的测试方案,再用白盒法补充一些必要的测试方案。必要的测试方案。以下是各种测试方法选择的综合策略,可在实

169、际应用以下是各种测试方法选择的综合策略,可在实际应用过程中参考。过程中参考。首先进行等价类划分,包括输入条件和输出条件的等价划分,将无首先进行等价类划分,包括输入条件和输出条件的等价划分,将无限测试变成有限测试,这是减少工作量和提高测试效率的最有效方限测试变成有限测试,这是减少工作量和提高测试效率的最有效方法。法。在任何情况下都必须使用边界值分析方法。经验表明用这种方法设在任何情况下都必须使用边界值分析方法。经验表明用这种方法设计出测试用例发现程序错误的能力最强。计出测试用例发现程序错误的能力最强。对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度。如果没对照程序逻辑,检查已设计出的测试用例的

170、逻辑覆盖程度。如果没有达到要求的覆盖标准,应当再补充足够的测试用例。有达到要求的覆盖标准,应当再补充足够的测试用例。如果程序的功能说明中含有输入条件的组合情况,则应在一开始就如果程序的功能说明中含有输入条件的组合情况,则应在一开始就选用因果图法。选用因果图法。10.4 纠错纠错纠错要完成两方面的工作,一是确定错误的性质与位纠错要完成两方面的工作,一是确定错误的性质与位置;二是改正错误。置;二是改正错误。其中前一项工作的工作量约占整个纠错的其中前一项工作的工作量约占整个纠错的95%。测试与纠错是交替进行的。测试与纠错是交替进行的。10.4 纠错纠错纠错的方法纠错的方法 跟踪法:反向跟踪、正向跟踪

171、跟踪法:反向跟踪、正向跟踪演绎法,又称为病因排除法演绎法,又称为病因排除法10.4 纠错纠错归纳法归纳法测试法:测试纠错测试法:测试纠错试凑法试凑法10.4 纠错纠错纠错的辅助手段纠错的辅助手段打印语句。打印语句。调试语句或调试程序。调试语句或调试程序。转储转储(dump)命令和程序。命令和程序。交互式的自动纠错工具。交互式的自动纠错工具。10.4 纠错纠错纠错的原则纠错的原则重在思考。重在思考。避免紧张。避免紧张。修改要彻底。修改要彻底。防止纠错时又引入新的错误。防止纠错时又引入新的错误。10.5 对对OOA和和OOD模型的测试模型的测试测试测试OO系统:系统:测试的定义必须扩大,包括用于测

172、试的定义必须扩大,包括用于OOA和和OOD模模型的错误发现技术;型的错误发现技术;单元和集成测试策略必须有很大的改变;单元和集成测试策略必须有很大的改变;测试用例的设计必须考虑测试用例的设计必须考虑OO软件的独特性。软件的独特性。10.5 对对OOA和和OOD模型的测试模型的测试扩大测试的视角扩大测试的视角OOA和和OOD模型的复审是特别有用的,因为相同模型的复审是特别有用的,因为相同的语义结构(如类、属性、操作、消息)出现在的语义结构(如类、属性、操作、消息)出现在分析、设计和代码阶段。分析、设计和代码阶段。所有面向对象模型应该被测试(所有面向对象模型应该被测试(在这个语境内,在这个语境内,

173、术语术语“测试测试”代表正规的技术复审代表正规的技术复审),以保证在),以保证在模型的语法、语义和语用的语境内的正确性、完模型的语法、语义和语用的语境内的正确性、完整性和一致性。整性和一致性。10.5 对对OOA和和OOD模型的测试模型的测试OOA和和OOD模型的正确性模型的正确性语法正确性基于符号是否合适使用,而且对每个语法正确性基于符号是否合适使用,而且对每个模型复审以保证其保持合适的建模约定。模型复审以保证其保持合适的建模约定。语义正确性必须基于模型对现实世界问题域的符语义正确性必须基于模型对现实世界问题域的符合度来判断,如果模型精确地反应了现实世界合度来判断,如果模型精确地反应了现实世

174、界(到这样一个细节程度,它对模型复审时所处的(到这样一个细节程度,它对模型复审时所处的开发阶段是合适的),则它语义是正确的。开发阶段是合适的),则它语义是正确的。10.5 对对OOA和和OOD模型的测试模型的测试OOA和和OOD模型的一致性模型的一致性对对OOA和和OOD模型的一致性判断可以通过考虑模型的一致性判断可以通过考虑模型中实体间的关系。模型中实体间的关系。 为了评估一致性,应该检为了评估一致性,应该检查每个类及其和其他类的连接。查每个类及其和其他类的连接。可运用类可运用类责任责任协作者(协作者(CRC)模型和对象)模型和对象关系图。关系图。10.5 对对OOA和和OOD模型的测试模型

175、的测试OOA模型(略):模型(略):再次考察再次考察CRC模型和对象模型和对象关系模型,进行交叉检查以关系模型,进行交叉检查以保证由保证由OOA模型所蕴含的协作适当地反应在二者中。模型所蕴含的协作适当地反应在二者中。检查每个检查每个CRC索引卡片的描述以确定某被受权的责任是索引卡片的描述以确定某被受权的责任是否是协作者的定义的一部分。否是协作者的定义的一部分。反转该连接以保证每个被请求服务的协作者正在接收来反转该连接以保证每个被请求服务的协作者正在接收来自合理源的请求。自合理源的请求。使用在第使用在第(3)步检查的反转连接,确定是否可能需要其他步检查的反转连接,确定是否可能需要其他的类或责任是

176、否被合适地在类之间进行分组。的类或责任是否被合适地在类之间进行分组。确定是否被广泛请求的责任可被组合为单个的责任。确定是否被广泛请求的责任可被组合为单个的责任。步骤步骤(1)到到(5)被迭代地应用到每个类,并贯穿被迭代地应用到每个类,并贯穿OOA模型模型的每次演化。的每次演化。10.5 对对OOA和和OOD模型的测试模型的测试OOD模型(略)模型(略) :系统设计描述了构成产品的子系统、子系统被分系统设计描述了构成产品的子系统、子系统被分配到处理器的方式以及类到子系统的分配。对象配到处理器的方式以及类到子系统的分配。对象模型表示每个类的细节和实现类间的协作所必需模型表示每个类的细节和实现类间的

177、协作所必需的消息序列活动。的消息序列活动。通过检查在通过检查在OOA阶段开发的对象阶段开发的对象行为模型,和行为模型,和映射需要的系统行为到被设计用于完成该行为的映射需要的系统行为到被设计用于完成该行为的子系统来进行系统设计的复审。子系统来进行系统设计的复审。对象模型应该针对对象对象模型应该针对对象关系网络来测试,以保关系网络来测试,以保证所有设计对象包含实现为每张证所有设计对象包含实现为每张CRC索引卡片定索引卡片定义的协作所必需的属性和操作。义的协作所必需的属性和操作。此外,使用传统的检查技术来实现操作细节的详此外,使用传统的检查技术来实现操作细节的详细规约(即实现操作的算法)。细规约(即

178、实现操作的算法)。10.6 面向对象的测试策略面向对象的测试策略在在OO语境中的单元测试语境中的单元测试单元的概念:当考虑面向对象软件时,最小的可单元的概念:当考虑面向对象软件时,最小的可测试单位是封装的类或对象,类包含一组不同的测试单位是封装的类或对象,类包含一组不同的操作,并且某特殊操作可能作为一组不同类的一操作,并且某特殊操作可能作为一组不同类的一部分存在。部分存在。不再孤立地测试单个操作,而是将操作作为类的不再孤立地测试单个操作,而是将操作作为类的一部分。一部分。对对OO软件的类测试等价于传统软件的单元测试。软件的类测试等价于传统软件的单元测试。和传统软件的单元测试不一样,和传统软件的

179、单元测试不一样,OO软件的类测试软件的类测试往往关注模块的算法细节和模块接口间流动的数往往关注模块的算法细节和模块接口间流动的数据,它是由封装在类中的操作和类的状态行为所据,它是由封装在类中的操作和类的状态行为所驱动的。驱动的。10.6 面向对象的测试策略面向对象的测试策略在在OO语境中的集成测试:两种策略语境中的集成测试:两种策略基于线程的测试:集成对回应系统的一个输入或基于线程的测试:集成对回应系统的一个输入或事件所需的一组类,每个线程被集成并分别测试,事件所需的一组类,每个线程被集成并分别测试,应用回归测试以保证不产生副作用。应用回归测试以保证不产生副作用。基于使用的测试:通过测试那些几

180、乎不使用服务基于使用的测试:通过测试那些几乎不使用服务器类的类(称为独立类)而开始构造系统,在独器类的类(称为独立类)而开始构造系统,在独立类测试完成后,下一层使用独立类的类(即依立类测试完成后,下一层使用独立类的类(即依赖类)被测试。这个依赖类层次的测试序列一直赖类)被测试。这个依赖类层次的测试序列一直持续到构造完整个系统。和传统集成不同,要尽持续到构造完整个系统。和传统集成不同,要尽可能避免使用驱动程序和桩模块作为替代操作。可能避免使用驱动程序和桩模块作为替代操作。集群测试:一群协作类(通过检查集群测试:一群协作类(通过检查CRC和对象和对象关关系模型而确定的)通过设计试图发现协作中错误的

181、测系模型而确定的)通过设计试图发现协作中错误的测试用例而被测试。试用例而被测试。10.6 面向对象的测试策略面向对象的测试策略在在OO语境中的有效性测试语境中的有效性测试OO软件的有效性集中在用户可见的动作和用户可软件的有效性集中在用户可见的动作和用户可识别的系统输出。识别的系统输出。使用实例提供了在用户交互需求中很可能发现错使用实例提供了在用户交互需求中很可能发现错误的一个场景。传统的黑盒测试方法可被用于驱误的一个场景。传统的黑盒测试方法可被用于驱动有效性测试。测试用例可以从对象动有效性测试。测试用例可以从对象行为模型行为模型和作为和作为OOA的一部分的事件流图中导出。的一部分的事件流图中导

182、出。10.7 OO软件的测试用例设计软件的测试用例设计对对OO测试用例设计的整体方法:测试用例设计的整体方法:1.每个测试用例应该被唯一标识,并且和将被测试的每个测试用例应该被唯一标识,并且和将被测试的类显式地相关联。类显式地相关联。2.应该陈述测试的目的。应该陈述测试的目的。3.对每个测试应该开发一组测试步骤,应该包含:对每个测试应该开发一组测试步骤,应该包含:将被测试的对象的一组特定状态。将被测试的对象的一组特定状态。将作为测试的结果使用的一组消息和操作。将作为测试的结果使用的一组消息和操作。当测试对象时可能产生的一组例外。当测试对象时可能产生的一组例外。 一组外部条件一组外部条件(即为了

183、适当地进行测试而必须存即为了适当地进行测试而必须存在的软件的外部环境的变化在的软件的外部环境的变化)。辅助理解或实现测试的补充信息。辅助理解或实现测试的补充信息。10.7 OO软件的测试用例设计软件的测试用例设计OO概念的测试用例设计的含义概念的测试用例设计的含义封装可能会成为测试的障碍。封装可能会成为测试的障碍。继承也造成了对测试用例设计者的挑战。继承也造成了对测试用例设计者的挑战。10.7 OO软件的测试用例设计软件的测试用例设计传统测试用例设计方法的可用性传统测试用例设计方法的可用性白盒测试方法可用于对为类定义的操作的测试,白盒测试方法可用于对为类定义的操作的测试,基本路径、循环测试或数

184、据流技术可以帮助保证基本路径、循环测试或数据流技术可以帮助保证已经测试了操作中的每一条语句。已经测试了操作中的每一条语句。黑盒测试方法对传统软件工程方法开发的系统和黑盒测试方法对传统软件工程方法开发的系统和OO系统同样适用,用例可以为黑盒及基于状态的系统同样适用,用例可以为黑盒及基于状态的测试的设计提供有用的输入。测试的设计提供有用的输入。10.7 OO软件的测试用例设计软件的测试用例设计基于故障的测试基于故障的测试完成基于故障的测试所需的初步计划是从分析模完成基于故障的测试所需的初步计划是从分析模型开始。型开始。查找似乎可能的故障(即系统实现中有可能产生查找似乎可能的故障(即系统实现中有可能

185、产生错误的方面),为了确定是否存在这些故障,设错误的方面),为了确定是否存在这些故障,设计测试用例以测试设计或代码。计测试用例以测试设计或代码。10.7 OO软件的测试用例设计软件的测试用例设计根据根据OOP的方法,面向对象编程可能对测试有几的方法,面向对象编程可能对测试有几种方式的影响。种方式的影响。某些类型的故障变得几乎不可能某些类型的故障变得几乎不可能(不值得去不值得去测试测试)。某些类型的故障变得更加可能某些类型的故障变得更加可能(值得进行测值得进行测试试)。出现某些新的故障类型。出现某些新的故障类型。测试用例和类层次:继承使测试过程变得更复杂。测试用例和类层次:继承使测试过程变得更复

186、杂。语境不同语境不同10.7 OO软件的测试用例设计软件的测试用例设计基于场景的测试设计基于场景的测试设计基于场景的测试关心用户做什么而不是产品做什么。基于场景的测试关心用户做什么而不是产品做什么。它意味着捕获用户必须完成的,然后应用它们或它它意味着捕获用户必须完成的,然后应用它们或它们的变体进行测试。们的变体进行测试。基于场景的测试往往在单个测试中处理多个子系统基于场景的测试往往在单个测试中处理多个子系统(用户并不限制他们自己一次只用一个子系统)。(用户并不限制他们自己一次只用一个子系统)。10.7 OO软件的测试用例设计软件的测试用例设计测试表层结构和深层结构测试表层结构和深层结构表层结构

187、指表层结构指OO程序的外部可观察的结构,即对终程序的外部可观察的结构,即对终端用户立即可见的结构。不管接口是什么,表层端用户立即可见的结构。不管接口是什么,表层结构测试仍然基于用户任务进行。结构测试仍然基于用户任务进行。深层结构指深层结构指OO程序的内部技术细节,即通过检查程序的内部技术细节,即通过检查设计和代码而理解的结构。深层结构测试被设计设计和代码而理解的结构。深层结构测试被设计用以测试作为用以测试作为OO系统的子系统和对象设计的一部系统的子系统和对象设计的一部分而建立的依赖、行为和通信机制。分而建立的依赖、行为和通信机制。10.8 其他专门环境要求的测试其他专门环境要求的测试GUI测试

188、测试对于窗口:对于窗口:1.窗口能否基于相关的输入或菜单命令适当地打开窗口能否基于相关的输入或菜单命令适当地打开?2.窗口能否改变大小、移动和滚动窗口能否改变大小、移动和滚动?3.窗口中的数据内容能否用鼠标、功能键、方向箭头和窗口中的数据内容能否用鼠标、功能键、方向箭头和键盘访问键盘访问?4.当被覆盖并重调用后,窗口能否正确地再生当被覆盖并重调用后,窗口能否正确地再生?5.需要时能否使用所有窗口相关的功能需要时能否使用所有窗口相关的功能? 6.所有窗口相关的功能是可操作的吗所有窗口相关的功能是可操作的吗?7.是否有相关的下拉式菜单、工具条、滚动条、对话框、是否有相关的下拉式菜单、工具条、滚动条

189、、对话框、按钮、图标和其他控制可为窗口所用,并适当地显示按钮、图标和其他控制可为窗口所用,并适当地显示?10.8 其他专门环境要求的测试其他专门环境要求的测试8.显示多个窗口时,窗口的名称是否被适当地表示显示多个窗口时,窗口的名称是否被适当地表示?9.活动窗口是否被适当地加亮活动窗口是否被适当地加亮?10.如果使用多任务,是否所有的窗口被实时更新如果使用多任务,是否所有的窗口被实时更新?11.多次或不正确按鼠标是否会导致无法预料的副作用多次或不正确按鼠标是否会导致无法预料的副作用?12.窗口的声音和颜色提示及窗口的操作顺序是否符合窗口的声音和颜色提示及窗口的操作顺序是否符合需求需求?13.窗口

190、是否正确地关闭窗口是否正确地关闭?10.8 其他专门环境要求的测试其他专门环境要求的测试对于下拉式菜单和鼠标操作:对于下拉式菜单和鼠标操作:1.菜单条是否显示在合适的语境中菜单条是否显示在合适的语境中?2.应用程序的菜单条是否显示系统相关的特性应用程序的菜单条是否显示系统相关的特性(如时如时钟显示钟显示)?3.下拉式操作能正确地工作吗下拉式操作能正确地工作吗?4.菜单、调色板和工具条是否能正确地工作菜单、调色板和工具条是否能正确地工作?5.是否适当地列出了所有的菜单功能和下拉式子功能是否适当地列出了所有的菜单功能和下拉式子功能?6.是否可以通过鼠标访问所有的菜单功能是否可以通过鼠标访问所有的菜

191、单功能?7.文本字体、大小和格式是否正确文本字体、大小和格式是否正确?8.是否能够用其他的文本命令激活每个菜单的功能是否能够用其他的文本命令激活每个菜单的功能?9.菜单功能是否随当前的窗口操作加亮或变灰菜单功能是否随当前的窗口操作加亮或变灰?10.8 其他专门环境要求的测试其他专门环境要求的测试10.菜单功能是否正确执行菜单功能是否正确执行?11.菜单功能的名字是否具有自解释性菜单功能的名字是否具有自解释性?12.菜单项是否有帮助,是否语境相关菜单项是否有帮助,是否语境相关?13.在整个交互式语境中,是否可以识别鼠标操作在整个交互式语境中,是否可以识别鼠标操作?14.如果要求多次点击鼠标,是否

192、能够在语境中正确识如果要求多次点击鼠标,是否能够在语境中正确识别别? 15.如果鼠标有多个按钮,是否能够在语境中正确识别如果鼠标有多个按钮,是否能够在语境中正确识别?16.光标、处理指示器和识别指针是否随操作恰当地改光标、处理指示器和识别指针是否随操作恰当地改变变?10.8 其他专门环境要求的测试其他专门环境要求的测试对于数据项:对于数据项:1.字母数字数据项是否能够正确回显,并输入到系统字母数字数据项是否能够正确回显,并输入到系统中中?2.图形模式的数据项图形模式的数据项(如滑动条如滑动条)是否正常工作是否正常工作?3.是否能够识别非法数据是否能够识别非法数据?4.数据输入消息是否可理解数据

193、输入消息是否可理解?10.8 其他专门环境要求的测试其他专门环境要求的测试文档测试文档测试文档测试可以分为两个步骤。文档测试可以分为两个步骤。第一步为正式的技术复审,检查文档的编辑错误;第一步为正式的技术复审,检查文档的编辑错误;第二步是活性测试,结合实际程序的使用而使用文第二步是活性测试,结合实际程序的使用而使用文档。活性测试可使用类似于黑盒测试方法,基于图档。活性测试可使用类似于黑盒测试方法,基于图的测试可用于描述程序的使用。等价划分和边界值的测试可用于描述程序的使用。等价划分和边界值分析可以定义输入类型及其相关的交互,然后就可分析可以定义输入类型及其相关的交互,然后就可以按照文档跟踪程序

194、的使用。以按照文档跟踪程序的使用。10.8 其他专门环境要求的测试其他专门环境要求的测试实时系统测试实时系统测试实时系统的综合性测试策略:实时系统的综合性测试策略:1.任务测试任务测试2.行为测试行为测试3.任务间测试任务间测试4.系统测试系统测试利用状态变迁图和控制规约,测试者可开发一系列可利用状态变迁图和控制规约,测试者可开发一系列可能的中断及其将发生的处理,设计测试用例。能的中断及其将发生的处理,设计测试用例。小结小结软件测试的目的是发现错误。为了完成这个目标,需软件测试的目的是发现错误。为了完成这个目标,需要计划和进行一系列的测试步骤,即单元、集成、确要计划和进行一系列的测试步骤,即单

195、元、集成、确认和系统测试。单元测试和集成测试侧重于验证一个认和系统测试。单元测试和集成测试侧重于验证一个模块的功能,以及把模块集成到程序结构中去。确认模块的功能,以及把模块集成到程序结构中去。确认测试用来验证软件需求,在软件集成为一个大的系统测试用来验证软件需求,在软件集成为一个大的系统时才进行系统测试。时才进行系统测试。每一个测试步骤都是通过一系列有助于测试用例设计每一个测试步骤都是通过一系列有助于测试用例设计的系统化测试技术来完成的。有两种不同的测试用例的系统化测试技术来完成的。有两种不同的测试用例设计技术:白盒测试和黑盒测试。设计技术:白盒测试和黑盒测试。OO测试的策略和战术与传统软件有很大的不同。测试的策略和战术与传统软件有很大的不同。OO测试的视角扩大到包括复审分析和设计模型,此测试的视角扩大到包括复审分析和设计模型,此外,测试的焦点从过程构件(模块)移向了类。外,测试的焦点从过程构件(模块)移向了类。

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

最新文档


当前位置:首页 > 高等教育 > 研究生课件

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