4.2 测试阶段

软件测试工作贯穿了整个软件生命周期,渗透到从分析、设计、编码以及测试的各个环节中,在实际工作中,测试环节可分为几个重要阶段,即:单元测试、集成测试、系统测试和验收测试。

4.2.1 单元测试(Unit Testing)

单元测试(或组件测试)是针对软件基本组成单元(软件设计的最小单位)来进行正确性检验的测试工作。测试的目标为:函数,类,模块等。单元测试的目的是检测目标单元对《详细设计说明书》的符合程度。由于进行单元测试通常可以看到源代码,所以执行者一般为开发或白盒测试人员。

由于要测试的单元绝大部分不能独立执行,所以单元测试通常要编写相应的驱动模块和桩模块。驱动模块负责调用被测单元,进而让单元运行起来。而单元在执行时,有时需要其他单元的支持,这时需要编写桩模块来提供这种支持。

4.2.2 集成测试(Integration Testing)

集成测试是对单元之间及单元与第三方接口之间的测试,目的是验证接口是否与设计相符,是否与需求相符。即检测软件模块对《概要设计说明书》的符合程度。

集成测试按照集成的方式一般分为两种:非增式集成和增式集成。

非增式集成是采用一步到位的方法来构造测试,在对所有单元进行独立的单元测试后,按照程序结构图将各单元组合起来,把连接后的程序当作一个整体进行测试。

增式集成是逐步实现的。将单元逐步集成起来,逐步完成集成测试。增式集成中包括:自底向上集成测试、自顶向下集成测试等方法。

自顶向下集成方式是按结构图自上而下进行的,即单元集成的顺序是首先集成主控单元,然后按照控制层次结构向下进行集成。

自底向上集成方式是从程序结构中最底层的单元开始组装和测试。

4.2.3 系统测试(System Testing)

系统测试是将已经集成好的软件系统,作为整个计算机系统的一个元素,与计算机硬件、外设、支持软件、数据和人员等其他系统元素结合在一起,在实际运行(使用)环境下,对计算机系统进行一系列的测试工作。系统测试的目的在于通过与《需求规格说明书》作比较,发现软件与系统需求定义不符合或与之矛盾的地方。

系统测试需要按照已制定测试计划中规定好的测试种类和测试用例,以及测试步骤进行。通过实施预定的测试计划和测试步骤,确定软件的特性是否与需求相符,确保所有的软件功能需求都能得到满足,所有的软件性能需求都达到目标,所有的文档都是正确且便于使用的。同时,对其他软件需求,如可移植性、兼容性、出错自动恢复、可维护性等,也都要进行测试,确认是否满足。

冒烟测试

通常软件在由集成测试进入系统测试之前,需要对软件是否可以进入系统测试进行评估,这一过程被称为冒烟测试。冒烟测试往往在系统测试前进行。它检验所开发的软件的主要功能是否能按用户提出的要求进行。如果冒烟测试不能通过,将被退回给开发组修复问题,因为软件的主要功能都未能正确实现,那么在这样的软件上开展系统测试将没有意义。只有冒烟测试通过了,投入测试资源进行系统测试才有实施的必要。

回归测试

在软件生命周期中的任何一个阶段,只要软件发生了改变,就可能给该软件带来问题。软件的改变可能是源于发现了错误并做了修改,也有可能是因为在集成或维护阶段加入了新的模块。当软件中所含错误被发现时,如果错误跟踪与管理系统不够完善,就可能会遗漏对这些错误的修改;而开发者对错误理解的不够透彻,也可能导致所做的修改只修正了错误的外在表现,而没有修复错误本身,从而造成修改失败;修改还有可能产生副作用从而导致软件未被修改的部分产生新的问题,使本来工作正常的功能产生错误。同样,在有新代码加入软件的时候,除了新加入的代码中有可能含有错误外,新代码还有可能对原有的代码带来影响。因此,每当软件发生变化时,我们就必须重新测试现有的功能,以便确定修改是否达到了预期的目的,检查修改是否损害了原有的正常功能。同时,还需要补充新的测试用例来测试新的或被修改了的功能。为了验证修改的正确性及其影响就需要进行回归测试。

回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。在渐进和快速迭代开发中,每一个新版本的发布必须要对该版本进行回归测试。

4.2.4 验收测试(Acceptance Testing)

在系统测试完成后,将会进行验收测试。验收测试是部署软件之前的最后一个测试操作。验收测试的目的是确保软件准备就绪,并且可以让客户将其用于执行软件的既定功能和任务。在正式验收前,需要客户对本系统做出一个评价,通常在客户的所在地进行,客户对交付的系统做测试,并将测试结果反馈回来,进行修改、分析。面向具有实际客户的项目,在交付客户正式使用之前要经过一定时间的客户测试。

客户和用户

客户通常是指和软件公司合作,提出需求的人。而用户是实际使用软件的人。有的软件系统客户和用户群体是重合的,例如客户定制软件给自己公司内部使用。而有的软件系统客户和用户是两个群体,例如客户定制一个APP,实际使用的人是用户群体,客户只使用系统的后台部分对APP做运行管理工作。

有的软件产品,可能并不是由某个客户提出需求定制的,这时就没有专门的客户进行验收测试,为了实现最贴近真实用户使用的测试,通常可以采用称为α,β测试的过程,来代替有专门客户的验收测试。

α测试

α测试是指软件公司组织内部人员模拟各类用户,对即将面市软件产品(称为α版本)进行测试,试图发现错误并修正。α测试的关键在于尽可能逼真地模拟实际运行环境和用户对软件产品的操作,并尽最大努力涵盖所有可能的用户操作方式。一些公司产品的内测属于α测试范畴。

β测试

通过了α测试调整的软件产品再发布称为β版本。β测试是指软件公司组织各方面的典型用户在日常工作中实际使用β版本,并要求用户报告异常情况、提出各种意见。然后软件公司再对β版本进行改错和完善。一些公司产品的公测属于β测试范畴。