Post

软件测试

软件测试

测试是为了证明“程序有错”,而无法证明“程序正确”

软件质量

只有极少数软件应该追求“零缺陷”,对绝大多数软件而言,商业目标决定了质量目标,而不该把质量目标凌驾于商业目标之上

  • 航空、航天等系统对质量要求极高,任何缺陷都有可能导致机毁人亡,所以人们不惜一切代价去消除缺陷
  • 绝大多数普通软件的缺陷并不会造成机毁人亡的重大损失;日常工作中用到的软件几乎都是有缺陷的

  • 评审:通常是简单地读程序或对照错误检查表进行检查
  • 走查:按照所提交的测试用例,人工模仿计算机运行一遍,并记录跟踪情况

静态代码分析

无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷

  • 如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等

  • 主要技术:缺陷模式匹配、类型推断、模型检查、数据流分析等

动态程序分析

性能分析

以收集程序运行时的信息为手段研究程序行为的分析方法

  • 目的在于决定程序的哪个部分应该被优化,从而提高程序的速度或者内存使用效率。
  • 抽样、代码注入

测试方法分类

  • 按实施步骤
    • 单元测试
    • 集成测试
    • 确认测试
    • 系统测试
  • 按使用的测试技术
    • 静态测试:走查/评审
    • 动态测试:白盒/黑盒
  • 按软件组装策略
    • 非增量测试:整体集成
    • 增量测试:自顶向下、自底向上、三明治

单元测试(Unit Testing)

对软件基本组成单元进行的测试

测试内容

  • 接口
  • 局部数据结构
  • 独立路径
  • 边界条件
  • 错误处理路径

集成测试(Integration Testing)

在单元测试的基础上,将所有模块按照总体设计的要求组装成为子系统或系统进行的测试。

  • 整体集成方式(非增量式集成)
    • 把所有模块按设计要求一次全部组装起来,然后进行整体测试
  • 增量式集成
    • 逐步将新模块加入并测试
    • 自顶向下
      • 从主控模块开始,按软件的控制层次结构,以深度优先或广度优先的策略,逐步把各个模块集成在一起
    • 自底向上
      • 从软件结构最底层的模块开始组装测试
  • 三明治集成
    • 一种混合增量式集成策略,综合了自顶向下和自底向上两种方法的优点

确认测试(Validation Testing)

检查软件能否按合同要求进行工作,即是否满足软件需求说明书中的确认标准

系统测试(System Testing)

将已经集成好的软件系统作为一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他元素结合在一起,在实际运行环境下进行的一系列测试

  • 功能测试
  • 压力测试
  • 安全性测试
  • 恢复测试
  • GUI测试
  • 安装测试

验收测试(Acceptance Testing)

是以用户为主的测试,一般使用用户环境中的实际数据进行测试。

回归测试(Regression Testing)

验证对系统的变更没有影响以前的功能,并且保证当前功能的变更是正确的

This post is licensed under CC BY 4.0 by the author.