测试驱动开发适合初学者吗?

时间:2020-03-06 14:45:50  来源:igfitidea点击:

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

对于初学者来说,加入TDD是件好事(并避免以后出现坏习惯吗?)或者对于理解编程语言是什么阶段来说,它太复杂了吗?

解决方案

是的!确实。

TDD比"传统"方法(直到最后才进行测试)要简单得多,因为这些测试可以阐明我们对问题的理解。如果我们实际上不知道问题出在哪里,那么编写测试非常困难。

因此,对于初学者而言,编写测试可以使思考的方向朝正确的方向发展,这是合同行为,而不是实现行为。

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

首先,我们需要了解如何编写良好的代码。阅读,研究并实际操作,直到我们对它有所了解为止。了解这些内容后,看看测试驱动的设计,它的功能非常强大。

我希望TDD在我初次学习编程时就在身边,并且在我被"老套路"牢牢扎住之前,就已经选择了它,以至于我很难学习TDD ...

当然要花很多钱,但是我希望我开始写单元测试。实际上,如果我在工作场所有一位可以指导我的TDD进度的导师,那将是一件好事。我一直在自学TDD大约一年了,涉及的内容很多,我们做的越多,投入的时间就越多,但是现在对我来说,这确实开始有所收获。

我认为此评论说明,对于初学者来说,直接学习可能是一件非常好的事情。

TDD的一个重要好处是定义完成度。在简单的算法编程中,如果我们提出了几个容易断言正确性的场景,那么很容易在单元测试中枚举它们并保持编码,直到它们全部起作用为止。

如果存在很多依赖关系,并且对于需要模拟对象的场景,初学者有时很难进行单元测试。

但是,如果我们可以对正确性做一个简单的陈述,并且很容易输入,那么绝对可以用代码将其写下来。

我们可能还注意到,如果不容易描述简单的正确性说明,则可能无法完全理解问题。

祝你好运...

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

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

我的编程座右铭是:

  • 使它运行-该程序解决了问题
  • 使其正确-程序设计简洁,并且有少量重复
  • 快速-优化(如果需要)

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

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

代码就是代码,无论是我们要尝试的东西还是测试。

从一开始就学习TDD具有很大的价值。这是应该养成的技能之一。我们中的许多人都了解并喜欢tdd的价值,但是多年的编程已经灌输了一些习惯,这些习惯以后很难打破。

就TDD用于合同设计/代码实施/测试而言,所有这些都是如此。 TDD会带给我们完美的代码吗?不,经验和技术研究将成熟编码方法。但是TDD对每个开发人员来说都是非常重要的工具。

TDD的使用有望进行可测试的设计。从理论上讲,可测试的设计被很好地封装,并且应该遵循开放式封闭原则。

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

体验TDD规则全部

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

我感到困惑的是,当一个人学习时,有太多新概念被吸收,以至于混乱可能在很早就开始出现。因此,尽管我确实认为TDD会很有帮助,但我认为这并不是一个可以成功地从自己身上学到的东西。

就像生活中的任何其他事物一样,当有人在物理地教导我们时,我们往往会学习得最好。向我们展示他们如何以TDD方式解决问题可以做的事情远不止是在书本上或者在网络上阅读。我的意思是,这不会造成伤害,但不能替代可以真正向我们展示绳索的导师。

体验TDD就是一切,因此,如果我们可以在早期阶段教我们如何进行TDD,我认为整个学习的速度将超出任何人的期望。

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