美文网首页
因果图基础--与或非

因果图基础--与或非

作者: 生活如同马拉松_yaguang | 来源:发表于2018-01-14 13:39 被阅读91次

    参加晓梅老师的海盗派的学习Meetup,介绍因果图,想到一个问题,“与或非”可以完全表达两个元素的逻辑结果吗?)

    这样描述,有两个命题 PA, PB, 每个值都是真或假两种情况,共有有四种组合: 

    (PA  PB)  ---> ( 0 0) /( 0 1) /( 1 0)/ ( 1 1) 

    那么对于其结果C , 有16 (2^4) 种结果, 与或非可以完全表达这16 种关系吗?

    下图表格画出16种结果,其中可以 按照C包含1的个数可以分为C0 ,C1, C2, C3, C4。以及用与或非对应的关系图。

    命题结果与集合关系一一映射

    还发现一个挺有意思的结果,集合A和集合B将 区域划分为四部分, 其中每一个部分对应一个1。 四个部分, 其分别表示 1( A - B) ,2( B-A),3 (A n B), 4( A U B)。 比如 对于C0, 就是一个都不选; C4,代表全选。  C1 代表选一个区域,C2, 代表选两个区域, C3 代表选三个区域。 

    结论就很简单,与或非完全可以表达两个命题逻辑结果

    下面看几个应用。

    1. 如何避免组合爆炸

    对软件中随着变量的增加,代码错误概率也增加,同时测试的组合是呈现爆炸式的增长。 

    比如说2个逻辑变量A和B,计算其  A and B 。 

    每一个逻辑变量其值为真或假, 有四种组合。 如果对于代码会发生各种错误,比如漏掉,写反( 大于号写成小于号),导致有9 种结果(每一个变量有三种情况,正常,恒一,恒零, 两个变量3x3)。 只有一种是正确的,也就是8个错误结果。 代码写正确不容易啊:)。

    需要验证代码正确性,如果每一种组合都测一次,那么4种组合4个test case。 如果变量增加6个变量,那么组合测试就是64.   怎么才能减少测试用例? 下图例子中,只需要3个测试用例就可以覆盖验证所有的测试用例。 而且随着变量n的增加,其测试用例只需要n+1.

    晓梅老师板书

    那么选取测试用例?  对于每一个测试用例,其发现的bug数量是不一样的。 编号为4的测试用例,可以发现5种错误,而编号为1的测试用例只能发现2种错误

    上图的左下方给出,对于and  、or,异或,和其取反,只需要从三个区域选取3个点即可; 

    那么对于 三个组合复杂命题( A ^ ( B v C)), 如何选择测试用例?这个留个大家作为练习:)

    2.  回归测试的重要性

    回归测试很重要,因为代码修改或许在你不知道的地方会出现问题。 

    对于下图逻辑变量 A和B,代码都写错了.一个是恒真一个是恒假, 那么测试发现问题。 开发发现原来是A错了,修改,测试用例4跑也通过了。 但是,但是,但是,bug 转移。如果回归测试2,那么测试用例2就发现问题。 所以说回归测试很重要。 

    相关文章

      网友评论

          本文标题:因果图基础--与或非

          本文链接:https://www.haomeiwen.com/subject/zjtkoxtx.html