什么是展示TDD的好样本类?

47
我需要做一个关于测试驱动开发的简短演讲(2-4小时),并需要用TDD方法构建一个小型类。这个类必须相对较小,但是要“卖掉”TDD的概念。
如果有人读过詹姆斯·纽科克的书,《Test-Driven Development for in Microsoft.Net》,那么堆栈示例就很完美了。它是一个小型类,有可管理的测试/需求列表,创建过程能够表现出TDD的价值(在我看来)。
我不想使用Stack示例或类似的数据结构(队列、列表等),因为担心会侵犯Newkirk的作品。
因此,我正在寻找一些好的想法来创建一个样例类。
谢谢。

+1 不知道为什么有人会对此进行负票投票。我肯定认为它与编程有关。 - Lieven Keersmaekers
你是否因为版权/剽窃的原因而担心“侵犯Newkir的作品”? - Andrew Grimm
总有一些粗鄙的开发人员会对测试和文档等事情进行贬低。在我的经验中,有很多人对这两个概念中的一个或两个都感到不满。 - Hardryv
14个回答

26

如何使用Kent Beck的Money示例的第1部分呢?它一开始非常简单,但当你需要加上两种不同的货币时,TDD突然向你展示了前期设计或YAGNI(你不需要它)的错误性。

另一个很好的例子是Uncle Bob的保龄球计分TDD示例。我认为这是一个很好的例子,说明了TDD叙述如何带领你找到一个干净的解决方案,而这个方案可能通过前期设计是无法明确实现的。

为了使演示更加精彩,你可以在一开始挑战观众,让他们使用任何他们认为合适的方法来设计这两种情景。然后你将展示使用TDD的方式来设计它们。

TDD给我的真正惊喜是Beck删除了Money的两个子类,但测试仍然可以通过。这不是一个微不足道的行动;这个人删除了两个类!只有两种方法才能找到这样做的信心:

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

2)TDD

= D


虽然我一直在寻找一个未发布的TDD示例,但很多人都提到了Beck,而你关于金钱示例的说法正是我所需要的。我也为自己从未购买过他的书感到羞愧...<叹气> - SergioL
3
我已经创建了一份Bob保龄球分数TDD示例的演练文稿,你可以在这里找到:https://github.com/santthosh/Bowling,请按照提交记录查看示例如何工作。 - Santthosh

9
如果您有时间,我建议选择一个带有外部依赖的示例,在测试中将其抽象化。可以是数据库、GUI调用、远程系统调用等。
原因是TDD的一个障碍是示例看起来太独立了。“当一切都是独立单元时,你可以进行单元测试,但当我需要集成15个系统时,这有什么意义?”之类的事情。
最后,我至少会展示一个示例(可以查看Michael Feather的书《与遗留代码高效工作》),演示如何将现有类迁移到TDD下。不要过多地强调这个示例,但很可能您的受众会考虑如何迁移他们早上编写的类,没有理由让这种想法成为“不可言说的”。

8

TDD问题列出了一系列问题,从简单到较为复杂。

有些问题需要从无解开始列出测试列表。


不错的网站!但是问题并没有按照它们的复杂程度排序。 - Ali Ihsan Elmas

3
如果你从书中找到了一个完美的例子,那么你应该使用它,并推广这本书。没有作者会反对这样做。
除此之外,我几年前参加了一场TDD演示,其中的例子是一个简单的计算器,效果非常好。

3

以下是三个我喜欢的IT技术问题,按难度递增排序:

  • 范围(整数范围;实现isEmpty()、contains()、intersects()和length()函数)
  • 自然排序
  • 贪吃蛇

如果我有半小时时间,我会做范围;90分钟,可能是自然排序;更多时间:贪吃蛇。不过这取决于受众。


2

我会尝试从一个知名领域中找到一些小的东西。最近我做了一个关于基于ASPNET.MVC的BDD/TDD的演示。其中包括一个控制器、一个操作和一个视图模型。这也给了我介绍依赖容器和模拟框架的机会。


1

敏捷开发的基本技能- Ka Iok Tong。这本书是关于敏捷开发,但包含了几个关于测试特别是TDD的章节。作者通过从需求编码来解释TDD,并记录下他在TDD中解决问题的思路。你可以在这里找到这本书。要了解更多关于概念和现代工具的内容,请访问这里


1

怎么样,来一个简单的数学类,包括加法、减法、乘法等等?


5
有些新接触测试驱动开发(TDD)的人认为它在现实世界中行不通,因为现实世界比成功地完成数学运算的例子更加复杂。 - S.Lott

1

来自TDD/极限编程/敏捷社区的另一个经典例子是保龄球游戏示例;我记得它曾在Beck和Martin的书中使用过,也多次在xprogramming.com上用于TDD中不同技术的示例和探索。


1

冒险一试,听取观众的要求。 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接