对于软件测试,我们可以从不同的角度加以分类。软件测试可以按测试阶段分类(也称按测试层次分类),也可以按是否覆盖源代码分类,还可以按是否运行来分类。除此之外,还有一些其他分类。
软件测试分类
按测试阶段分类
单元测试
单元测试(Unit Testing)是在编码阶段针对每个程序单元而进行的测试,其测试的对象是程序系统中的最小单元——类、函数、模块或组件等。
主要使用白盒测试方法,从程序的内部结构出发设计测试用例,检查程序模块或组件已实现的功能与定义的功能是否一致,以及编码中是否存在错误。
集成测试
集成测试(Integration Testing)也称为组装测试、联合测试等,是在单元测试的基础上,按照设计要求不断进行集成而进行的相应测试,目的是发现单元之间的接口问题,如接口参数类型不匹配、接口数据在传输中丢失、数据误差不断积累等问题。
通常有两种集成方式:一次性集成方式和渐增式集成方式,但一般要求采用渐增式集成方式。
(1)一次性集成方式。首先对各个单元分别进行测试,然后再把所有单元组装在一起进行测试,最终得到要求的软件系统。
(2)渐增式集成方式。首先对某两三个单元进行测试,然后将这些单元逐步集成为较大的系统。现在流行持续集成、持续测试,以及时发现开发过程中产生的问题,最后完成所有单元的集成,构造为一个完整的软件系统。
系统测试
系统测试(System Testing)针对已集成的软件系统进行测试。
系统测试又可细分为系统功能性测试和系统非功能性测试。功能测试基于产品功能说明书、用户角度来对各项功能进行验证,以确认每个功能是否都能正常使用;系统非功能性测试是在实际运行环境(包括软硬件平台、第三方支持软件、用户数据量等) 或模拟实际运行环境之上,针对系统的非功能特性所进行的测试,包括负载测试、性能测试、灾难恢复性测试、安全测试和可靠性测试等。
验收测试
验收测试(Acceptance Testing,Beta Testing)验证是否为用户真正所需要的产品特性,验收测试关注用户环境、用户数据,而且用户也参与其中。
验收测试又可细分为Alpha( α \alpha α)测试、Beta( β \beta β)测试和Gamma( γ \gamma γ)测试。
α \alpha α测试
指软件开发公司内部人员开始试用新产品(称为Alpha 版本),在实际运行环境和真实应用过程中发现测试阶段所没有发现的缺陷。经过Alpha测试和修正的软件产品称为Beta版本。
β \beta β测试
指公司外部的典型用户试用,并要求用户报告异常情况、提出批评意见,然后再对Beta 版本进行修正和完善,最终得到正式发布的版本。
γ \gamma γ测试
γ \gamma γ版本指的是软件版本正式发行的候选版。
按是否覆盖源代码分类
黑盒测试
黑盒测试方法也称为数据驱动测试方法或基于需求规格的测试。在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,测试人员针对软件直接进行测试。
只关注功能,不关注功能的具体实现方式
白盒测试
白盒测试也称为结构化测试或逻辑驱动测试,也就是已知产品的内部工作过程,清楚最终生成软件产品的计算机程序结构及其语句,按照程序内部的结构测试程序,测试程序内部的变量状态、逻辑结构、运行路径等,检验程序中的每条通路是否都能按预定要求正确工作,检查程序内部动作或运行是否符合设计规格要求,所有内部成分是否按规定正常进行。
不但关注功能,还要关注代码实现
灰盒测试
灰盒测试是介于黑盒与白盒之间一种测试。
按是否运行分类
静态测试
静态测试包括对软件产品的需求和设计规格说明书的评审、对程序代码的审查和静态分析等。它不运行程序,只静态观察软件是否符合预期。
动态测试
动态测试是通过真正运行程序发现错误,通过观察代码运行过程,获取系统行为、变量实时结果、内存、堆栈、线程和测试覆盖度等各方面的信息,以判断系统是否存在问题,或者通过有效的测试用例和对应的输人/输出关系来分析被测程序的运行情况,以发现缺陷。
按是否自动化分类
人工测试
也称手工测试,是指通过测试人员手工操作来完成软件测试工作的方法。
自动化测试
是通过计算机运行测试工具和测试脚本自动完成软件测试工作的方法。
其他
冒烟测试
是一个基础功能测试,只初步粗略的测试产品。
回归测试
回归测试(Regression Testing)为保证软件中新的变化(如新增加的代码、代码修改等)不会对原有功能的正常使用有影响而进行的测试。也就是说,满足用户需求的原有功能不应该因为代码变化而出现任何新的问题。
随机测试
随机测试主要是对被测软件的一些重要功能进行复测,也包括测试那些当前的测试用例没有覆盖到的部分。
探索性测试
一边了解和学习项目,一边测试项目。
以上是对软件测试分类的一点粗略笔记,相关定义来自黑马和朱少名的《软件测试方法和技术》