zoukankan      html  css  js  c++  java
  • 《软件测试基础》读书报告:第四章 输入空间划分

    《软件测试基础》读书报告

    第四章 输入空间划分

    为了更直接地使相同测试需求的值集合是恰好合适,划分输入空间的方式直接的根据输入值的参数来定义输入域。输入参数可能是方法的参数和全局变量,也可能是系统当前的表现状态,或者干脆是用户级给定的一个输入,这都要根据实际情况来划分。总输入域中划分出若干个区域,从这些区域中选出一些值来进行测试。

    从参数的域开始,把每个域可能的值划到块里,从块中选取适当的值来组成测试用例的过程就是输入域建模的过程。对于输入与的划分,一般是基于程序相应的某周特性,程序的输入,程序的环境等。

    对于某个特性划分域时,一般要求满足两个条件:

    1. 完整性,划分必须覆盖整个域
    2. 分离性,块之间不能有重叠

    以"输入F的次序"为例,一个看起来有效实际无效的划分可能是这样:

    • 按F的排序划分

      B1 = 升序排列

      B2 = 降序排列

      B3 = 任意顺序

        这样做既不满足完整性也不满足分离性,升序或者降序都可以算是任意顺序的子块,而且,当F长度为0或者1的时候,F能同时满足三个块。出现这个问题的原因是把升序和降序两个概念放在相同的特性里面,应该将其分离。结果就是下面这个有效的划分:

    • 文件F升序

            B1 = True

          B2 = False

     

    • 文件F降序

            B1 = True

        B2 = False

      当F长度为0或者1的时候,对两个特性都为真。

      完整性和分离性的划分是为了使块的划分更加合适,为从块中选择合适的值来组合奠定基础。

    输入域建模

        输入域建模分三步。

    1. 识别可以测试的函数。对于一个系统中的函数来说,公共的函数是可以被独立测试的;对几个方法来说,可能他们具有同样的特性,这样就可以对于一个类设计一组共同的特性,再对每个独立的函数具体开发有针对性的测试用;对于一个大的系统来说,可能在设计UML中用例的时候就可以提取出测试来了。
    2. 识别所有参数。前面说过,参数可以是显式的函数参数或者是全局的变量,或者是当前系统的状态等,关键是看给定的参数是否对与函数行为有影响。被测函数的所有参数构成了输入域。
    3. 将前面的步骤建模。根据定义,测试输入严格属于每个特性的每一个块,这说明如果分为n个特性,每个特性划分成了B(n)个块,那么要全部覆盖的话,至少有B(1) *…*B(n)个测试,每增加一个特性i, 就会有成B(i) 倍数增长。特征多了,测试数量就会爆炸,所以必须得控制组合的数量。另外,不可避免的,有的值是无效的,那就需要识别、移除无效的字组合。

    在建模时,有基于接口和基于功能的两种建模方法。

    基于接口的建模测试

        孤立地看待每个参数,这种机械的方式的到的结果确实很好,也容易识别,抽象的工作也很简单。但是,并不是所有的可用信息都反映在接口域模型里面,这就意味着这样建立的IDM是不完整的;另外一个问题是对每个参数孤立的分析,会导致一些重要的子组合被遗漏。

    基于功能的建模测试

        基于功能的建模的想法是通过识别被测系统的功能,将相应的领域知识应用到IDM上。这样的话,从规格说明书语义到IDM的转换,更可能为测试用例产生预期的结果。并且,因为IDM的建立不依赖于具体实现的参数列表,需要的只是规格说明书和领域知识,所以在开发的早期就能着手设计测试。

        当然,基于功能的分方法里,识别特征和取值是比较困难的,当系统比较大的时候,这一点体现的更加明显。并且,功能需求严重依赖于规格说明书,如果规格说明书不完整或者不完善,那设计合理的特性就更加困难了。

    组合策略标准

    • 完全组合覆盖:来自所有特征的所有块都必须被用到

      如果直接这样的话,测试数量会爆炸。可以肯定,每个块中有的选择是等价的,这样就存在一些组合策略使得测试减少

    • 每个选择覆盖:对每个特征,每个块中一个值至少在一个测试用例中被使用

      满足这样标准的测试灵活性很大,这样有的中药组合可能会遗漏

    • 成对覆盖:来自每个特征每个快的一个值,必须与来自针对其他特征的每个块的一个值相对结合
    • T-Wise覆盖:来自t个特征每个快的一个值必须被组合
    • 基本选择覆盖
    • 多个基本选择标准

                |--->T-Wise覆盖 -----> Pair-Wise覆盖------ ---|

    完全组合覆盖 ------|                                           |------>    每个选择覆盖

                |--->多个基本选择覆盖 ---> 基本选择覆盖--------|

     

     

     

  • 相关阅读:
    Unity UGUI
    机器学习:logistic回归与Softmax回归 代码+案例
    机器学习:线性回归 代码+测试
    《算法竞赛进阶指南》0x33同余 扩展欧几里得解线性同余方程组
    《算法竞赛进阶指南》0x33同余 POJ1845 乘方约数和取模
    《算法竞赛进阶指南》0x33同余 POJ3696 The Luckies Number
    《算法竞赛进阶指南》0x32欧拉函数 POJ3090 Visible Lattice Points
    《算法竞赛进阶指南》0x32约数 解公因数以及公倍数方程
    《算法竞赛进阶指南》0x32约数 余数之和
    《算法竞赛进阶指南》0x32约数
  • 原文地址:https://www.cnblogs.com/test-tech/p/4419830.html
Copyright © 2011-2022 走看看