10

扩展这个关于我如何学会从问题描述到代码的问题 两个人提到了 TDD。

对于初学者来说,进入 TDD 会更好(并避免将来的坏习惯?)或者对于了解什么是编程语言的阶段来说太复杂了?

4

14 回答 14

9

TDD 意味着比“传统”方法(直到最后才测试它)更简单——因为测试阐明了您对问题的理解。如果您实际上并不清楚问题所在,那么编写测试非常困难。

因此,对于初学者来说,编写测试能让思维朝着正确的方向发展,这是合同行为,而不是实施行为。

于 2008-09-26T03:39:49.057 回答
4

我希望 TDD 在我第一次学习编程时就在身边,并且我在变得如此根深蒂固的“旧方式”之前就已经学会了它,以至于我很难学习 TDD...

于 2008-09-26T03:40:48.837 回答
4

体验 TDD 规则 全部

我还认为,理想情况下,TDD 在学习的早期阶段会非常有帮助。事后看来,我知道它会帮助我以完全不同的方式解决问题。

我感到困惑的是,当一个人在学习时,会吸收很多新概念,以至于很早就开始出现混乱。因此,虽然我确实认为 TDD 会非常有帮助,但我不认为它可以是一个人自己成功学习的东西。

就像生活中的任何其他事情一样,当有人亲自教我们时,我们往往学得最好。向我们展示他们如何以 TDD 方式解决问题比在书本或网络上阅读更多。我的意思是,这不会有什么坏处,但它不能替代可以真正向您展示绳索的导师。

体验 TDD 就是一切,所以如果你能在早期阶段有人教你如何进行 TDD,我认为整个学习的速度将超出任何人的预期。

于 2008-09-26T05:06:53.777 回答
3
def self.learn_tdd_and_programming_together?
  if you_have_tdd_mentor_sitting_next_to_you?
    "go for it"
  else
    if language.ruby?
      "it's possible, there is quite a bit of good stuff out 
      there that could give you a chance of learning programming 
      with TDD from the start. It's sort of in the ruby culture"
    elsif language.dot_net?
      "learn TDD after you learn the basics of .NET"  
    end
  end
end
于 2008-09-26T03:48:21.970 回答
1

这肯定有很多东西要吸收,但是我已经说过我希望我开始编写单元测试。实际上,如果我在工作场所有一位可以指导我的 TDD 进展的导师,那将是一件好事。我已经断断续续地自学 TDD 大约一年了,有很多东西要涵盖,你做的越多,它就越投入,但现在它真的开始为我带来回报。

于 2008-09-26T03:41:31.767 回答
1

我认为这条评论说明了初学者直接学习可能是一件非常好的事情。

于 2008-09-26T03:42:01.453 回答
1

我的编程座右铭是:

  1. 让它运行——程序解决了问题
  2. 做对——程序设计简洁,有少量重复
  3. 让它快速——优化(如果需要)

测试驱动开发处理前两个。

我认为应该教初学者 TDD,以便他知道如何使程序运行。恕我直言,只有这样才能教授好的设计技巧。

于 2008-09-26T03:58:58.230 回答
1

我想是的。研究甚至发现,对初学者的好处是最大的。它为您编写代码提供了更多指导。您知道结果和行为应该是什么,并编写测试。然后你写代码。测试通过。你完成了。你知道你已经完成了。

于 2008-09-26T07:03:42.950 回答
0

是的!确实。

于 2008-09-26T03:39:03.443 回答
0

我认为这对于刚学习编程的人来说并不好。那个人怎么知道要断言什么?:P TDD 用于设计,而不是用于测试。一旦一个人知道如何编程,开始研究 TDD 方法将是一件好事。

于 2008-09-26T03:40:08.197 回答
0

首先,您需要了解如何编写好代码。阅读、学习并实践它,直到你能很好地掌握它。一旦你有了它,看看测试驱动设计——它非常强大。

于 2008-09-26T03:40:46.700 回答
0

TDD 的一个重要好处是定义完成度。在简单的算法编程中,如果您想出几个很容易断言正确性的场景,那么很容易在单元测试中枚举它们并继续编码直到它们都起作用。

有时单元测试对于初学者来说可能很难,如果有很多依赖项并且您开始遇到需要模拟对象的场景。

但是,如果您可以对正确性进行简单的陈述,并且易于输入,那么绝对可以将其写在代码中。

您可能还注意到,如果一个简单的正确性陈述不容易描述,您可能无法完全理解您的问题。

祝你好运...

于 2008-09-26T03:45:08.733 回答
0

这实际上取决于您对“启动器”的定义。如果“初学者”是指完全没有编程背景的人,那么不,我不认为 TDD 是一个很好的开始方式。在担心重构和测试驱动开发之前,程序员需要学习基础知识(避免无限循环、内存分配等)。

于 2008-09-26T03:50:54.880 回答
0

代码就是代码,无论它是你想要输出的东西,还是一个测试。

一开始就学习 TDD 有很大的价值。这是应该成为习惯的技能之一。我们当中有很多人理解并喜欢 tdd 的价值,但多年的编程已经养成了一些以后很难改掉的习惯。

就用于合同设计/代码实现/测试的 TDD 而言,这就是所有这些事情。TDD 会为您带来完美的代码吗?不,经验和学习工艺将帮助您成熟您的编码方法。但是对于每个开发人员来说,TDD 都是一个非常重要的工具。

TDD 的使用有望帮助您获得可测试的设计。可测试的设计在理论上封装得很好,应该遵循开放封闭原则。

在我看来,只要人们将 TDD 视为一种利基工具,或者在编写代码时以某种方式是可选的,那么这些人显然不会获得 TDD 的价值。

于 2008-09-26T04:49:12.243 回答