什么是演示TDD的好示例类?

时间:2009-04-24 19:12:14

标签: tdd

我需要在测试驱动开发上做一个简短的演示(2-4小时),并且需要提出一个我可以使用TDD方法构建的小类。该课程必须相对较小,但“出售”TDD的概念。

如果有人读过James Newkirk的书,即Microsoft.Net中的测试驱动开发,那么Stack的例子就是完美的。它是一个小类,有一个可管理的测试/要求列表,创建过程销售TDD(恕我直言)。

我不想使用Stack示例或类似的数据结构(队列,列表等)来担心影响Newkirk的工作。

所以,我正在为样本课寻找一些好主意。

感谢。

14 个答案:

答案 0 :(得分:25)

如何使用1st section of Kent Beck's Money example。它开始非常简单但是当你到达两种不同的货币时,TDD突然向你展示了前期设计的谬误,或YAGNI(你不需要它)。

另一个很好的例子是鲍勃叔叔bowling score TDD example。我认为这是一个很好的例子,说明TDD叙述如何通过前期设计将您带入一个明确无法接近的干净解决方案。

为了使它成为一个非常令人兴奋的演示文稿,您可以挑战观众,使用他们认为合适的任何方法来设计这两个场景。然后,您将展示设计它们的TDD方式。

对于我来说,TDD真正的WTF时刻是当Beck删除Money的两个子类时,测试工作正常。这不是一个微不足道的行动;该男子删除了两个班!做这样的事情的信心只能通过两种手段找到。

1)在代码库中收集所有高级玩家并运行场景,然后进行广泛的跟进以确认其有效

2)TDD

= d

答案 1 :(得分:8)

如果你有时间,我会选择一个带有某种外部依赖关系的例子,它将在测试中被抽象化。数据库,调用GUI,调用远程系统等等。

原因是TDD的一个块是示例似乎太自包含了。 “当然,当一切都是一个独立的单元,你可以进行单元测试,但是当我有15个系统进行集成时,重点是什么?”那种事。

我还至少会在最后展示一个例子(请参阅Michael Feather的书“如何有效地使用遗留代码进行操作”)迁移现有类以将其置于TDD之下。不要以此为例,但很可能是你的观众会考虑如何迁移他们当天早上写的课程,没有理由让那个溃烂的人变得“不可理喻”。

答案 2 :(得分:7)

TDD problems有一系列问题,从简单到不简单。

有些人从没有解决方案开始就有一系列测试。

答案 3 :(得分:3)

如果你有一本书中的完美例子,那么你应该使用它来推广这本书。没有作者会反对。

除此之外,几年前我参加了TDD演示,其中的示例是一个简单的计算器,它的工作非常精彩。

答案 4 :(得分:3)

我喜欢三个,大致递增难度:

  • 范围(整数;实现 isEmpty(),contains(),intersects(), 长度())
  • Natural Sort
  • Snake

如果我有半个小时,我会做范围; 90分钟,可能是自然排序;更多:Snake。但是,取决于观众。

答案 5 :(得分:2)

我会尝试从一个知名域名中找到一些小东西。我最近在ASPNET.MVC上发表了关于BDD / TDD的演讲。这包括一个控制器,一个动作和一个视图模型。这也让我有机会介绍一个依赖容器和一个模拟框架。

答案 6 :(得分:1)

一个简单的数学类,加法,减法,乘法等等?

答案 7 :(得分:1)

TDD / Extreme / Agile社区的另一个经典例子是保龄球游戏示例;我似乎记得它已经在Beck和Martin中使用,并且在xprogramming.com上多次用于TDD内不同技术的示例和探索。

答案 8 :(得分:1)

走出困境,接受观众的要求。 :)

答案 9 :(得分:1)

如果目标是销售TDD,您还希望显示大型测试基础的小型重构。很容易让它与小样本一起使用,大多数开发人员现在购买它。关于可伸缩性存在更多疑问。一个高级主题将是如何处理大量遗留(无单元测试)代码。

一个简单的纸牌游戏会很好,特别是因为你可以提供一些结果的可视化表示

我假设您将使用编码道场作为演示形式,不是吗?没有花哨的powerpoint。如果公众是非程序员,请使用excel示例

答案 10 :(得分:1)

敏捷开发的基本技能 - Ka Iok Tong。这本书是关于敏捷的,但包含几个关于测试特别是TDD的章节。作者通过编码从需求中解释了TDD,并记下了他对如何解决TDD问题的思考。你可能会发现这本书here。要更新有关概念和现代工具的更多信息,请访问here

答案 11 :(得分:0)

我建议你自己买一本来自Kent Beck的书Test driven design by example

这本书几乎完全侧重于通过TDD构建一个类。

答案 12 :(得分:0)

罗马数字。计算源代码的非注释行。河内的塔。那里有很多想法。

答案 13 :(得分:0)

如果目标受众在TDD中天真,那么我建议使用以下示例。它确实让您对TDD概念和实现有了很好的理解。

  1. Bank Account

  2. Bowling Game