软件测试实用技术与常用模板(第2版)
上QQ阅读APP看书,第一时间看更新

1.2 软件测试的相关知识概述

软件测试是软件质量保证的一种手段,目的是发现错误以及避免这些错误的发生,验证软件是否满足用户的需求并保证软件的质量。因此,我们必须知道什么是软件测试、软件测试的对象是什么以及用什么方法测试。

1.2.1 软件测试的概念

软件测试是软件工程中的一个非常重要的环节,是开发项目中的一部分。软件测试是有计划、有组织的,是保证软件质量的一种手段。因此,可以认为它是伴随软件工程的诞生而诞生的。随着软件复杂程度的增加、规模的增大,软件测试作为一种能够保证软件质量的有效手段,越来越受到人们的重视。软件测试的最终目的是使产品更加完美。

软件测试方法没有完全标准化和统一化,因为软件产业的产品各式各样。本书中介绍的软件测试方法可用于多数应用软件的测试。

软件测试不是万能的,不可能发现全部的软件缺陷,而且软件的功能和性能不是由测试决定的,软件测试是有局限性的。

软件测试是在完成程序设计阶段工作后,经程序编码人员测试已初步奠定了基础,需要进一步完成的测试工作。我们都知道软件要投入运行必须确保其正确无误,这一点极其重要,所以软件要在投入运行前施行测试。未经周密测试而将软件贸然投入运行,将会造成难以想象的后果。

尽管各个程序在设计完毕以后都一一做过调试,但能否发挥整个系统的功能(例如,某一程序的运行与后续程序的运行是否矛盾,程序能否顺利持续运行)尚不清楚,整个系统的总测试要等全部程序设计结束且能连续测试时才可进行。

由于软件错误的复杂性,长期以来,人们对软件测试的认知一直是模糊的。人们从不同的角度给出了软件测试的不同定义,但总体来看都是不全面的。给软件带来错误的原因很多,具体地说,主要有如下几点:

● 交流不够、交流上有误解或者根本不进行交流。

● 在应用需求不清晰的情况下进行开发。

● 软件复杂性。图形用户界面、客户/服务器结构、分布式应用、数据通信、关系型数据库使得软件及系统的复杂性呈指数增长。

● 程序设计错误。

● 需求变化。

● 代码文档缺乏等。

总而言之,软件测试是使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清楚预期结果与实际结果之间的差别。测试是以查找错误为中心,而不是演示软件的正确功能;测试并不仅仅是为了找出错误,而是通过分析错误产生的原因和错误的分布特征,帮助项目管理者发现当前所采用的软件过程的缺陷,以便改进。

软件测试往往让软件工程师既兴奋又担心:兴奋的是他们提出的抽象概念的构造软件现在得以实现,并且到了测试阶段;担心的是软件在测试过程会出现问题,尤其是自己编制的那一部分会给整个系统带来影响。如果别人编的程序都没有问题,只有自己编的程序出了问题,将会感到难堪等。其实软件测试不是针对某一个人的,而是从整个系统出发,考查设计是否合理。任何一个人都不能把所有问题考虑到,总会或多或少地发生差错。然而对系统而言则不能有差错,所以测试是非常重要的。可以说测试就是“寻找错误”,寻找不经常出现的错误,尽量把系统中隐藏着的错误消灭在调试期间。而且还要对系统的容错能力、操作错误进行测试。通过测试要达到这样一个目的:寻找问题,发现问题,纠正错误,提高系统技术能力,使系统早日投入运行。

1.2.2 软件测试的方法

目前介绍软件测试的书中交流软件测试技术的多,而探讨软件测试方法的少。作为测试方法,如白盒测试、黑盒测试等是从技术层面探讨软件测试的宏观方法论;如静态测试、动态测试、等价类测试、边界值测试、判定表测试、因果图测试、正交试验法测试、功能图法测试、错误推测法测试等是从操作层面探讨软件测试的操作思想;而所使用的重要的具体测试如单元测试、性能测试、功能测试、集成测试、系统测试、验收测试等是从过程层面探讨软件测试的过程。

对于上述软件测试方法,我们将在本书的各章中详细介绍。下面将重点介绍系统测试的测试方法。

系统测试的测试方法有3种,即用试题测试、用新旧两个系统做平行处理测试和软件测试自动化工具测试。

1.用试题测试

此方法是先建立输入数据的模型,并事先用人工方法求得其预计输出,然后送入模型,与新系统所得结果进行核对并测试。

使用这种方法时,模型数据通常利用实际上已产生的数据,但有时也可能另外编制大量测试专用数据。用试题测试的方法在小规模系统中较易实现,而在大规模系统中,要用这种方法检查所有程序的全部变化很困难,有时几乎是不可能实现的。在这种情况下,不能一次性完成所有的测试,而要用划分得较细的输入模型,按各个子系统进行测试,尤其是要设法分成三种处理,即基本处理、特殊处理和出错处理,做出相应于各个流程的数据模型。其中,基本处理最好是始终连贯地进行测试。对试题要做各种改变,直至取得满意的结果。

2.用新旧两个系统做平行处理测试

一般来说,这是系统最后的测试,此阶段一结束,就进入系统的全面实施。不论旧系统是人工作业还是计算机处理,本方法都通过将旧系统的处理结果与新系统的处理结果相比较并进行检查。这种平行处理的时间视业务内容而定,短则两三个月,长则半年至一年。它不仅可防止向新系统转换时产生混乱,还可以作为测试新系统可靠性的拷机时间(系统正常运行不出错的最长时间)。在此期间,不仅要检查计算机,还应检查人工作业和人为因素方面的问题,改正不合理的部分。

图1-3 结果检查顺序

在讨论新旧两个系统所得到的结果时,要明确新旧系统的不同点。当结果不一致时,不能武断地认为总是新系统在出错,还必须考虑是否是旧系统的错误。

对平行处理所得结果的检查应重视如图1-3中所示的各项。

(1)输入数据

要注意新旧两个系统中所用数据是否通用,以及做过部分修订的数据在修订处是否正确。特别是新开发的用于计算机处理的系统,数据的项目与旧的人工作业相比通常变化较大,所以要对代码的内容和添加、修订及删除的项目做充分的检查。要确保新系统中所用的所有数据是事先校验过的正确的数据。

(2)程序

即使输入数据是正确的,但如果处理数据的程序有错,也会导致程序错误,因此要查看程序能否正确地满足程序说明书中的所有条件。此时,若分为区域、常数、输入处理、基本处理、输出处理及特殊处理进行检查,便可高效率地完成任务。

(3)程序说明书

程序说明书的内容是程序设计的依据,所以它必须正确且完整。尤其是因机种更替而变更系统时,可做出添加、修订和删除一览表,写明旧系统程序说明书和新系统程序说明书的处理条件、处理内容、代码及项目等,突出两者的不同之处。

此外,也可考虑用两个程序进行测试的方法:由两组程序员对同一处理分别编写程序,然后核对两者的结果。此方法主要用于测试对象的技术、计算等在程序中找不到可比较结果的新程序。若两个程序的结果一致,固然可知程序正确;若结果不一致,就不能判断何者正确,因为缺乏基准。这种方法所需的费用较高,不能算是一种好的方法,但对于没有其他测试方法的业务来说,或许也只能采用这种方法。

随着测试技术的发展,出现了多种测试,如自顶向下测试、自底向上整体测试(整体测试的方法有黑盒测试法、白盒测试法等)等。

3.自动化测试方法

由于测试技术的发展,出现了多种测试自动化工具,涵盖了整个软件测试的流程,大大提高了软件测试的效率。