前言

内容:

  • 测试原则和方法
  • 测试阶段
  • 测试用例的设计
  • 调试
  • 软件度量

中论

测试原则和方法

系统测试:为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误的测试

测试原则:

  • 尽早不断地测试
  • 测试工作应避免由原开发软件的人或小组承担
  • 设计测试方案时,不仅要确认输入数据,而且要根据系统功能确定预期的输出结果
  • 即包含有效、合理的测试用例,也包含不合理、失效的用例
  • 检验程序是否做了该做的事,且是否做了不该做的事
  • 严格按照测试计划进行
  • 妥善保存测试计划和测试用例
  • 测试用户可以重复使用或追加测试

测试方法:

  • 静态测试

    • 测试程序不在机器上运行,采用人工检测和计算机辅助静态分析的手段对程序进行检测。包括对文档的静态测试和对代码的静态测试;对文档的静态测试主要以检查单的形式进行,而对代码的静态测试:主要包括桌面检查、代码审查、代码审查的方法。
  • 动态测试

    • 黑盒测试:功能性测试,不了解代码软件结构,根据功能设计用例测试软件功能
    • 白盒测试:结构性测试,明确代码流程,根据代码逻辑设计用例,进行用例覆盖

测试阶段

  • 单元测试:也叫模块测试,测试的对象是可独立编译或汇编的程序模块、软件构件或OO软件中的类,测试依据是软件详细设计说明书。
  • 集成测试:检查模块之间,以及模块和已集成的软件之间的接口关系,并验证是否符合设计要求。测试依据是软件概要设计文档
  • 确认测试:用于验证软件的功能、性能和其他特性是否与用户需求一致。
    • 内部确认测试:主要由软件开发组织内部按照SRS进行测试
    • 阿尔法测试:用户在开发环境下测试
    • 贝塔测试:用户在实际使用环境下测试
    • 验收测试:针对SRS,在交付前以用户为主进行测试
  • 系统测试:测试对象是完整的、集成的计算机系统,测试依据是用户需求或开发合同
  • 配置项测试:测试对象是软件配置项,测试依据是SRS
  • 回归测试:测试目的:测试软件变更之后,变更部分的正确性和对变更需求的符合性,以及软件原有的、正确的功能、性能和其他规定的要求的不损害性。

测试用例的设计

黑盒测试用例:

  • 等价类划分:把所有的数据按照某种特性分类,在每一类的数据里选取一个即可,等价类测试用例的设计原则:设计一个新的测试用例,使其尽可能多得覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;设计一个新的测试用例,使其尽可能多得覆盖尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。
  • 边界值划分:将每一类的边界值作为测试用例,边界值一般为范围的两端值以及在此范围之外的与此范围间隔最小的两个值。
  • 错误推测:没有固定方法,全凭经验而言
  • 因果图:由一个结果反推原因,没有固定方法

白盒测试用例

覆盖级别从低到高:

  • 语句覆盖SC:逻辑代码中的所有语句都要被执行一遍,覆盖层级最低,执行了所有语句但并不代表执行了所有的条件判断
  • 判定覆盖DC:逻辑代码中所有判断语句的条件的真假分支都要覆盖一次
  • 条件覆盖CC:针对每一个判断条件内的每一个独立条件都要执行一遍真和假
  • 条件判定组合覆盖CDC:同时满足判定覆盖和条件覆盖
  • 路径覆盖:逻辑代码中的所有可行路径都被覆盖,覆盖层级最高

调试

测试:发现错误;调试:找出错误的代码和原因

调试需要确定错误的准确位置;确定问题的原因并设法改正;改正后要进行回归测试

调试的方法:蛮力法、回溯法、原因排除法

软件度量

软件的两种属性

  • 外部属性:面向管理者和用户的属性,可直接测量,一般为性能指标

  • 内部属性:软件产品本身的属性,如可靠性,只能间接测量

  • McCabe度量法:又称为环路复杂度。假设有向图中有向边数为m,节点数为n,则有向图的环路复杂度为m+n-2

    对一个流程图来说,每一个分支边(连线)就是一条有向边,每一条语句(语句框)就是一个顶点/节点

后记

不拟人间更求事,些些疏懒亦何妨。