今天上午满屋子找了一个小时也找不到眼镜。这种不显眼的东西,如果戴上眼镜到处望或许能找到,但丢的就是眼镜啊……

这么找不是办法,于是我定下来进行推理。简单分析注意到,眼镜的失踪,分为今早用了眼镜和今早没用眼镜两种情况。如果今早用了,应该就放在我上午的活动范围内;如果今早没用,那就应该在昨晚放的位置。这好像是一句废话,然而只要分别从这两个方向出发,就能得到深入的结论。

回忆一下,今早没用的可能性更大,而没记错的话昨晚是放在床头柜上,但床头柜上并没有。从这个方向推理:经过一夜的时间,眼镜有可能由于偶然原因而偏离了原来的位置,而且此位置不易发现。至于“今早用了”这一情况,因为经历时间较短,偏离原位置的可能性不大,应该就在我活动过的位置。搜寻范围因此大大缩小,并且首要目标是床头柜一带。

事实上,几秒之后,我就在床头柜边上的缝隙中找到了眼镜,估计是被碰得掉落进去了。

可从软件测试的角度来看这个问题。单元测试只需测试一些单纯的条件,只要求代码覆盖度;而更大范围的软件测试则要测试和覆盖各种复合条件。看起来像是要覆盖N*N,乃至N*N*N...种情况,根本测不完,但是常常经过分析能发现,有的条件组合是不可能出现的或者出现的概率很低,这就大大缩小了测试范围。——如果我今早用了眼镜,那么眼镜不可能出现在我的活动范围外,而且偏离放置位置的概率较低如果我今早没用眼镜,那么眼镜肯定在我昨晚放置的位置,很可能是在床头柜且有可能偏离了放置位置,到了一个不易发现的位置(所以这么久找不到),但不大可能偏离太远,于是几秒后就在床头柜边上的缝隙找到了。

其实这个原理已经被软件测试理论界反复研究过了,本文只是提供脑洞。


sorra
841 声望78 粉丝