软件与软件测试的定义与分类
软件的定义
软件是计算机系统中与硬件相互依存的无形逻辑产品,是程序、数据及其相关文档的完整集合,它通过在计算机硬件上运行来实现特定的功能、任务或服务。
核心组成三要素
-
程序:软件的核心执行体,是按预先设计的逻辑和规则编写的、可
被计算机执行的指令序列,直接完成计算、处理、交互等具体操作。 -
数据:程序运行所
依赖、处理和产生的信息,包括用户输入、业务数据、配置参数、数据库内容等,是软件实现价值的载体。 -
文档:描述软件的
需求、设计、开发、使用和维护的图文资料,如需求说明书、设计文档、用户手册、测试报告等,是软件可协作、可维护、可复用的关键保障。
关键特性
- 与硬件本质不同:硬件是有形的物理实体,软件是抽象的逻辑产品,无物理磨损,但会因
需求变更、环境变化出现 “逻辑老化”。 - 可无限复制:软件的
复制成本极低,核心价值在于其设计和开发的智力劳动。 - 强依赖性:必须
依赖特定的硬件和系统环境才能运行。
软件的分类
软件分类没有唯一标准,最核心、最通用的是按功能与服务对象划分,同时可结合运行方式、授权模式、部署形态等维度交叉分类。
系统软件
为计算机本身提供运行环境、管理资源、支撑其他软件运行的基础软件,用户一般不直接用它完成具体业务任务。
- 操作系统(OS):最核心的系统软件,管理硬件资源、调度程序运行、提供用户交互接口。例如 Windows、macOS、Linux、Android、iOS、鸿蒙 OS
- 语言处理程序:将高级语言(C、Java、Python)转换为计算机可执行的机器码。例如 GCC 编译器、Python 解释器、JVM(Java 虚拟机)
- 数据库管理系统(DBMS):统一管理和维护数据的系统软件。例如 MySQL、Oracle、SQL Server、Redis、MongoDB
- 系统工具与实用程序:辅助系统运行、维护、诊断的工具。例如 硬件驱动程序、磁盘分区工具、杀毒软件、备份还原工具、任务管理器等
应用软件
为满足用户特定业务、娱乐、办公等需求开发的软件,是用户直接使用的软件类型。
- 通用应用软件:面向大众,适用于多个行业和场景。例如 Office/WPS(办公)、Chrome/Edge(浏览器)、微信 / QQ(社交)、Photoshop(图像处理)、网易云音乐(多媒体)
- 专用 / 行业应用软件:针对特定行业、特定业务流程定制开发。例如 医院 HIS 系统、银行核心业务系统、工业 PLC 控制软件、AutoCAD(工程设计)、用友 / 金蝶(财务软件)、ERP 系统
两种架构风格
C/S 架构
- 系统分为
客户端和服务器两个独立部分:客户端安装在用户本地设备上,负责用户交互和部分业务处理;服务器负责核心业务逻辑、数据存储和管理,两者通过网络通信。 - ✅ 优点:性能高(客户端可分担计算任务)、界面交互丰富、安全性可控、支持离线使用
- ❌ 缺点:部署更新麻烦(需逐台升级客户端)、跨平台性差、维护成本高
- 📌 典型例子:QQ / 微信客户端、企业 ERP 客户端、大型游戏、Photoshop 联网版、银行柜台系统
B/S 架构
客户端统一为标准浏览器,无需安装任何专用软件;所有业务逻辑、数据处理都集中在服务器端,浏览器仅负责展示页面和接收用户输入。- ✅ 优点:零安装、零维护(更新仅需改服务器)、跨平台性极强、访问不受地点限制
- ❌ 缺点:性能弱于 C/S、复杂交互体验差、对网络依赖高、安全性相对较弱
- 📌 典型例子:网页版邮箱、在线文档(腾讯文档)、电商网站、企业 OA 系统、百度搜索
软件测试的定义
软件测试是在规定的条件下,对软件产品(程序、数据、文档)进行系统性的检查与验证,以发现缺陷、评估质量、验证需求符合性,并最终降低产品上线风险的过程。
软件测试的目标不是单纯 “找 bug”,而是三位一体:
- 发现缺陷:找出
软件中存在的功能、性能、安全、兼容性等问题 - 验证需求:确认软件
是否真正实现了用户的真实需求和设计要求 - 评估质量:量化软件的质量水平,为
产品是否可以上线提供决策依据
软件测试本质上是风险管控活动:它无法消除所有风险,但能在成本和时间的约束下,尽可能发现并修复高优先级缺陷,将产品上线后的故障风险控制在企业和用户可接受的范围内。
关键要点
- 测试对象是完整的软件:不只是可执行的程序,还包括软件的另外两个核心组成 —— 数据(如测试用例数据、配置文件)和文档(如需求说明书、设计文档、用户手册)。
- 测试贯穿全生命周期:不是 “开发完才测试”,而是从需求分析阶段就开始介入(测试左移),一直持续到上线后的运维阶段(测试右移)。
- 测试的基本公理:测试只能证明软件存在缺陷,不能证明软件没有缺陷。穷尽所有可能的测试用例在工程上是不可能的。
- 测试是标准化的专业活动:不是随意 “点来点去”,而是需要遵循 “计划→设计→执行→缺陷管理→报告” 的完整流程。
软件测试的分类
软件测试分类维度众多,最核心、最通用的是按「测试阶段」划分(对应软件全生命周期),其次是「测试方法」和「测试对象 / 特性」,其他维度可交叉使用。
按测试阶段划分(最核心,面试必问)
这是测试工作的标准流程,从代码编写到产品上线逐步推进,层层把关。
| 测试阶段 | 测试主体 | 核心测试内容 | 测试依据 | 典型例子 |
|---|---|---|---|---|
| 单元测试 | 开发人员为主 | 测试最小可执行单元(函数、方法、类)的逻辑正确性 | 详细设计文档、代码 | 测试登录接口的参数校验逻辑 |
| 集成测试 | 测试人员 + 开发人员 | 测试模块之间的接口调用、数据传递的正确性 | 概要设计文档、接口文档 | 测试用户服务与订单服务的调用是否正常 |
| 系统测试 | 测试人员为主 | 测试整个完整系统的功能、性能、安全、兼容性等所有特性 | 需求规格说明书 | 测试电商网站的下单、支付、退款全流程 |
| 验收测试 | 客户 / 产品方为主 | 验证产品是否满足业务需求和用户使用习惯,决定是否上线 | 用户需求文档、验收标准 | 企业客户验收 ERP 系统是否符合自身业务流程 |
验收测试的细分
- α 测试:开发方
内部模拟用户进行的验收测试 - β 测试:面向真实用户的
公开测试(如 APP 的公测版) - UAT 测试:用户验收测试,
最正式的验收环节
回归测试不是一个独立的测试阶段,而是贯穿全生命周期的活动。指修改代码或修复缺陷后,重新执行相关测试用例,确保修改没有引入新的缺陷或影响其他功能。
按测试方法划分(基础方法论)
根据是否查看软件内部代码和逻辑结构划分,所有测试类型都基于这三种方法。
| 测试方法 | 核心思想 | 常用技术 | 适用场景 |
|---|---|---|---|
| 黑盒测试 | 不看内部代码,只关注输入输出是否符合需求 | 等价类划分、边界值分析、因果图、场景法 | 绝大多数功能测试、系统测试、验收测试 |
| 白盒测试 | 查看内部代码,测试代码逻辑的覆盖度和正确性 | 语句覆盖、分支覆盖、条件覆盖、循环覆盖 | 单元测试、部分集成测试 |
| 灰盒测试 | 结合黑盒和白盒,既关注输入输出,也关注部分内部逻辑 | 接口测试、数据库测试 | 集成测试、接口测试 |
黑盒测试 ≠ 功能测试。黑盒是一种测试方法,功能测试是一种测试内容,功能测试大多采用黑盒方法,但黑盒也可用于性能、安全等测试。
按测试对象 / 特性划分(测试什么内容)
分为功能测试和非功能测试两大类,是测试的核心工作内容。
-
功能测试(最基础、占比最大):验证软件的功能是否按照需求规格说明书正确实现,是
所有测试的基础。例如 测试登录功能是否能正常登录、注册功能是否能成功注册、搜索功能是否能返回正确结果。 -
非功能测试(决定产品上限):验证软件除功能外的其他质量特性,直接影响用户体验和系统稳定性。
- 性能测试:测试系统在不同压力下的表现
- 负载测试:正常压力下的性能指标(响应时间、吞吐量)
- 压力测试:极限压力下的系统稳定性和崩溃点
- 并发测试:多用户同时操作时的系统表现
- 稳定性测试:长时间运行下的系统可靠性
- 安全测试:测试系统抵御攻击和数据泄露的能力。例如 SQL 注入、XSS 攻击、权限越权、敏感数据加密
- 兼容性测试:测试软件在不同环境下的运行情况
- 浏览器兼容(Chrome、Edge、Firefox)
- 操作系统兼容(Windows、macOS、Android、iOS)
- 设备兼容(不同型号的手机、电脑)
- 版本兼容(新旧版本数据互通)
- 易用性测试:测试软件是否容易学习、使用和理解
- 可靠性测试:测试系统在规定时间和条件下完成规定功能的能力
- 其他:安装测试、卸载测试、文档测试、本地化测试等
- 性能测试:测试系统在不同压力下的表现
其他常用分类维度
-
按执行方式
- 手动测试:测试人员手动执行测试用例。
- 自动化测试:通过脚本或工具自动执行测试用例(如 Selenium、Appium、Postman)。
自动化测试不是一种独立的测试类型,而是一种测试执行方式,可用于功能、性能、回归等多种测试。
-
按测试目的
- 冒烟测试:版本构建后,先
执行核心功能的少量用例,验证版本是否可测 - 回归测试:修改后验证是否引入新缺陷(见上文)
- 探索性测试:
不依赖测试用例,基于测试人员经验自由探索发现缺陷 - 随机测试:
随机输入数据进行测试,作为其他测试的补充
- 冒烟测试:版本构建后,先
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!