艾伦·佩里斯(Alan Perlis)在编写无错误的程序的方式上意味着什么? [关闭

softwareengineering.stackexchange https://softwareengineering.stackexchange.com/questions/9605

  •  16-10-2019
  •  | 
  •  

有报价 艾伦·佩里斯(Alan J. Perlis) 说的是:

编写无错误的程序有两种方法;只有第三个作品。

我最近听到了我的朋友的报价,无法理解其背后的更深层次的含义。

佩里斯在这里谈论什么?

有帮助吗?

解决方案

这意味着确实有 无错误的程序。关于避免错误本身错误的方法的深刻引用是模仿。

其他提示

没有第三种方式。

没有办法编写无错误的程序

我会再说一句话...

一个奇怪的游戏。唯一的获胜举动不是玩。

;-)

正如许多其他答案已经指出的那样, 没有办法编写无错误的程序.

但是我想指出的是报价的潜在元素质。从本质上讲,这是一个范围错误。在第一个声明中,他定义了只有两个可能性或元素的宇宙或“列表”。然而,在第二个声明中,他提到了第三名。哪个荒谬!甚至是非法的!给定两个元素边界的第三个元素本身是错误。

真正的深刻之处在于该报价能够证明其所指的本质。

这意味着所有非平凡的程序都会有错误。这只是一种有趣的方式,说没有办法编写无错误的程序。

可以编写无错误的程序,甚至是不平凡的程序,甚至证明它们是正确的。例如,考虑到完成此操作的语言,例如Coq,Epigram或Agda。

停止问题 指出不可能做到这一点 一般计划.

这让我想起了我看到的一件书呆子衬衫:世界上有10种类型的人。那些认识二进制的人和那些不认识的人。

这也可能是一个事实,有时列表为0索引。 $ var = array('first','第二','第三');您可以这样访问此列表:$ var [0] ='first'$ var [1] ='second'$ var [2] ='第三'

因此,字面的数组索引2点为“第三”索引。

换句话说,这已经解释了,但不像我认为的那样清楚。这只是意味着您将尝试这两种方式,它们会有错误,最后您将修复错误并具有无错误的程序。与另一句话进行比较:

在程序中发生错误的唯一方法是被作者放在那里。没有其他机制。程序无法通过与其他错误程序坐在一起获取错误。 - 哈兰米尔斯

(或者,您可以阅读这篇文章,就像皮埃尔所说的那样(我认为这是一种伸展)。(第三种方法,在域中不存在,有效。)就像我说的那样,这是AA的伸展,但确实如此。

这是我父亲用来告诉我借口时告诉我的引用。俗话往往会像:“一个故事有3个方面。他们的一面,您的身边和正确/正确/正确的一面”。

将其与开发(以及由教授成为软件测试人员)的背景,我要说的是,有很多方法可以编码某些内容,因此可以使用“编码有3个方面。您的代码,他们的代码和代码和重构代码。”

我认为这是因为程序员/开发人员一旦产品变得稳定,往往会重构,这大多为时已晚,但是在大多数情况下,重构都做了改善您和Buddy首先做得不好的事情。

希望这可以帮助。

从技术上讲,我认为您可以编写一个无错误的非平凡程序,但是由于停止问题,因此不可能证明它是没有错误的。因此,必须假设所有程序都有错误,因为不可能证明其他程序。

http://en.wikipedia.org/wiki/halting_problem

更新:您可以证明一种特定的算法将返回正确的答案,但这与证明完全正确的情况并不相同。http://en.wikipedia.org/wiki/correctness_(computer_science)

但是,我的观点是,这句话是指一个事实,即一个人必须假设程序总是有错误,并试图解释为什么是这样。http://en.wikipedia.org/wiki/software_bug#bug_management

作为其他见解,“两种方式”可能是对此引用的参考 托尼·霍尔(Tony Hoare):

构建软件设计的方法有两种:一种方法是使它变得如此简单,以至于显然没有缺陷,另一种方法是使其变得如此复杂,没有明显的缺陷。第一种方法要困难得多。它要求具有相同的技能,奉献,洞察力甚至灵感,与发现自然现象的简单物理定律的发现。

对此进行冥想,您会看到他在说同样的话:如果您的软件是不平淡的,它有错误(但使它变得足够复杂,它们不会很复杂 明显的 错误)。

许可以下: CC-BY-SA归因
scroll top