测试开发体系
软件测试
- 通过手工或者工具对 “被测对象”进行测试
- 验证实际结果与预期结果之间是否存在差异
软件测试作用
- 通过测试工作可以发现并修复软件当中存在的缺陷,从而提高用户对产品的使用信心
- 测试可以降低同类型产品开发遇到问题的风险
软件缺陷
- 软件缺陷被测试工程师和开发工程师们称作 bug
- 软件缺陷会导致软件不能正常运行,它的存在会在一定程度上导致软件不能满足用户的需求,甚至有可能破坏或泄漏用户的重要数据
软件测试原则
- 测试显示缺陷的存在
- 穷尽测试是不可能的
- 测试尽早介入
- 缺陷集群性(2/8原则)
- 杀虫剂悖论
- 测试活动依赖于测试内容
- 没有错误是好是谬论
软件测试对象
- 需求分析阶段:需求文档、接口文档
- 编码实现阶段:源代码
- 系统功能使用:软件程序
测试用例
- 为特定的目的而设计的一组测试输入、执行步骤和预期的结果,以便测试产品否满足某个特定需求的文档
软件
- 软件是与计算机系统操作有关的计算机程序、可能有的文档及数据。
软件生命周期
- 定义问题
- 软件开发
- 软件维护
@startuml
scale 10
|定义问题|
start
:搜集需求;
:可行性研究;
:需求分析;
|软件开发|
:概要设计;
:详细设计;
:编码;
:测试;
|软件维护|
:纠错性维护;
:改进性维护;
:报废;
stop
@enduml
软件开发流程
- 为了使软件开发的工作系统化并且可控制;
- 需要采用合适的软件开发模型和开发过程管理所有的活动。
@startuml
scale 10
title 软件开发模型
:瀑布模型;
:敏捷开发模型;
:DevOps 模型;
@enduml
瀑布模型
- 软件开发的各项活动严格按照线性方式进行。
- 当前活动接受上一项活动的工作结果。
- 当前活动的工作结果需要进行验证。
@startuml
scale 4
:制定计划;
:需求分析;
:软件设计;
:程序编码;
:软件测试;
:运行维护;
@enduml
瀑布模型优缺点
- 优点:
- 开发的各个阶段比较清晰。
- 强调早期计划及需求调查。
- 适合需求稳定的产品开发。
- 缺点:
- 早期的错误可能要等到开发后期的阶段才能发现。
- 由于开发模型是线性的,增加了开发的风险。
@startuml
scale 4
:制定计划;
:需求分析;
:软件设计;
:程序编码;
:软件测试;
:运行维护;
@enduml
敏捷开发模型
- 适用于需求频繁变化和需要快速开发的场景。
- XP
- SCRUMXP
极限编程
SCRUM
敏捷模型总结
- 增量迭代
- 小步快跑
DevOps
evOps 生命周期
- 持续开发
- 持续测试
- 持续集成
- 持续部署
- 持续监控
DevOps 对发布的影响
- 减少变更范围
- 加强发布协调
- 自动化
CI/CD
- 持续集成(Continuous Integration,缩写为 CI):
- 一种软件开发实践。
- 团队开发成员每天可能会发生多次集成。
- 每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证。
- 根据测试结果确定新代码和原有代码能否正确地集成在一起。
- 持续交付(Continuous Delivery,缩写为 CD)
- 是一种软件工程手法。
- 让软件产品的产出过程在一个短周期内完成。
- 保证软件可以稳定、持续的保持在随时可以发布的状况。
- 目标:
- 让软件的构建、测试与发布变得更快以及更频繁。
- 减少软件开发的成本与时间,减少风险。
CD 与 DevOps 的关系
- DevOps 的范围更广:
- DevOps 是软件交付过程所涉及的多个团队之间的合作。
- 并且将软件交付的过程自动化。
- 持续交付是一种自动化交付的手段:
- 关注点在于将不同的过程集中起来。
- 并且更快、更频繁地执行这些过程。
- 总结:DevOps 可以是持续交付下的一个产物,持续交付的成果直接汇入 DevOps 模型。
软件测试分类
@startmindmap
scale 10
* 软件测试分类
** 按开发阶段分类
*** 单元测试
*** 集成测试
*** 系统测试
**** 功能测试
**** 兼容性测试
**** 性能测试
**** 安全测试
*** 验收测试
**** α 测试
**** β 测试
** 按是否查看代码
*** 白盒测试
*** 黑盒测试
*** 灰盒测试
left side
** 按测试执行方式
*** 静态测试
*** 动态测试
** 按是否手工执行划分
*** 手工测试
*** 自动化测试
** 其他分类
*** 冒烟测试
*** 回归测试
*** 随机测试
*** 探索性测试
@endmindmap
黑盒测试
- 黑盒测试又称数据驱动测试。
- 完全不考虑程序内部结构和内部特性。
- 注重于测试软件的功能需求。
- 只关心软件的输入数据和输出数据。
白盒测试
- 白盒测试研究产品内部的源代码和程序结构。
- 单元测试就是白盒测试的一种。