软件测试可以根据不同的标准进行分类,如开发阶段、测试环境、测试技术和软件质量特征。
按照开发阶段分类
软件测试按开发阶段可分为单元测试、集成测试、验证测试、系统测试和验收测试。1.单元测试
单元测试又称模块测试,是在软件设计中检查最小单元——程序模块正确性的测试。其目的是检查每个程序单元是否能够满足详细设计描述中对模块功能、性能、接口和设计约束的要求,并发现每个模块中可能存在的各种错误。单元测试需要从程序的内部结构设计测试用例。多个模块可以独立并行测试。
2.集成测试
集成测试,也称为组装测试,通常在单元测试的基础上,对所有程序模块进行有序的增量测试。集成测试验证程序单元或组件的接口关系,使其逐步集成到符合概要设计要求的程序组件或整个系统中。软件集成是一个持续的过程,会产生很多临时版本。在这个过程中,保证功能集成的稳定性是一个真正的挑战。提交每个版本时,都需要进行冒烟测试,即验证程序的主要功能。冒烟测试也称为版本验证测试和提交测试。
3.确认测试
验证测试是通过检查和提供客观证据来验证软件是否满足特定预期用途的要求。确认软件是否符合软件需求说明书中的要求。
4.系统测试
系统测试是对集成硬件和软件系统的测试,以验证和确认系统是否达到其最初的目标。在真实或模拟的系统运行环境下,系统测试检查完整的程序系统是否能够与硬件、外设、网络和系统软件、支持平台等正确匹配和连接。并满足用户的需求。
5.验收测试
pan>验收测试是按照项目任务书或合同、供需双方约定的验收依据文档对整个系统进行的测试与评审,决定产品被接收或拒收。
按照测试环境分类
当软件是为特定用户开发时,需要进行一系列的验收,让用户验证所有的需求是否已经得到满足。当软件是为多个用户开发时,让每个用户逐个执行正式的验收测试是不切实际的,因此很多软件产品生产者采用 α 测试和 β测试以发现可能只有最终用户才能发现的错误。
α 测试是由一个用户在开发环境下进行的测试,也可以是开发机构内部的用户在模拟实际操作环境下进行的测试。软件在一个自然设置状态下使用,开发者坐在用户旁边,随时记下错误情况和使用中的问题。这是在受控制的环境下进行的测试,α 测试的目的是测试软件产品的FLURPS(即功能、局域化、可使用性、可靠性、性能和支持),尤其注重产品的界面和特色。
β 测试是在软件的一个或多个用户的实际使用环境下进行的测试。这些用户是与公司签订了支持产品预发行合同的外部客户,他们要使用该产品,并返回相关错误信息给开发者。
按照测试技术分类
软件测试按照测试技术分为白盒测试、黑盒测试、灰盒测试,也可分为静态测试和动态测试。静态测试是指不运行程序,通过人工方式对程序和文档进行分析与检查;动态测试是指通过运行被测程序来检查运行结果与预期结果的差异,并分析运行效率和健壮性等指标。此处讨论的白盒测试、黑盒测试、灰盒测试在实现测试的方法上既包括动态测试,又包括静态测试。
1.白盒测试
白盒测试通过对程序内部结构的分析、检测来寻找问题。它将测试对象看成一个透明盒子,即清楚了解程序结构和处理过程,以此检查软件内部动作是否按照设计说明的规定正常进行。
2.黑盒测试
黑盒测试通过软件的外部表现来发现其缺陷和错误。它把测试对象看成一个黑盒子,完全不考虑程序内部结构和处理过程。黑盒测试在程序界面处进行测试,它只检查程序是否按照规格说明书的规定正常运行。
3.灰盒测试
灰盒测试是介于白盒测试与黑盒测试之间的测试。灰盒测试关注输出对于输入的正确性,同时也关注内部表现,但这种内部关注不像白盒测试那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态。
软件测试方法和技术的分类与软件开发过程相关联,它贯穿了整个软件生命周期。单元测试、集成测试、系统测试应用于整个开发过程中的不同阶段。单元测试应用白盒测试方法,集成测试应用近似灰盒测试方法,系统测试和确认测试应用黑盒测试方法。
按照软件质量特性分类
软件测试按照软件质量特性可分为功能测试与性能测试。
功能测试是一种黑盒测试,它检查软件的实际功能是否符合用户的需求,一般分为逻辑功能测试、界面测试、易用性测试、安装测试、兼容性测试等。
性能测试针对软件的各方面性能,主要是时间性能和空间性能。
时间性能主要是指软件的一个具体事务的响应时间。比如登录163邮箱,输入用户名和密码,单击“登录”按钮,如果从单击按钮的那一刻起,到最终登录后的页面反馈,时间间隔为3秒,则称163邮箱在这一次登录事务中的响应时间为3秒。通常通过多次登录来记录不同的响应时间,最后取平均值,这样的数据才有参考价值。
空间性能主要指软件运行时所消耗的系统资源,比如安装软件之前,软件提示用户的安装最低要求。性能测试一般分为如下几种。
(1)一般性能测试:指让被测系统在正常的软硬件环境下运行,不向其施加任何压力的性能测试。
(2)稳妥定性测试:也称可靠性测试,指连续运行被测系统,检查系统运行的稳定程度。
(3)负载测试:通常是指让被测系统在其能忍受的压力的极限范围之内连续运行来测试系统的稳定性。
(4)压力测试:通常是指持续不断地给被测系统增加压力,直到将被测系统压垮为止,用来测试系统所能承受的最大压力。
其他分类
回归测试是指在软件的新版本测试时,重复执行该软件的某一个旧版本的所有测试用例。目的是验证旧版本所有缺陷已全部被修复,以及确认修复这些缺陷没有引发新的缺陷。
冒烟测试是指在对一个新版本进行大规模的系统测试之前,先验证一下软件的基本功能是否实现,是否具备可测性。
随机测试也称为随意性测试,是测试人员基于经验和直觉的探索性测试,其目的是模拟用户的真实操作,并发现一些边缘性的错误。