软件测试的测试方法种类繁多,从不同方面进行系统分类。
一,按开发阶段
1. 单元测试
单元测试又称模块测试,是针对软件设计中的最小单位-程序模块进行正确性检查的测试工作。在C语言中一个单元指一个函数,Java中指一个类,图形化软件中则指一个窗口或菜单。
测试阶段:编码后或编码前(TDD)
测试对象:软件设计的最小模块
测试人员:白盒测试工程师或开发工程师
测试根据:代码和注释、详细设计文档
测试方法:白盒测试
测试内容:模块接口测试、局部数据结构测试、途径测试、错误处理测试、边界测试
单元测试需要从程序内部结构出发设计测试用例,多个模块可以并行独立进行。目的是检验软件基本组成单位的正确性。
2. 集成测试
集成测试又称组装测试、联合测试,是在单元测试的基础上,将所有程序模块采用适当的集成方法组装起来,对系统的接口及集成后的功能进行正确性检测。测试不同模块之间的接口部分。
测试阶段:一般在单元测试之后进行
测试对象:模块间的接口
测试人员:白盒测试工程师或开发工程师
测试根据:单元测试的模块 + 概要设计文档
测试方法:黑盒测试和白盒测试相结合
测试内容:模块之间数据传输、模块之间功能冲突、模块组装功能正确性、全局数据结构、单模块缺陷对系统的影响
集成测试是单元测试的思路扩展,目的是检查软件单位之间的接口是不是正确。
3. 系统测试
系统测试是将整个软件系统看为一个整体进行测试,包括对功能、性能以及软件所运行的软硬件环境进行测试。
测试阶段:集成测试通过之后
测试对象:整个系统(包括软硬件)
测试人员:黑盒测试工程师
测试根据:需求规格说明文档
测试方法:黑盒测试
测试内容:功能、界面、可靠性、易用性、性能、兼容性、安全性等
系统测试是将经过测试的子系统装配成一个完整系统来测试。系统测试执行阶段占据大量时间,包括回归测试和冒烟测试。
冒烟测试 :对象是每一个新编译的需要正式测试的软件版本,确定软件基本功能正常,可以进行后续的正式测试工作,一般由版本编译人员执行。
回归测试:指修改了旧代码后重新进行测试,以确定修改没有引入新的错误或导致其他代码产生错误。回归测试可使用自动化测试大幅降低成本。
4. 验收测试
验收测试是部署软件之前的一个测试操作,也称为交付测试。目的是保证软件准备就绪,按照项目合同、任务书、双方约定的验收根据文档,向软件购买方展示该软件系统满足需求。
测试阶段:系统测试通过之后
测试对象:整个系统(包括软硬件)
测试人员:主要是最后用户或需求方
测试根据:用户需求、验收标准
测试方法:黑盒测试
测试内容:同系统测试(功能、性能、各类文档等)
二,按代码
1. 黑盒测试
黑盒测试又称数据驱动测试,完全不考虑程序内部结构和内部特性,注重于测试软件的功能需求,只测试软件的输入数据和输出数据。只需要检查软件是不是按照需求文档完成。
黑盒测试重视客户需求,适用于功能测试、界面测试、易用性测试、安装测试等场景。
2. 白盒测试
白盒测试是把盒子打开,去研究里面的源代码和程序结构。又称结构测试或思路驱动测试,测试人员需要了解代码程序结构和处理过程。白盒测试适用于单元测试阶段,需要从程序内部结构出发设计测试用例。
3. 灰盒测试
灰盒测试介于白盒测试和黑盒测试之间,既测试输出、输入的正确性,也重视程序内部的情况。灰盒测试多用于集成测试阶段,通过表征性的现象、事件、标志来判断内部的运行状态。
软件公司往往采用黑盒测试和白盒测试相结合的方式-软件的整体功能和性能进行黑盒测试,源代码采用白盒测试。
三,按执行方式
1. 静态测试
静态测试是指不运行被测程序,仅通过分析或检查源代码、文档等来发现缺陷的测试方法。包括代码审查、走查、静态分析等。
2. 动态测试
动态测试是指实际运行被测程序,通过输入测试数据并观察输出结果来发现缺陷的测试方法。
3. 手动测试和自动化测试
按照自动化程度可分为手工测试和自动化测试。手动测试由测试人员按照设定义的测试用例手动执行,便于发现UI细节问题;自动化测试则通过脚本和工具自动执行测试用例,适用于回归测试等重复性工作。
四,按测试目的
常见分类包括:
功能测试:测试软件功能是不是符合需求。
性能测试:考虑系统在各种负载下的表现,测试软件在不同场景下的响应速度和稳定性。
安全测试:检测和修复系统安全漏洞,测试系统的保密性、完整性和可用性。
兼容性测试:保证软件在不同操作系统、硬件环境、浏览器等环境中正常运行。
界面测试(UI测试) :测试界面内容显示的完整性、一致性、准确性、友好性,以及界面布局和控件功能。
易用性测试:测试软件的易用性和用户满意度,测试用户使用软件是不是方便。
回归测试:在代码修改后重新测试,保证修改没有引入新的错误。
此外还有安装测试(保证软件安装后可以正常使用)、文档测试(用户手册、使用说明等文档的完整性)等类型。