您好,欢迎访问三七文档
软件测试技术与实践SoftwareTestingTechnologyandPractice第3章软件测试过程3.1概述3.2软件测试计划3.2.1制定测试计划的作用和原则3.2.2测试计划的内容3.3测试用例3.3.1测试用例定义3.3.2测试用例在软件测试中的作用3.3.3测试用例设计的基本原则3.3.4测试用例设计应注意的问题3.3.5测试用例的编写标准3.4软件测试的过程模型3.4.1V模型3.4.2W模型3.4.3H模型3.4.4各种测试模型的使用3.5软件测试实施过程3.5.1单元测试3.5.2集成测试3.5.3确认测试3.5.4系统测试3.5.5验收测试3.5.6回归测试3.1概述在统一软件开发过程(RationalUnifiedProcess,RUP)中,测试生命周期分为测试计划、测试设计、测试开发、测试执行、缺陷跟踪和评估测试等。软件测试过程软件测试过程中必需的基本测试活动:拟定软件测试计划(Plans)编制软件测试大纲(Outlines)设计和生成测试用例(TestCaseGeneration)实施测试(Execution)生成软件测试报告(SoftwareTestingReports)3.2软件测试计划测试计划就是描述所有要完成的测试工作,包括被测试项目的背景、目标、范围、方式、资源、进度安排、测试组织,以及与测试有关的风险等方面。测试计划规定测试活动的范围、方法、资源和进度;明确正在测试的项目、要测试的特性,要执行的测试任务、每个任务的负责人,以及与计划相关的风险。3.2.1制定测试计划的作用和原则1.制定软件测试计划的作用1)使软件测试工作进行更顺利2)促进项目参加人员彼此的沟通3)及早发现和修正软件规格说明书的问题4)使软件测试工作更易于管理2.测试计划制定原则1)制定测试计划应尽早开始2)保持测试计划的灵活性3)保持测试计划简洁和易读4)尽量争取多渠道评审测试计划5)计算测试计划的投入3.一份好的测试计划书应具备的特点1)能有效引导整个软件测试工作正常运行2)能使测试高效地进行3)提供了明确的测试目标、测试策略、具体步骤及测试标准4)既强调测试重点,也重视测试的基本覆盖率5)尽可能充分利用了公司现有的人力和物力资源6)列举的所有数据都必须是准确的7)对测试工作的安排有一定的灵活性3.2.2测试计划的内容实践表明,制定测试计划时,使用正规化文档通常比较好。根据IEEE829-1998软件测试文档编制标准的建议,测试计划包含了16个大纲要项:1.测试计划标识符2.介绍3.测试项4.需要测试的功能5.方法(策略)6.不需要测试的功能7.测试项通过/失败的标准8.测试中断和恢复的规定9.测试完成所提交的材料10.测试任务11.环境需求12.测试人员的工作职责13.人员安排与培训需求14.进度表15.潜在的问题和风险16.审批3.3测试用例测试用例的设计和编制是软件测试活动中最重要的。测试用例是测试工作的指导,是软件测试的必须遵守的准则,更是软件测试质量稳定的根本保障3.3.1测试用例定义IEEE610.12给出测试用例的定义如下:1)测试用例是一组输入(运行前提条件)和为某特定的目标而生成的预期结果及与之相关的测试规程的一个特定集合。2)测试用例是一个详细说明测试的输入、期望输出和为一测试项所准备的一组执行条件。3.3.2测试用例在软件测试中的作用1.指导测试的实施2.规划测试数据的准备3.保证软件的可维护性和可复用性4.评估测试结果的度量基准5.分析缺陷的标准3.3.3测试用例设计的基本原则1.测试用例的代表性。能够代表并覆盖各种合理的和不合理的、合法的和非法的、边界的和越界的、以及极限的输入数据、操作和环境设置等。2.测试结果的可判定性。测试执行结果的正确性是可判定的,每一个测试用例都应有相应的期望结果。3.测试结果的可再现性。对同样的测试用例,系统的执行结果应当是相同的。3.3.4测试用例设计应注意的问题1.把测试输入数据设计方法等同于测试用例设计方法2.强调测试用例设计得越详细越好3.追求测试用例设计“一步到位”4.让测试新人设计测试用例3.3.5测试用例的编写标准在ANSI/IEEE829标准中列出了和测试计划相关的测试用例编写规范和模板。标准模板中主要元素如下:P491.标识符(identification)2.测试项(testitem)3.输入标准(inputcriteria)4.输出标准(outputcriteria)5.测试用例之间的关联3.4软件测试的过程模型目前主流的软件开发模型主要有:瀑布模型、原型模型、螺旋模型、增量模型、渐进模型、快速软件开发(RAD)以及Rational统一过程(RUP)等3.4.1V模型1.V模型建立需求分析与系统设计单元测试详细设计概要设计编码集成测试确认测试与系统测试用户需求验收测试2.V模型应用V模型的软件测试策略既包括低层测试又包括了高层测试,低层测试是为了源代码的正确性,高层测试是为了使整个系统满足用户的需求。V模型存在一定的局限性:它把测试过程作为在需求分析、概要设计、详细设计及编码之后的一个阶段。需求分析阶段隐藏的问题一直到后期的验收测试才被发现。3.4.2W模型1.W模型建立需求分析与系统设计单元测试详细设计概要设计编码集成测试用户需求验收测试系统测试集成实施支付需求分析与设计V&V系统测试准备概要设计V&V集成测试准备详细设计V&V单元测试准备用户需求V&V验收测试准备2.W模型应用W模型强调:测试伴随着整个软件开发周期,而且测试的对象不仅仅是程序,需求、功能和设计同样要测试。测试与开发是同步进行的,从而有利于尽早地发现问题。局限性:W模型认为软件开发和软件测试为一种线性的前后关系,需要有严格的指令表示上一阶段完全结束,才可以正式开始下一个阶段。这样就无法支持迭代、自发性以及变更调整。3.4.3H模型1.H模型建立H模型将测试活动完全独立出来,形成一个完全独立的流程,将测试准备活动和测试执行活动清晰地体现出来。测试准备测试就绪点测试执行测试流程软件测试H模型其他流程(如设计流程)2.H模型应用在H模型中,软件测试模型是一个独立的流程,贯穿于整个产品周期,与其他流程并发地进行。当某个测试时间点就绪时,软件测试即从测试准备阶段进入测试执行阶段。3.4.4各种测试模型的使用在实际的工作中,我们要灵活地运用各种模型的优点,在W模型的框架下,运用H模型的思想进行独立地测试,并同时将测试与开发紧密结合,寻找恰当的就绪点开始测试并反复迭代测试,最终保证按期完成预定目标。3.5软件测试实施过程软件测试实施过程可分为单元测试、集成测试、确认测试、系统测试、验收测试和回归测试。下面一一进行介绍。3.5.1单元测试1.定义:单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正常。通常而言,一个单元测试是用于判断某个特定条件或场景下某个特定函数的行为。单元测试是在软件开发过程中进行的最低级别的测试活动,其测试的对象是软件设计的最小单位。2.单元测试的任务单元测试针对每个程序模块进行,解决以下五个方面的问题:1)模块接口测试2)模块局部数据结构测试3)错误处理检测4)路径测试5)模块边界条件测试3.单元测试方法在对每个模块进行单元测试时,需要考虑它和周围模块之间的相互联系。为模拟这一联系,在进行单元测试时,必须设置若干个辅助测试模块,这些辅助模块分为两种:1)驱动模块。相当于被测模块的主程序,用以模拟被测模块的上级模块,用于接收测试数据,并把这些数据传送给被测模块,启动被测模块,最后输出实测结果。2)桩模块。相当于被测模块调用的子模块,用以模拟被测模块的下级模块。驱动模块被测试模块测试用例测试结果输出Stub#1Stub#2Stub#3Stub#4单元测试环境例3-1:单元测试实例某公司销售系统中关于数控机床的价格计算说明有:1)数控机床价格的起点是:基准价(baseprice)减去折扣(discount)。其中,基准价是数控机床的基本价格,折扣是公司给予的在基准价基础上的价格折扣;2)增加附加设备的附加价格(extraprice)。如果选择了3个或更多的附加设备,这些附加设备可以有10%的折扣。如果选择了5个或更多的附加设备,这些附加设备可以有15%的折扣;3)销售商提供的折扣只针对基准价,这些折扣不能相互叠加下面的JAVA方法用于计算总价格:doublecalculate_price(doublebaseprice,doubleextraprice,intextras,doublediscount){doubleaddon_discount,result;if(extras=3)addon_discount=10;elseif(extras=5)addon_discount=15;elseaddon_discount=0;if(discountaddon_discount)addon_discount=discount;result=baseprice/100.0*(100-discount)+extraprice/100.0*(100-addon_discount);returnresult;}这个程序有一个缺陷:对于extras不低于5的情况永远都不会被执行。测试人员使用相应的类的接口测试这个价格计算器,用适当的参数和数据调用calculate_price(),然后读取并记录函数调用的返回值。为了实现这样的测试,需要测试驱动模块,用来调用被测试组件(例如calculate_price()),并获得测试对象返回值。对于测试对象calculate_price(),可以设计一个非常简单的测试模块:booleantest_calculate_price(){doubleprice;booleantest_ok=true;//testcase01price=calculate_price(10000.0,1000.0,3,0);test_ok=test_ok&&(Math.abs(price-12900.0)0.001);//浮点数不能直接比较//testcase02price=calculate_price(25500.0,6000.0,6,0);test_ok=test_ok&&(Math.abs(price-34050.0)0.001);//testcase...//testresultreturntest_ok;}3.5.2集成测试1.定义:集成测试,也称组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如,结构图等)组装成为子系统或系统,进行集成测试。2.集成测试任务1)将各模块连接起来,检查模块相互调用时,数据经过接口是否丢失。2)将各个子功能组合起来,检查能否达到预期要求的各项功能。3)一个模块的功能是否会对另一个模块的功能产生不利的影响。4)全局数据结构是否有问题,会不会被异常修改。5)单个模块的误差积累起来,是否被放大,从而达到不可接受的程度。3.集成测试步骤1)确认组成一个完整系统的各模块之间的关系。2)评审模块之间的交互和通信需求,确认出模块间的接口。3)使用上述信息产生一套测试用例。4)采用增量式测试,依次将模块加入到系统,并测试新合并后的系统。4.集成测试方法1)非增式集成测试法非增量式测试是采用一步到位的方法来构造测试。对所有模块进行独立的单元测试后,按照程序结构图将各模块连接起来,把连接后的程序当作一个整体进行测试。非增式测试的缺点:当一次集成的模块较多时,非增式测试容易出现混乱。2)增式集成测试法增式集成测试法不是孤立地测试每一个模块,而是一开始就把待测模块与已测试过的模块集合连接起来。增式集成测试可以分为自顶向下增
本文标题:第3章软件测试过程
链接地址:https://www.777doc.com/doc-2156022 .html