软件测试(第2版)
上QQ阅读APP看书,第一时间看更新

1.4.5 软件测试流程

软件测试流程就是指从软件测试开始到软件测试结束为止所经过的一系列准备、执行、分析的过程。软件测试工作一般要通过制订测试计划、设计测试、测试准备、测试环境的建立、执行测试、评估测试和总结测试等几个阶段来完成。软件测试的流程如图1.11所示。

000

图1.11 软件测试的流程

下面对测试流程的每一阶段进行详细说明。

1. 制订测试计划

制订测试计划通常是开始测试工作的第一项任务,重点在于对整个项目的测试工作进行计划,测试计划并不是一张时间进度表,而是一个动态的过程,最终以系列文档的形式确定下来。一般来说制订测试计划的目的是用来识别任务,分析风险,规划资源和确定进度。

测试计划一般由测试负责人或具有丰富测试经验的专业人员来完成。测试计划的主要依据是项目开发计划和测试的需求分析结果。测试计划一般包括以下几个方面。

(1)软件测试背景。软件测试背景主要包括软件项目介绍、项目涉及人员(如项目负责人等)介绍以及相应联系方式等。

(2)软件测试依据。软件测试依据主要包括软件需求文档、软件规格书、软件设计文档等。

(3)测试范围的界定。测试范围的界定就是确定测试工作需要覆盖的范围。在实际工作中,人们总是不自觉地调整软件测试的范围,比如在时间紧张的情况下,通常优先完成重要功能的测试。所以测试计划者在接收到一项任务的时候,需要根据主项目计划的时间来确定测试范围。如果在确定范围上出现偏差,会给测试执行工作带来消极的影响。

确定范围前需要管理人员进行任务划分,简单地说就是分解测试任务。分解任务有两个方面的目的,一是识别子任务,二是方便估算对测试资源的需求。完成分解任务之后,可根据项目的历史数据估算出完成这些子任务一共需要消耗的时间和资源。一般来说,执行一次完整的全面测试几乎是不可能的事情,测试人员需要对测试的范围做出有策略的界定。

(4)风险的确定。项目中总是有不确定的因素,这些因素一旦发生之后,会对项目的顺利执行产生很大的影响。所以在项目开发中,首先需要识别出存在的风险。风险识别的原则可以有很多,常见的一项原则就是如果一件事情发生之后,会对项目的进度产生较大影响,那么就可以把该事件作为一个风险。识别出风险之后,需要对照这些风险制订出规避风险的方法。

(5)测试资源。确定完成任务需要消耗的人力资源、物资资源,主要包括测试设备需求、测试人员需求、测试环境需求以及其他资源需求。

(6)测试策略。测试策略主要包括采取测试的方法、搭建哪些测试环境、采用哪些测试工具和测试管理工具、对测试人员进行培训等。

(7)时间表的制订。在识别出子任务和估计出测试资源之后,可以将任务、资源与时间关联起来形成测试时间进度表。

(8)其他。测试计划还要包括测试计划编写的日期、作者信息等内容。

测试计划当然越详细越好,但是在实际实施的时候就会发现往往很难按照原有计划开展工作。在软件开发过程中资源匮乏、人员流动等情况都会对测试造成一定的影响,这时就要求对测试工作从宏观上来进行调控。但是,只要对测试工作制订了详细的计划,那么测试人员在变化面前就能够做到应对自如、处乱不惊。

2. 设计测试方案

测试的设计阶段要设计测试用例和测试过程,要保证测试用例完全覆盖测试需求。

测试用例是为特定目标开发的测试输入、执行条件和预期结果的集合,这些特定目标可以是验证一个特定的程序路径,也可以是核实某项功能是否符合特定需求。

设计测试用例就是针对特定功能或组合功能制订测试方案,并编写成文档。测试用例的选择既要考虑一般情况,也应考虑极限情况以及边界值情况。测试的目的是暴露应用软件中隐藏的缺陷,所以在设计、选取测试用例和数据时要考虑那些易于发现缺陷的测试用例和数据,并结合复杂的运行环境,在所有可能的输入条件和输出条件中确定测试数据,检查应用软件是否都能产生正确的输出。

测试用例的完成并非是一劳永逸的,因为测试用例是来源于测试需求,一般来说,测试人员可以根据不同阶段已经确定下来的测试需求来进行测试用例的设计,然后随着开发过程的继续,在测试需求增补或修改后不断地调整测试用例。评价测试用例好坏的普遍的认可标准有2个。

• 是否可以发现尚未发现的软件缺陷?

• 是否可以覆盖全部的测试需求?

由于测试过程一般分成几个阶段,即代码审查、单元测试、集成测试、系统测试和验收测试等,尽管这些阶段在实现细节方面都不相同,但其工作流程却是一致的。设计测试过程,就是设计测试的基本执行过程,为测试的每一阶段的工作建立一个基本的框架。

3. 测试准备和测试环境的建立

准备阶段需要完成测试前的各项准备工作,主要包括全面准确掌握各种测试资料,进一步了解、熟悉测试软件,配置测试的软、硬件环境,搭建测试平台,充分熟悉和掌握测试工具等工作。

测试环境很重要,符合要求的测试环境能够帮助测试人员准确测出软件的问题,并且做出正确的判断。不同的软件产品对测试环境有着不同的要求。例如,对于C/S及B/S架构相关的软件产品,测试人员需要在不同操作系统下进行测试,如Windows系列、UNIX、Linux甚至苹果OS等,这些测试环境都是必须的;而对于一些嵌入式软件,比如手机软件,如果测试人员需要测试有关功能模块的耗电情况、手机待机时间等,那么就需要搭建相应的电流测试环境。

建立测试环境的一个重要组成部分是软、硬件配置,只有在充分认识测试对象的基础上,才知道每一种测试对象,需要什么样的软、硬件配置,才有可能配置一种相对公平、合理的测试环境。在资源允许的条件下,最好建立一个待测试软件所需的最小硬件配置。配置测试的软、硬件环境还要考虑到其他因素,如操作系统、优秀的办公处理软件(如字处理软件和表单软件,用于编写测试计划和规范)、视频设备、网速、显示分辨率、数据库权限、硬盘容量等。如果条件允许,最好能配置几组不同的测试环境。

测试准备是经常被测试人员忽略的一个环节,在接到测试任务之后,基于种种因素的考虑,测试人员往往急于进度,立即投入到具体的测试工作,忙于测试、记录、分析,可是当工作进行了一半才发现,或是硬件配置不符合要求,或是网络环境不理想,甚至软件版本不对,对测试工作产生极大影响,这都是没有做好测试准备造成的。

4. 执行测试

执行测试是执行所有的或一些选定的测试用例,并观察其测试结果。执行测试的过程可以分为以下几个阶段。

单元测试→集成测试→系统测试→验收测试,其中每个阶段都包括回归测试等。

从测试的角度而言,执行测试涉及一个量和度的问题,也就是测试范围和测试程度的问题。比如,一个版本需要测试哪些方面?每个方面要测试到什么程度?

执行测试的步骤由以下4部分组成。

• 输入,要完成工作所必须的入口标准。

• 执行过程,从输入到输出的过程或工作任务。

• 检查过程,确定输出是否满足标准的处理过程。

• 输出,产生的可交付的结果。

例如,程序员的单元测试由以下几个步骤组成。

• 输入程序代码和测试用例。

• 执行测试,产生出某个产品或中间产品可交付的结果。

• 检查工作,确保产品或中间产品可交付的结果符合规范说明和标准。

• 如果检查过程没发现问题,则测试结果传递给下一个工作流程;如发现问题,产品将返回后重新处理。

在执行测试过程中,由于所处的测试阶段不同,其具体工作内容就不同,主要反映在产品输入、测试方法、工具及产品输出方面。测试工作贯穿软件开发全过程,一般认为,执行测试只占到测试工作量的40%左右。但是,由于这项工作通常要尽可能快地结束,也就意味着往往要采用长时间连续工作的方式来完成很大工作量的工作。

显然,在执行测试过程中每个测试用例的结果都必须记录。如果测试是自动进行的,那么测试工具将同时记录输入信息和结果。如果测试是手工进行的,那么结果可以记录在测试用例的文档中。在有些情况下,只需要记录测试用例是通过或者失败就足够了。没有通过测试的测试用例相应地要产生软件缺陷报告。需特别强调的是,在执行测试过程中,缺陷记录和缺陷报告应该包含在测试工程师的日常工作中。

5. 测试评估

测试评估的主要方法包括缺陷评估、覆盖评测和质量评测。

(1)缺陷评估。缺陷评估可以建立在各种方法上,这些方法种类繁多,涵盖范围广(从简单的缺陷计数到严格的统计建模等)。严格的评估是用测试过程中缺陷达到的比率或发现的比率表示,常用模型假定该比率符合泊松分布,有关缺陷率的实际数据可以适用于这一模型。缺陷评估将评估当前软件的可靠性,并且预测当继续测试或排除缺陷时可靠性如何变化。缺陷评估被描述为软件可靠性增长建模,这是目前比较活跃的一个研究领域。

(2)覆盖评测。覆盖评测是对测试完全程度的评测,它是由测试需求和测试用例的覆盖与已执行代码的覆盖表示的。简而言之,测试覆盖是就需求(基于需求的)或代码的设计/实施标准(基于代码的)而言的完全程度的任意评测。

如果需求已经完全分类,则基于需求的覆盖策略可能足以生成测试完全程度的可计量评测。例如,如果已经确定了所有性能测试需求,则可以引用测试结果来得到评测,如已经核实了75%的性能测试需求。

如果应用基于代码的覆盖,则测试策略是根据测试已经执行的源代码的多少来表示的。这种测试覆盖策略对于安全至上的系统来说非常重要。代码覆盖可以建立在控制流(语句、分支或路径)或数据流的基础上。控制流覆盖的目的是测试代码行、分支条件、代码中的路径或软件控制流的其他元素,数据流覆盖的目的是通过软件操作测试数据状态是否有效。

2种评测都可以手工得到或通过测试自动化工具计算得到。

(3)质量评测。质量评测是对测试软件的可靠性、稳定性以及性能的评测,它建立在对测试结果的评估和对测试过程中确定的缺陷分析的基础上。当评估测试对象的性能行为时,可以使用多种评测,这些评测侧重于获取与行为相关的数据,如响应时间、计时配置文件、执行流、操作可靠性和限制。这些评测主要在“评估测试”活动中进行评估,但是也可以在“执行测试”活动中使用性能评测来评估测试进度和状态。主要的性能评测包括动态监测、响应时间/吞吐量、百分位报告、比较报告以及追踪和配置文件报告。

6. 测试总结

测试工作的每个阶段都应该有相应的测试总结,测试软件的每个版本也都应该有相应的测试总结。完成测试后,一般要对整个项目的测试工作做回顾总结,查看有哪些做得不足的地方,有哪些经验可以对今后的测试工作做借鉴使用等。测试总结无严格的格式、字数限制,应该说,测试总结还是很必要的。

制订合理的软件测试流程需要制订者有丰富的软件测试理论知识,还要具备软件测试执行经验、管理经验以及沟通能力等多方面的经验能力。软件测试流程还需要许多测试人员经过长时间的实践来验证其是否完善。

以上给出了测试工作的一般流程,其实每一个公司或测试部门都有一些自己特定的测试方法和流程,它们都是有差别的。