好的,本节我们就来设计下这个正交工具的过滤功能。总的来说 很小。
只是和使用者的交互 我们需要好好想一下。
其实所谓过滤,就是在结果中 把那些 不可能不考虑的组合 删掉。那么用户要怎么来告诉系统呢?我们肯定是要提供一个输入框,让用户有个可以输入的地方。
那么我们需要来设计一些规则,比如这个多行输入框中。
我们规定,每段规则都用 中/英 文逗号 来隔开。
规则内 我们用 - 符号来表示 这种组合要过滤掉。
比如:
A4纸-单面,A3纸-黑白,单面-彩色
这就是包含了三条规则。A4纸不能和单面在一起。
这样我们对最终的结果进行逐一排查,若发现是包含这种规则的 用例就删除。
只是。这样真的可以么?
在我上一篇文章中说,这样做有两大风险:
- 过滤代表着输入条件之间有逻辑关联,那么用正交本身就是风险高了,不过我们既然准备做,就喝出来这个风险,而且这个我们也避免不了。
- 过滤的时候,容易删掉其他子状态组合的情况。比如有个组合是 :
A4-单面-黑白
我们根据用户的过滤规则,把含有A4,单面 的用例删掉。但是无形中也把 A4和黑白,单面和黑白这种情况给删掉了。而且如果有更多子状态,那么这个删除的情况会很多,这就叫误删。
拿被误删的一组:A4-黑白来说,可能其他用例也有这个,那么我们就可以接受这次误删,但是可能单面-黑白这组合其他用例也木有,那么我们就不能接受这次误删。
那怎么办呢?我们最简单的办法就是重组,把不能接受的误删组合 全都拿出来,然后重组。组成新的不含过滤规则的组合,这样尽可能的保护了误删组合。
比如上面这个 我们不能接受误删的是 单面和黑白。其他用例也中了过滤规则,出现了不能接受的误删组 A3-黑白。那么我们就可以对将其进行组合成:A3-单面-黑白。
当然最后可能会剩下几组无法组合成整套的 零散的 组合。比如:
剩下了:A2-黑白 ,A1-彩色。
我们没法给他们合并成一个组合。所以我们只能对其进行自由填充(不能触碰到过滤规则的填充)
A2-黑白-单面
A1-彩色-双面
这样的行为,相比较过滤之前,并没有减轻用例数量和成本。但是这样是没有办法的,我们过滤的目的要搞清楚,不是为了减轻用例数,而是为了去掉那些不可能的用例组合。
说到这里,能认真看完的同学,一定会对这个逻辑思维感到震惊,没错,这个算法实现起来也不是很简单。下一节我会尝试实现这个安全过滤算法。