软件测试:单元、集成、系统、验收测试详解
一、 区别
1. 单元测试
目的:证实代码单元(函数、方法、类)的思路正确性,-是白盒测试的典型代表。
测试对象:隔离的、最小的可测试代码模块。
执行主-体:开发人员。
测试环境:隔离环境,使用测试替身模拟外部依赖(如数据库、网络服务)。
重点:代码途径、分支包括、异常处理、算法实现。
主要方法:根据代码结构设计用例,追求高包括率(语句、分支包括)。
2. 集成测试
目的:证实模块/组件/服务之间的接口和交互是不是正确,数据传递是不是准确。
测试对象:两个或多个已通过单元测试的模块组合。
执行主体:开发人员或测试工程师。
测试环境:集成-的开发-或测试环境,部分依赖可能仍被模拟。
重点:-接口协议、数据格式、错误传递、依赖处理。
主要方法:增量式(自顶向下/自底向上)或非增量式(大爆炸)。重视集成后的功能子集。
3. 系统测试
目的:在完整、仿真的系统环境下,证实整个软件系统-作为一个整体是不是满足产品需求规格说明书的要求。
测试对象:完整的、可部署的软件产品。
执行主体:独立-的测试团队。
测试环境:高度模拟生产环境的测试环境(Staging Environment)。
重点:
功能性:端到端业务流程。
非功能性:性能、安全性、可靠性、兼容性、易用性。
安装部署和升级。
主要方法:黑盒测试。根-据需求规格设计功能和非功能测试情形。
4. 验收测试
目的:从用户/业务方的视角,确定软件是不是解决了其业务问题,满足合同或用户预期。-是需求证实的-最-后步骤。
测试对象:准-备上线的完整系统。
执行主体:用户、客户代表或产品负责人。
测试环境:应尽可能使用生产环境或用户验收测试环境。
重点:业务需求的符合性、业务流程的顺畅性、用户体验、交付物完整性。
主要方法:黑盒测试。一般根据用户故事或业务用例设计测试情形。
二、 内在联系
1. 递进的测试金字塔
-这四个阶段组成经典的测试金字塔模型,体现了测试的方面性和经济性。
单元测试是基础,数量最多,运行最快,成本最低,为了尽早发现并修复缺陷。
集成测试位于中层,数量中等,证实模块协作,保证零件能组装成部件。
系统测试和验收测试位于顶层,数量较少,执行较慢,成本高昂,但最贴近真实用户-情形,用于证实。
2. 逐层扩大测试范围和视角
范围扩大:从代码单元 -> 模块接口 -> 完整系统 -> 业务作用。
视角转变:从开发者视角(内部思路) -> 系统架构视角(组件交互) --> 产品视角(需求符合) -> 用户/业务视角(作用实现)。
3. 缺陷发现
低级测试(单元、集成)为了尽早发现和隔离深方面的技术缺陷。
高级测试(系统、验收)为了发现只有在完整-上下文中才会暴露的问题,如架构缺陷、需求误解、环境依赖、非功能性问题。
每一层测试都为下一层提供质量过滤,保证缺陷不被传递到更昂贵、更复杂的测试阶段。
4. 共同组成完整的V模型证实过程
-在传统V模型中,测试阶段和开发阶段存在对应证实关系:
单元测试 证实 详细设计。
集成测试 证实 概要/架构设计。
系统测试 证实 需求规格。
验收测试 确定 用户需求。
这体现了证实(是不是-正确地创建了产品)和确定(是不是创建了正确的产品)的双重目的。
三、 总结
根本目的-一致:共同保障软件质量,降低发布风险,但各有分工和不同。
信息流和反馈循环:上层测试(如系统测试)发现的缺陷,可能需要通过下层测试(如单元测试)的补充或修改来回归证实,形成质量改进流程。
在敏捷和DevOps中-,这些阶段并不是严格串行。通过不断集成和自动化测试,单元和集成测试左移并频繁执行;系统和验收测试中的部分高作用情形也被自动化,形成不断交付管道的一部分。