测试的Oracle problem

Oracle Problem

情境:有一个岛屿,上面有100个蓝眼睛的人。没有人知道他们自己的眼睛颜色,这个岛屿上没有反射面。每个人都知道以下规则并遵守它们:你不能谈论眼睛的颜色,如果你推断出自己的眼睛颜色是蓝色,必须在当晚午夜自杀。那会很糟糕,所以不要讨论它。

没有人是色盲。他们已经在一起生活多年了,因此每个人都熟悉其他人的眼睛颜色。每个人都是一台惊人的完美逻辑推理机器。没有人会以任何方式交流眼睛的颜色。每个人每天至少看到其他人一次,因为他们都在同一个工厂制造小部件。他们希望有一天他们能垄断国际小部件市场。但是有两个障碍:他们完全孤立在这个荒岛上,他们可能很快就会自杀。

有一天,一位预言家(Oracle)来到岛上并宣布:“这个岛屿上有蓝眼睛的人!”(应理解为“至少有一个人是蓝眼睛”)每个人都对他违反规则感到愤怒,于是他们用光子射线枪将他击毙。他现在消失了。他的眼睛颜色对这个问题的答案没有影响。

提示:他并没有说任何大家不知道的事情。同时没有任何人与其他人有区别。

为了解决这个问题,首先提出一个相同的问题,但是有一个岛上有2个蓝眼睛的人和98个绿眼睛的人,且规则相同。

证明:递归法证明,从2个人开始。

证明过程

  1. n=2
    有两个蓝眼睛的人和98个其它颜色眼睛的人。那么这两个蓝眼睛的每个人都不知道自己的眼睛的颜色。因此,每个人都会想,“要么就是他是唯一的蓝眼睛的人,或者我也长着蓝眼睛。如果我没有蓝眼睛,他们会在今晚杀了我。”(根据上面的推理)。因此,当他们看到对方还活着的时候,他们会意识到,“哦,天啊”,他们会想,“我一定也长着蓝眼睛。因此,我必须在今晚杀了自己。”请注意这个思维过程是这两个蓝眼睛的人特有的——其它98个人看到的是两个蓝眼睛的人而不是一个。
  2. n=3
    如果有3个蓝眼睛的人,这3个人都会想,“如果我没有蓝眼睛,那么只有两个蓝眼睛的人,在这种情况下他们会杀了自己”(根据上面关于两个蓝眼睛的人的推理)。由于他们没有自杀,他们会意识到第三天是他们的死期。
  3. n=任何正整数
    如果有n个蓝眼睛的人,这n个人都会想,“如果我没有蓝眼睛,我希望真的没有,那么只有(n-1)个蓝眼睛的人,在这种情况下他们会在第(n-1)天杀了自己。”但是他们没有自杀,所以到了第n天,所有n个蓝眼睛的人都会自杀,死亡几乎是瞬间发生的。

需求和测试
测试里面的oracle problem:必须充分识别系统中的递归场景,或者代码中的递归逻辑,并且针对其进行充分测试,以区分期望的正确行为和潜在的不正确行为,而这并不容易,并被称为“测试oracle问题”。
100个自杀的人恐怕不是预言者所期望的;你需要识别说出那句话导致的潜在的不正确行为。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值