根据不同的分类标准,软件测试会有不同的分类。常见的两种分类方式是按测试原理分类和按测试阶段分类。
按测试原理,软件测试可分为黑盒测试和白盒测试,初级软件测试人员很有必要了解它们的意思和区别。
黑盒测试是不关注软件内部代码的结构和算法,只关注这个软件外部所展现出来的所有功能特性的测试。初级软件测试人员可以这样理解:黑盒测试只测试软件外部的功能特性,而不测试软件内部的代码结构。由于QQ邮箱的用户体验做得很好,本节还使用QQ邮箱的登录页面来举例说明。
图4-1是QQ邮箱的登录页面(简化版),那么黑盒测试要测些什么呢?答案是,黑盒测试只测试QQ邮箱登录页面所展示给用户的所有功能点能否正常使用(软件外部功能)。例如,当用户输入正确的用户名和密码时能否正常登录,输入错误的用户名或密码是否不能登录系统等功能点,而不会去测试登录页面的代码结构(软件内部代码)。其内部代码实现逻辑相当于封装在了一个黑盒子里面,只需要关注这个黑盒子的输入和输出是否符合需求定义,黑盒子里面具体的实现逻辑并不需要测试。
图4-1 QQ邮箱登录页面
白盒测试的定义刚好与黑盒测试相反,白盒测试是只关注软件内部代码的结构和算法,而不关注这个软件外部所展现出来的功能点的测试。初级软件测试人员可以这样理解:白盒测试只测试代码结构,而不测试软件的外部功能点。下面举例说明。
如图4-2所示,在QQ邮箱的登录页面的空白处单击鼠标右键,在弹出的快捷菜单中选择“查看页面源代码”命令,弹出登录页面所对应的源代码,如图4-3所示。那么白盒测试要测试什么?答案是,白盒测试只测试QQ邮箱登录页面所对应的源代码(图4-3所示的代码)结构有没有问题,而不会去测试登录页面所展示给用户的各项功能点。
图4-2 查看页面源代码
图4-3 源代码
按测试阶段,软件测试可分为4个阶段,分别为单元测试、集成测试、系统测试和验收测试。
开发人员开发完一小段代码后就能实现一个小的功能模块,开发完多个小段代码后就能实现多个小的功能模块,然后再把这些小的功能模块串联在一起就组成了一个大的功能模块。接着把几个大的功能模块组合在一起就成为最终的软件系统。在这里把最初的一小段代码称为软件系统的最小组成单元,而单元测试就是指对这小段代码进行测试。当开发人员开发完一小段代码后,开发人员会测试它有没有问题。只有通过单元测试才能把这些单元模块集成在一起,形成一个大的功能模块。由此看来,单元测试是测试代码的,采用的是白盒测试的方法(因为白盒测试是基于软件内部代码测试的),主要由开发人员来做。
单元测试完成后,开发人员就会把已测试完的单元模块组合在一起并形成一个“组合体”。在集成模块的初期,由于集成到一起的单元模块比较少,此时的“组合体”如果出现问题,很多时候可能还要追溯单元模块内的代码,所以初期的集成测试主要由开发人员来执行,采用白盒测试的方法。但到集成的后期就不同了,由于集成到一起的模块越来越多,各模块之间的依赖性越来越强,离目标系统越来越近,软件系统核心模块基本组装完毕,此时软件的部分功能点也已经展现出来,开发人员可对软件进行部分功能测试,一般采用的是黑盒测试的方法。
随着软件集成的规模越来越大,直至最后组装成为一个完整的软件系统,软件的所有功能点和特性已经就位,这个时候就该项目组的测试人员登场了。系统测试简而言之就是测试人员对这个软件系统做全面测试。本书在第2章介绍过,测试人员对一个软件的全面测试,主要是基于6个方面开展的,即软件的外观界面、功能、性能、安全性、易用性、兼容性。那么系统测试就是测试软件的外观界面、功能、性能、安全性、易用性、兼容性这6个方面是否满足需求文档里的要求。同时由于这6个方面的测试并不需要关注软件内部的代码结构和逻辑,因此,测试人员进行系统测试时采用的也是黑盒测试的方法。由此看来,测试人员是在系统测试这个阶段介入的,如图4-4所示。
图4-4 系统测试
接下来简要描述一下这6个方面测试的基本含义。
(1)软件的外观界面测试(简称UI测试):主要测试软件界面功能模块的布局是否合理,整体风格是否一致,界面文字是否正确,命名是否统一,页面是否美观,文字、颜色、图片组合是否完美等。测试难度:相对简单。
(2)软件的功能测试:主要是测试软件所呈现给用户的所有功能点是否都能正常使用和操作,是否满足需求文档里的要求。测试难度:中等。
(3)软件的性能测试:测试软件在不同环境和压力下能否正常运转,其中有一个很重要的指标就是系统响应时间,例如,多人同时访问某个网页时,网页能否在规定的时间内打开等。测试难度:较高。
(4)软件的安全性测试:测试该软件防止非法侵入的能力。测试难度:较高。
(5)软件的易用性测试:测试软件是否容易操作,主观性比较强,站在用户的角度体验软件产品好不好用。测试难度:相对简单。
(6)软件的兼容性测试:测试该软件与其他软件的兼容能力,作为初级软件测试人员,主要考虑软件与浏览器的兼容能力,包括分辨率的兼容。测试难度:相对简单。
验收测试由用户开展,测试的内容与系统测试相似,主要测试软件系统是否满足需求文档里的要求、是否满足用户的需求。采用的方法也是黑盒测试。通常验收测试通过之后,软件才能交付投产上线,由于验收工作由用户执行,在这里不做过多阐述。