测试方法的分类

发布于:2025-06-27 ⋅ 阅读:(15) ⋅ 点赞:(0)

静态测试

核心分类依据:根据是否执行程序分为静态测试和动态测试

静态测试方法

执行特征:不运行被测程序,通过人工检查或工具分析进行测试

测试对象:主要针对文档(包括需求文档、设计文档等)和源代码

实施方式:

基础检查:文档中的错别字、病句、标点符号错误、格式不一致等问题

深度验证:对照文档执行操作,验证文档描述的准确性和完整性

代码审查:检查源代码中的语法错误(如if语句后误加分号)和逻辑问题

类比说明:类似静态网站概念,不涉及用户交互修改,仅做内容展示

  • 含义: 评审(review)和审查(inspection)是团队测试的通用概念,指对特定类型的检查对象进行的活动。
  • 过程: 评审组对选择的评审对象进行审查和讨论,如需求规约说明书、系统设计、程序代码等。
  • 目的: 在评审过程中发现评审对象的错误、缺省、不精确处,以及维护的不完善和接口的错误描述等;查找与需求、指南、标准或规定的不符之处。评审的目的不在于直接解决问题,而在于发现问题、记录问题并总结经验教训。

动态测试

动态测试方法

  • 核心特征:必须运行程序,通过输入输出验证程序行为
  • 包含类型:分为黑盒测试和白盒测试两大类
  • 对比说明:类似动态网站概念,强调用户交互和内容修改能力

黑盒测试

别称:功能测试、数据驱动测试、基于规格说明书测试

核心思想:将程序视为不透明的"黑盒",只关注输入输出关系

形象比喻:如同给鸡退毛的过程,只关心投入带毛鸡和产出无毛鸡的结果,不关心内部处理机制

测试原则

用户视角:从最终用户角度出发验证系统功能

依据文档:以软件规格说明书为主要测试依据

数据关系:重点验证输入输出数据间的正确对应关系

局限性:

无法检测程序内部结构问题

难以发现规格说明书本身的缺陷

测试数据的选择具有局限性

主要技术:大纲法、场景法、等价类划分、边界值分析、决策表、错误推测法等

应用特点:这些方法均不涉及程序内部逻辑,仅基于外部规格设计测试用例

非功能测试

    * 测试目标:验证"系统工作得怎么样"而非"做什么"
    * 测试类型:
        + 质量特性:可用性、可靠性、稳定性、健壮性、可恢复性
        + 维护特性:可维护性、易用性
        + 环境适应:可移植性/兼容性测试、配置测试
        + 辅助要素:文档测试、国际化/本地化测试

白盒测试

白盒测试:也称结构测试、逻辑驱动测试、基于程序本身的测试,需要完全了解程序的结构和处理过程,按照程序内部逻辑测试程序,检验程序中每条通路是否按照预定要求工作。

目的:测试程序的逻辑结构,如分支、循环等是否正确。

白盒测试与黑盒测试的对比

黑盒测试:不关注程序内部结构,只关注输入与输出是否符合预期。

白盒测试:深入程序内部结构,检查每条逻辑路径是否按预定要求工作。

黑盒测试与白盒测试的区别

黑盒测试:

关注点:功能的测试,主要从用户的角度出发进行测试。

优点:能从用户的角度出发,关注输入和输出,测试数据结果是否正确。

缺点:无法测试程序的内部逻辑和结构。

白盒测试:

关注点:程序结构的测试,即对程序内部的特定部位进行覆盖测试。

优点:能关注到程序的内部逻辑和结构。

缺点:无法检查程序的外部特性,以及未实现规格说明的程序内部欠缺部分。

灰盒测试:

结合了黑盒测试和白盒测试的方法。

在测试网站时,灰盒测试可以大量使用。例如,在前台输入数据时可以使用黑盒测试,如果容易获得后台的源代码,则也可以做一些白盒测试。

测试方法的应用

在实际工作过程中,可能会用到黑盒测试、白盒测试或两者的混合使用。

混合使用时,两者的界限有时很难完全分开,在做测试时可能黑白盒测试会混合使用。

评审的分类

文档审查

  • 简单文档审查: 主要检查文档中的错别字、病句、标点符号错误以及排版错误,类似于校对工作。
  • 复杂文档审查: 需要核对文档中的说法是否与用户要求一致,是否与开发的理解一致,确保文档内容的准确性和一致性。

代码审查和代码走查

代码审查的含义、过程和目的

代码审查定义: 一种同级评审,通过检查文档以检测缺陷,如不符合开发标准,不符合上层的文档等。这是最正式的评审技术,基于文档化的过程。

  • 最正式的评审活动: 由专门培训的主持人(非作者)领导。
  • 同行检查: 定义了不同的角色,引入了度量。
  • 正式过程: 根据入口、出口规则的检查列表和规则定义,会议前需要准备,出具审查报告和发现问题列表。

静态分析方法

  • 核心特征:分析软件产品(如需求或代码)而不执行这些工作产品,强调"分析"而非测试
  • 静态特性:无需运行程序代码,因此称为"静态"分析
  • 与动态测试区别:不同于代码审查和代码走查,更依赖理论和技术手段

静态分析的分类

  • 主要方向:
    • 符合编程原则和标准(如编码规则)
    • 控制流分析(结合程序执行路径)
    • 复杂度分析(评估代码复杂程度)

数据流分析

检测内容:

未声明变量使用:如直接写而未声明int a

未初始化变量使用:如声明int a后直接print a

冗余变量声明:声明变量后从未使用(如int a但后续未引用)

严格性说明:

Java/C等语言严格要求变量先声明后使用

int a是声明,int a=3是定义

变量声明后必须使用,否则视为缺陷

控制流分析

控制流图

- 基本构成:
    * 图形特性:带开始和结束节点的有向图(可用椭圆表示)
    * 节点表示:程序指令/语句(顺序语句序列可合并为一个节点)
    * 边表示:语句执行路径(用箭头表示控制流向)
- 绘制原则:
    * 分支语句(if/switch)必须单独节点
    * 循环语句(while)单独节点
    * switch中的case不单独分节点
    * 开始/结束节点可省略
- 应用要点:
    * 根据需求或算法图绘制(非程序代码)
    * 边需要命名(如a→b→c表示执行路径)
    * 典型结构示例:

复杂度分析

圈复杂度

定义:复杂度分析给出一组能描述程序代码复杂度特征的度量,主要用于评估程序的复杂程度。

白盒测试方法

单元测试用例的设计方法

主要方法: 以白盒测试方法为主,适当结合黑盒测试方法

执行顺序: 一般采用"先黑后白"的测试策略

黑盒方法: 包括大纲法、场景法、边界值法、等价类划分、决策表、错误猜测等方法

白盒测试方法

1.逻辑覆盖法

测试对象: 主要测试程序中的顺序语句、分支语句(if/switch)、循环语句(while)以及条件表达式(>,<,>=,<=,and,or等)

  • 覆盖类型:
    • 语句覆盖
    • 判定覆盖
    • 条件覆盖
    • 判定条件覆盖
    • 条件组合覆盖

2.路径覆盖法

  • 测试原理: 对程序中的所有执行路径进行测试
  • 示例说明: 假设程序从a点到b点,可能经过c、d、e等节点,则测试路径包括:
    • a→c→b
    • a→d→b
    • a→e→b
    • 若存在交叉路径(如c→d),则增加a→d→c→b等更多路径

白盒测试方法的步骤

获得需求、获得/画出程序流程图/算法图

- 流程图符号:
    * 圆角矩形: 表示开始和结束
    * 平行四边形: 表示输入/输出
    * 菱形: 表示判断/条件
    * 程序输入三个变量a、b、c
    * 判断条件1:a>0a>0a>0且b>0b>0b>0
        + 满足则执行c=c/ac=c/ac=c/a
        + 然后判断条件2:a>1a>1a>1或c>1c>1c>1
            - 满足则执行c=c+1c=c+1c=c+1
    * 最终执行c=b+cc=b+cc=b+c并输出结果

绘制控制流图

例题:画控制流图

选择覆盖方法设计测试用例

语句覆盖法

1.目标

  • 最低标准:属于C0标准(Coverage的缩写),是测试理论中最基础的要求
  • 核心要求:程序中的每个可执行语句至少被执行一次,对应控制流程中的每个圆圈节点
  • 执行次数:允许语句多次执行,但要求最少执行一次
  • 死代码检测:若存在永远无法执行的语句,则表明程序存在缺陷(死代码)
  • 示例说明:对于条件分支结构,需要设计至少两条用例分别覆盖不同路径,如:

2.度量

  • 计算公式:覆盖率 = 被执行语句数 / 所有可能语句数 × 100%
  • 路径覆盖:除语句外还需考虑路径覆盖率,如分支结构中不同路径的执行情况
  • 理想目标:要求语句覆盖率必须达到100%,路径覆盖率根据测试需求而定
  • 重复执行:应尽量减少用例的重复执行,在保证覆盖率前提下优化用例数量
  • 实际应用:单元测试中常用,功能测试中较少使用该标准

语句覆盖法设计用例

1.语句覆盖要求: 在设计用例时,需要确保程序中的每一个语句都被执行至少一次。

2.语句覆盖路的走法

走法示例: 输入a, b, c,如果a>0且b>0,则执行c=c/a;如果a>1或c>1,则执行c=c+1;最后执行c=b+c,并输出a, b, c。需要设计用例使得这些语句都被执行。

  1. 设计用例

用例设计: 根据语句覆盖的要求,设计用例a=2, b=1, c=6。

用例解释: 这个用例可以确保所有语句都被执行。首先,a>0且b>0,所以执行c=c/a,c变为3;然后,a>1,所以执行c=c+1,c变为4;最后执行c=b+c,c变为5,并输出a, b, c的值为2, 1, 5。

用例有效性: 这个用例满足了语句覆盖的要求,因为所有语句都被执行了。

4.语句覆盖率: 通过设计用例并执行程序,可以计算出语句覆盖率。在本例中,通过用例a=2, b=1, c=6,所有语句都被执行,所以语句覆盖率为100%。

5.路径覆盖率: 路径覆盖率是指程序中所有可能的执行路径被测试的比例。在本例中,存在四条可能的执行路径,但语句覆盖法只测试了其中一条,所以路径覆盖率为25%。

提高路径覆盖率: 为了提高路径覆盖率,需要设计更多的用例来覆盖其他可能的执行路径。这通常需要使用更复杂的测试方法,如条件覆盖、路径覆盖等。

分支覆盖标准

分支覆盖(判定覆盖)定义

定义: 分支覆盖(判定覆盖)是指程序中的每个判定的真分支和假分支至少各执行一次。

判定: 即大条件,如if、where语句中的条件表达式。

题目给出了一个包含多个判定条件的程序片段,要求设计测试用例以满足分支覆盖标准。

  • 解题思路:
    • 首先识别程序中的判定条件,即a>0且b>0和a>1或c>1。
    • 然后设计测试用例,使得每个判定的真分支和假分支至少各执行一次。
    • 可以通过选择不同的路径来实现,例如:
      • 用例1:a<0, b<0, c<0,此时两个判定条件均为假。
      • 用例2:a=2, b=1, c=6,此时两个判定条件均为真。
分支覆盖的定义
  • 分支覆盖: 也叫判定覆盖,是软件测试中的一种覆盖准则,要求设计测试用例,使得程序的每一个分支(或判定)至少被执行一次。
  • 语句覆盖率: 在这个例子中,语句覆盖率是百分之百,但分支覆盖率可能不同。
分支覆盖的计算

  • 覆盖率计算: 若有七个语句,其中五个语句被覆盖,则分支覆盖率为5/7,即约71.43%,而非100%。
  • 单独分析: 需要单独看每个分支是否被覆盖,而不能只看整体的语句覆盖率。
分支覆盖的覆盖率
覆盖率概述

总体覆盖率: 在进行代码测试时,总体上达到了百分之百的语句覆盖率。

路径覆盖率: 提及了路径覆盖率的概念,并指出在特定的测试用例中,只走了两条路径,因此路径覆盖率为百分之五十。

条件覆盖法设计测试用例

  • 定义: 条件覆盖(C2标准)要求使每个判定中的每个条件的可能取值至少满足一次,即每个条件都要真(True)一次,假(False)一次。
  • 与分支覆盖的对比: 分支覆盖关注大条件的正确性,而条件覆盖能发现条件错误(如大于、小于、等于写错),但不能发现逻辑错误。

例题:

条件覆盖的例子与分析

判定条件覆盖C1+C2

同时满足判定覆盖和条件覆盖的要求

判定条件覆盖C1+C2应用案例

例题:条件掩盖问题

用例:

测试用例输入 原子条件 判定条件
a=2 b=1 c=4 a>0 真,b>0 真,a>1真,c>1真 判定3取真,判定6取真
a=-1 b=-2 c=-3 a>0 假,b>0 假,a>1假,c>1假 判定3取假,判定6取假
条件组合覆盖

定义: 条件组合覆盖,也称为多条件覆盖C3,要求每个判定中的所有的条件取值组合至少执行一次。

路径覆盖C4

覆盖路径

路径覆盖: 除了满足条件组合覆盖外,还需要考虑路径的覆盖,即程序执行的所有可能路径都要被测试到。

示例: 在给定的判定条件下,需要确保真真、假真、假假等所有路径都被覆盖到,如果有遗漏的路径(如真假),则需要补充相应的用例。

注意: 路径覆盖通常比条件组合覆盖要求更高,用例数量可能会翻倍。

路径覆盖法

  • 核心目标:要求测试用例覆盖程序中所有可能的执行路径,包括循环路径
  • 覆盖标准:属于白盒测试中的C4级覆盖标准,比条件组合覆盖更严格
  • 执行难点:程序中的循环结构会导致路径数量呈指数级增长,例如操场跑步的比喻(第500圈状态无法预测)
应用案例

  • 四路径模型:通过a>0、b>0、a>1、c>1四个条件组合形成4条独立路径
  • 用例设计:
    • 全真路径:a=2,b=1,c=6(判定3真/判定6真)
    • 全假路径:a=-1,b=-2,c=-3(判定3假/判定6假)
    • 混合路径1:a=1,b=1,c=-3(判定3真/判定6假)
    • 混合路径2:a=-1,b=2,c=3(判定3假/判定6真)
  • 适用条件:适用于无循环或有限循环次数的程序段
路径覆盖优化
McCabe的基路径方法 02:51
  • 理论基础:基于圈复杂度计算线性独立路径数(边-节点+2)
  • 优化原理:通过控制流图识别基本路径,避免无限循环测试
  • McCabe的控制图

- 节点定义:A为起始节点,G为终止节点,B/C/D等为过程节点
- 循环识别:B→C→B形成循环结构,需特殊处理
- 复杂度计算:闭合环数+1=5(示例中需设计5条独立路径)
路径覆盖法设计用例

路径示例

    * 路径选择原则:
        + 允许部分重叠(如p1与p2在A→B→C段重叠)
        + 禁止完全包含(如p2不应完全包含p1的路径)
        + 循环结构仅测试单次迭代(如p2中的B→C→B)
    * 典型路径:
        + p1:A→B→C→G(边1,4,9)
        + p2:A→B→C→B→C→G(边1,4,3,4,9)
        + p3:A→D→E→F→G(边2,6,8,10)
        + p4:A→D→F→G(边2,7,10)
        + p5:A→B→E→F→G(边1,5,8,10)

白盒测试方法总结

逻辑覆盖:语句覆盖,判定覆盖,条件覆盖,判定条件覆盖,多条件覆盖

例题:程序控制图测试用例设计

遇到这种逻辑题一看就是使用白盒测试方法

覆盖方法分类:白盒测试主要包含语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、多条件组合覆盖和路径覆盖六种方法

测试重点:当出现算法图时,通常优先采用白盒测试方法设计用例,特别是各种逻辑覆盖方法

1.语句覆盖: 确保程序中的每个语句至少执行一次 (两个语句都要走)

2.判定覆盖:每个判定条件的真假结果至少各出现一次 (对一次,错一次)

3.条件覆盖: 每个子条件的真假结果至少各出现一次

4.判定/条件覆盖:同时满足判定覆盖和条件覆盖的要求

5.多条件组合覆盖:覆盖所有可能的条件组合(一个条件对的时候,另一个条件对一次错一次)

每个子条件在真假情况下都需要被覆盖,且组合条件也要被覆盖

6.路径覆盖:覆盖程序所有可能的执行路径

路径覆盖要求程序中的所有可能路径都要被执行一次,即所有条件分支的每一种组合都要被覆盖。

大条件对,另一个条件对错各一次

1.语句覆盖

要求:A<5&B=5 & A=2 | X>2

用例:A=2,B=5,X=3

2.判定覆盖

要求:A<5&B=5 对一次,错一次

A=2 | X>2 对一次,错一次

用例:

A=2,B=5,X=3

A=6,B=5,X=1

3.条件覆盖

要求:

A<5 对错各一次 对 错

B=5 对错各一次 对 错

A=2 对错各一次 对 错

X>2 对错各一次 对 错

用例:

A=2,B=5,X=3

A=6,B=6,X=1

4.判定/条件覆盖

要求:

A<5 对错各一次 对 错

B=5 对错各一次 对 错

A<5 & B=5 对一次,错一次 对 错

A=2 对错各一次 对 错

X>2 对错各一次 对 错

A=2 | X>2 对一次,错一次 对 错

用例:

A=2,B=5,X=3

A=6,B=6,X=1

5.多条件覆盖

要求:

A<5对,B=5对 覆盖

A<5对,B=5错 覆盖

A<5错,B=5对 覆盖

A<5错,B=5错 覆盖

A=2对,X>2对 覆盖

A=2对,X>2错 覆盖

A=2错,X>2对 覆盖

A=2错,X>2错 覆盖

用例:

第一条A=2,B=5,X=3

第二条A=6,B=6,X=1

--------补用例---------

第三条A=2,B=6,X=1

第四条A=6,B=5,X=3


使用·列举,合并上述四条用例

6.路径覆盖

要求:

A<5 & B=5 对,A=2 | X>2 对 覆盖。

A<5 & B=5 对,A=2 | X>2 错 覆盖。。

A<5 & B=5 错,A=2 | X>2 对 覆盖。。。

A<5 & B=5 错,A=2 | X>2 错 覆盖。。。。

用例:

A=2,B=5,X=3 。

A=6,B=6,X=1 。。。。

A=2,B=6,X=1 。。。

A=3,B=5,X=1 。。

最终的用例:

A=2,B=5,X=3
A=6,B=6,X=1
A=2,B=6,X=1
A=3,B=5,X=1

A=6,B=5,X=3


网站公告

今日签到

点亮在社区的每一天
去签到