我需要在测试驱动开发上做一个简短的演示(2-4小时),并且需要提出一个我可以使用TDD方法构建的小类。该课程必须相对较小,但“出售”TDD的概念。
如果有人读过James Newkirk的书,即Microsoft.Net中的测试驱动开发,那么Stack的例子就是完美的。它是一个小类,有一个可管理的测试/要求列表,创建过程销售TDD(恕我直言)。
我不想使用Stack示例或类似的数据结构(队列,列表等)来担心影响Newkirk的工作。
所以,我正在为样本课寻找一些好主意。
感谢。
答案 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)
我喜欢三个,大致递增难度:
如果我有半个小时,我会做范围; 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概念和实现有了很好的理解。