本文介绍测试相关基础概念, 常见开发模型和测试模型.
所谓软件测试, 就是验证软件产品特性是否满足用户的需求. 根据需求定义的预期结果, 验证软件功能执行的正确性, 保障软件的质量.
测试和调试有以下几个区别:
调试是由开发人员进行
测试由开发人员和测试人员共同进行. 测试人员进行黑盒测试, 开发人员会进行部分的白盒测试和系统测试.
调试的阶段在开发阶段
测试的阶段伴随整个软件开发生命周期, 测试要早于调试.
开发人员进行调试的目的是要发现并解决问题.
测试人员进行测试的目的是要发现问题, 给出解决方案, 由开发人员解决.
调试可以使用编译器的debug模式, 分析代码逻辑.
测试针对白盒测试和黑盒测试有不同的手段, 针对黑盒测试有等价类划分法, 边界值法等.
- 设计测试用例(如设计自动化测试用例)
- 编程能力(如编写测试工具)
- 快速学习的能力.(学习技术和业务)
- 良好的沟通合作能力
- 良好的文字表达能力, 编写测试用例和测试文档
- 良好的抗压能力
- 有一定的责任意识
需求分为用户需求和软件需求(功能需求)
可以理解为用户需求就是一句话, 而软件需求是一个文档, 用来详细描述用户需求应该如何实现.
在软件开发时, 会把用户需求转换成软件需求. 软件需求是开发和测试人员工作时的直接依据.
上面说到需求是测试工程师开展测试工作的依据, 在设计测试用例时, 要先根据业务需求
提取出软件功能需求点
, 然后再根据每个软件功能需求点分析出多个软件测试点
, 最后根据测试点设计测试用例
. 流程如下图:
从软件功能需求出发, 无遗漏的识别出软件测试点是至关重要的, 这关乎到测试用例的测试覆盖率
为了更好的理解和掌握软件原始的业务需求, 软件工程师应在软件需求分析设计的时候就介入.
测试用例是为了完成测试向被测试系统提供的一组集合, 测试用例包含了以下几个重要要素: 测试环境, 操作步骤, 测试数据, 预期结果, 序号, 级别, 标题.
测试环境: windows系统, chrome浏览器, 本地
操作步骤: 描述操作步骤
标题: 对测试用例进行简要描述, 明确测试的目的和功能。
当且仅当规格说明书(功能需求文档)存在, 而运行结果与说明书中描述不符合时, 即为Bug.
软件的生命周期有以下几个阶段:
需求分析, 规划, 设计, 编码, 测试, 运行维护.
- 瀑布模型是其它模型的基础, 每个阶段只进行一次, 是线性顺序的开发模式
- 优点:
每个阶段分工明确, 产出清晰.- 缺点:
(1) 只依赖刚开始的一次需求调查, 无法及时适应需求的变更.
(2) 风险只有在后期的测试阶段才会凸显出来, 无法在早期被发现并作出相应措施.- 适用于小的, 开发周期短的项目.
- 在开发初期需求不明确时, 可以使用渐进式的开发模式, 螺旋模型是渐进式开发模式的典型代表.
- 这种开发模式适用于规模庞大, 风险大的项目. 螺旋模型不允许测试拥有独立的测试时间和阶段, 要求测试随着开发的迭代而迭代.
- 优点:
(1) 严格的风险分析, 强调了每个开发阶段的质量
(2) 提供了机会检讨项目是否有必要继续下去, 可以尽早发现风险并使用补正措施.- 缺点:
严格的风险预估, 风险分析和控制.要求数据分析师拥有一定的技术能力, 需要提供大量的人力和财力.
增量开发: 所谓增量开发是对一个项目中的功能, 完成一个之后再完成另一个功能.
迭代开发: 迭代开发是对一个项目中的功能, 在完成其中一个功能的一部分(未完全完成), 开始另一个功能的开发.
说起敏捷开发, 就需提到敏捷宣言.
个体与交互重于过程和工具
可用的软件重于完备的文档
客户协作重于合同谈判
响应变化重于遵循计划
在每对比对中, 后者并非全无价值, 但我们更看重前者.
敏捷开发是一种思想, 敏捷开发有很多种方式, 最流行的是scrum
scrum中有三个角色, 分别是产品经理, 项目经理, 开发团队.
scrum流程:
- 产品挤压(product backlog): 由产品经理负责维护的产品需求列表. 包含了待发开功能, 用户故事和缺陷修复等
- Sprint计划会议: 在每次迭代前进行的会议, 会议上确定迭代的目标和要完成的工作. 由项目经理确定用户需求优先级, 分配开发测试任务.
- Sprint: Sprint是一个固定的时间框架, 通常是2到4周, 我的理解是本次迭代. 在Sprint期间, 开发团队完成计划中的工作.
- 每日例会: 每天项目经理召集站立会议, 团队成员描述昨天的工作和今天的计划以及遇到的问题.
- 演示会议: 本次迭代任务完成后, 召开演示会议, 团队演示完成的工作. 记录反馈, 反馈由产品经理整理后, 形成新的需求, 在下一轮迭代中完成.
- 回顾会议: 项目团队对本次迭代进行总结, 发现不足并制定修改计划, 开始下一轮迭代.
瀑布模型和螺旋模型更注重计划、控制和文档, 适用于相对稳定的需求和风险可预测的项目.
敏捷开发更注重灵活性、快速交付和响应变化, 适用于需求变化频繁、风险不确定或需要快速上线的项目.
螺旋模型和敏捷开发都强调迭代和循环,但敏捷更强调团队协作和持续交付, 而螺旋模型更强调风险管理和适应性.
用户需求: 产品经理收集用户需求形成软件需求
需求分析与系统设计: 验证需求是否正确, 确定系统编程语言和框架.
概要设计: 项目结构
详细设计: 每个接口, 设计哪些库表, 设计哪些任务.
单元测试: 测试每一个方法.
集成测试: 将一个功能中的多个方法集成起来进行测试.
系统测试: 测试整个系统中的所有功能, 测试功能之间是否会互相影响. 并对系统的性能进行测试. 是否达到系统要求的指标
验收测试: 产品经理进行验证. 查看系统是否符合用户需求.
特点: 左边是开发, 右边是测试, 类似于瀑布模型, 从编码开始分隔
优点: 测试被划分成多个类型.
缺点: 测试介入太晚, 发现错误的时机太晚
为了弥补V模型的不足, 出现了双V模型
实施: 部署运行项目.
交付: 将项目交付给用户.
验收测试设计: 测试人员在用户需求时就介入, 编写相应文档为验收测试做准备.
确认与系统测试设计: 为系统测试做准备.
集成测试设计: 为集成测试做准备
单元测试设计: 为单元测试做准备.
- 特点: W模型由两个V组成, 分别代表开发与测试. 在双V模型中, 更加注重验证和确认活动, 测试的对象不只是程序, 还有需求和设计. 测试与开发并行.
- 优点: 测试更早的介入, 有利于尽早发现并解决问题
- 缺点: 测试和开发还保持着先后关系, 开发完成之后测试工作才可以正式开始执行, 开发和测试在一定程度上还是串行的, 不能拥抱需求的变化, 不能适用于敏捷开发.