我正在研究我的软件测试理论,并遇到了一个叫做Oracle问题的有趣现象。我已经找到了问题所暗示的点点滴滴,但尚未将它们拼凑在一起。
问题的一个相当黑暗的版本有点像这样: 一个岛上有100名居民。每个居民都有绿眼睛或蓝眼睛。没有一个居民被允许彼此交流,让他们知道他们的眼睛是什么颜色,也没有任何反射表面,居民可以看到他们自己的眼睛颜色。基本上每个人都知道每个人的眼睛是什么颜色,但没有人知道他们自己的眼睛是什么颜色。岛上的规则是,如果你发现你有蓝眼睛,你必须自杀。该岛的人口保持稳定,直到有一天甲骨文到来,并告诉居民岛上的一些人有蓝眼睛。
问题是人们会怎么样?
我找到的答案是,100天后岛上最后一个人自杀。
我不知道这有多大意义,我希望有人可以帮助将这个问题与软件测试联系起来。感谢您的到来,我期待着一些有趣的回应。
答案 0 :(得分:4)
首先,要了解这个难题,请添加一个细节:如果您发现自己有蓝眼睛,则会在午夜时分自杀。没有人知道你要到早上去世。现在尝试使用更少人的问题的几个版本:
等等。你可能已经注意到oracle必须有一个有趣的属性才能使它工作:它是真实的,并且每个人都知道这个属性。这意味着每个人都知道每个人都知道oracle是真实的,每个人都知道,等等。死亡的事实也是常识:如果Sam在夜里去世,每个人都知道他自杀了,每个人都知道其他人都知道,等等。
那么这与软件测试有什么关系呢?我不认为这是一个非常好的类比,但我的想法是你可以针对某些标准的某些东西测试一个软件,看看它是否给出了正确的答案。标准可能是另一个软件,或前一次运行中的相同软件,或理论结果,或其他。但我们怎么知道标准是正确的呢?如果一个标准是正确的,并且每个人都知道是正确的,并且每个人都知道每个人都知道是正确的,那么这将是非常好的。等等。
修改:
P.S。:可能存在一些混淆,因为在计算机科学中,术语“oracle”也指一种理论设备,可以解决图灵机无法解决的问题,例如停机问题。