哪些类型的测试最不适合使用成对测试(和类似的测试设计方法)?

软件测试 覆盖范围 测试设计
2022-01-10 18:17:45

对于那些使用成对测试设计方法(或类似的组合软件测试方法)试图从可以执行的大量潜在测试中将可管理数量的异常强大的测试归零的人......

  1. 您是否曾经应用过这些测试设计方法并取得了糟糕的结果?如果是这样,您观察到哪些糟糕的结果?哪些因素导致结果不佳?

  2. 您是否考虑过应用这些测试设计方法并得出结论认为成对(或类似)测试设计方法在给定情况下不起作用?如果是这样,是什么因素导致您得出结论,即不能使用成对或其他组合测试设计方法来达到预期的结果?

提前感谢您分享您的经验。

3个回答

实际上,多个输入参数的组合测试的基本启发式是它们是相互依赖的,并且分配的特定值会影响公共输出条件或状态。

基于测试影响公共输出条件或状态的输入变量的各种组合的概念,组合测试可能不适合测试

  • 顺序输入
  • 状态转换或业务流
  • 客户场景
  • 等等

我还发现组合测试也可能会遗漏单模错误,其中参数变量的更改顺序会触发问题,但如果顺序不同,则可能无法检测到单模故障。

这些方法的基本假设是任何两个参数彼此独立,因此任何两个确实具有某种依赖性的参数都将显示较差的结果,即您的覆盖率不会像预期的那么好。当我尝试成对使用时,第一步是找到足够独立的参数,我找不到任何可以节省运行时间的参数。最重要的是,开发人员大声抱怨说,使用参数组合会使他们更难发现和调试问题。我测试复杂的嵌入式系统顺便说一句。

简短的回答是只有在必须以某种方式设置三个或更多状态时才会出现错误的情况。

长答案...

成对测试实际上应用了一些非常合理的逻辑的好技术。也就是说,很容易理解潜在的权衡是什么......让我用我之前使用的一个例子来说明。

假设我们正在构建一个用于确定航班成本的应用程序。

我们可以选择悉尼、墨尔本或布里斯班作为目的地。我们可以选择商务舱、经济舱或经济舱作为我们的机票类型。最后,我们可以选择 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(我使用的)只能配对,而其他工具的限制较少。