软件质量保证与测试(三)

本文详细介绍了软件测试的多种方法,包括基于直觉和经验的错误推测法,基于输入域的等价类划分和边界值分析,基于组合与优化的判定表和因果图法,基于逻辑覆盖的测试方法,如语句覆盖、判定覆盖等,以及基于模型的测试和模糊测试。这些方法旨在确保软件的质量和安全性,通过不同角度和策略发现潜在的错误和缺陷。
摘要由CSDN通过智能技术生成

1.基于直觉与经验的方法

基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性地设计测试用例

  • ALAC测试法

    ALAC(Act-like-a-customer)测试方法是一种基于客户使用产品的知识开发出来的测试方法,它的出发点是著名的Pareto 80/20规律。

    在这里插入图片描述

  • 错误推测法

    错误推测法是测试者根据经验、知识和直觉来发现软件错误,来推测程序中可能存在的各种错误,从而有针对性的进行测试。

2.基于输入域的方法

  • 等价类划分法

    • 基本概述
      • 等价类是某个输入域的子集**,**在该子集中每个输入数据的作用是等效的
      • 等价类将输入数据分成若干个子集,从每个子集选取一个代表性的数据作为测试用例
      • 等价类分为有效等价类和无效等价类
    • 确定方法
      • 在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类
      • 在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可以确立一个有效等价类和一个无效等价类
      • 在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类
      • 在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类
      • 在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类和若干个无效等价类
    • 测试步骤
      1. 建立等价类表,列出所有划分出的等价类
      2. 为每个等价类规定一个唯一的编号
      3. 设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类
      4. 重复步骤3,最后使得所有有效等价类均被测试用例所覆盖
      5. 设计一个新的测试用例,使其只覆盖一个无效等价类
      6. 重复步骤5,使所有无效等价类均被覆盖
  • 边界值分析法

    • 基本概述

      很多错误发生在输入或输出范围的边界上,因此针对各种边界情况设置测试用例,可以更有效地发现缺陷

    • 确定方法

      • 如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据
      • 如果输入条件规定了值的个数,则用最大个数、最小个数、比最小个数少一、比最大个数多一的数作为测试数据
      • 如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例
      • 如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例

3.基于组合与优化的方法

  • 判定表法

    • 基本概述

      • 在实际应用中,许多输入是由多个因素构成,而不是单一因素,这时就需要多因素组合分析
      • 对于多因素,有时可以直接对输入条件进行组合设计即直接采用判定表方法
      • 判定表由“条件和活动”两部分组成,即列出一个测试活动执行所需的条件组合,所有可能的条件组合定义了一系列的选择,而测试活动需要考虑每一个选择
    • 判定表元素

      • 条件桩:列出问题的所有条件
      • 动作桩:列出可能针对问题所采取的操作
      • 条件项:针对所列条件的具体赋值
      • 动作项:列出在条件项(各种取值)组合情况下应该采取的动作。
      • 规则:任何一个条件组合的特定取值及其相应要执行的操作。
    • 方法步骤

      • 列出条件桩
      • 列出动作桩
      • 填入条件项及其组合
      • 填入动作项,制定初始判定表
      • 简化、合并相似规则或者相同动作
    • 示例

      在这里插入图片描述

  • 因果图法

    • 基本概述

      多种输入条件的组合,产生多种结果设计测试用例

    • 方法步骤

      • 分析软件规格说明文档描述的哪些是原因(输入条件),哪些是结果(输出条件),给每个原因和结果赋予一个标示符
      • 找出原因与结果,原因与原因之间的对应关系,划出因果图
      • 在因果图上标上哪些不可能发生的因果关系,表明约束或限制条件
      • 根据因果图,创建判定表,将复杂的逻辑关系和多种条件组合很具体明确的表示出来
      • 把判定表的每一行作为依据设计测试用例
    • 基本关系

      • 恒等-关系:果 j 取决于因 i。因出现,则果也出现
      • 非-关系:只有当因 i 不存在时,果 j 才出现
      • 或-关系:如果因 i1 或因 i2 或……因 in 存在时,结果 j 才出现
      • 与-关系:只有当因 i1 与因 i2与……因 in 同时存在时,结果 j 才出现
  • 两两组合法

    • 大部分缺陷是在两个变量取值冲突的测试时被发现的
    • 不仅仅是在所有的组合情况下才会发现所有的测试缺陷
    • 这个是“Pairwise Testing”基本原理,不要测试所有的组合,测试所有的“Pairwise ”即可
  • 正交试验法

    • 确定影响功能的因子与状态
    • 选择一个合适的正交表
    • 利用正交表构造测试数据集

4.基于逻辑与覆盖的方法

  • 逻辑覆盖法

    以程序或系统的内部逻辑结构为基础,分为语句覆盖、判定覆盖、判定-条件覆盖、条件组合覆盖等

    • 语句覆盖

      语句覆盖法的基本思想是设计若干测试用例,运行被测程序,使程序中的每个可执行语句至少被执行一次

      • 能够发现的问题

        在这里插入图片描述

      • 不能发现的问题

        在这里插入图片描述

    • 判定覆盖

      判定覆盖法的基本思想是设计若干用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足

      在这里插入图片描述

    • 条件覆盖

      条件覆盖的基本思想是设计若干测试用例,执行被测程序以后,要使每个判断中每个条件的可能取值至少满足一次

      在这里插入图片描述

    • 判定条件覆盖

      判定条件覆盖是判定和条件覆盖设计方法的交集,即设计足够的测试用例,使得判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果至少执行一次

      在这里插入图片描述

    • 条件组合覆盖

      条件组合覆盖的基本思想是设计足够的测试用例,使得判断中每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至少出现一次

      在这里插入图片描述

  • 路径测试法

    在程序或业务控制流程的基础上,分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例

    • 设计步骤
      • 依据代码绘制流程图
      • 确定流程图的圈复杂度
      • 确定线性独立路径的基本集合
      • 设计测试用例覆盖每条基本路径
  • 对比

    在这里插入图片描述

5.基于故障的方法

  • 分类
    • 故障模型
    • 安全漏洞模型
    • 性能模型
    • 并发故障模型
    • 不良习惯模型
    • 代码国际化模型
    • 易诱骗代码模型
  • 步骤
    • 预处理/预编译
    • 词法分析(Lexical Analysis)
    • 语法分析( Parsing) 和语义处理( Semantic Analysis)
    • 抽象语法树生成
    • 控制流图生成
    • IP 扫描
    • 人工确认

6.基于模型的方法

通过构建能够正确描述被测软件系统功能特性的模型,然后基于这个模型产生测试用例并执行这些测试用例的过程

  • 功能图方法
    • 基本概述
      • 每个程序的功能通常由静态说明和动态说明组成
        • 静态说明描述了输入条件和输出条件之间的对应关系
        • 动态说明描述了输入数据的次序或者转移的次序
      • 功能图法就是为了解决动态说明问题的一种测试用例的设计方法
      • 功能图由状态迁移图(state transition diagram,STD)和逻辑功能模型(logic function model, LFM)构成
      • 功能图法是综合运用黑盒方法和白盒方法来设计测试用例,即整体上选用白盒方法——路径覆盖、分支和条件覆盖等,而局部上选用的是黑盒方法——决策表或因果图方法
    • 设计步骤
      • 从功能逻辑模型(决策表或因果图)导出局部测试用例,覆盖各个状态的各种输入数据的组合
      • 从状态迁移图导出整体的测试用例,以覆盖系统(程序)控制的逻辑路径
  • 模糊测试方法
    • 模糊测试(Fuzz testing)方法,简单的说,就是构造大量的变异数据作为系统的输入,从而检验系统在各种数据情况下是否会出现问题
    • 模糊测试方法可模拟黑客对系统发动攻击测试,完成安全性测试,并能应用于服务器的容错性测试

7.基于形式的方法

  • 基本概述
    • 形式化方法是基于数学的方法(数学表示、精确的数学语义)来描述目标软件系统属性的一种技术
    • 形式化方法可应用在软件规格和验证之上,包括软件系统的精确建模和软件规格特性的具体描述,即可以看作是面向模型的形式化方法和面向属性的形式化方法
    • 形式化验证,就是根据某些形式规范或属性,使用形式逻辑方法证明其正确性或非正确性
  • 具体方法
    • 基于模型的方法
    • 代数方法
    • 过程代数方法
    • 基于逻辑的方法
    • 基于网络的方法
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小吉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值