软件测试实战读书笔记

测试建模(In Progress)

Posted by DanteYu on August 20, 2017

什么是测试建模

测试建模是以指导测试设计为目的建立产品模型,此产品模型就是测试建模的产出。这个产品模型包含着大量测试需要关注的信息。

组合测试

组合测试(combinatorial testing)是一种测试用例生成方法。测试人员将被测试对象抽象成一个受到多个变量影响的系统,其中每个变量的取值是离散且有限的。然后,使用组合测试工具(i.e. PICT)生成满足特定组合覆盖标准的组合测试用例集。

  1. 两因素组合测试(pairwise combinatorial testing,配对测试,全对偶测试) 生成的测试集可以覆盖任意两个变量的所有取值组合。在理论上,该用例集可以暴露所有的两个变量共同作用而引发的缺陷
  2. 多因素组合测试(n-way combinatorial testing) 生成的测试集可以覆盖任意n个变量的所有取值组合。在理论上,该测试用例集可以发现所有由n个因素共同作用引发的缺陷

但组合测试也有一些问题,我们不能完全依赖于组合测试,而是需要仔细分析产品,结合语境来解决问题。

  1. 问题: 组合测试可能会错过最重要的取值组合
    • 组合测试不等于全覆盖测试,所以有些情况下组合测试可能会错过最重要的取值组合,i.e. 默认值。默认值有可能是用户使用最多的情况,而组合测试有可能会遗漏这个组合。如果测试人员不仔细分析产品,只依赖组合测试工具,他可能错过重要的测试用例。
  2. 问题: 组合测试的数学模型没有描述变量之间的约束关系
    • 在组合测试的数学模型中,每个变量的取值是相互独立的。但是,大多数被测对象的变量之间存在约束关系。比如 A变量的值a1不能与B变量的值b3同时存在。可见如果不考虑变量之间的约束关系,测试集将包含大量的无效测试用例。对于此类被测对象,测试人员应该明确定义变量的约束关系,让组合测试工具根据约束来生成有效的测试集。

为了获得好的测试模型,测试人员需要从多个角度考察产品,重要的切入点包括业务领域、软件实现和项目环境。

  1. 业务领域 - 测试建模的对象是被测产品,而构建产品的使命是解决业务问题,因此恰当的模型应该切合产品的业务领域
  2. 软件实现 - 好的测试模型具有很强的针对性,能够清晰地描绘出被测产品的特征,这要求测试人员分析产品元素,了解代码实现
  3. 项目环境 - 构建测试模型的目的是为了实施更好的测试,好的测试模型不一定复杂,但一定实用,能够切合当前项目环境,并充分利用项目资源

启发式测试策略模型 HTSM

参考HTSM

输入与输出模型