第三章软件测试流程软件测试技术内容简介•测试是贯穿软件整个生命周期的一个系统的过程,包括单元测试、集成测试、确认测试、系统测试、验收测试等阶段。为确保测试工作的正常实施,一般在每个测试阶段中都要有测试计划、测试设计、测试执行和测试评估等基本步骤。•本章重点讲述测试流程中的单元测试、集成测试、确认测试、系统测试、验收测试等测试阶段的工作内容、实施手段及步骤,让读者弄清楚测试工作的基本过程,掌握在不同的阶段应该如何开展测试工作。本章要点•桩模块和驱动模块•集成测试策略•回归测试•性能测试内容•Web系统测试•验收测试3.1软件测试的过程•3.1.1软件测试基本过程–1.测试计划–2.测试设计阶段–3.测试执行阶段–4.测试评估阶段3.1.2与软件开发过程并行的测试流程•1.软件项目计划阶段•2.软件需求分析阶段•3.软件设计阶段•4.编码与单元测试阶段•5.集成测试•6.确认测试•7.系统测试•8.运行维护阶段3.2单元测试•3.2.1单元测试概述–单元测试是针对软件设计的最小单位——程序模块,进行正确性检验的测试工作。一般做法是由开发人员编写一小段测试代码,根据被测目标代码的应用场景,设计拥有合理覆盖度的输入条件,调用执行目标代码,然后判断输出结果是否与预期一致,被测试目标代码一般应具体到类的方法层面上。–单元测试的目的在于发现目标代码中可能存在的错误。–单元测试是程序员的一项基本职责,程序员必须对自己所编写的代码保持认真负责的态度,这也是程序员的基本职业素质之一。3.2.2单元测试步骤•1.单元测试实施步骤1)制定测试计划和测试方案(包括测试工具的选择)。确定测试内容,初步制定测试策略,确定测试资源,安排测试进度,选择测试工具。2)根据计划和方案及相关输入文档编写测试用例。相关输入文档包括《软件需求规格说明书》、《软件详细设计说明书》、《软件编码与单元测试工作任务书》等。3)搭建测试环境。测试环境主要包括:软件、硬件和网络三方面。4)执行测试。运行测试用例,记录被测单元执行过程;发现、定位和排除错误。5)记录和跟踪问题:对测试结果进行分析、归类,确认测试是否完备。6)编写测试报告和总结报告。3.2.2单元测试步骤•2.单元测试实施遵循的原则–精心制定测试计划–严格评审测试计划–严格执行测试计划–系统分析测试结果并提交报告3.2.3单元测试环境•驱动模块:模拟被测模块的上一级模块,相当于被测模块的主程序。它接收测试数据,把这些数据传送给被测模块,最后输出实测结果。•桩模块:用以代替被测模块调用的子模块。桩模块可以做少量的数据操作,不需要把子模块所有功能都带进来,但不允许什么事情也不做。3.2.4单元测试主要任务•单元测试的对象是软件设计的最小单位——模块或函数,单元测试的依据是详细设计说明书。测试者要根据详细设计说明书和源程序清单,了解模块的I/O条件和模块的逻辑结构等。要求对所有的局部和全局的数据结构、外部接口和程序代码的关键部分进行桌面检查和代码审查。单元测试的主要内容有以下5个方面。3.3集成测试•3.3.1集成测试概述–集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。集成测试是在单元测试的基础上进行,将所有的软件单元按照概要设计规格说明的要求组装成模块、子系统或系统的过程中各部分工作是否达到或实现相应技术指标及要求的活动。也就是说,在集成测试之前,单元测试应该已经完成,集成测试的对象是已经完成单元测试的软件单元。–集成测试所持的主要依据是《软件概要设计规格说明》–集成测试主要使用黑盒测试方法测试集成单元的功能,并且对以前的集成进行回归测试。3.3.2集成测试过程•1.集成测试计划的编制–在制定测试计划时,应考虑如下因素:•系统集成方式;•集成过程中连接各个模块的顺序;•模块代码编制和测试进度是否与集成测试的顺序一致•测试过程中是否需要专门的硬件设备;•2.集成测试过程–集成测试的一般步骤如下:•制定集成测试计划;•设计集成测试;•实施集成测试;•执行集成测试;•评估集成测试结果。•3.集成测试的完成标准–判定集成测试过程是否完成,可从以下几个方面检查:•1)成功地执行了测试计划中规定的所有集成测试;•2)修正了所发现的错误;•3)测试结果通过了专门小组的评审。3.3.3集成测试策略•1.一次性集成方式–一次性集成的策略是,首先分别对每个模块进行单元测试,然后一次性地将所有模块集成在一起,并对它们进行测试,发现并清除在模块连接过程中出现的问题,得到最终要求的软件系统。•2.自顶向下的集成方式–自顶向下的集成方式的测试步骤如下:1)以主模块为被测模块,主模块的直接下属模块则用桩模块代替。2)采用深度优先或广度优先策略,用实际模块替换相应的桩模块(每次仅替换一个或少量几个桩模块,视模块接口的复杂程度而定),他们的直接下属模块则又用桩模块代替,与已测试的模块或子系统集成为新的子系统。3)对新形成的子系统进行测试,发现和排除模块集成过程中引起的错误,并做回归测试。4)若所有模块都已集成到系统中,则结束集成,否则转步骤2)。•3.自底向上的集成方式–自底向上的集成方式(Down-TopIntegration)根据软件的模块结构图,按控制层次从低到高的顺序对模块进行集成,也就是从最底层模块向上逐步集成,在集成的同时进行测试,直至组装成符合要求的最终软件系统。–测试步骤如下:•1)为最底层模块开发驱动模块,对最底层模块进行并行测试。•2)用实际模块替换驱动模块,与其已被测试过的直属子模块集成为一个子系统。•3)为新形成的子系统开发驱动模块(若新形成的子系统对应为主控模块,则不必开发驱动模块),对该子系统进行测试。•4)若该子系统已对应为主控模块,即最高层模块,则结束集成,否则转步骤2)。3.3.4回归测试•回归测试需要时间、经费和人力来计划、实施和管理。为了在给定的预算和进度下,尽可能有效率和有效力地进行回归测试,需要对测试用例库进行维护并依据一定的策略选择相应的回归测试包。•测试用例的维护–(1)删除过时的测试用例–(2)改进不受控制的测试用例–(3)删除冗余的测试用例–(4)增添新的测试用例•常用的选择回归测试的方式包括:再测试全部用例、基于风险选择测试、基于操作剖面选择测试、再测试修改的部分等。•回归测试可遵循下述基本过程进行:–(1)识别出软件中被修改的部分;–(2)从原基线测试用例库T中,排除所有不再适用的测试用例,确定那些对新的软件版本依然有效的测试用例,其结果是建立一个新的基线测试用例库T0。–(3)依据一定的策略从T0中选择测试用例测试被修改的软件。–(4)如果必要,生成新的测试用例集T1,用于测试T0无法充分测试的软件部分。–(5)用T1执行修改后的软件。•回归测试是重复性较多的活动,容易使测试者感到疲劳和厌倦,降低测试效率,在实际工作中可以采用一些策略减轻这些问题。•在实际工作中,可以将回归测试与兼容性测试结合起来进行。3.4确认测试•确认测试(ValidationTesting)的任务是验证软件的功能、性能及其他特性是否达到需求规格说明书的要求。若达到这一要求,则认为开发的软件是合格的,确认测试也被称为合格性测试。在测试规格说明书(TestSpecification)中,对需求规格说明中的要求做进一步的细化,用于指导确认测试的进行。•确认测试一般不由软件开发人员执行,而应由软件企业中独立的测试部门或第三方测试机构来完成。•确认测试一般包括有效性测试和软件配置复查。3.4.1有效性测试•有效性测试是在模拟的环境下,运用黑盒测试的方法,验证被测软件是否满足需求规格说明书列出的需求。3.4.2配置审查•确认测试过程的重要环节就是配置审查工作。其目的在于确保已开发软件的所有文件资料均已编写齐全,并得到分类编目,足以支持运行以后的软件维护工作。–用户手册:用于指导用户如何安装、使用软件和获得服务与援助的相关资料,有时也包括软件使用的案例。–操作手册:软件中进行各项使用操作的具体步骤和程序方法。–设计资料:设计说明书、源程序以及测试资料(测试说明书、测试报告)等。3.5系统测试•3.5.1系统测试概念–统测试是将已经通过确认测试的软件作为整个计算机系统的一部分,与系统中的硬件、外设、网络等其他元素结合在一起,在实际运行环境或模拟系统运行环境下,测试其与系统中其他元素能否实现正确连接,以满足用户的所有需求。3.5.2系统测试的主要类型•功能测试(FunctionalTesting)•性能测试(PerformanceTesting)•负载测试(LoadTesting)•强度测试(StressTesting)•容量测试(VolumeTesting)•安全性测试(SecurityTesting)•配置测试(ConfigurationTesting)•故障恢复测试(RecoveryTesting)•安装测试(InstallationTesting)•文档测试(DocumentationTesting)•用户界面测试(GUITesting)•……3.5.3Web系统的测试方法•基于Web的系统测试与传统的软件测试不同,它不但需要检查和验证是否按照设计的要求运行,而且还要测试系统在不同用户的浏览器端的显示是否合适。重要的是,还要从最终用户的角度进行安全性和可用性测试。•一般软件的发布周期以月或以年计算,而Web应用的发布周期以天计算甚至以小时计算。Web测试人员必须处理更短的发布周期,测试人员和测试管理人员面临着从测试传统的C/S结构和框架环境到测试快速改变的Web应用系统的转变。•1.功能测试–链接测试、表单测试、Cookies测试、设计语言测试、数据库测试•2.性能测试–连接速度测试、负载测试、压力测试•3.可用性测试–导航测试、图形测试、内容测试、整体界面测试•4.客户端兼容性测试–平台测试、浏览器测试•5.安全性测试3.6验收测试•3.6.1验收测试概念–验收测试(Acceptancetesting)是软件正式交付使用之前的最后一个阶段,相关的用户和测试人员根据测试计划和结果对系统进行测试,确定产品是否能够满足合同或用户所规定需求。3.6.2验收测试策略•1.正式验收•2.非正式验收测试•3.Beta测试3.6.3验收测试过程•1.软件需求分析。•2.编制《验收测试计划》和《项目验收准则》。•3.测试设计和测试用例设计。•4.测试环境搭建。•5.测试实施。•6.测试结果分析。•7.测试报告。3.7小结•本章对测试过程进行了详细描述,介绍了单元测试、集成测试、确认测试、系统测试和验收测试等测试阶段的主要任务和工作重点。单元测试关注程序模块内部的实现细节,多采用白盒测试技术来实现;集成测试的重点在于集成策略的选择和回归测试的安排;确认测试主要进行程序的有效性测试和软件配置的复查,为后期的系统测试做准备;系统测试更多的关注整个目标系统,强调软件与其他要素的契合度,其中,性能测试是系统测试的重点;验收测试是交付产品前的最后工序,测试工作的开展应以用户为主。