1.3 软件测试与开发
1.1 需求为中心的相互依赖关系
我们知道软件工程是指软件开发的过程采用工程的概念来管理。从客户提出需求定义开始启动项目,经过招投标确定开发团队后,进入与开发团队一起进入需求分析阶段,自顶向下,逐步细化。
软件开发过程
在软件计划阶段定义软件的作用域,然后进行软件需求分析,撰写软件需求分析说明书,建立软件的数据域、功能和性能需求、约束和一些有效性准则。接着进入软件开发,进行软件架构设计,然后再把设计用某种程序设计语言转换成最终程序代码。
软件测试过程
与此同时,全程参与的软件测试也是从需求开始的一个逐步验证和确认的过程:
- 首先需要获得测试需求
- 确定需求的目标和范围
- 根据需求制定测试计划
- 设计测试用例和执行测试
- 最后通过对比实际结果和预期结果,生成缺陷报告和进行缺陷跟踪
以需求为核心的开发与测试
软件产品从无到有的过程,是一个需要与产品有关的利益相关方全面参与的过程。开发和测试都是围绕需求展开的:
- 了解需求
- 分析需求
- 需求评审
- 为实现需求的软件设计
- 围绕需求的软件代码实现
- 最后根据需求进行检验
通过检验的产品输出为合格的软件产品。
测试与开发的关系
软件测试的最终目标是:检验软件产品是否满足客户的需求,并尽可能的在产品发布前发现缺陷。
这就要求软件测试工作是以需求为核心展开的,与软件开发人员以输出合格的产品为第一要务,与开发人员并肩作战,保证和督促软件开发的过程是科学有序的,同时最终的产品是符合客户要求和质量规范的。
测试与开发之间是相互依赖的:
- 测试对象是软件开发的阶段性成果
- 软件开发的进一步活动又依赖于测试结果
- 软件项目开发的前期更多地依赖于开发过程,设计和实现能力决定了整个软件过程的进展状态
- 后期更多地依赖于测试过程,测试策略和能力,测试效率高就能更快地发现缺陷,缺陷就能得到更快地修正
V&V:验证和确认
软件测试也被认为就是V&V,也就是”验证”和”有效性确认”活动构成的整体。
验证(Verification)
Are we building the product right?(我们正确地构造产品了吗?)
- 通过检查和提供客观的证据来证实规定需求已经得到满足
- 是指对开发与设计过程中活动的结果进行检查的过程
- 以确定开发的过程是按照质量规范或标准执行
- 对每个阶段的产品进行评审与监督,确保生产的过程对规定需求的符合情况
验证的核心问题:是否正确地构造了软件?
- 即是否正确地做事
- 验证开发过程是否遵守已定义好的内容
- 验证产品满足规格设计说明书的一致性
确认(Validation)
Are we building the right product?(我们构造了正确的产品吗?)
- 是否构造了正是用户所需要的软件?
- 即是否正在做正确的事
- 验证产品所实现的功能是否满足用户的需求
- 通过检查和提供客观证据来证实针对某一特定预期用途的需求已经得到满足
- 确认涉及到检查某个产品是否符合用户需要的过程
- 通常是对最终产品在规定的使用条件下进行的
1.2 测试团队
根据实际情况有时候不需要设置专门的测试团队,但是对于专业从事项目开发的公司来说,测试团队是必不可少的。
测试团队掌控的信息
- 项目背景:用户、目标、范围、工期、项目类型、软件平台、开发工具和语言等等
- 制定测试规范:对软件测试的流程过程化,并对每一个过程元素进行明确的界定,形成完整的规范体系
测试规范包括
- 角色的确定
- 进入准则
- 输入项
- 活动过程
- 输出项
- 验证和确认
- 退出准则和度量
测试团队角色职责表
| 工作角色 | 具体职责 |
|---|---|
| 测试经理/测试主管 | 管理监督测试项目,提供技术指导,获取适当的资源,技术协调和测试活动的质量管理,负责项目的安全保密 |
| 测试组长/高级测试工程师 | 编制测试计划文档,测试规范说明文档等,确定测试计划、测试内容、测试方法、测试数据生成方法、测试(软、硬件)环境、测试工具,评估测试工作的有效性 |
| 测试分析师/测试设计师 | 设计测试用例,确定测试用例的优先级,建立测试环境 |
| 测试开发工程师 | 设计和实现测试脚本,编写测试辅助软件 |
| 测试工程师 | 执行测试,负责解释测试用例的结果并将结果记录到文档中 |
| 测试系统管理员 | 对测试环境和资产进行管理和维护 |
| 独立测试观察员 | 独立验证在AUT测试中执行了正确的过程 |
| 补充的测试角色 | 自动化架构师,自动化分析员和探索测试者 |
测试团队在项目中的位置
测试团队在项目中的位置有三种模型:
- 以开发为核心的组织模型
- 以项目经理为核心的组织模型
- 三足鼎立的组织模型
测试部门与开发部门的独立设置是软件开发质量得到保证的一个制度性设置。测试对于开发有效监督与反馈,从源头促进质量提高,保证软件构造的质量。开发可以根据测试结果而不断修正和完善软件,在此测试还起着”把关”和”守门员”的作用。
测试过程模型
一、V模型
V模型是最具代表性的测试模型,它将测试过程与开发过程相对应,将开发过程分为需求分析、概要设计、详细设计、编码等阶段,与之相对应的测试过程分为单元测试、集成测试、系统测试、验收测试。
V模型的特点:
- 明确表示了测试过程与开发过程之间的对应关系
- 测试阶段划分清晰,便于理解和操作
- 左侧是开发过程,右侧是测试过程
- 开发过程是自上而下,测试过程是自下而上
V模型的局限性:
- 测试是在开发之后才开始的,无法在早期发现问题
- 对于需求阶段的错误无法早期发现
- 不适合需求变化较大的项目
二、W模型
W模型也称为双V模型,它强调测试伴随着整个软件开发周期,而且测试的对象不仅仅是程序,还包括需求、设计等前期工作。
W模型的特点:
- 强调测试活动与开发活动并行进行
- 测试对象包括需求、设计、编码等
- 可以在早期发现需求和设计中的缺陷
- 更适合需求变化的项目
W模型的优势:
- 尽早发现问题,降低修复成本
- 测试与开发同步进行
- 提高软件质量
三、H模型
H模型将测试活动完全独立出来,形成一个独立的流程。测试准备活动和测试执行活动是完全独立的,只有当测试准备就绪后,才能开始执行测试。
H模型的特点:
- 测试活动完全独立
- 测试准备和测试执行分离
- 可以灵活安排测试时间
- 强调测试的就绪点
四、X模型
X模型是对V模型的改进,它将探索性测试融入到测试过程中,允许在测试过程中进行更多的交互和调整。
X模型的特点:
- 允许探索性测试
- 更加灵活
- 适合需求不明确的项目
软件开发阶段与测试阶段的对应关系
| 开发阶段 | 测试阶段 | 说明 |
|---|---|---|
| 需求分析 | 验收测试 | 验证软件是否满足用户需求 |
| 系统设计 | 系统测试 | 验证系统是否满足设计要求 |
| 详细设计 | 集成测试 | 验证模块间的接口和交互 |
| 编码 | 单元测试 | 验证单个模块或函数的功能 |
测试工作的基本原则
- 以需求为核心:所有测试活动都围绕需求展开
- 尽早开始测试:越早发现问题,修复成本越低
- 全面测试:覆盖所有功能和非功能需求
- 独立测试:测试团队应相对独立于开发团队
- 持续改进:根据测试结果不断优化测试策略