测试理论基础

一、软件开发流程的演变
 
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、精准化测试
 

原文地址:https://www.cnblogs.com/guoccf/p/14309406.html