软件测试基础之软件测试有那些分类

软件测试分类的方法其实有很多种,从不同的维度进行分类,其所分的类型也完全不同,通常可以从三个维度对测试方法进行分类

(1)从被测试对象的角度分类。从被测试对象的角度分类,测试可以分为黑盒测试、白盒测试和灰盒测试。

(2)从被测试对象是否运行的角度进行分类。从被测试对象是否运行的进行分类,测试可以被分为动态测试和静态测试。

(3)从测试执行时使用的工具角度分类。从测试执行时使用的工具角度分类测试可以分为手工测试和自动化测试。

一、黑盒、白盒、灰盒测试的区别

从被测试对象的角度分类,测试方法可以分为黑盒测试、白盒测试、灰盒测试三种,这也是我们最常看到的分类方法。

任何一个程序在测试时都由这几部分组成:输入、程序的处理过程和输出三部分,如图1-1 所示。黑盒测试是指在整个测试过程中只关注输入和输出,如果输入一个测试数据,输出的结果是正确的,我们就认为这个功能是正确的。如输入测试数据(2,2),结果如果输出为4,就认为是正确的,其中程序是如何处理的,测试工程师并不关注,这里有可能是2×2、2+2,也可能是22。当然如果不知道程序是怎么处理的,那么再另一组数据后,可能得到的结果就不一定正确了,如输入(3,3),那结果就不一定会正确了。

软件测试基础到项目实战

白盒测试与黑盒测试不同的地方是,白盒测试不仅仅关注输入与输出的结果是否正确,同时还关注程序是如何处理的,同样是上面的例子,输入测试数据(2,2),白盒测试不仅仅关注测试结果是否为4,同时还关注这个程序的内部逻辑处理过程。

关于黑盒测试和白盒测试其实还像社会的两种人,黑盒测试就相当于黑道,白盒测试就相当于白道。黑道的老大如果要解决什么事情,他们会派下属去处理,并且老大只关注结果,至于中间是如何处理的,与他没有关系。而白道的人即我们说的公务员,他们对办事的整个流程或法律体系都很了解。举个例子,你亲戚和别人打架了,把别人打了,你第一件事不会去报案,而是联系朋友看法院、派出所或其他的相关部门是否有熟人,因为这些人对法律流程很熟悉,他们很清楚如何将你亲戚的责任最小化。

但是这个社会还有一类人,是黑白通吃的,这就是我们测试分类里面的灰盒测试,灰盒测试是界于黑盒测试和白盒测试之间的一种测试。之所以存在灰盒测试,是因为按测试阶段来划分,整个测试的流程包括单元测试、集成测试、系统测试,而白盒测试对应单元测试,黑盒测试对应系统测试,那么在正确的测试过程中,应该是先测试单元模块,单元模块测试完成之后,并没有立即进入系统测试,而是集成测试,这个时候其使用的方法就是灰盒测试,即我们测试完成单个模块后,虽然单个模块没有问题,但并不代表这些模块组合在一块时就一定没有问题。那么要验证这些功能模块组合在一起有没有问题,这就是我们说的集成测试,其使用方法就是灰盒测试。

从某种角度来说,白盒测试显然比黑盒测试更全面,因为他们不仅关注测试结果,还注重程序内部的逻辑结构,所以有人提出为什么不能只有白盒测试就可以呢?答案显然是肯定的。讨论这个极端的问题,其反过来的问题就是黑盒测试的内容有哪些是白盒测试不可能做到的。我们说黑盒测试是更接近用户使用的测试,所以关于用户使用流程、易用性等方面并不是白盒测试可以测试到的,也就是如果白盒测试没问题后,并不能保证程序的易用性、界面显示、业务流程等内容就一定没有错误。同样的道理,显然只有黑盒测试也是不够的,因为黑盒测试虽然可以更好地站在用户的角度进行测试,但黑盒测试并不能像白盒测试那么有效地测试程序内部结构。所以不能极端地认为只有白盒测试或只有黑盒测试可以测试好系统。

所以现在一个完善的测试体系中有这三类方法:黑盒测试、白盒测试、灰盒测试。只有将这三种完美的结合起来,才能更好的保证系统的质量。从软件测试发展的历程来看,包括国内软件测试,其实都是先有黑盒测试才有白盒测试,不可能先做白盒测试再做黑盒测试,并且在现阶段国内很少公司做白盒测试,之所以出现这种情况是因为白盒测试对测试工程师的技能要求会高出许多,同时还有一个原因是因为当前国内软件测试发展还是处于初级阶段,所以白盒测试开展的并不理想。

二、动态与静态测试的区别

如果从被测试对象是否被运行的角度来划分,测试可以分为静态测试和动态测试两种。静态测试是指不运行被测试的软件系统,而是采用其他手段和技术对被测试软件进行检测的一种测试技术。

例如:代码走读、文档评审、程序分析等都是静态测试的范畴。常用的静态分析技术包括:控制流、信息流和数据流,但现在这些方法其实用的比较少,因为很多问题在编辑器的时候就解决了。在我们进行测试过程中,关于静态测试用得最多的是对文档进行评审,当然不同文档在评审时所关注的问题是完全不同的。

动态测试是指按照预先设计的数据和步骤去运行被测软件系统,从而对被测软件系统进行检测的一种测试技术。如果按阶段来分,单元测试中常见的动态测试方法就是逻辑覆盖的方法,而在系统测试阶段,我们做的测试都属于动态测试,因为我们要运行系统才能验证系统功能是否正确。

动态测试是通过观察代码运行时的动作,来提供执行跟踪、时间分析及测试覆盖度方面的信息。动态测试通过真正运行程序发现错误。通过有效的测试用例,对应的输入/输出关系来分析被测程序的运行情况。

三、手工与自动化测试的区别

从测试执行时使用的工具角度分类,测试可以分为手工测试和自动化测试。手工测试是指软件测试的整个活动过程(如评审、测试设计、测试执行等)都是由软件测试工程师手工执行人来完成,不使用任何测试工具,狭义上是指测试执行由人工完成,这是最基本的测试形式。

自动化测试是使用软件来控制测试执行过程,比较实际结果和预期结果是否一致,设置测试的前置条件和其他测试控制条件并输出测试报告。通常,自动化测试需要在适当的时间使已经形式化的手工测试过程自动化。

前些年几乎都是手工测试,近几年自动化测试开始慢慢地开展起来了,一些成熟的企业已经开始有专业的团队来做自动化测试。那么自动化测试为什么会存在呢?其实也是有着其自身的道理,并不是无缘无故地出现。

随着现在系统越来越复杂,如果版本升级,新增一些需求,那么我们必须对整个系统进行全面的回归测试,但这样将花费巨大的时间成本。例如中国平安的主页http://www.pingan.com,其绑定了很多子系统,包括平安银行、平安金融、平安保险等。如果现在只是升级几个需求的话,那么必须对所有功能都进行全面的测试,而这么大的系统少说也有3000个功能点,这样回归测试一轮,可能每天需要几百人,这个成本是巨大的,所以这个时候我们必须通过自动化测试来解决回归测试的问题,进而节约测试成本。

并且即使我们不考虑时间成本的问题,手工测试也无法全面回归,在1.3节中我们有介绍过测试心态的情况,如果我们持续测试一个功能,测试了好几轮都没问题,那么下一轮我们可能不会认真且全面地测试,这样就导致一些问题被遗漏了。但如果我们使用自动化测试工具则不存在这个问题,因为工具不知道它测试了多少轮。

所以自动化测试和手工测试应该是相互结合地使用,也不能只有自动化测试没有手工测试,因为在自动化测试的概念中说的很清楚:“自动化测试需要在适当的时间使已经形式化的手工测试过程自动化。”也就是说,第一轮测试是不允许做自动化测试的,第一轮必须是手工测试。所以只有自动化测试也不行。

软件测试基础到项目实战

猜你喜欢

转载自blog.csdn.net/m0_37449634/article/details/131582224