【问题标题】:What is a good sample class to demonstrate TDD?什么是演示 TDD 的好示例类?
【发布时间】:2009-04-24 19:12:14
【问题描述】:

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

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

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

所以,我正在为示例类寻找一些好主意。

谢谢。

【问题讨论】:

  • +1 不知道为什么有人会对此投反对票。我绝对认为它与编程有关。
  • 您是否担心因版权/抄袭原因“影响 Newkir 的作品”?
  • 总有一些粗鲁的开发人员会否决测试和文档之类的事情。根据我的经验,有很多人在概念上被其中一个或两个冒犯。

标签: tdd


【解决方案1】:

如何使用1st section of Kent Beck's Money example。一开始很简单,但是当您将两种不同的货币相加时,TDD 突然向您展示了预先设计或 YAGNI 的错误(您将不需要它)。

另一个很好的例子是鲍勃叔叔的bowling score TDD example。我认为这是一个很好的例子,说明 TDD 叙述如何为您带来一个干净的解决方案,而该解决方案通过预先设计明确无法实现。

为了使它成为一个真正令人兴奋的演示,您可以预先要求观众使用他们认为合适的任何方法来设计这两个场景。然后,您将展示设计它们的 TDD 方式。

对我来说,使用 TDD 的真正 WTF 时刻是 Beck 删除了 Money 的两个子类,并且测试成功了。这不是一个小动作;那个人删了两个班!做这样的事情的信心只能通过两种方式找到。

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

2)TDD

=D

【讨论】:

  • 虽然我在寻找一个未发表的 TDD 示例,但很多人提到了 Beck,而您所说的金钱示例正是我正在寻找的。我也很惭愧我从来没有买过他的书……
  • 我确实创建了 Bob 的保龄球得分 TDD 示例的演练,可以在此处找到 github.com/santthosh/Bowling,请通过提交查看示例的工作原理
【解决方案2】:

如果您有时间,我会选择一个具有某种外部依赖关系的示例,该依赖关系将在测试中被抽象出来。数据库、GUI 调用、远程系统调用等。

原因是 TDD 的障碍之一是该示例似乎过于独立。 “当然,当一切都是独立的单元时,你可以进行单元测试,但是当我有 15 个系统要集成时,还有什么意义呢?”那种东西。

我还将在最后展示一个迁移现有类以将其置于 TDD 之下的示例(请参阅 Michael Feather 的《有效使用遗留代码》一书以了解操作方法)。不要以这个为例,但您的听众很可能会考虑如何迁移他们那天早上编写的课程,没有理由让这种恶化成为“不可提及”。

【讨论】:

    【解决方案3】:

    TDD problems 有一个问题列表,从简单到不太简单。

    有些人有一个测试列表,从没有解决方案开始。

    【讨论】:

      【解决方案4】:

      如果您有一本书的完美示例,那么您应该使用它并宣传这本书。没有作者会反对。

      除此之外,几年前我参加了一个 TDD 演示文稿,其中的示例是一个简单的计算器,而且效果很好。

      【讨论】:

        【解决方案5】:

        三个我喜欢,按难度大致递增的顺序:

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

        如果我有半个小时,我会做 Range; 90 分钟,可能是自然排序;更多:蛇。不过,这取决于观众。

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

            来一堂简单的数学课,加法、减法、乘法等等怎么样?

            【讨论】:

            • 不同意——TDD 新手说“它在现实世界中行不通”,在现实世界中,事情比正确计算的示例“更复杂”。
            【解决方案8】:

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

            【讨论】:

              【解决方案9】:

              大胆地接受观众的要求。 :)

              【讨论】:

                【解决方案10】:

                如果目标是销售 TDD,您还希望展示对大型测试库的小型重构。使用小样本很容易让它工作,大多数开发人员现在都接受了。关于可扩展性还有更多的疑问。一个高级主题将是如何处理大量遗留(无单元测试)代码。

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

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

                【讨论】:

                  【解决方案11】:

                  敏捷开发的基本技能 - Ka Iok Tong。这本书是关于敏捷的,但包含一些关于测试尤其是 TDD 的章节。作者从需求编码解释了TDD,也记录了他对如何解决TDD中的问题的想法。你可以找到这本书here。要更新有关概念和现代工具的更多信息,您可以前往here

                  【讨论】:

                    【解决方案12】:

                    我建议您自己购买 Kent Beck 的《Test driven design by example》一书。

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

                    【讨论】:

                    • 你说的是 Money 类吗?
                    • 我真的不喜欢第二个例子(xunit)。对于完全不了解 TDD 且不熟悉 xunit 的人来说,这很难理解。
                    【解决方案13】:

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

                    【讨论】:

                      【解决方案14】:

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

                      1. Bank Account

                      2. Bowling Game

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2011-02-21
                        • 2012-08-31
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多