欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

软件质量保证的常用测试方法 - 界值测试、等价类测试、路径测试

最编程 2024-04-21 19:20:18
...

本文内容整理自西安交通大学软件学院杜小智老师的mooc附件ppt

mooc链接:软件质量保证_中国大学MOOC(慕课)

文章目录

  • 测试方法
    • 边界值分析技术
      • 边界值选择的基本原则
      • 边界值测试分类
      • 边界值分类
        • 分类
      • 案例
        • 普通边界值测试
        • 健壮性测试
        • 最坏情况测试
        • 健壮最坏情况
    • 等价类测试
      • 等价类概念
        • 分类
        • 两个动机
      • 等价类测试原则
      • 等价类测试流程
        • 确定等价关系
        • 生成测试用例
      • 示例
        • 确定等价关系
        • 生成测试用例
        • 输出域等价类
        • 综合测试用例
        • 进一步思考
      • 等价类测试扩展
      • 示例
        • 等价关系
        • 弱一般等价类测试
        • 强一般等价类
        • 弱健壮等价类测试
        • 强健壮性等价类测试
      • 示例2
    • 路径测试
      • 程序图
        • 定义
        • 例子
      • DD路径
        • 定义
      • DD路径图
        • 定义
      • 拓扑路径
      • 可行路径
      • 测试覆盖指标
        • 覆盖率
        • 分类
      • 逻辑覆盖指标

测试方法

边界值分析技术

基本思想:大量的软件错误通常发生在输入或输出范围的边界或边界附近

边界值选择的基本原则

image-20211213233213847.png

image-20211213233226110.png

image-20211213233235870.png

image-20211213233328365.png

image-20211213233343645.png

image-20211213233352273.png

边界值测试分类

  • 对于一个明确范围的输入或输出,选择“最小值、略小于最小值、正常值、略小于最大值和最大值
    • m i n , m i n + , n o r m . m a x − , m a x min,min^+,norm.max^-,max min,min+,norm.max,max
  • 考虑异常,增加两个值进行测试“略小于最小值和略大于最大值
    • m i n − , m a x + min^-,max^+ min,max+

边界值分类

考虑到两个问题

  • 是否关心无效输入的问题
  • 是否考虑错误是由多个输入同时取极值造成的
分类
  • 普通边界值测试
    • 单缺陷假设、只考虑有效值
    • 需要的测试用例数量: 4 n + 1 4n+1 4n+1
  • 健壮性测试
    • 单缺陷假设、考虑有效值和无效值
    • 需要的测试用例数量: 6 n + 1 6n+1 6n+1
  • 最坏情况测试
    • 多缺陷假设、只考虑有效值
    • 需要的测试用例数量: 5 n 5^n 5n
  • 健壮最坏情况测试
    • 多缺陷假设、考虑有效值和无效值
    • 需要的测试用例数量: 7 n 7^n 7n

案例

image-20211213234542814.png

普通边界值测试

image-20211213234556646.png

健壮性测试

image-20211213234643703.png

最坏情况测试

image-20211213234656447.png

健壮最坏情况

image-20211213234716622.png

等价类测试

等价类概念

  • 定义:等价类是指某个输入域的子集合,在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,或者进行相同的处理
  • 测试某等价类的一组数据就等价于对这一类其他值测试
分类
  • 有效等价类
  • 无效等价类
两个动机
  • 期望进行某种意义上的完备性测试
  • 期望尽可能多地避免冗余测试

核心:对输入域和输出与进行等价划分

image-20211213235233796.png

等价类测试原则

  1. 如果输入条件规定了取值范围,可定义一个有效等价类和两个无效等价类

    image-20211213235619669.png

  2. 如果规定了输入数据的个数,则类似地可划分出一个有效等价类和两个无效等价类

    image-20211213235627310.png

  3. 如规定了输入数据的一组值,且程序对不同输入值做不同处理,则每个允许的输入值是一个有效等价类,并有一个无效等价类(所有不允许的输入值的集合)

    image-20211213235636213.png

  4. 如规定了输入数据必须遵守的规则,可确定一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)

    image-20211213235643023.png

  5. 如果确知已划分的等价类中各元素在程序中的处理方式不同,则应将此等价类进一步划分成更小的等价类

  6. 等价类的划分通常不能一步到位,需要多次尝试才能得到效果较好的等价类

等价类测试流程

image-20211213235741494.png

确定等价关系
  • 首先确定程序的所有输入条件
  • 然后针对每一个输入条件,基于等价类划分原则将输入域分成两大类等价类:有效等价类和无效等价类

确定等价关系是等价类测试中最有挑战性的工作

生成测试用例
  • 给每个等价类设置一个不同的编号
  • 编写一个新的测试用例,尽可能多地包含还没被覆盖到的有效等价类;当所有的有效等价类都被覆盖之后,进入下一个步骤
  • 编写一个新的测试用例,一次只包含一个还未被覆盖的无效等价类老当所有的无效等价类都被覆盖后,结束

示例

image-20211214000708607.png

确定等价关系

image-20211214000724157.png

生成测试用例

image-20211214000739021.png

输出域等价类

image-20211214000811420.png

image-20211214000821461.png

综合测试用例

image-20211214000844367.png

进一步思考

image-20211214000902292.png

等价类测试扩展

  • 划分依据
    • 是否考虑无效等价类
    • 单缺陷假设还是多缺陷假设
  • 分类
    • 弱一般等价类测试
    • 强一般等价类测试
    • 弱健壮等价类测试
    • 强健壮等价类测试

示例

image-20211214000455301.png

等价关系

image-20211214000508189.png

弱一般等价类测试

image-20211214000526412.png

强一般等价类

image-20211214000539663.png

弱健壮等价类测试

image-20211214000554990.png

强健壮性等价类测试

image-20211214000630702.png

示例2

image-20211214001645769.png

image-20211214001743465.png

image-20211214001805573.png

路径测试

  • 白盒测试又称为结构性测试、透明盒测试、逻辑驱动测试或基于代码的测试
  • 在不同点、不同分支检查程序的状态,从而确定程序的实际状态是否与预期状态一致
    • 主要用于单元测试
    • 包括路径测试和数据流测试

程序图

定义

程序图 p = ( V , E ) p=(V,E) p=(V,E),V是节点的集合、E是有向边的集合。其中,节点表示的是程序中的语句或语句片段,边表示程序语句或语句片段之间的控制流

例子

image-20211214153335569.png

DD路径

  • DD路径(Decision to Decision Paths)是决策到决策的路径,是指一个语句序列
  • 决策语句是指一个节点的入度或出度大于等于2
  • 在DD路径汇中,其语句序列内部没有分支
  • DD-路径可通过程序图中的节点组成的路径来定义
定义

DD路径是程序中的一条链,分为以下5种况

  • 由一个入度为0的节点组成,对应于源节点
  • 由一个出度为0的节点组成,对应于汇节点
  • 有一个入度大于等于2或出度大于等于2的节点组成,对应于判定语句或其结束语句
  • 由一个入度为1且出度为1的节点组成,对应于短分支
  • 由长度大于等于1的最大链组成,对应于串行语句序列

DD路径图

定义

DD路径图 D P = { V , G } DP= \{V,G\} DP={V,G}是一个有向图,V是节点的集合、E是有向边的集合。其中,节点表示的是程序中的DD路径,边表示连续DD路径之间的控制流。

image-20211214154024651.png

拓扑路径

理论上的可行路径

image-20211214154210737.png

可行路径

实际上的可行路径

image-20211214154236304.png

测试覆盖指标

覆盖率
  • 覆盖率是用于度量测试完整性的一种手段
  • 覆盖率=被执行到的测试项数量/总项数 × 100 % \times 100\% ×100%
分类
  • 节点覆盖
    • 定义:节点覆盖 G n o d e G_{node} Gnode是指采用给定的测试用例集作用于被测软件时,程序图中的所有节点都被遍历到,则称这组测试用例集满足节点覆盖。
  • 边覆盖
    • 定义:边覆盖 G e d g e G_{edge} Gedge是指采用给定的测试用例集作用于被测软件时,程序图中的所有边都被遍历到,则称这组测试用例集满足边覆盖。
  • 路径覆盖
    • 定义:路径覆盖 G p a t h G_{path} Gpath是指采用给定的测试用例集作用于被测软件时,程序图中所有从源节点到汇节点的路径都被遍历到,则称这组测试用例集满足路径覆盖。
    • 如果一个程序中存在循环,则很难满足路径覆盖指标

逻辑覆盖指标

  • 语句覆盖
    • 语句覆盖是指设计若干个测试用例,当将它们作用于被测程序后,程序中的每条可执行语句至少被执行一次。
    • 由于程序图来源于程序代码,语句覆盖与节点覆盖相同。
  • 判定覆盖
    • 判定覆盖也称分支覆盖,是指设计一组测试用例,当他们作用于被测软件时,程序中每个判定的取真分支和取假分支至少各执行一次
    • 判定覆盖等同于边覆盖
  • 条件覆盖
    • 条件覆盖是指设计足够多的测试用例,当他们作用于被测软件后,程序中每个判定条件的各种可能取值至少被执行一次
    • 条件覆盖关注的是更为细致的条件取值情况,而不仅仅是整个判定的取值
  • 判定-条件覆盖
    • 判定-条件覆盖是哦安定覆盖和条件覆盖的结合,要求设计一组测试用例,针对被测程序运行完这些测试用例后,不仅程序中每个判定的各种取值至少被执行一次,而且每个判定中每个条件的各种取值页至少被执行一次
  • 条件组合覆盖
    • 条件组合覆盖是指设计足够多的测试用例,运行被测软件后,程序中每个判定的所有条件的可能取值组合都至少被执行一次
    • 如果一个判定中包含n个简单条件,为达到条件组合覆盖,需要执行 2 n 2^n 2n种情况
  • 路径覆盖
    • 路径覆盖是指设计一组测试用例,当他们作用于被测软件时,程序中的所有路径都至少被覆盖一次

image-20211214164703207.png

推荐阅读