为初学者分配TDD?

时间:2011-03-16 04:53:26

标签: java tdd

我想向我的初级Java程序员介绍测试驱动开发规程,他们之前从未听过这个术语。我打算在上半场举办一场讲解TDD基础知识和好处的会议,然后在下半场进行实际操作。

那么什么可以是一个好的,基于Java的,赋予TDD新手的任务?人们失去兴趣并不是那么难以让他们失去信心。我在网上看到了一些,但也想考虑你的建议。非常感谢任何指针/链接。

7 个答案:

答案 0 :(得分:4)

这是一个非平凡的TDD教程,主题是编写俄罗斯方块。完成它可能需要10个多小时。大约30个首次测试已经预先编写,之后提供了一些关于下一步测试的提示。

https://github.com/orfjackal/tdd-tetris-tutorial

答案 1 :(得分:3)

我喜欢在演示TDD时使用的一个示例是密码强度验证器:编写一些代码来检查字符串是否是足够强的密码。我喜欢它,因为:

  • 每个人都理解这个问题,而且不是语言特定的
  • 你可以从一个或两个易于测试的规则(不是“密码”,超过8个字符......)开始,以获得TDD节奏的悬念
  • 当您有2个或更多规则时,您很快就会遇到有趣的问题。测试变得困难,导致重新设计/重新分解,将规则与验证器分开,并获得既干净又易于测试的代码。

答案 2 :(得分:2)

我喜欢Range for this - 只是一系列整数。 Write包括(int),重叠(Range)和任何类似的方法;你可以弄清楚它是全开,全开或半开(大多数是最好的答案),然后让测试把你带到那里。

同样好的是Natural Sort。实用,实用和测试驱动可以带来意想不到的解决方案。

答案 3 :(得分:1)

我喜欢将引擎写入John Conway's Game of Life

非常简单的规则。它们可以写成一个(略微凌乱)的课程,但真正的乐趣是当你开始考虑课堂的责任,然后嘲笑那些责任 - 例如,邻里计算器,规则等。

您还可以通过一些额外的规则来推出更好的设计:

  • 网格可以在运行时从有界网格(在没有任何东西可以存活的地方)之间来回切换到无限网格或包裹网格(滑翔机在另一侧返回)。
  • 单元格会根据它们的大小(将设计从值对象移动到实体)来更改颜色(或字符串表示)。
  • 规则可以从Conway改为High Life。

如果你以图形方式工作,你可以获得更多乐趣。开发人员可以使用测试或场景来讨论边缘情况(各种故事之间的交互变得复杂):

  • 单元格根据邻居的数量改变大小
  • 有一个“后退”按钮
  • 有一个操纵杆可以让你在包裹或无限网格中导航
  • 可以(重新)将电路板设置为预定义方案
  • 董事会可以改变规模。

这就是Corey Haines在他的Code Retreats上总是使用的。我用它来教授TDD /单元级BDD多年。你可以很快看到一些进展,然后随着它的发展变得越来越棘手。

答案 4 :(得分:1)

我在多个课程中使用了incremental search,效果很好。人们通过手机了解这种情况;地址簿通常以这种方式工作(您键入名称的开头,它显示以这些字母开头的所有名称)。

一个优点是这个问题可能真的是递增的。当你已经在做的时候,你会了解细节。您可以添加额外内容,例如:

  • 最近使用的行为(搜索次数最多的名称首先出现):这需要增量搜索对象来存储状态
  • 按字母顺序排列
  • 在任何位置考虑信件(例如,搜索“JSm”找到“John Smith”)

但是,如果你在课堂上这样做,我建议你有大约3个小时的时间。这不是一个简单的例子。它会对列表进行大量处理,因此请确保您的学生熟悉它们,包括Arrays.asList,最好。

答案 5 :(得分:0)

Tic-tac-toe游戏。让玩家先行,计算机先行。

您可以从始终位于中间的计算机开始,但是您需要进行测试以确保计算机不会选择已经采用的位置。然后,您可以慢慢进行测试,以确保计算机始终覆盖其漏洞。

答案 6 :(得分:0)

(不是答案,只是评论。请忽略。)

测试不应该是编程的中心。特别是对于年轻学生。只要我们能够,我们就应该首先关注实施的逻辑和推理。我们应该练习我们的技能,让我们知道代码是正确的,只因为我们写了它。

这是一个不可能的目标吗?很多人实际上可以非常接近它。但即使对一个人来说太难以接近,他也应该至少在他是学生的时候以这种方式练习。它不会受伤。

在TDD中,它似乎鼓励学生做足够好的工作来通过考试。你真的不必仔细考虑你的算法;只需调整它直到它通过测试,这很容易。

一切都很糟糕。

我不是说测试并不重要。但它不应该是正确性的 1st 防线。

在另一个相关主题中,有些人认为TDD对设计有好处:如果代码很容易测试,那很可能是一个好的设计。这也是非常令人费解的 - 什么时候不能直接关注好的设计?