Skip to main content

第01章 概述

第01章 概述

一、软件测试

  • 软件测试的必要性和重要性

    • 基本事实:各种各样的软件已经到处都是
    • 软件错误会带来巨大的潜在损失(直接损失和发现错误后的修复成本等)
    • 即使是优秀的程序员,即使有很好的系统设计,在绝大多数情况下都不是error-free的
    • 如何保障软件质量:除了提高代码质量,改善软件工程方法之外,做软件测试已经成为了主要的软件质量保障方法
  • 软件测试的目的

    • 功能正确
    • 了解性能
    • 测试安全性
    • 测试易用性
    • 在完成以上几项的基础上尽量减小测试开销
  • 如何获取高质量的软件

    • 过程的管理
    • 测试软件

二、基本概念

  • 软件测试的概念:测试=查找输入值以对照软件进行检查的过程(本课程的重点)软件测试就是执行程序,带着找出错误的目的去做
  • 错误肯定是存在的,永远不要相信自己找完了所有的错误。测试只能说明目前产品在测试范围里面是不是有问题,但不能证明没有问题。证明没有错误是验证做的事情。
  • Debug:根据给定的failure找到fault的过程
  • 测试用例:包含输入和期望输出
  • 错误(Error):一个好的同义词就是mistake。错误往往会传播;
  • 故障(fault):错误的具体表现,故障不一定是由编程错误引入的,也有可能是物理设备故障,系统设计错误和用户交互错误。往往都是Error导致的
  • 失效(failure):代码运行时发生故障的后果,错误转为失效需要满足RIPR模型,用状态图分析程序,当执行过一个故障时,程序的状态与期望的程序状态将出现差异
  • 事故(incident):用户能够明确发现的失效

三、Myers准则

  • 在软件开发的早期就开始测试,并持续测试
    • 避免开发者测试自己的软件
    • 测试用例不仅要包含输入,还要包含期望输出
    • 测试用例需要包涵有效输入和无效输入
    • 测试用例需要覆盖“软件该做什么”和“软件不该做什么”
    • 测试发现的错误和实际存在的错误的量成正比
    • 应当进行多轮反复测试
    • 软件测试是创新性的工作!
    • 独立性准则(第三方测试)
    • 完备性准则
    • 完成测试计划
    • 达成一定的覆盖率指标

四、测试过程

基本过程包括:

  • 设计测试计划(作为测试的指导方针)
  • 生成测试用例(要去用最少的测试用例,达到最完备的测试目的,软件测试的核心就是测试用例的设计)
  • 搭建测试环境
  • 执行测试用例
  • 评估测试结果

测试的一些类型:

  • 面向对象的
  • 基于组件的
  • 并发的测试
  • 分布式的测试
  • Web测试
  • 用户图形界面的测试

测试的目标也有:

  • 功能方面的
  • 性能方面的
  • 安全方面的
  • 可用性方面的
  • 正确性方面的

一些其他事实:

  • 可能的输入集合(在大部分情况下)是难以遍历的甚至无法遍历的,软件测试需要选出一些有价值的输入输出作为测试用例
  • 软件测试的开销是不可忽略的(事实上甚至往往超过软件总开发成本的一半!),软件测试工程常常要在测试开销和测试效果(测试覆盖率)之间做trade-off
  • 软件测试不能保证软件是error-free的,需要证明error-free请转隔壁形式化验证

五、RIPR模型

  • Reachability - 故障是可达的。测试用例要能达到它就能让它运行
  • Infection - 故障会导致代码状态出错。一个程序运行过程里面,它的状态是不断的互相有依赖的,它们之间有这种依赖关系,它就传染性,
  • Propagation - 错误的状态会导致代码的最终状态或输出出错。是整个一个过程,最终传播的话它能够一步一步的话传递到,最后面的一个状态里面去,传染是是两个之间,但是传播的话它一是有传播链的
  • Revealability - 最终状态错误或输出错误必须是可观察的
  • 可以用RIPR模型帮助设计测试用例

  • 首先我们测试用例,你得能够执行到相应的错误的类型里面去,到达以后,会通过程序的互相的这种错误状态的传,这种相互依赖关系最终能够达到一个最终的状态的错误的产生,这个状态产生的话就说我们容易去观察到,因为它可以是一个系统的输出。最终定位到错误的位置。

六、第三方测试

  • 现在很多软件验收的时候都是第三方测试,因为第三方测试的话它是站在一个相对中立的
  • 它不是甲方就是那个需求的提出者,也不是乙方这个软件的开发者,但这样的话会发现,软件很多一些问题。
  • 完整性准则,他不是说我要把所有可能的错这个测试都要跑一遍,它的完整性是相对的,是相对我们的测试计划完整的

七、Fault的类型

  • 有物理错误,还有设计错误,还有这种交互的错误,
  • 如下图所示:
  • 交互式错误有时候不太好发现,但是这类错误往往是最致命的,因为很难发现。然后交互式的错误往往是在特定的交互场景下会出现