第4章 软件测试过程



前言

软件测试是软件工程中的重要部分,是确保软件质量的重要手段。随着软件的复杂度不断增强、软件产业的不断发展,软件测试得到越来越广泛的重视,本篇文章就来对这不同软件测试阶段的主要测试任务、采用的主要测试技术和方法进行详细介绍,并将就测试管理和组织等方面内容做些探讨。


一、软件测试过程概述

软件测试过程与软件工程的开发过程是相对应的,在第2章我们采用了V型图表示软件开发与软件测试的对应关系,也可以采用螺旋型图来表示这种关系。
软件测试过程

二、单元测试

1.单元测试的定义

单元测试是对软件设计的最小单元——模块进行正确性检验的测试工作,主要测试模块在语法、格式和逻辑上的错误。一般来说,“单元”是软件里最小的、可以单独执行编码的单位,单元选择的依据如下。
• 单元必须是可测的。
• 单元的行为或输出是可观测的。
• 有明确的可定义的边界或接口。
确定单元的最基本原则是“高内聚,低耦合”。单元测试应对模块内所有重要的控制路径进行测试,以便发现模块内部的错误。

2.单元测试的重要性与单元测试原则

  1. 单元测试的重要性
    (1)时间方面:如果认真地做好了单元测试,在系统集成联调时非常顺利,那么就会节约很多时间;
    (2)测试效果方面:根据以往的测试经验来看,单元测试的效果是非常明显的。
    (3)测试成本方面:在单元测试时,某些问题很容易被发现,但是这些问题在后期的测试中被发现,所花的成本将成倍数上升。
    (4)产品质量方面:单元测试的好与坏直接影响到产品的质量。

  2. 单元测试原则
    (1)单元测试越早进行越好
    (2)单元测试应该依据《软件详细设计规格说明》进行
    (3)对于修改过的代码应该重做单元测试,保证对已发现错误的修改没有引入新的错误
    (4)当测试用例的测试结果与设计规格说明上的预期结果不一致时,测试人员应如实记录实际的测试结果
    (5)单元测试应注意选择好被测软件单元的大小
    (6)一个完整的单元测试说明应该包含正面测试(Positive Testing)和负面测试(Negative Testing)
    (7)注意使用单元测试工具

3.单元测试的主要任务

单元测试针对每个程序模块进行测试,单元测试的主要任务是解决5个方面的测试问题,如图所示。
单元测试解决5个方面的测试问题

4.单元测试环境的建立

一般情况下,单元测试应紧接在代码编写之后,在完成了程序编写、复查和语法正确性验证后,就应进行单元测试。测试用例设计应与复审工作相结合,根据设计信息选取数据,将增大发现上述各类错误的可能性。
一般单元测试环境

5.测试主要技术和单元测试数据

  1. 单元测试主要技术
    单元测试的对象是软件设计的最小单位——模块或函数,单元测试的依据是详细设计描述。单元测试主要采用白盒测试技术,辅之以黑盒测试技术,使之对任何合理和不合理的输入都能鉴别和响应。

  2. 单元测试中使用的数据
    通常不使用真实数据作为单元测试中使用的数据。在创建测试数据时,应确保数据充分地测试单元的边界条件。当被测试单元要操纵大量数据,并且有很多单元都有这种需求时,可以考虑使用真实数据的一个较小的有代表性的样本。

6.单元测试工具简介

目前,单元测试测试工具类型较多,按照测试的范围和功能,可以分为下列一些种类:
• 静态分析工具。
• 代码规范审核工具。
• 内存和资源检查工具。
• 测试数据生成工具。
• 测试框架工具。
• 测试结果比较工具。
• 测试度量工具。
• 测试文档生成和管理工具。

7.单元测试人员

单元测试一般由开发设计人员完成。单元测试一般由开发组人员在组长的监督下进行,由编写该单元的开发设计者设计所需的测试用例和测试数据,来测试该单元并修改缺陷。开发组组长负责保证使用合适的测试技术,在合理的质量控制和监督下执行充分的测试。

三、集成测试

1.集成测试的定义

集成测试(也叫组装测试、联合测试)是单元测试的逻辑扩展,它的最简单的形式是将两个已经测试过的单元组合成一个组件,并且测试它们之间的接口。
集成测试主要是测试软件单元的组合能否正常工作以及与其他组的模块能否集成起来工作。最后,还要测试构成系统的所有模块组合能否正常工作。
在集成测试之前,单元测试应该已经完成,集成测试中所使用的对象应该是已经经过单元测试的软件单元

2.集成测试的主要任务

集成测试的主要任务是解决以下5个方面的测试问题:
• 将各模块连接起来,检查模块相互调用时,数据经过接口是否丢失。
• 将各个子功能组合起来,检查能否达到预期要求的各项功能。
• 一个模块的功能是否会对另一个模块的功能产生不利的影响。
• 全局数据结构是否有问题,会不会被异常修改。
• 单个模块的误差积累起来,是否被放大,从而达到不可接受的程度。

3.集成测试遵循的原则

集成测试应针对总体设计尽早开始筹划,为了做好集成测试,需要遵循以下原则:
• 所有公共接口都要被测试到。
• 关键模块必须进行充分的测试。
• 集成测试应当按一定的层次进行。
• 集成测试的策略选择应当综合考虑质量、成本和进度之间的关系。
• 集成测试应当尽早开始,并已总体设计为基础。
• 在模块与接口的划分上,测试人员应当和开发人员进行充分的沟通。
• 当接口发生修改时,涉及的相关接口必须进行再测试。
• 测试执行结果应当如实的记录。

4.集成测试实施方案

集成测试的实施方案有很多种,如非增量式集成测试增量式集成测试三明治集成测试核心集成测试分层集成测试基于使用的集成测试等。其中,常用的是非增量式集成测试和增量式集成测试两种模式。

  1. 非增量式集成测试
    概括来说,非增量式集成测试是采用一步到位的方法来进行测试,即对所有模块进行个别的单元测试后,按程序结构图将各模块连接起来,把连接后的程序当作一个整体进行测试。

  2. 增量式集成测试
    增量式集成测试与非增量式集成测试有所不同,单元的集成是逐步实现的,集成测试也是逐步完成的。也可以说它把单元测试与集成测试结合起来进行。增量式集成测试可按不同的次序实施,因而可以有两种方法,即自顶向下增量式集成测试和自底向上增量式集成测试。
    (1)自顶向下增量式集成测试。自顶向下增量式集成测试表示逐步集成和逐步测试是按结构图自上而下进行的,即模块集成的顺序是首先集成主控模块(主程序),然后按照软件控制层次结构向下进行集成。从属于主控模块的模块按深度优先策略(纵向),或者广度优先策略(横向)逐步集成到结构中去。
    (2)自底向上增量式集成测试。自底向上增量式集成测试是从最底层的模块开始,按结构图自下而上逐步进行集成并逐步进行测试工作。由于是从最底层开始集成,测试到较高层模块时,所需的下层模块功能已具备,所以也就不再需要使用被调用模拟子模块来辅助测试。

  3. 其他集成测试方案
    (1)三明治集成测试。三明治集成测试是将自顶向下测试与自底向上测试两种模式有机结合起来,采用并行的自顶向下、自底向上集成方式,形成改进的三明治方法。
    (2)核心系统先行集成测试。核心系统先行集成测试法的思想是先对核心软件部件进行集成测试,在测试通过的基础上再按各外围软件部件的重要程度逐个集成到核心系统中。
    (3)高频集成测试。高频集成测试是指同步于软件开发过程,每隔一段时间对开发团队的现有代码进行一次集成测试。

5.集成测试的测试技术与集成测试数据

软件集成测试的具体内容包括以下几个方面。(1)功能性测试。
(2)可靠性测试。根据软件需求和设计中提出的要求,对软件的容错性、易恢复性、错误处理能力进行测试。
(3)易用性测试。根据软件设计中提出的要求,对软件的易理解性、易学性和易操作性进行检查和测试。
(4)性能测试。根据软件需求和设计中提出的要求,对软件的时间特性、资源特性进行测试。
(5)维护性测试。根据软件需求和设计中提出的要求,对软件的易修改性进行测试。

6.集成测试人员

由于集成测试不是在真实环境下进行,而是在开发环境或一个独立的测试环境下进行的,所以集成测试一般由测试人员和从开发组中选出的开发人员完成。一般情况下,集成测试的前期测试由开发人员或白盒测试人员来做,通过前期测试后,就由测试部门来完成。整个集成测试工作是在测试组长的领导和监督下进行,测试组长负责保证在合理的质量控制和监督下使用合适的测试技术执行充分的集成测试

四、系统测试

1.系统测试的定义

系统测试是指将通过集成测试的软件系统,作为计算机系统的一个重要组成部分,与计算机硬件、外设、某些支撑软件的系统等其他系统元素组合在一起所进行的测试,目的在于通过与系统的需求定义作比较,发现软件与系统定义不符合或矛盾的地方。系统测试是对已经集成好的软件系统进行彻底的测试,以验证软件系统的正确性和性能等是否满足需求分析所指定的要求。

2.系统测试前的准备工作

在测试之前,需要做如下的准备工作:
• 收集软件规格说明书,作为系统测试的依据。
• 收集各种软件说明书,作为系统测试的参考。
• 仔细阅读软件测试计划书,如有独立的系统测试计划书则更好,作为系统测试的根据。如果已有编好的系统测试用例,一并收集。

阅读以上所有文件,如果没有现成的系统测试用例,则需要做大量的工作来编写测试用例。从上述文档中需首先要找出以下内容:
• 对系统各种功能的描述。
• 系统要求的数据处理及传输的速率。
• 对系统性能的要求。
• 对备份及修复的要求。
• 对兼容性的描述。
• 对配置的描述。
• 对安全方面的要求等。

3.系统测试的测试技术和系统测试数据

  1. 系统测试的主要测试技术
    系统测试完全采用黑盒测试技术,因为这时已不需要考虑组件模块的实现细节,而主要是根据需求分析时确定的标准检验软件是否满足功能、行为、性能和系统协调性等方面的要求。

  2. 系统测试的测试数据
    因为系统测试的一个主要目标是树立软件系统将通过验收测试的信心,因此系统测试所用的数据必须尽可能地像真实数据一样精确和有代表性。

4.系统测试人员

为了有效地进行系统测试,项目组应设法组建富有成效的系统测试小组。系统测试小组的成员主要包括以下几类人员。
• 机构独立的测试部门(如果存在的话)的测试人员。
• 本项目的部分开发人员。
• 邀请其他项目的开发人员参与系统测试。
• 机构的质量保证人员。

五、验收测试

1.验收测试的定义

验收测试是在软件开发结束后,用户对软件产品投入实际应用以前,进行的最后一次质量检验活动。它要回答开发的软件产品是否符合预期的各项要求以及用户能否接受的问题。验收测试主要是验证软件功能的正确性和需求的符合性。

2.验收测试的主要内容

软件验收测试应完成的主要测试工作包括配置复审合法性检查文档检查软件一致性检查软件功能和性能测试测试结果评审等几项工作。

3.验收测试的测试技术和验收测试数据

  1. 验收测试的主要测试技术
    由于验收测试主要是由用户代表来完成,主要是用户代表通过执行其在平常使用系统时的典型任务来测试软件系统,根据业务需求分析检验软件是否满足功能、行为、性能和系统协调性等方面的要求,因而验收测试不需要关心软件的内部细节,所以验收测试完全采用黑盒测试技术。

  2. 验收测试中使用的数据
    只要有可能,在验收测试中就应该使用真实数据。当真实数据包含机密性或安全性信息,并且这些数据在局部或整个验收测试中可见时,就必须采取措施以保证数据安全。
    在不使用真实数据的情况下(可能因为对真实系统和其他使用真实数据的应用有风险,也可能因为数据涉及机密或者出于保密性)应该考虑使用真实数据的一个复制。复制数据的质量、精度和数据量必须尽可能地代表真实的数据。

4.α、β测试

α测试是在软件开发公司内模拟软件系统的运行环境下的一种验收测试,即软件开发公司组织内部人员,模拟各类用户行为对即将面市的软件产品(称为α版本)进行测试,试图发现并修改错误。

经过α测试测试调整的软件产品称为β版本。紧随其后的β测试是指软件开发公司组织各方面的典型用户在日常工作中实际使用β版本,并要求用户报告异常情况,提出批评意见,一般包括功能性、安全可靠性、易用性、可扩充性、兼容性、效率、资源占用率、用户文档等方面的内容,然后软件开发公司再对β版本进行改错和完善。

5.验收测试人员

验收测试一般在测试组的协助下,由用户代表执行。在某些组织中,验收测试由开发组织(或其独立的测试小组)与最终用户组织的代表一起执行验收测试;在其他组织中,验收测试则完全由最终用户组织执行,或者由最终用户组织选择人员组成一个客观公正的小组来执行。

六、回归测试

回归测试是指软件系统被修改或扩充(如系统功能增强或升级)后重新进行的测试,回归测试是为了保证对软件修改以后,没有引入新的错误而重复进行的测试。每当软件增加了新的功能,或者软件中的缺陷被修正,这些变更都有可能影响软件原有的功能和结构。为了防止软件的变更产生无法预料的副作用,不仅要对内容进行测试,还要重复进行过去已经进行过的测试,以证明修改没有引起未曾预料的后果,或证明修改后的软件仍能满足实际的需求。

1.回归测试的测试技术和回归测试的数据

回归测试一般采用黑盒测试技术来测试软件的高级需求,而无须考虑软件的实现细节,也可能采用一些非功能测试来检查系统的增强或扩展是否影响了系统的性能特性,以及与其他系统间的互操作性和兼容性问题。

设计和引入回归测试数据的重要原则是应保证数据中可能影响测试的因素与未经修改扩充的原软件上进行测试时的那些因素尽可能一致,否则要想确定观测到的测试结果是由于数据变化引起的还是很困难。

2.回归测试的范围

在回归测试范围选择上,一个最简单的方法是每次回归执行所有在前期测试阶段建立的测试,来确认问题修改的正确性,以及没有造成对其他功能的不利影响。很显然,这种回归的成本是高昂的。另外一种方法是有选择地执行以前的测试用例。这时,回归的时候仅执行先前测试用例的一个子集,此子集选取是否合理、是否具有代表性将直接影响回归测试的效果和效率。常用的用例选择方法可以分为以下3种。
(1)局限在修改范围内的测试。
(2)在受影响功能范围内回归。
(3)根据一定的覆盖率指标选择回归测试。

3.回归测试人员

由于回归测试一般与系统测试和验收测试相关,所以要由测试组长负责,确保选择使用合适的技术并在合理的质量控制中执行充分的回归测试。

七、系统排错

系统排错的任务就是根据测试时所发现的错误,找出原因和具体的位置,并进行改正。排错与成功的测试形影相随,测试成功的标志是发现了错误,根据错误迹象确定错误的原因和准确位置并加以改正则主要依靠排错技术。排错工作主要是由程序开发人员来进行,也就是说,谁开发的程序由谁来排错。

常用的排错方法和策略有以下3种,

  1. 原始类排错法
  2. 回溯法
  3. 归纳和演绎法

总结

以上就是今天要讲的内容,本文仅仅简单介绍了软件测试的基本概念,希望能够对正在阅读的你有所帮助。如果你也对软件测试感兴趣的话,就跟着我一起学下去吧。

如果您觉得我写的还不错,请多给我点赞鼓励一下,您的支持也是我不断前进的最大动力。同时也欢迎您将本篇文章分享给您的朋友,一起学习。最后,也欢迎大家在私信和评论里与我探讨学习过程中遇到的问题,大家共同进步。

猜你喜欢

转载自blog.csdn.net/qq_50564231/article/details/130839489