现在软件测试已经贯穿于软件开发生命周期的整个过程中,是软件质量控制体系中的重要环节,在整个系统生命周期中有哪些测试策略呢?本章我们将详细介绍系统生命周期中常用测试策略中的测试级别。
在软件开发生命周期过程中,有很多种软件测试模型(关于软件测试模型在2.3 节中会详细介绍),不同的测试模型其对应的测试级别也有不同,以最典型的V 模型为例,软件测试级别可以分为组件测试、集成测试、系统测试和验收测试。
一、组件测试
组件测试在实际的测试过程中所对应的阶段是我们的单元测试阶段,组件测试是最低层的一个级别的测试。在整个开发过程中,单元模块是开发工程师最先开发出来的,单元模型是最小的组件,通常单元模块是我们说的函数或类,对于第二代语言,单元模块就是函数,对于面向对象的语言,单元模块就是类。把对于这类单元模块的测试称为组件测试。
组件测试的具体目的如下:
(1)验证代码是与设计相符合的。
(2)发现设计和需求中存在的错误。
(3)发现在编码过程中引入的错误。
关于组件测试需要关注两个维度的内容:功能方面和非功能方面。功能方面主要是内部的逻辑结构,验证程序内部逻辑结构是否满足设计要求,当然除此之外还包括内部数据结构、独立路径集等方面的内容。非功能测试主要是其他逻辑设计之外的内容,主要包括代码性能、内存泄漏、代码健壮性、代码可靠性等。
单元测试需要一个环境,也就是如果要测试一个函数或类,它不可能独立运行,它需要存在一定的条件下才能运行,在这个环境中会涉及两个重要的组成部分:桩模块和驱动模块。桩模块(Stub)是指模拟被测试的模块所调用的模块,而不是软件产品的组成部分。主模块作为驱动模块,与之直接相连的模块用桩模块代替。驱动单元(Driver):所测函数的主程序,它接收测试数据,并把数据传送给所测试单元,最后再输出实测结果。
当然如果每测试一个单元模块都需要写这么多桩模块和驱动模块,那么工作效率就会很低,所以现在有很多的一些专业的工具来实现,如Gtest、Junit 等。关于更详细的单元测试的内容,在第10 章都会有详细的介绍。
二、集成测试
集成测试,也叫组装测试或联合测试。集成测试是V 模型中第二个级别的测试,集成测试是在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。因为一些模块虽然可以单独地工作,但并不能保证这些单独的模块连接在一起时也能正常工作,一些局部反映不出来的问题,在全局上很可能暴露出来。
集成测试(也叫组装测试、联合测试)是单元测试的逻辑扩展。它最简单的形式是,把两个已经测试过的单元组合成一个组件,测试这些组件之间接口数据传递是否有问题。从这个角度来说,集成测试是将多个单元模块进行聚合。在实际测试过程中有很多单元,在对单元组合测试之前必须先分清楚各单元模块之间的关系,然后有序地对绝大部分的单元模块进行组合,直到最后成一个系统。
集成测试的前提条件是在进行集成测试之前一定要保证每个单元模块测试完成,并且每个单元模型要满足设计要求,不能存在问题,如果在组合测试过程中存在问题,这说明单元模块与单元模块之间的接口存在问题。
在测试过程中,集成测试的层次包括两种:一是系统内部集成;二是系统间的集成。系统内部集成是指在整个系统内部功能模块与功能模块集成,一个系统可能由很多不同的功能模块组成,对于这种在一个系统内部将功能与功能进行集成的测试称为系统内的集成。除了系统内的集成外,还有另一类集成是系统间的集成,系统间的集成是指两个独立的系统之间,通过某种方式进行传递数据。
举一个简单的例子,现在网购是很平常的事情,在某个电子商务平台上下单买一件产品,如在易迅下单买一部手机,当我们下单后,这个订单号就会从易迅官方平台发送到库存的管理系统中,之后对产品进行包装和发货,发货必须使用到物流此时这个订单号又会发送到相关的物流中心。像这种情况就是典型的系统间的集成,这个订单号在系统间传递,那么测试时就要测试这个订单号能不能正常地传递到其他的子系统中。集成测试的策略有很多种,主要包括自底向上集成测试、自顶向下集成测试、三明治集成测试、核心集成测试、分层集成测试、基于使用的集成测试等。
关于更详细的集成测试的内容,在第11 章都会有详细的介绍。
三、系统测试
系统测试(System Testing)是将已经集成好的软件系统,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际运行(使用)环境下,对计算机系统进行一系列的测试活动。系统可能包含硬件,但不一定包含硬件,可能就是纯软件。在系统测试概念中详细地描述了三个维度的内容:系统测试对象、系统测试是一个过程、系统应该有一个流程。
(1)系统测试对象
系统测试的对象是软硬件集合在一起的系统,不应是独立的软件与硬件环境。当然具体操作、执行时可根据实际情况来组织。也就是说,我们通常说的系统测试不一定只有软件,还可能包含硬件、电源和结构等,手机产品就是典型的这类系统,不仅有软件,还有硬件、电源、结构等。验证时应尽可能模拟实际的运行环境与条件。在测试过程中系统测试应该尽量模拟实际的运行环境,这样可以尽最大可能保证系统上线后不出问题。
(2)系统测试是一个过程
为了验证系统是否满足客户需求,需要一系列的测试活动来保证,即系统测试并不是一个简单的步骤,所以为了让系统测试更全面,就需要对系统测试的活动进行管理。
(3)系统测试应该有一个流程
为了更好地管理这些活动,我们制定了一个标准的测试流程,包括五个步骤:计划与控制、分析与设计、实现与执行、评估与报告、结束活动。关于系统测试的流程在第4 章中会详细地介绍。在系统测试过程中有一个很重要的环节就是测试设计,这也是我们常说的系统测试方法,系统测试方法即测试用例设计方法,常见的系统测试用例设计方法包括:等价类、边界值、因果图、判定表、正交试验、场景分析法、状态迁移等,关于用例设计方法在第8 章中会有详细的介绍。
系统测试的类型也很多,常见的系统测试类型包括:功能测试、性能测试、兼容性测试、易用性测试、安全性测试等。系统测试可以分为多种类型取决于软件质量模型,关于软件质量模型在第12 章中会详细地介绍。
系统测试的目的主要包括以下两个方面:
(1)通过与系统的需求定义做比较,发现软件与系统定义不符合或与之矛盾的地方。
(2)系统测试的测试用例应根据需求分析说明书来设计,并在实际使用环境下运行。
关于系统测试更详细的内容见第13 章。
四、验收测试
很多的公司在系统测试完成后就将产品发布了,其实系统测试之后还有一个测试阶段就是验收测试,当然并不是所有的公司都会进行验收测试,一般外包项目会有验收测试,即客户会对产品进行验收,以评估产品质量是否满足要求。验收测试是软件发布之前最后一个测试阶段,是在单元测试、集成测试和系统测试完成之后的一个测试阶段,也称之为交付测试。验收测试是向最终用户表明系统能够像预定要求那样正确地工作,验收测试的策略通常包括四种:正式验收、非正式验收、Alpha 测试和Beta 测试。
正式验收测试是一项管理严格的过程,它通常是系统测试的延续。计划和设计这些测试的周密和详细程度不亚于系统测试。选择的测试用例应该是系统测试中所执行测试用例的子集。不要偏离所选择的测试用例方向,这一点很重要。在很多组织中,正式验收测试是完全自动执行的。非正式验收测试执行测试过程的限定不像正式验收测试中那样严格。在此测试中,确定并记录要研究的功能和业务任务,但没有可以遵循的特定测试用例。测试内容由各测试员决定。这种验收测试方法不像正式验收测试那样组织有序,而且更为主观。
Alpha 测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。Alpha 测试的目的是评价软件产品的功能、局域化、可使用性、可靠性、性能和支持等特性是否满足用户要求。
Beta 测试是一种验收测试。它与Alpha 测试有很多相似之处,都是关注产品功能、性能、可靠性等特性,但与Alpha 测试也有一些不同之处,如Beta 测试是由最终用户或潜在用户来执行。关于验收测试更详细的内容见第20 章。
本章节的内容就学习完了,识别下方二维码领取更多学习资料、视频哦。(笔芯)
附:川石信息全国校区最新开班时间,课程资料获取13691729932(微信同号)。