哪些类型的测试最不适合使用成对测试(和类似的测试设计方法)?
实际上,多个输入参数的组合测试的基本启发式是它们是相互依赖的,并且分配的特定值会影响公共输出条件或状态。
基于测试影响公共输出条件或状态的输入变量的各种组合的概念,组合测试可能不适合测试
- 顺序输入
- 状态转换或业务流
- 客户场景
- 等等
我还发现组合测试也可能会遗漏单模错误,其中参数变量的更改顺序会触发问题,但如果顺序不同,则可能无法检测到单模故障。
这些方法的基本假设是任何两个参数彼此独立,因此任何两个确实具有某种依赖性的参数都将显示较差的结果,即您的覆盖率不会像预期的那么好。当我尝试成对使用时,第一步是找到足够独立的参数,我找不到任何可以节省运行时间的参数。最重要的是,开发人员大声抱怨说,使用参数组合会使他们更难发现和调试问题。我测试复杂的嵌入式系统顺便说一句。
简短的回答是只有在必须以某种方式设置三个或更多状态时才会出现错误的情况。
长答案...
成对测试实际上应用了一些非常合理的逻辑的好技术。也就是说,很容易理解潜在的权衡是什么......让我用我之前使用的一个例子来说明。
假设我们正在构建一个用于确定航班成本的应用程序。
我们可以选择悉尼、墨尔本或布里斯班作为目的地。我们可以选择商务舱、经济舱或经济舱作为我们的机票类型。最后,我们可以选择 Virgin Blue、Qantas 或 Jetstar 作为我们的航空公司。
假设同时选择 Business 和 Jetstar 时出现错误,因为 Jetstar 没有任何商务舱座位。使用所有 27 种可能的组合,我们将得到三个测试失败,如下所示:
Destination Class Airline Result
Sydney Business Jetstar Error
Sydney Business Qantas
Sydney Business Virgin Blue
Sydney Economy Jetstar
Sydney Economy Qantas
Sydney Economy Virgin Blue
Sydney Budget Economy Jetstar
Sydney Budget Economy Qantas
Sydney Budget Economy Virgin Blue
Melbourne Business Jetstar Error
Melbourne Business Qantas
Melbourne Business Virgin Blue
Melbourne Economy Jetstar
Melbourne Economy Qantas
Melbourne Economy Virgin Blue
Melbourne Budget Economy Jetstar
Melbourne Budget Economy Qantas
Melbourne Budget Economy Virgin Blue
Brisbane Business Jetstar Error
Brisbane Business Qantas
Brisbane Business Virgin Blue
Brisbane Economy Jetstar
Brisbane Economy Qantas
Brisbane Economy Virgin Blue
Brisbane Budget Economy Jetstar
Brisbane Budget Economy Qantas
Brisbane Budget Economy Virgin Blue
在我们成对应用之后(我使用了 allpairs),我们减少到以下 10 个测试
Destination Class Airline Result
Sydney Business Jetstar Error
Sydney Economy Qantas
Sydney Budget Economy Virgin Blue
Melbourne Business Virgin Blue
Melbourne Economy Jetstar
Melbourne Budget Economy Qantas
Brisbane Business Qantas
Brisbane Economy Jetstar
Brisbane Economy Virgin Blue
Brisbane Budget Economy Jetstar
所以我们在这种情况下发现了我们的错误,所以我们没有丢失任何东西。那么使用对的权衡是什么?
好吧,如果错误仅在发生三件事或更多事情时发生,例如澳航飞往墨尔本的商务舱航班,那么您不能保证找到它。如果您的测试用例恰好匹配,您可能会很幸运,但您不能保证找到它,这是成对的权衡。
您将通过任何测试方法获得这种权衡,而不仅仅是成对的。我的示例显示了 2 个变量会发生什么,当移动到不仅仅是对的组合时,您可以增加覆盖率。
还有一些工具限制。AllParis(我使用的)只能配对,而其他工具的限制较少。