《程序员》第 5 期:要不要 TDD?如何做?

  • 霍泰稳

2007 年 4 月 26 日

话题:Java敏捷测试开源DevOps语言 & 开发架构文化 & 方法

五月份的《程序员》杂志就软件开发过程中重要但又看似对立的“测试”和“调试”两个领域进行了专题探讨。自动化测试方面专家 Alberto 在接受《程序员》编辑欧阳璟的采访时,畅谈了自己对单元测试、为什么开发者不喜欢写单元测试、敏捷开发时应该注意什么等话题分享了自己的观点。

熟悉JUnit Factory的开发者对 Alberto Savoia 不会感到陌生,因为他就是这个产品的主设计师之一(另外一个是敏捷方面的专家 Kent Beck)。Alberto 曾在 Sun 公司工作了 13 年,是 Java 语言的核心开发人员,后任职于 Google 公司,担任首席工程师。现在是Agita Software 公司的创始人和技术总监,在测试驱动开发和敏捷方面都很有研究。

其实 Alberto 在 Google 工作时,就经历了那些世界顶尖的工程师放弃使用单元测试的情况,虽然 Google 也规定每个工程师应该测试自己编写的代码,但能够最终坚持下来的并不多(30% 左右)。Alberto 在调查后发现几乎所有人都肯定单元测试的价值,但是大部分人发现很难将其顺利实施下去,后来 Alberto 还发现这种情况在其他让开发者写测试的组织中都曾发生过。

为什么单元测试有价值却难以实施?Alberto 这样解释:

测试框架(如 JUnit)只是让测试执行,并生成自动化报告。写测试代码仍然需要花费很多力气。这就是为什么大部分软件开发者不爱写单元测试的主要原因。或者说,不写测试代码是因为他们以为自己完全不需要。

那么有没有好的办法让开发者爱上单元测试这个好东西,保证自己的软件质量呢?在采访的最后,Alberto 给开发团队和开发者,尤其是敏捷开发为主的组织和开发人员提出了三条建议:

  • 第一是要思维开阔,不断地学习和尝试新的技术和工具。Agile、XP 和 TDD 都是新技术,而且发展得非常快,我们需要不断学习。
  • 第二要充分利用工具和自动化设备。……尽量让能够或应该自动化的工作自动化。这样,你就可以将时间和精力集中在那些需要思考和创造力的活动上。
  • 最后如果你的同事还没有掌握和采用敏捷方法与单元测试,那么开发工作很难达到真正的敏捷,因此,同你的同事分享你的知识、技术和成功经验是很重要的。尽力去影响他们,让他们也开始写测试代码。
  • 另外,此专题还邀请了技术专家周伟明讲解了“软件问题定位常见方法”,北京 Java 用户组(BJUG)核心成员、满江红开放技术研究组织成员莫映阐述了“测试驱动开发之是与非”以及 ThoughtWorks 咨询师、InfoQ 中文站特约编辑熊节分享了“从焦虑到强迫——改变编程习惯”等内容。

    Java敏捷测试开源DevOps语言 & 开发架构文化 & 方法