TDD
对应用程序的实际测试或编写可测试应用程序带来的好处带来的真正好处是什么?我问,因为我经常觉得谈话围绕着测试,而不是整体福利包。
答案 0 :(得分:7)
TDD可帮助您设计软件。测试成为设计。通过首先编写测试,您可以从消费者的角度考虑您的代码,从而使用户更友好,更紧凑的软件设计。
此外,通过应用TDD,您通常最终会以可以提供测试模拟和存根的方式编写代码。这导致软件耦合较少,使得随着时间的推移更容易更改和维护。
所以我想有关TDD的讨论是关于测试的,但是通过这样做会产生其他重大好处,例如质量(覆盖率),灵活性(去耦),更好的设计(作为API的消费者)。 / p>
答案 1 :(得分:4)
真正的改进是强迫您真正思考设计和实施的好方法。然后,一旦准备好测试并编写代码,就会更容易解决无法预料的问题。
通常发生在我身上的事情是一个很好的比喻:当我要将一个问题发布到论坛或IRC频道时,我希望能够很好地编写和完整描述问题,很多时候是准备一个问题的过程。写得很好,完整的问题描述会神奇地解决问题。
答案 2 :(得分:1)
TDD的真正好处是假设,它允许您修改/重构/增强您的应用程序,而不必担心您是否破坏了现有功能。写单元测试倾向于导致松散耦合的代码和更好的架构这一事实不一定是TDD的点,但我认为没有其他的很难。
除非您的单元测试具有良好的覆盖率,否则您无法真正体验TDD的好处。为了做到这一点,你将不得不编写可测试的代码。这就是为什么这两者经常一起使用或代替彼此使用。
答案 3 :(得分:0)
当您开发出可以发布多个版本的产品时,自动化测试可以节省时间并增强信心。通过自动化测试,您知道在版本之间没有破坏任何东西。当您的产品是人们可以编写附加组件的东西时,这尤其有用 - 您不希望在版本之间中断其附加组件。
使用TDD,您可以在开发过程中获得一系列测试。没有TDD编写这些测试就困难得多。
答案 4 :(得分:0)
迈克尔·费瑟斯(Michael Feathers)有一篇关于这篇名为The Flawed Theory Behind Unit Testing的博客文章。说真的,去读吧。妙语是
所有这些技术都被证明可以提高质量。而且,如果仔细观察,我们可以看出原因:所有这些都迫使我们反思我们的代码。
但你应该阅读上下文的完整帖子。
答案 5 :(得分:-1)
自动化测试可以防止人们做机器的工作。
以测试为导向的开发可以最大化自动化测试的数量。
当然,超越某一点,人类仍然需要。当您尝试将TDD应用到该点之外时,您将获得递减收益。