返回 登录
0

测试驱动开发不仅仅是测试优先

原文:Test Driven Development is a lot more than testing first
翻译:雁惊寒

让我来告诉你是什么让我能够写出灵活度高,可读性强,并且容易维护的代码。这即不是一个新的框架,也不是一个新的强大的IDE,而是一个更好的东西,与技术无关,与你正在使用的编程工具也无关。这是一个被称为测试驱动开发(Test Driven Development,简称TDD)的软件开发过程。

这可能不是你第一次听说TDD。这是一个现在很受欢迎的开发过程,不是因为每个人都在使用它,而是因为每个人对它都有一定的想法。今天我将和你一起分享我对它的一些观点。

什么是TDD?

当我在和某些人探讨TDD时,他们告诉我说“TDD就是先做测试”,我知道,他们弄错了。如果你正在做的唯一一件事情只是编写测试用例,那么你实际上并不是在做TDD。提前编写测试用例虽然是是构成TDD过程的其中一部分,但它并不是TDD。请注意,我把TDD称之为一个过程,因为它就是一个真正的软件开发过程

为什么需要有这么一个软件开发的过程呢?类似的,医生需要有一个做手术的过程,以确保能顺利完成手术!虽然遵循这个过程并不能保证一直都表现良好,但是如果没有这个过程,那你迟早会把工作搞砸。而这种单次失败可能会对你的声誉造成很大的影响。请记住,你应该始终保持良好的表现,而不是偶尔的表现伟大一次。

你可能会说“我已经有一个开发过程了,而且我每次开发软件都是遵循的这个过程,而不是TDD”。那很好,虽然我是TDD的倡导者,但我并不是狂热地相信TDD是编写好软件的唯一途径。有很多开发人员即使不使用TDD,也可以始终如一地生产出高品质的软件。他们有自己的开发过程。然而,我还没有看到有一个过程能像TDD那样产生这么好的结果。因此,我坚信每个软件开发人员都可以从TDD中受益。如果你知道一个比TDD更棒的方案,请在此博客文章后面发表评论或给我发消息,我很乐意听到它!

TDD的关键力量

在开发高质量的软件时,这三件事是开发者需要重复进行的:设计,测试和重构。你首先必须要对软件做一些设计,以确定如何实现该软件。然后做一些测试来验证它是否按照设计的要求来运行。同时,你还必须重构一些代码,以使其保持简洁,并易于维护。

TDD的好处在于将这三件事情合并到只需要几分钟就能完成的小周期里。这实际上意味着你的工作由一个个的小的迭代组成,每次迭代结束后,都会产生一份干净并且可测试的代码。因此,当你使用TDD时,你的代码不会长时间的保持丑陋,或者无法运行。下面,让我们进一步地分析,为什么小周期中的设计、测试和重构会让你受益匪浅?

  • 设计

设计软件本身就是一个迭代的过程。不可能100%的设计都在软件运行之前完成。为什么?因为有些信息要达到了某些开发关键点时才能够发现。因此,在软件开发过程中,只要获得了一点信息,你都可以做一些小小的设计,这样能使你更好地做出决定。

  • 测试

相比在开发完整个软件之后测试,在开发过程中对代码片段进行测试要来的更加容易点。但是在某些情况下可能会更难!为什么?因为软件在开发的时候可能还没有考虑到可测性。然而,当你在不断地进行小周期内的测试之后,该问题就会消失。

  • 重构

你是否还记得在你公司某个项目的深处看到过一大堆丑陋的代码?你或许认为你应该重构一下,但是代码实在是太混乱了,你甚至都不知道从哪里开始。但是如果你经常做重构,那么这种庞大的丑陋的代码就不会存在。

另外,别忘了,当你在做TDD时,你会慢慢积累得到一个强大的回归测试案例集。但是在我看来,与这些小周期中获得的好处相比,这只是一个加分项。

关于TDD,你要牢记的事情

TDD有着陡峭的学习曲线。为了有效地学习TDD,需要时间,精力和纪律。所以,如果你打算开始做TDD,不要指望着一开始就能顺顺利利的,也不要指望整个过程能够很自然的完成。你应该不停地关注这个流程,并坚持下去。那么,总有一天,你不会再感觉到不舒服,而你会写出更棒的代码。

不要相信一些人在互联网上所说的TDD会很神奇地设计你的软件。它不会!你,一个程序员,才是那个设计程序的人。因为TDD迫使你在一个个的小周期内工作,所以你将有更多的机会来构思程序设计,仅此而已。

确实,在一开始,项目进行的会比以前慢。但是从长远来看,会更快,因为你会写出更少bug更简洁的代码。你将会成为一个更可靠的程序员,而不是一个更快的程序员。

入门

如果你打算开始学习TDD,那我推荐这本书Test Driven Development:By Example,它是一本很不错的入门书籍。

结论

测试驱动开发不仅仅是简单地优先编写测试案例。它是一个能够帮助你始终做好工作的一个开发过程。TDD让你在一个个的小周期内进行开发,不断地设计、测试和重构代码,从而有助于生产出高质量的软件。TDD有着陡峭的学习曲线,所以如果一开始执行的并不好,不要气馁。只要耐心等待,继续前进,你将会写出更棒的软件。

评论