1.5 软件测试过程
软件测试的过程及测试流程,它表明了测试的各阶段所应完成的各项工作任务。
软件测试是一个持续进行的过程。在传统的瀑布式开发模型中定义了专门的测试阶段,如单元测试阶段,集成测试阶段或系统测试阶段。但这并不意味着测试只有在此时才进行。若对测试的理解都基于了阶段这个概念,测试只有在适当的时候才开始,并且在某点就可以结束,这种思维是错误的理解,并且对软件产品的质量来说是很危险的。现代软件测试已发展成为一个全过程的验证和确认活动,它贯穿于整个开发生命周期的始末。为获得最大的受益,测试的开发和准备必须在编码之前就应当开始,同时为了保证软件最终质量,必须在开发过程的每个阶段保证其过程的质量。
1.5.1 制定测试计划
测试过程实施要解决的核心问题是制定测试计划、测试用例(大纲)和完成测试报告。
测试必须被计划、被控制,并且被提供时间和资源。测试并不是一个随机的活动,测试必须被计划,并且被安排足够的时间和资源。测试活动应当受到控制,测试的中间产物应当被评审并纳入配置管理。
测试的计划与控制是整个测试过程中最重要的阶段,它为实现可管理且高质量的测试过程提供基础。这个阶段需要完成的主要工作内容是:拟定测试计划,论证那些在开发过程中难以管理和控制的因素,明确软件产品的最重要部分(风险评估)。
测试计划是一个关键的管理功能,它定义了各个级别的测试所使用的策略、方法、测试环境、测试通过或失败准则等内容。测试计划的目的是要为有组织地完成测试提供一个基础。从管理的角度来看,测试计划是最重要的文档,由此帮助管理测试项目。如果一个测试计划是完整并且经过深思熟虑的,那么测试执行和分析将平滑地进行。
测试计划可以分级,也可以是一个总计划,并且测试计划是一个不断演进的文档。如果不涉及应用软件的最初来源(如复用的组件或已实现的组件),则软件需求是测试活动的驱动。因此,测试计划应当关注于文档化的需求。支持测试的过程应被文档化下来,以创建一个可重复的过程,该过程将保证开发工作产品的质量。一个良好的测试计划应具备以下几个要素:
(1)清晰地定义测试目标和出口标准。
(2)明确测试的策略,定义要执行测试的种类。
(3)在检测主要缺陷方面有一个好的选择。
(4)提供绝大部分代码的覆盖率。
(5)具有灵活性,易于执行、回归和自动化。
(6)通过清晰的文档表达测试期望的结果。
(7)当缺陷被发现的时候,能提供缺陷核对。
(8)没有冗余,确认风险。
(9)文档化的测试需求。
(10)定义可交付的测试件。
1.制订计划
在计划准备阶段,开始本阶段的前提条件是完成测试计划的拟定,以及确定需求规格说明书(第1版)。
本阶段的主要工作内容:对需求规格说明书的仔细研究;将要测试的产品分解成可独立测试的单元;为每个测试单元确定采用的测试技术;为测试的下一个阶段及其活动制订计划。
(1)概要测试计划的内容。
①在软件开发初期,即需求分析阶段制定。
②定义被测试对象和测试目标。
③确定测试阶段和测试周期的划分。
④制定测试人员、软硬件资源和测试进度等方面的计划、任务、分配与责任划分。
⑤规定软件测试方法、测试标准,如语句覆盖率达到95%,三级以上的错误改正率达95%。
⑥所有决定不改正的“轻微”错误都必须经专门的质量评审组织同意。
⑦支持环境和测试工具等。
⑧待解决的问题等。
(2)详细测试计划。详细测试计划是测试者或测试小组的具体的测试实施计划,它规定了测试者负责测试的内容、测试强度和工作进度。整个软件测试计划的组成部分是检查测试实际执行情况的重要依据。
详细测试计划主要内容有计划进度和实际进度对照表、测试要点、测试策略、尚未解决的问题和障碍。
2.设计测试用例
测试用例是软件测试的依据,包括:测试项目、测试步骤、测试完成的标准。测试用例不仅是软件开发后期测试的依据,而且在系统的需求分析阶段也是质量保证的重要文档和依据。
无论自动测试还是手动测试,都必须满足测试大纲的要求。
(1)测试用例的本质:从测试的角度对被测对象的功能和各种特性的细化和展开。针对系统功能的测试大纲是基于软件质量保证人员对系统需求规格说明书中有关系统功能定义的理解,将其逐一细化展开后编制而成的。
(2)测试用例的好处:保证测试功能不被遗漏,使得功能不被重复测试,合理安排测试人员,使得软件测试不依赖于个人。
3.软件测试报告
软件测试报告是软件测试过程中最重要的文档,记录问题发生的环境,如各种资源的配置情况,问题的再现步骤以及问题性质的说明。更重要的是,它还记录了问题的处理进程,而问题处理进程从一定角度上能够反映测试的进程和被测软件的质量状况以及改善过程。
1.5.2 测试执行过程
通常对整个测试过程需要进行有效的管理,这个过程要完成的任务是:规范测试过程和测试执行过程中的阶段性确定。
1.规范测试过程
(1)根据测试大纲/测试用例/测试脚本进行测试。找出预期的测试结果和实际测试结果之间的差异,填写软件问题报告确定造成这些差异的原因。
①产品有缺陷?
②规格说明书有缺陷?
③测试环境和测试下属部件有缺陷?
测试用例设计不合理?
(2)搭建测试环境(测试数据库,软件环境,硬件环境)。
(3)初始化测试数据库。
(4)确定测试用例描述内容:输入、执行过程、预期输出。
(5)分析测试报告,与软件开发管理层进行沟通,报告内容如下:
①已测试部分占产品多大的百分比?
②还有什么工作要做?
③找到了多少个问题或不足?
④测试的发展趋势如何?
⑤测试是否可以结束?
2.测试执行过程中的三阶段论和集成测试中的两个里程碑
(1)测试执行过程的三个阶段。
①初测期:主要功能和关键的执行路径,排除主要障碍。
②细测期:依据测试计划和测试用例,逐一测试大大小小的功能、方方面面的特性、性能、用户界面、兼容性、可用性等,预期可发现大量不同性质、不同严重程度的错误和问题。
③回归测试期:系统已达到稳定,在一轮测试中发现的错误已十分有限;复查已知错误的纠正情况,确认未引发任何新的错误时,终结回归测试。
测试执行过程的三个阶段如图1.23所示。
图1.23 三个测试期阶段
(2)集成测试过程中两个重要的里程碑。在集成测试过程中的两个重要的里程碑是功能冻结和代码冻结的确定。这两个里程碑界定出回归测试期的起止界限。
①功能/特征冻结(Function/Feature Freeze):经过测试,符合设计要求,确认系统功能和其他特性均不再做任何改变。
②代码冻结(Code Freeze):理论上,在无错误时冻结程序代码,但实际上,代码冻结只标志系统的当前版本的质量已达到预期的要求,冻结程序的源代码,不再对其做任何修改。里程碑设置在软件通过最终回归测试之后。
3.测试完成阶段
本阶段的主要工作有两项内容:
(1)选择和保留测试用例、测试结果、测试工具。
(2)提交最终测试报告。
测试收尾工作的重要意义在于,产品如果升级或功能变更,或维护,只要对保留下来的相关测试数只需要做相应调整,就能够进行新的测试。