测试驱动的开发类似于按合同设计,其中您有前置条件,不变式和后置条件。
该术语是由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)并行地设计和记录每个程序块的测试方法。