什么是一个很好的示例类来演示TDD?
我需要在testing驱动开发(2-4小时)上做一个简短的介绍,并且需要提出一个我可以使用TDD方法构build的小课程。 class级必须相对较小,但“推销”TDD的概念。
如果有人阅读了James Newkirk的书,在Microsoft.Net中的testing驱动开发,Stack示例是完美的。 这是一个小class,有一个易于pipe理的testing/要求列表,创build过程销售TDD(恕我直言)。
我不希望使用Stack示例或类似的数据结构(队列,列表等)来恐吓Newkirk的工作。
所以,我正在寻找一些样本类的好主意。
谢谢。
如何使用Kent Beck的Money例子的第一部分 。 它开始非常简单,但是当你到达两种不同的货币时,TDD突然向你展示了前端devise的缺陷,或YAGNI(你不需要它)。
另一个很好的例子是鲍勃叔叔的保龄球比分TDD的例子 。 我认为这是一个很好的例子,说明一个TDD的叙述如何为您提供一个清晰的解决scheme,而这个解决scheme通过一个前沿的devise是明确无法接近的。
为了使它成为一个非常令人兴奋的演示文稿,您可以提前向观众挑战,使用他们认为合适的方法devise这两个场景。 然后你会显示TDD的devise方式。
对于TDD来说,真正的WTF时刻是当Beck把Money的两个子类去掉,并且testing工作的时候。 这不是一个微不足道的行动; 该男子删除了两个class! 做这种事情的信心只能通过两种方式find。
1)将所有的高级参与者聚集在一个代码库中并贯穿于各种情景之中,然后进行广泛的跟踪以确认其工作
2)TDD
= d
如果你有时间的话,我会select一个在testing中被抽象出来的外部依赖的例子。 数据库,调用GUI,调用远程系统等
原因是TDD的一个障碍就是这个例子看起来太自我了。 “当然,当所有东西都是独立的单元时,你可以进行unit testing,但是当我有15个系统集成时,有什么意义呢? 之类的事情。
我最后还会举一个例子来说明如何迁移一个现有的课程,以便将其纳入TDD之中(请看迈克尔·菲瑟(Michael Feather)的“有效使用遗产代码”一书)。 不要以此为例,但是你的观众很可能会考虑如何迁移他们上午写的课程,没有任何理由让这个“烂摊子”变得“不可知”。
TDD问题有一系列问题,从简单到简单。
有些testing列表还没有解决scheme。
如果你有一本书的完美例子,那么你应该使用它并推广这本书。 没有作者会反对。
除此之外,我几年前参加了一个TDD演示,其中的例子是一个简单的计算器,它的工作很好。
我喜欢三个,大体上按照难度顺序排列:
- 范围(整数;实现isEmpty(),contains(),intersects(),length())
- 自然sorting
- 蛇
如果我有半个小时,我会做Range; 90分钟,可能是自然sorting; 更多:蛇。 虽然,取决于观众。
我会试着从一个知名的领域find一些小东西。 我最近介绍了基于ASPNET.MVC的BDD / TDD。 包括一个控制器,一个动作和一个视图模型。 这也让我有机会介绍一个依赖容器和一个模拟框架。
一个简单的math课,加法,减法,乘法等等呢?
来自TDD / Extreme / Agile社区的另一个典型例子是保龄球游戏的例子。 我似乎记得,它已经在Beck和Martin中使用过,并且在xprogramming.com上多次用于TDD中的不同技术的探索。
走出去,听取观众的意见。 🙂
如果目标是销售TDD,那么您也想要展示一个大型testing基地的小型重构。 很容易使它与小样本工作,大多数开发商现在购买。 对可伸缩性有更多疑问。 一个高级的话题就是如何处理大量遗留代码(没有unit testing)。
一个简单的纸牌游戏会很好,特别是你可以提供一些结果的视觉表示
而且我假设你打算使用编码dojo作为演示文稿forms,不是吗? 没有花哨的幻灯片。 如果公众是非程序员,请使用excel示例
敏捷开发的基本技能 – 郭Tong。 这本书是关于敏捷,但包含几个章节关于testing特别是TDD。 笔者从要求编码说明了TDD,并logging了如何解决TDD中的问题的思路。 你可以在这里find这本书。 要更新关于概念和现代工具,你可以去这里
我build议你给自己买一本由Kent Beck撰写的“ Test driven design by example Test ”一书。
这本书几乎完全集中在通过TDD构build一个类。
罗马数字。 计算源代码的非注释行。 河内塔。 那里有很多想法。
如果TDD的目标用户是天真的,那么我会推荐使用下面的例子。 它的确让你对TDD概念和实现有了很好的理解。
-
银行账户
-
保龄球游戏