我在以下表达式执行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
的新定义- 唯一原因(按照原始定义)
- 唯一原因 掩蔽
- 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种状态,例如HOLD
,RELEASE
和CAPTURE
,则您将无法获得符合原始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)
永远不会是正确的,因此逻辑是冗余的。