测试理论基础
一、软件开发流程的演变
1、传统瀑布模型
模型:需求分析-设计-编码-实现-软件测试-完成-维护
特点:线性方式,以文档为核心驱动,适用稳定型产品
优点:
- 开发每个阶段清晰明了
- 强调计划和需求分析
缺点:
- 前期问题到后期才能发现
- 每个阶段依赖上一个阶段的输出,一旦出问题存在延期风险
2.1、敏捷开发模型-XP
模型:需求-简单设计-测试-编码-发布
特点:测试驱动开发,适用规模小、进度紧、需求变化大、质量要求严的项目
优点:
- 简单设计
- 全面测试
- 高频重复设计和重构
缺陷:
- 忽略设计
- 依赖测试
2.2、敏捷开发模型-SCRUM
模型:产品backlog-sprint计划会议-sprint backlog-每日站会-sprint 评审会议-sprint回顾会议
特点:sprint(2周~4周),三大角色(Scrum Master、Product Owner、开发团队)
优点:
- 重视过程,快速响应变化
- 实时跟进进展,风险可控
- 整个团队参与会议
- 降低变更对系统造成的风险
- 提高ROI(投入产出比)
- 持续快速的发布可用的软件产品
- 目标明确
缺点:
- 前期每日站会时间成本大
- 不适用目标不清晰的需求
- 问题暴露过多,不安感
- 对团队成员技术水平、协作水平要求较高
3、DevOps开发模型
模型:持续开发-持续测试-持续集成-持续部署-持续监控
特点:增量迭代、小步快跑
优点:
- 高效交付,更快、更频繁、更可靠
- 减少变更范围
- 加强发布协调
- 自动化
- 工具链打通,开发、测试、运维高效协作
缺点:
- 对开发主动性要求较高
- 对测试水平要求较高
二、软件测试流程
1、软件测试相关概念
软件测试:手工或工具对“被测对象”进行测试,将实际结果和预期结果进行对比并记录输出文档的过程
软件测试原则:缺陷集群性(2/8原则)、穷尽测试不可能、测试尽早介入、没有缺陷是不可能的
软件测试对象:文档、源代码、软件程序(功能)
测试用例:输入、执行步骤、预期结果
软件缺陷:bug
2、软件测试模型
(1)V模型:需求分析-概要设计-详细设计-编码-单元测试-集成测试-系统测试-验收测试
优点:开发阶段清晰,测试覆盖全面-底层、高层
缺点:顺序性导致问题追溯根源困难,需求变更大时返工量大
(2)W模型:测试与开发并行,测试对象包含需求、设计、程序
优点:测试贯穿整个生命周期,更早的介入软件开发,测试开发独立且并行
缺点:不支持迭代,不适用没有文档的项目,需求测试、设计测试对设计要求很高实践很困难
(3)H模型:分阶段执行、交叉执行、迭代执行,测试准备活动和执行活动清晰明了
优点:测试流程独立,测试活动可尽早准备
缺点:测试就绪点分析困难,对项目成员要求非常高
3、传统测试流程
(1)传统测试流程:单元测试-集成测试-冒烟测试-系统测试-回归测试-验收测试
(2)系统测试流程:需求分析-测试加护-测试设计-用例评审-测试执行-bug管理-发布维护
(3)Bug管理流程:提交-指派-确认-(遗留)-处理-回归-关闭
4、测试左移
(1)描述
软件开发早起介入、代码测试,发现bug->预防bug
(2)质量保障手段
代码评审、单元测试、自动化冒烟测试、研发自测
5、测试右移
(1)描述
发布之后持续关注线上监控
(2)线上监控
闭环的线上问题反馈、丰富有效的log、业务异常监控、服务器关键指标监控
三、软件测试分类
1、开发阶段
单元测试
集成测试
系统测试:功能测试、兼容性测试、性能测试、安全测试
验收测试:α测试、β测试
2、代码
白盒测试、灰盒测试、黑盒测试
3、测试执行方式
静态测试:
动态测试:
4、手工与自动化:
手工测试:
自动化测试:依赖工具
5、其他分类
冒烟测试
回归测试
随机测试
探索性测试
四、黑盒测试方法
1、等价类
2、边界值
3、因果图
4、判定表
5、决策树
6、探索式测试
五、白盒测试方法
1、代码覆盖:emma、cobertura、jacoco
2、流程覆盖
3、精准化测试
版权声明:本文为guoccf原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。