如何在彼此依赖的条件下进行MCDC



我在以下表达式执行MCDC时遇到了问题:

if( 
(t_Active_b == FALSE)
&& 
(
   (t_State_ub != HOLD) && 
   (t_State_ub != RELEASE) &&
   (t_State_ub != CAPTURE) 
)
||
t_signal_ub == FAILED
)

来自表达式,我有5个条件

[a&&(b&& c&& d)||e]

MCDC要求:"一种情况下的变化导致输出变化",

这意味着如果一个更改(t_active_b具有true,然后是false),而其他条件必须保持其状态,则输出更改(从真实到false)

如何设计条件B,C和D的测试用例?

顺便说一句,您知道可以生成MCDC测试用例的任何商业或免费工具吗?

MCDC的原始定义(修改条件决策覆盖范围)没有考虑多个案件。其中之一是造成问题的原因。您有"耦合条件"。这意味着,使用相同的条件不止一次。耦合条件很强。例如:在布尔表达中:" ab ac"变量" a"中存在2个产品条款。根据原始定义,无法找到可以满足唯一原因MCDC的测试对。

这导致许多问题,基本上是针对3种形式的MCDC

的新定义
  1. 唯一原因(按照原始定义)
  2. 唯一原因 掩蔽
  3. masking

什么是掩盖?

掩盖将布尔歼灭者的财产考虑在内。含义" a和false" -> false和a或true" -> true。

因此,如果评估了布尔表达,并且很明显,并且很早就无法促成结果,那么就无需评估。子术语被掩盖。没关系。

顺便说一句,相同的机制也用于布尔捷径评估。

通过这种放松,您可以找到更多的影响变量的测试对。NASA和FAA也将接受这些其他形式的MCDC。

如果我们将掩码用于影响变量,则将测试对MCDC-Property称为"唯一原因 掩码"。如果我们允许所有蒙版变量更改,那么我们将test-pair-mcdc-property称为"遮罩"。

对于上述示例" AB AC",您可以找到以下测试对:

Influencing Condition: 'a'  Pair:  1,  5   Unique Cause + Masking
Influencing Condition: 'a'  Pair:  2,  6   Unique Cause + Masking
Influencing Condition: 'a'  Pair:  3,  5   Masking
Influencing Condition: 'a'  Pair:  3,  6   Masking
Influencing Condition: 'b'  Pair:  4,  6   Unique Cause
Influencing Condition: 'c'  Pair:  4,  5   Unique Cause

(5是可变ABC设置的小数等效的,在这种情况下为101)。

应用设定盖问题将导致3个可能的测试集

--------覆盖范围1 -----------------------------------------------------------------------------------------------------------------------------------------------------------------------

Test Pair for Condition 'a':    1   5   (Unique Cause + Masking)
Test Pair for Condition 'b':    4   6   (Unique Cause)
Test Pair for Condition 'c':    4   5   (Unique Cause)

结果测试向量:1 4 5 6

--------覆盖范围2 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Test Pair for Condition 'a':    2   6   (Unique Cause + Masking)
Test Pair for Condition 'b':    4   6   (Unique Cause)
Test Pair for Condition 'c':    4   5   (Unique Cause)

结果测试向量:2 4 5 6

--------覆盖范围3 -----------------------------------------------------------------------------------------------------------------------------------------------------------------------

Test Pair for Condition 'a':    1   5   (Unique Cause + Masking)
Test Pair for Condition 'b':    4   6   (Unique Cause)
Test Pair for Condition 'c':    4   5   (Unique Cause)

结果测试向量:1 4 5 6

和:

的最终结果

测试向量:推荐结果:1 4 5 6

1:  a=0  b=0  c=1    (0)
4:  a=1  b=0  c=0    (0)
5:  a=1  b=0  c=1    (1)
6:  a=1  b=1  c=0    (1)

请注意:

重要的是要了解您需要使用WhiteBox视图查看布尔表达式。MCDC是一个结构性覆盖范围METRICK,因此您需要了解源代码。反正。在许多视频和解释中,人们开始从真相表(BlackBox)中解释MCDC。这将永远无法用于掩盖或更复杂的表情。在上面的示例中,您不会发现3和5是有效的MCDC测试对。只能通过白盒方法找到。

我深深地解决了这个问题,并发布了一个工具来查看测试用例

github:mcdc

请与我联系,如果您需要支持。

在我看来,您可以考虑(b,c,d)作为一个很大的条件命名为BC和DO MCDC的表达式(A&& bc || e)

对于另一种方法,您可以查看本文

https://www.digitalobjectivo.com/mcdc-test-cases-generator/

这里的问题是条件B/C/C/D不是独立的:如果您将其中一个错误,则其他两个是自动true的。

因此,如果您想坚持布尔mc/dc,则需要一个"第四个"案例,这将使所有b/c/d true构成true,例如第四个状态t_State_ub == RUNNING

测试用例将成为:

  • t1 :( a,b,c,d,!e) -> t(不活动,跑步,没有失败)
  • t2 :( a,!b,c,d,!e) -> f(不活跃,保持,不要失败)
  • t3 :( a,b,!c,d,!e) -> f(不活动,释放,没有失败)
  • t4 :( a,b,c,!d,!e) -> f(不活动,捕获,不要失败)
  • t5:(!
  • t6:(!a,b,c,d,e) -> t(活动,运行,失败)

t2-t5在一个条件下和结果中都与T1有所不同,而T6在一个条件下和结果中与T5不同,因此满足MC/DC的要求。

请注意,条件BCD实际上是!(ub == HOLD || ub == RELEASE || ub == CAPTURE)。如果没有像RUNNING这样的第四个状态,则该条件是不必要的,可以删除。

在这种情况下,b/c/d是耦合的,但并不意味着无法生成测试用例。它介绍了t_State_ub 的定义。

如果t_State_ub 只有3种状态,例如HOLDRELEASECAPTURE,则您将无法获得符合原始MC/DC原理(即唯一原因MC/DC)的B/C/D条件的测试用例。

但是,我想t_State_ub 似乎还有其他状态。因此,它正在努力生成MCDC案例。

如果t_State_ub 没有其他状态,则(t_State_ub != HOLD) && (t_State_ub != RELEASE) && (t_State_ub != CAPTURE)永远不会是正确的,因此逻辑是冗余的。

相关内容

  • 没有找到相关文章

最新更新