关于测试优先编程的第一个公开参考是什么?


11

我正在重读Martin Fowler的《重构》。在第四章建筑测试中,我遇到了以下段落。

实际上,编写测试最有用的时间之一就是开始编程之前。当您需要添加功能时,首先编写测试。这并不像听起来那样落后。通过编写测试,您正在问自己添加功能需要做什么。编写测试还着重于接口而不是实现(总是一件好事)。这也意味着在测试工作时,您有一个明确的编码点。

虽然我现在是测试驱动开发的倡导者,但我记得将近五年前刚读这本书时就没有被介绍过这个概念。

根据Amazon.com的说法,该书最初于1999年7月8日出版。这是第一本关于测试优先编程的参考书吗?


这不是主观的。有关系吗?我不这么认为。如果您有很好的动机重新提出这个问题,请发布在meta.programmers.stackexchange.com上
Maniero

@bigown:我不确定我是否理解。您是说您关闭此问题是因为它不是主观的或非相对的?
埃里克·韦尔瑙

这显然是客观的。
Maniero

2
它也是与编程相关且有趣的,尽管可能有一个正确的答案,但要证明这一点并不容易。还有什么地方呢?ProgrammingHistory.stackexchange?
AShelly

4
我们可以在这里提出客观问题-我们更喜欢主观问题,但是就像Stack Overflow有一些可以生存的主观问题一样,此站点可以有一些可以生存的目标问题。(不过,我不希望在这里看到任何“如何使Perl代码正常工作”的问题)
杰夫·阿特伍德

Answers:


9

测试驱动的开发类似于按合同设计,其中您有前置条件,不变式和后置条件。

该术语是由Bertrand Meyer与其Eiffel编程语言的设计有关的,并于1986年开始在多篇文章中首次描述[Wikipedia]

正式方法至少可以追溯到1983年,并已用于安全关键系统,例如使用B方法的无人驾驶巴黎地铁:

在第一个也是最抽象的版本(称为抽象机)中,设计人员应指定设计目标。[维基百科]

这些可能是肯特·贝克“帮助开拓者……重新发现测试优先编程”的某些方面。

更重要的是:很明显,美国国家航空航天局(Nasa)在1960年代初期的Project Mercury是第一个使用测试驱动的开发和其他敏捷实践的软件项目。我找不到任何早期的文档,但是这里有一份2003年的报告,引用了项目成员的交流:

Mercury项目的运行时间很短(半天),且有时间限制。开发团队对所有更改进行了技术审查,有趣的是,在每次微增量之前,都采用了测试优先开发,计划和编写测试的极限编程实践。

该报告的其余部分也很有趣,接着说:

我们发现最早专注于描述和推荐迭代开发的参考文献是IBM TJ Watson Research的Brian Randell和FW Zurcher于1968年发表的一份报告。

除了自动测试之外,1968年的报告还倡导并行编码和测试(如果不是测试优先的话):

G。每个程序块的详细设计,编码和文档。
H。与步骤(g)并行地设计和记录每个程序块的测试方法。


4

乔恩·本特利(Jon Bently)在《Programming Pearls》(最初于1986年出版)中没有特别提及“测试优先”编程。但是在“编写正确的程序”一章中,他描述了通过首先定义前提条件,不变式和后置条件来编写算法,而在下一章中描述了一种自动化测试框架。

这不是很先测试,但是他肯定在奠定一些基础。

也,

CIO杂志,1993年3月,Bug Busters,露西·朱诺(Lucie Juneau), 第84页

测试用例...甚至可以在编写任何代码之前进行开发。理想情况下,这些情况基于应用程序的需求...如果开发人员在开始编写代码之前接受了基于需求的测试,他们将设计一种可以通过这些测试的产品...”


根据Amazon.com,第二版于1999年10月7日发布。第一版在1986年的某个时候出版。第一版中是否有此参考文献?
埃里克·韦尔瑙

我只读过第二版。前言似乎表明在第一版中只有“编写正确的程序”一章,而自动测试一章则较新。
AShelly 2010年

3

那就是肯特·贝克Kent Beck)在他的《极限编程》(Extreme Programming)中,该书也在1999年出版。

替代文字


根据Amazon.com的说法,该书最初于1999年10月5日出版。这是重构发布之后的将近3个月。根据Amazon.com,我已经对问题进行了编辑,以包括确切的发布日期。我还没有阅读过Kent的书,但是假设它提供了有关测试优先编程的更多信息。
埃里克·韦尔瑙

3
有趣的是,该书的封底说肯特·贝克“帮助了先驱。重新发现了测试优先编程”。他从哪里重新发现的?
AShelly

有趣的发现AShelly!

1
@AShelly:几年前,肯特·贝克(Kent Beck)在RailsConf上作了主题演讲。在其中,他描述了他是如何提出TDD的,并提到了他在60年代的一篇老文章中阅读到的内容。
约尔格W¯¯米塔格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.