我们知道软件测试对测试人员的逻辑思维要求比较高,而且笔试时经常会出一些逻辑思维方面的问题,今天我们来看一个问题。
题目是这样的:八瓶酒一瓶有毒,用人测试。每次测试结果8小时后才会得出,而你只有8个小时的时间。问最少需要____人测试?
遇到这样的问题我们应该怎么处理呢?看题目感觉比较抽象,我们可以对此进行转化为条件组合覆盖测试方法。首先可以对八瓶酒进行编号:a,b,c,d,e,f,g,h;有毒的酒可以当成一个bug;
测试结果8小时后才会得出,而你只有8个小时的时间。对于这个条件我们应该转换一下思路:一个人其实可以同时喝多瓶酒,所以可以将每个人喝的酒看成一个集合;需要多少人,可以看成最少测试几个集合的组合可以完全覆盖a~h。
我们再想一下,这个题目已经告诉我们了,有一个bug,所以我们可以只要覆盖a~g,7个字母。
所以这个题目可以转化为:最少设计多少集合组合测试能够完全覆盖a~h 8个字母,我们可以假设集合顺序从a到h,最少集合为n个。
所以组合条件可以是:集合1,集合2,集合3....,集合n;集合1+集合2,集合2+集合3,集合3+集合n....,集合n+1;集合1+集合2+集合3,....
最终演变为n+n+n+1=n(n-1)+1,如果要覆盖完全a~g 7个字母,必须是n(n-1)+1>=7,计算得到最小正整数n=3。这个也是此题目的答案,最少需要3个人测试。每个人喝3瓶酒,有好多组合,但集合必须满足集合组合之间有相同的酒,以下给出一个组合:
分析:如果3人都出现中毒,则a酒有毒;如果3人都没中毒,则h酒有毒;
如果第一人中毒,则d酒有毒;如果第二人中毒,则f酒有毒;如果第三人中毒,则g酒有毒;
如果第一,二人中毒,第三人没中毒,则b酒有毒;如果第一,三人中毒,第二人没中毒,则c酒有毒;如果第二,三人有问题,第一人没问题,则e酒有毒。
总结:遇到这种问题,直接通过公式n(n-1)+1>=酒数量-1计算出n的最小正整数,就是需要的最少人数。每个集合的数量=酒数量-1-n,而且遇到类似问题,可以通过这种条件组合思路去解决问题。
如果此题目换一个问法:八瓶酒,大量检测表明,有可能有一瓶酒有问题,为了检测是否有一瓶酒有毒,用人测试。每次测试结果8小时后才会得出,而你只有8个小时的时间。问最少需要____人测试?