如何将不满足MCDC的函数改写为合规函数?改写方案是否有效?
关于MC/DC改写方案的有效性分析
首先明确原函数的问题:原代码中p || q和p && q这两个决策逻辑强关联,导致无法独立测试单个条件对决策的影响——比如p && q为真时p || q必然为真,p || q为假时p && q也必然为假,无法单独验证每个条件在不同决策中的独立作用,不符合MC/DC要求。
你的改写方案是有效的,下面逐一解答你的疑问:
1. 改写方案是否保持原行为?
是的,改写后的函数完全复刻了原逻辑:
- 当
n != 123时,返回34; - 当
n == 123时:p=true且q=true→ 返回9;p=true且q=false/p=false且q=true→ 返回4;p=false且q=false→ 返回34;
和原函数的执行结果完全一致。
2. 三个条件是否相互独立?
没错,n==123、p、q这三个条件完全独立:
n==123的真值不影响p和q的取值;p的真值可以独立设置,不受q或n==123的限制;q的真值同理,可独立控制。
每个条件都能单独切换真假状态,满足MC/DC中“条件独立可控”的核心要求。
3. 你的MC/DC理解是否正确?
完全正确。MC/DC的核心规则就是每个条件能独立于其他条件,通过改变自身真值来影响决策结果,确保代码中每个条件的逻辑都能被单独测试到。你的改写正是通过拆分复合决策,让每个条件都能独立触发不同的分支路径,契合这一要求。
4. 不同分支产生相同结果是否合规?
合规。MC/DC关注的是条件对决策路径的独立影响能力,而非最终输出的唯一性。只要每个条件都能通过改变自身状态,触发不同的决策分支(即使最终输出相同),就符合要求。比如你的改写中,p真q假和p假q真都走到out=4,但这两个分支是通过独立控制p和q的状态触发的——你可以单独测试p在q为假时对结果的影响,也可以单独测试q在p为假时的影响,完全满足MC/DC的测试覆盖要求。
内容的提问来源于stack exchange,提问作者Gregory Fenn
相关产品推荐
相关产品推荐

