Oracle问题,因为它与测试有关

时间:2011-01-25 02:33:45

标签: testing math logic

我正在研究我的软件测试理论,并遇到了一个叫做Oracle问题的有趣现象。我已经找到了问题所暗示的点点滴滴,但尚未将它们拼凑在一起。

问题的一个相当黑暗的版本有点像这样: 一个岛上有100名居民。每个居民都有绿眼睛或蓝眼睛。没有一个居民被允许彼此交流,让他们知道他们的眼睛是什么颜色,也没有任何反射表面,居民可以看到他们自己的眼睛颜色。基本上每个人都知道每个人的眼睛是什么颜色,但没有人知道他们自己的眼睛是什么颜色。岛上的规则是,如果你发现你有蓝眼睛,你必须自杀。该岛的人口保持稳定,直到有一天甲骨文到来,并告诉居民岛上的一些人有蓝眼睛。

问题是人们会怎么样?

我找到的答案是,100天后岛上最后一个人自杀。

我不知道这有多大意义,我希望有人可以帮助将这个问题与软件测试联系起来。感谢您的到来,我期待着一些有趣的回应。

1 个答案:

答案 0 :(得分:4)

首先,要了解这个难题,请添加一个细节:如果您发现自己有蓝眼睛,则会在午夜时分自杀。没有人知道你要到早上去世。现在尝试使用更少人的问题的几个版本:

  1. 只有一个居民。神谕到达并说“至少有一个蓝眼睛的居民”。结果应该是显而易见的。
  2. 有两个居民。再一次,神谕说“至少有一个蓝眼睛的居民。试着找出可能发生的事情。是否有可能第一天晚上他们都没死?
  3. 现在尝试三个居民,同样来自神谕的声明。
  4. 现在三岁,但神谕说“至少有两个蓝眼睛的居民”。

等等。你可能已经注意到oracle必须有一个有趣的属性才能使它工作:它是真实的,并且每个人都知道这个属性。这意味着每个人都知道每个人都知道oracle是真实的,每个人都知道,等等。死亡的事实也是常识:如果Sam在夜里去世,每个人都知道他自杀了,每个人都知道其他人都知道,等等。

那么这与软件测试有什么关系呢?我不认为这是一个非常好的类比,但我的想法是你可以针对某些标准的某些东西测试一个软件,看看它是否给出了正确的答案。标准可能是另一个软件,或前一次运行中的相同软件,或理论结果,或其他。但我们怎么知道标准是正确的呢?如果一个标准是正确的,并且每个人都知道是正确的,并且每个人都知道每个人都知道是正确的,那么这将是非常好的。等等。

修改:
P.S。:可能存在一些混淆,因为在计算机科学中,术语“oracle”也指一种理论设备,可以解决图灵机无法解决的问题,例如停机问题。