本文最后更新于 145 天前,其中的信息可能已经有所发展或是发生改变。
一、软件开发过程概述
1. 软件工程的三个阶段
- 定义阶段:可行性研究、初步项目计划、需求分析
- 开发阶段:概要设计、详细设计、实现、测试
- 检验交付与维护阶段:运行、维护、废弃
2. 软件开发的基本活动
- 软件规格说明
- 规定软件
- 功能
- 性能
- 及其运行限制
- 软件开发
- 产生满足规格说明的软件
- 包括设计与编码等工作。
- 软件确认
- 确认软件能够满足客户提出的要求
- 对应于软件测试。
- 软件演进
- 为满足客户的变更要求,软件必须在使用过程中演进
- 以求尽量延长软件的生命周期。
3. 软件开发中的角色
- 项目经理、业务分析人员、架构师、数据设计人员、程序员、测试人员、产品经理、技术支持代表
4.软件测试与软件开发
软件测试在软件开发过程中占有重要的地位。
- 传统的瀑布模型中
- 软件测试只成为其阶段性的一段工作
- 现代软件工程思想中
- 认为软件测试贯穿整个软件生命周期
- 并且是保证软件质量的重要手段之一。
二、软件开发模型
1. 瀑布模型(理想化)

-
特点:线性、阶段分明、需求明确、变更困难
-
阶段:用户需求 → 需求分析 → 概要设计 → 详细设计 → 编码 → 测试 → 运行维护
软件测试作为整个软件生命周期中的一个阶段,对产品质量进行的最后检查
由于现实中:
- 需求是可变/模糊的
- 用户和开发者难于沟通
所以我们推出非线性模型。
2. 非线性模型(适应需求变化)
-
增量模型:
- 分阶段交付可运行产品
- 增加的构件不能破坏已构造好的系统部分
- 需要软件具备开放式的体系结构;
- 适应变化但需注意架构开放性
-
原型模型:
- 快速构建原型,迭代完善,适合需求不明确的情况
-
RAD模型(快速开发模型):
-
- 并行开发、构件复用,适合模块化系统
- 不适用于技术风险高、采用新技术的项目
-
螺旋模型:
- 结合线性与原型,加入风险分析,适合大型系统
-
迭代模型:
- 多个小瀑布循环,逐步完善系统
3. 开发模型选择原则
- 需求明确 → 瀑布模型
- 需求不明确 → 原型/迭代/螺旋模型
- 资金分阶段 → 增量模型
- 新系统开发 → 先总体设计再增量/并行
三、软件测试过程模型
1. V模型

- 开发与测试对应,每个开发阶段有对应的测试级别
- 测试级别:单元测试 → 集成测试 → 系统测试 → 验收测试
-
特点:强调验证与确认,适合需求稳定的项目
-
验证
-
通过检查和提供客观证据来证实指定的需求是否满足
- 输入与输出之间的比较
-
确认
-
通过检查和提供客观证据来证实特定目的的功能或应用是否已经实现
- 应考虑使用和应用的条件范围要远远大于输入时确定的范围
-
2. W模型

- 测试与开发同步进行,强调早期测试(需求、设计阶段)
- 特点:尽早测试、全程参与,但不支持迭代开发
- 软件开发和测试保持一种线性的前后关系,需要有严格的指令表示上一阶段完全结束。
3. H模型

- 测试独立成流程,与其他开发活动并行
- 特点:测试准备与执行分离,适合敏捷和迭代开发
- 利于测试的分工,从而降低成本,提高效率;
- 利于认识到测试的复杂性,从而赢得重视和尊重;
- 利于认识到测试的复杂性,从而赢得重视和尊重;
4. X模型

- 支持探索性测试、频繁集成、应对变更
- 特点:灵活,适合需求频繁变化的项目
5. P模型(前置测试模型)

- 测试与开发紧密结合,每个交付内容都测试
- 特点:测试提前介入,设计与测试并行
四、测试级别详解
1. 单元测试

- 对象:模块、类、函数
- 目的:验证单元功能是否符合设计
- 技术:白盒为主,黑盒为辅
- 工具:驱动模块、桩模块
- 需求:覆盖功能需求和非功能需求
- 方法:使用测试驱动
桩模块就是一个“假的”、“模拟的”依赖对象
它被专门制造出来,以便在测试中隔离被测模块,并通过预设的行为(返回特定值、抛出异常等)来帮助验证被测模块的逻辑是否正确。
它是实现高效、隔离单元测试的关键工具。
2. 集成测试
- 对象:模块间接口、数据传递
- 策略:
- 自底向上(需驱动模块)
- 自顶向下(需桩模块)
- 核心系统优先
- 大爆炸(不推荐)
3. 系统测试
- 对象:完整系统在实际环境中运行
- 目标:验证功能与非功能需求
- 类型:性能、安全、压力、容量测试等
4. 验收测试
- 执行者:用户或利益相关者
- 类型:
- 合同验收测试
- Alpha/Beta测试
- 用户验收测试
- 运行测试
五、什么是好的测试?
- 每个开发活动都有对应的测试活动
- 每个测试级别有明确目标
- 测试早期介入(如文档评审)
- 测试用例基于工作产品(如需求文档)
- 使用适当的测试技术和工具




