Software_Testing

Chapter 1

软件可靠性

  • 定义:系统在特定的环境下,在给定的时间无故障运行的概率
  • 影响因素
    1. 需求错误
    2. 设计错误
    3. 编码错误
    4. 测试错误
    5. 文档错误

软件测试基本理论

  • 定义
    • 为了发现错误而执行程序的过程。
  • 测试用例
    • 为特定目的而设计的一组(多个) 测试输入执行条件预期的结果
    • 为执行测试的最小实体。
    • 设计准则
      1. 代表性
      2. 可判定
      3. 可再现
  • 对象
    1. 需求规格说明
    2. 概要设计规格说明
    3. 详细设计规格说明
    4. 源程序
  • 目标
    • 最大可能地找出最多的错误。
    • 不能证明程序的正确性。
  • 分类
    • 测试用例的设计方法
      1. 黑盒测试(使用侧角度)
      2. 白盒测试(开发侧角度)
    • 测试策略和过程
      1. 单元测试
      2. 集成测试
      3. 系统测试
      4. 验证测试
  • 停止测试依据
    1. 超过了预定时间。
    2. 执行了所有测试用例,并无发现错误。
    3. 使用特殊测试用例判断测试停止。
    4. 正面指出停止测试具体要求。
    5. 单位时间内检查出故障的数量。

软件开发过程

  • ☆客户需求
    • 通过大量沟通,迭代
  • 设计文档
    • 构架
    • 数据流示意图
    • 状态变化示意图
    • 流程图
    • 注释代码
  • 测试文档
    • 测试计划
    • 测试用例
    • 软件测试报告
    • 归纳、统计和总结

开发模型

  • Big Bang
  • 边写边改
  • 瀑布
  • 原型
  • 螺旋开发
  • 敏捷开发

测试模型

  • V模型:强调过程与测试的阶段性。
  • X模型
  • H模型:强调测试与其他过程独立平行。
  • W模型:强调各阶段过程与测试并发执行。

测试执行过程

  1. 初测期
  2. 细测期
  3. 回归测试期

Chapter 2

充分性原则

  1. 单调性
  2. 非复合性
  3. 非分解性
  4. 复杂性
  5. 回报递减率

静态测试

  • 代码检查
  • 静态结构分析
  • 代码质量度量
    • Line复杂度:行数
    • Halstead复杂度:运算符和运算元数量
    • McCabe复杂度:圈复杂度

动态测试

  • 功能确认与接口测试
  • 覆盖率分析
  • 性能分析
  • 内存分析

黑盒测试与白盒测试比较

compare_baw

单元测试

  • 辅助模块
    • 驱动模块
    • 桩模块
  • 主要任务
    1. 接口模块
    2. 局部数据结构
    3. 独立路径
    4. 循环边界条件
    5. 错误处理

集成测试

  • 非增量式(单元测试后一步到位集成)
  • 增量式
    • 自顶向下
      1. 深度优先
      2. 广度优先
    • 自底向上
    • 混合

验收测试(考的概率不大。。以防万一)

  1. 功能测试
    • 如完整的工资计算过程。
  2. 逆向测试
    • 如检验不符合要求数据而引起出错的恢复能力
  3. 特殊情况
    • 如极限测试、不存在的路径测试。
  4. 文档检查
  5. 强度检查
    • 如大批量的数据或者最大用户并发使用。
  6. 恢复测试
    • 如硬件故障或用户不良数据引起的一些情况。
  7. 可维护性的评价
  8. 用户操作测试
    • 如启动、退出系统等。
  9. 用户友好性检验
  10. 安全测试

面向对象的测试(同上)

  • 策略
    1. 基于线程的测试
    2. 基于使用的测试

Chapter 3 黑盒测试(用户测试/功能测试/数据驱动测试)

常用方法

  • 等价类划分法
  • 边界值法
  • 因果图法
  • 决策表法

Chapter 4 白盒测试(程序员测试)

常用方法

  • 逻辑覆盖测试
    • 语句覆盖
    • 判定覆盖
    • 条件覆盖
    • 条件-判定覆盖
    • 组合覆盖
  • 路径覆盖测试
    • 路径:入口到出口
    • 环形复杂度
      1. V(G)=边-点+2
      2. V(G)=判定节点数+1