如果你在测试Foo类,你不应该屏蔽或短路Foo中的任何方法。你越想这样做,越说明你需要从Foo中把这些功能提炼出来放到其它地方。

  在数据库中观察集成测试效果

  费用: $20

  集成测试应该通过UI来验证。不要去窥探数据库。

  注释

  费用: $200/行

  一千个注释中顶多只有一条有合理存在的理由。其它的你应该改进代码,直到不需要注释。

  注释中包含 TODO 或 FIXME

  费用: $500/行

  我不在意代码分支中存在不多的TODO注释,但不要把它们合并的代码库中。“FIXME”实际上是“fuck you”你的同事。

  无意义的命名

  费用: $50/代码审查者的疑惑

  一定要努力努力好好给代码命名。当系统有变化时及时修改、改进你的命名。当发现有更好的名称时,不要等待,立即换掉。

  静态方法或类方法

  费用: $50/个

  Ruby里的类方法具有可变全局状态。想办法重构它们。

  不必要的属性状态变化

  费用: $100/变化

  与其修改一个现有的记录,不如创建一个新的,或return一个。与其删除,不如做标记。Rich Hickey 对此有一些你值得一读的思考。

  一个类有多个职责

  费用: $200/额外职责

  一个类应该只有一个职责或目的。几乎没有人因为使得类太小而出错。鉴于此,你的类很可能太大。

  重复的代码

  费用: $500

  编程中几乎没有任何原则你必须遵守的,但避免代码重复是个例外。代码复制给维护造成困难,严重影响代码质量。

  重复的测试代码

  费用: $500

  测试代码并不是产品代码的次要附属物。它们的质量同等重要。更严重的:维护一个糟糕的测试套件代码可能会让你欲哭无泪。

  未经测试的代码

  费用: $1,000/行

  未经测试的代码自诞生之时起成了负担。这样做很不专业。

  感谢Paul Graham先生的“On Lisp”,本文是受他的在某些函数上收税的想法而启发。