Rails 的相关感想
测试驱动开发和调试代码
最近举行了一个关于使用 Rails 的企业系统开发的研讨会。第二天便收到了出席者们用邮件发来的提问。
研讨会的一个主要议题是测试驱动开发的优点,我讲到“不必嵌入调试代码”,有人希望我详细介绍一下原因。
我这人行事不定,有时遵从测试驱动开发的原则有时又不遵从,但在认真地写一个测试然后进行代码编写的时候,将调试代码嵌入应用程序源代码(例如,尝试在记录输出变量的值)的时候是越来越少了。
这是为什么呢?
这是因为测试脚本和调试代码的目的是相似的。
请联想一下某控制台的测试脚本。这个脚本大体进行下面这样的处理。
- 把程序设置为特定状态。
- 发送特定的 HTTP 请求。
- 其结果,确认控制台的实例变量具有特定的值以及 HTTP 响应满足特定的条件。。
调试代码的目的,是观察处理进程中变量是如何进行变化的。测验脚本的目的之一,是在处理结果中观察变量发生了怎样的变化。虽然不是一模一样,但也很相似。
测试脚本比调试编码更出色的地方在于,设定了程序处于特定状态的前提条件,并确认处理的结果。 暗示即使全部的测试脚本都成功了,程序运行不畅的话,即存在未经测试的条件。这是由于测试脚本限定了错误发生的条件。
至于测试驱动开发,按理是写好测试脚本后,再编写程序的源码,但是实际上有时候代码的编写并不能顺利进行。这种时候,不知不觉就想将调试代码嵌入程序里。但是,更加正确的的方法是,将现在正在进行代码编写的动作、方法等的一部分(不确定的部分)切出作为另外的方法,先就这个小方法编写测试脚本。在这个方法里发现错误就行了,如果没有发现的话就返回原来的动作和方法做进一步调查。
像这样的话,在测试驱动开发时不太会出现调试代码。进一步来说,几乎没有调试的必要。
--
黒田努
(2008/04/07)
- 前言
- Rails是否能成为企业领域的主流 (2008/03/29)
- Rails 2.0 测速 (2008/03/30)
- 测试驱动开发和调试代码 (2008/04/07)
- Git or Mercurial (2008/04/22)
- RESTful Ruby on Rails -- 美丽与复杂 (2008/04/23)
- RESTful Ruby on Rails -- 单数与复数 (2008/04/24)
- 读 Rails 的源码 (2008/05/02)
- sudo: no passwd entry for app! (Capistrano 2.3.0) (2008/05/12)
- Rails on GlassFish (2008/06/18)
- 怎样回答“Ruby 没有类型声明,在规范的系统里能使用吗?”这样的问题 (2008/11/23)
- 怎样回答“Ruby是脚本语言,不是有点慢吗”这样的问题 (2008/11/24)
- 哪种编程语言将来有前途 (2009/01/10)
- 哪种框架将来有前途 (2009/01/11)
- 框架 VS CMS (2009/01/12)
- Rails 2.3 spawner/reaper 变为 DEPRECATED (2009/03/25)
- db/seeds.rb (2009/06/08)
- LESS与Sass (2009/08/03)
- Rails 2.3.4 与 I18n (2009/08/15)

