低质量软件编程产生的成本价格细目表

注意:下面这个清单里描述的事情并不是你绝对不能做的,它只是用量化的方法来让你知道编程上的这些做法将会产生的负面代价。

这些费用是在代码审查时你将要付出的。

不遵守编码风格

费用: $0.02

代码库中的程序编码风格一致虽然不是很重要,但值得你去遵守。

在提交代码的说明信息上偷懒

费用: $0.50

这主要是为了以后的查找。请细读这篇代码提交说明信息指导(英文)

使用局部变量

费用: $1.00

大多数的局部变量都最好使用方法代替。注意:代码块参数除外。

多于一行的方法

费用: $1.50

对多于一行代码的方法要保持高度警惕。

超过5行的方法

费用: $3.00

一个方法应该只做一个事情。一个事情应该用不了5行代码就能完成。

很长的类

费用: $5.00

根据童子军(Boy Scout)法则:同性恋应该被禁止。哦,不,是另外一条:尽量只留下你会用到的代码。当你遇到一个比较长的类时,花点功夫精简它们。

使用魔幻数字

费用: $7.00

在代码中你只可以使用两个数字:0和1。其它的都应该用具有名字的常量代替。

在条件判断中使用`||` 或 `&&`

费用: $7.00

当你发现有 `if foo && bar` 时,把它提取到一个方法里,用来说明`foo && bar` 究竟是什么意思。

使用 case 或 switch 语句

费用: $15

一个swith语句基本上不是只做一个事情。它通常还会牵涉到其它类。

传递布尔参数

费用: $15

依赖布尔参数的程序流转叫做控制耦合,这是一种完全不应该的高耦合

类名用Manager结尾

费用: $30

“Manager”是一个很含糊的词,传达不了任何意思。使用它,很有可能你的类承担了过多的责任。

过度使用附加支持

费用: $10/object created

尽量简化你测试时需要的附加支持工具。如果能用临时对象代替,就避免使用数据库。

测试中屏蔽某些功能

费用: $10/屏蔽的方法

如果你在测试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/行

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

[英文原文:How much should global variables cost? ]

分享这篇文章:

13 Responses to 低质量软件编程产生的成本价格细目表

  1. okjacky says:

    有不少觉得有点过了。譬如一个方法不超过5行之类。。。。
    而且基本都没有例子,不够生动。

  2. David says:

    多于一行的方法?
    又是一个挨批的。。。

  3. dave says:

    我觉得一个方法不要超过50行比较合适。

  4. 忧郁 says:

    基本都是《代码大全》里面所讲述的内容

  5. Adam says:

    “一个事情应该用不了5行代码就能完成”,如此说来,那么,一个程序应该用不了多少行代码就能完成呢?

    • sonoku says:

      补充一下:
      方法1 人体{
      手();
      身躯();

      方法2 手{
      手指();
      手掌();

      方法2-1 手指{
      手指甲();
      指关节();

      方法2-1-1 手指甲{
      ……}
      方法3 身躯{}

  6. 依云 says:

    又是 Java-like……

  7. WindProtect says:

    没看我,等级不够,看着蛋碎了。

  8. WindProtect says:

    没看完,等级不够,看着蛋碎了。

  9. bombless says:

    噗,照这风格……有些项目那就会有很多的类,一个类有很多的方法了……例如说7千个类,最多那个类有5万种方法。

发表评论

电子邮件地址不会被公开。 必填项已用*标注