我想向我的初级Java程序员介绍测试驱动开发规程,他们之前从未听过这个术语。我打算在上半场举办一场讲解TDD基础知识和好处的会议,然后在下半场进行实际操作。
那么什么可以是一个好的,基于Java的,赋予TDD新手的任务?人们失去兴趣并不是那么难以让他们失去信心。我在网上看到了一些,但也想考虑你的建议。非常感谢任何指针/链接。
答案 0 :(得分:4)
这是一个非平凡的TDD教程,主题是编写俄罗斯方块。完成它可能需要10个多小时。大约30个首次测试已经预先编写,之后提供了一些关于下一步测试的提示。
答案 1 :(得分:3)
我喜欢在演示TDD时使用的一个示例是密码强度验证器:编写一些代码来检查字符串是否是足够强的密码。我喜欢它,因为:
答案 2 :(得分:2)
我喜欢Range for this - 只是一系列整数。 Write包括(int),重叠(Range)和任何类似的方法;你可以弄清楚它是全开,全开或半开(大多数是最好的答案),然后让测试把你带到那里。
同样好的是Natural Sort。实用,实用和测试驱动可以带来意想不到的解决方案。
答案 3 :(得分:1)
我喜欢将引擎写入John Conway's Game of Life。
非常简单的规则。它们可以写成一个(略微凌乱)的课程,但真正的乐趣是当你开始考虑课堂的责任,然后嘲笑那些责任 - 例如,邻里计算器,规则等。
您还可以通过一些额外的规则来推出更好的设计:
如果你以图形方式工作,你可以获得更多乐趣。开发人员可以使用测试或场景来讨论边缘情况(各种故事之间的交互变得复杂):
这就是Corey Haines在他的Code Retreats上总是使用的。我用它来教授TDD /单元级BDD多年。你可以很快看到一些进展,然后随着它的发展变得越来越棘手。
答案 4 :(得分:1)
我在多个课程中使用了incremental search,效果很好。人们通过手机了解这种情况;地址簿通常以这种方式工作(您键入名称的开头,它显示以这些字母开头的所有名称)。
一个优点是这个问题可能真的是递增的。当你已经在做的时候,你会了解细节。您可以添加额外内容,例如:
但是,如果你在课堂上这样做,我建议你有大约3个小时的时间。这不是一个简单的例子。它会对列表进行大量处理,因此请确保您的学生熟悉它们,包括Arrays.asList,最好。
答案 5 :(得分:0)
Tic-tac-toe游戏。让玩家先行,计算机先行。
您可以从始终位于中间的计算机开始,但是您需要进行测试以确保计算机不会选择已经采用的位置。然后,您可以慢慢进行测试,以确保计算机始终覆盖其漏洞。
答案 6 :(得分:0)
(不是答案,只是评论。请忽略。)
测试不应该是编程的中心。特别是对于年轻学生。只要我们能够,我们就应该首先关注实施的逻辑和推理。我们应该练习我们的技能,让我们知道代码是正确的,只因为我们写了它。
这是一个不可能的目标吗?很多人实际上可以非常接近它。但即使对一个人来说太难以接近,他也应该至少在他是学生的时候以这种方式练习。它不会受伤。
在TDD中,它似乎鼓励学生做足够好的工作来通过考试。你真的不必仔细考虑你的算法;只需调整它直到它通过测试,这很容易。
一切都很糟糕。
我不是说测试并不重要。但它不应该是正确性的 1st 防线。
在另一个相关主题中,有些人认为TDD对设计有好处:如果代码很容易测试,那很可能是一个好的设计。这也是非常令人费解的 - 什么时候不能直接关注好的设计?