使用TDD的复杂代码的好例子[关闭]


37

在大型,现实生活中,复杂的项目中使用TDD的一个很好的例子是什么?到目前为止,我所看到的所有示例都是出于书籍或纸张目的的玩具项目...

您能命名一个使用TDD的开源项目吗?最好使用C ++,但我可以阅读Java和C#或其他类似语言。


很难回答你的问题。有许多利用自动化测试的项目,但是很难说它们遵循TDD哲学的程度,因为它们可能不会推广它。c ++,c#和java kinda都起源于gui应用程序,它们很难测试。通常,您会在框架或库中找到更多测试。
iMacUwhAK 2010年

我非常想找到一个好的答案的部分原因是,我目前正在开发具有C ++引擎和Java GUI的桌面应用程序……
Xavier Nodet 2010年

Answers:


19
  • JUnit是100%测试驱动开发的。实际上,它是在JUnit中 100%测试驱动开发的,正如肯特·贝克(Kent Beck)所说的几次,这是一次真正的弯腰练习。
  • 相信 Sun的ZFS文件系统是经过测试驱动开发的。
  • 用于Ioke编程语言(JVM)的ikj解释器,用于Ioke编程语言(CLI)的ikc解释器,整个Ioke核心和标准库,实际上,该语言本身是100%测试驱动(实际上是行为驱动)开发的)。

DUnit-Delphi的测试框架,随附了针对DUnit本身的完整测试套件。我同意肯特的观点,这有点令人费解。;-)
Nick Hodges 2010年

14

SQLite。他们所有的代码都经过非常非常严格的测试

从3.7.14版本开始,SQLite库包含大约81.3 KSLOC的C代码。(KSLOC表示成千上万的“源代码行”,或换句话说,不含空行和注释的代码行。)相比之下,该项目的测试代码和测试脚本的数量是1124倍-91421.1 KSLOC。


1
哇,他们有很多测试:|
卡·马蒂斯

8
经过严格测试的不一定意味着它是以测试驱动(TDD)的方式开发的。是吗 (我没有阅读整个页面,但在页面内搜索中既没有看到“ TDD”也没有看到“驱动”,所以我不知道该答案。)
lindes 2010年

1
@lindes:他们似乎并不严格遵循TDD,但是例如对于每个错误报告,他们首先进行测试。此外,他们为每个提交运行测试。所以至少部分是TDD。
liori 2010年

9

如果我记得FitNesse是用TDD编写的,而该项目的主要贡献者是Bob Martin叔叔,那么,这可能是很干净的代码


我只是看看它,它真正干净的代码。
罗伯特·哈维

3

根据我与Microsoft P&P团队的讨论,Enterprise Library是用TDD编写的。


我关闭了Enterprise Library 5.0,并查看了源代码。它确实有大量的测试集合,但是测试项目中有很多测试装置,调用处理程序和其他复杂对象。它看起来几乎就像是一个独立的应用程序。当我欣赏作品时,我看不到它如何适合TDD的红绿重构世界观。
罗伯特·哈维

@Robert-我只能告诉你他们告诉我的内容...他们在编写时使用了TDD。
Walter 2010年

6
@Robert-测试套件拥有自己的生命并不少见。DRY适用于您的应用程序和测试。在TDD中,您只做以下4种事情之一:编写测试,编写代码,重构测试,重构代码。如果您以红绿重构模式执行所有这些操作,那么您正在执行TDD。
Jeff Knecht,2010年

1
@Jeff:感谢您澄清这一点。我认为TDD的解释方式(用简化论,机械术语)与实际场景中实际使用的方式之间存在一些差异。
罗伯特·哈维

3

我不能说出任何使用TDD的开源项目,但是我可以告诉你,我已经在使用TDD的真实项目中工作了……这是一个救命稻草!


1
您或其他人是否分享了这些经验?听起来像一个很好的战争故事。

我对此发表了一些推文,并使用轶事来说明其他帖子中的要点。可以说测试优先的设计和自动化测试套件使我的生活变得如此轻松,我不会回去以任何其他方式进行开发。示例:一个测试用例中的细微错误,导致无法找到手动测试(因为手动测试人员在每次操作后都不会检查数据库的完整性);当天多次运行测试用例以弄清楚,相当于节省了40个小时以上的手动测试时间。最近我睡觉时进行了1000多次代码更改并运行了测试。TDD岩石。
史蒂文·A·洛

我相信你。我只喜欢听这些故事。您可能会发现QuickCheck有趣-en.wikipedia.org/wiki/QuickCheck-我看到了一个演示,该演示在15年的生产代码中发现了多线程错误。

“因为手动测试人员不会在每次操作后检查数据库的完整性”-约束和精心设计的数据库架构会更加困难,并且将节省您所有花时间进行测试的麻烦,因为您会立即发现bug。 。
gbjbaanb

@gbjbaanb:在这种情况下,“检查”比简单的模式完整性要复杂得多,这就是为什么要进行自动测试的原因
Steven A. Lowe

0

我的第一个完全在TDD中完成的项目是2002年的一个开源项目。您仍然可以在这里找到它:

http://sourceforge.net/projects/camelos/

现在在工作,我主要在TDD工作,但不是我们团队中的每个人都在工作,只要在一天结束时编写测试,就可以了。

我们还使用TDD作为核心部分编写了完整的gwt-gae应用程序。 http://netnumero.appengine.com/company/mycompany

我无法发布该代码,但我正在使用TDD for GWT完成一个完整的示例项目,即在UI中也使用TDD。

我将在圣诞节假期结束后尽快将其发布在这里 https://github.com/ubertob/gwt-tdd-example

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.