Skip to content

四火的唠叨

一个纯正程序员的啰嗦

Menu
  • 所有文章
  • About Me
  • 关于四火
  • 旅行映像
  • 独立游戏
  • 资源链接
Menu

代码评审鲜为人知的好处

Posted on 02/15/201206/23/2019 by 四火

code_review 代码评审究竟有什么好处?

在前期发现问题,提高软件质量,降低软件成本。

事实上,代码评审的好处远不止这些。有些项目经理或者开发人员不愿意多提评审,Coding 的过程包含的内容非常丰富,如果只把一个字符一个字符地敲代码叫做 Coding,未免悲哀了一点。优秀的项目,编码阶段实际敲代码的时间不会很长;优秀的程序员,大部分时间都用来思考了。

 

我来说说代码评审其它鲜为人知的好处,兴许能改变某些同学的看法呢。

 

增加阅历,学习别人代码的可贵之处

和英语学习是一个道理,如果只听一种纯正口音的英语,英文反而不容易学好,我们需要阅读各种营养的代码,广泛阅读能帮助开阔眼界,积累一些好的设计思路,甚至提高阅读恶心代码的免疫能力。

 

对工程和业务逻辑的熟悉

和盲目地走读代码不同,代码评审之前起码是对大致的业务和实现有一定了解,是带着问题去看代码的,更容易帮助自己理清代码实现,熟悉业务逻辑。

 

大声地鼓励,宽容地讨论,知识共享,给团队一个互相学习进步的氛围

代码评审不是挑错,看到优秀的代码,要说出来,让大家都看得到,这是那些优秀代码的创造者们应得的奖励。团队中的其他人听到了表扬,阅读了代码,从身边最实际的例子当中收获了成长。

评审过程中,提出的问题未必最终被接受,但是在问题确认的辩驳、争论过程中,很容易见到思维的火花,所谓 “道理越辩越明”,一个团队需要有这样充满生气的讨论。

 

及时识别出代码设计的缺陷,找到需要重构的地方

有一种观点很可怕:写最终的产品代码才是王道,不把最终的代码敲出来,程序员不放心,项目经理不放心,老大们更不放心——“你们的产出率是多少行/天啊?”

软件的精华应当在设计,如果说做软件是一种充满创造性的劳动,那么思考能力正是真正将优秀的软件开发和简单的体力劳动所区分开的核心因素。遗憾的是具备相当思考特质的程序员越来越不好找了,一定程度上,敏捷和 TDD 甚至助长了这种轻视前期设计阶段的情形(敏捷和 TDD 本身是没有问题的,问题终归来自实践的 “人”);“先写呗,开发的过程中,如果发现明显不合理的地方,再重构呗!”,在很多情况下,重构、尤其是一定规模下的重构很可能会成为噩梦。

代码评审不能完全解决这个问题,但可以通过评审发现设计方面的问题,可以反思设计的疏漏,提高团队成员的设计能力。

 

找出安全、性能、依赖和兼容性等测试不易发现的问题

把问题的寻找全部依赖于测试是可怕的,同等发布质量的前提下,测试发现问题的比重越小,修改的成本也就越小。在很多公司,都没有单个版本的专职测试(但可能有专职负责若干个产品集成的测试人员),但这不意味着版本质量差,事实上,很可能每一个开发人员都可以是一个优秀的测试人员;而更可能的情况是,Story 转测试之后软件接近商用,发现的问题并不多。等到上线,代码有多个人阅读,他们对 check in 的代码共同保证质量、承担责任,远好过出了问题对某一个人的追查。

 

评审新员工的代码,给新员工引导一个实实在在的方向

犯过的错误容易记忆,具体的问题容易记忆,对于新员工来说,给他们代码中肯的评价,可以帮助他们上路。比如我们常说不要过度设计,可是怎么样才算过度设计,如果给新员工指出他代码中这样一个实际的问题,他一定不容易忘记。

 

发挥团队中 “牛人” 的作用

这些团队中的 “牛人” 可不见得写得了所有的代码,但是他们可以评审绝大多数代码,把他们的作用发挥出来。他们未必要去审查每一条上库的语句,但是他们需要保证上库代码的质量,评审,给项目的质量带来事半功倍的提升。

 

文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接 《四火的唠叨》

×Scan to share with WeChat

你可能也喜欢看:

  1. We overestimate the value of coding
  2. 那些牛叉无比的评审风格,你,属于哪一种?
  3. 评审的艺术——谈谈现实中的代码评审
  4. 克罗恩病
  5. 留心那些潜在的系统设计问题

4 thoughts on “代码评审鲜为人知的好处”

  1. moonese says:
    02/12/2013 at 5:10 PM

    请问下华为和 amazon 在这方面都是怎么实践的?   都有什么样的流程? 有没有什么辅助的工具? 比如 reviewboard?

    Reply
    1. 四火 says:
      02/13/2013 at 12:06 AM

      华为:项目经理会组织 review 代码或文档,有本地 doc review 的工具,也有 eclipse 插件。这方面华为要做得好一些。

      Amazon:有一个内部 review board 的网站,review 代码的行为统一在网站页面上完成。本地 doc review 没有统一的软件。

      二者都没有强制 review 后才能提交的流程。

      Reply
      1. moonese says:
        02/13/2013 at 12:42 AM

        了解了,多谢!
        另外,你说的插件,是指 taobao 开发的 svn reviewboard eclipse 插件吗? 还是 HW 自己开发的?(HW 的代码管理,是用 svn?)

        Reply
        1. 四火 says:
          02/16/2013 at 10:21 AM

          应该是。

          是 svn。

          Reply

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

订阅·联系

四火,啰嗦的程序员一枚,现居西雅图

Amazon Google Groovy Hadoop Haskell Java JavaScript LeetCode Oracle Spark 互联网 亚马逊 前端 华为 历史 同步 团队 图解笔记 基础设施 工作 工作流 工具 工程师 应用系统 异步 微博 思考 技术 数据库 曼联 测试 生活 眼界 程序员 管理 系统设计 缓存 编程范型 美股 英语 西雅图 设计 问题 面向对象 面试

分类

  • Algorithm and Data Structure (30)
  • Concurrency and Asynchronization (6)
  • System Architecture and Design (43)
  • Distributed System (18)
  • Tools Frameworks and Libs (13)
  • Storage and Data Access (8)
  • Front-end Development (33)
  • Programming Languages and Paradigms (55)
  • Testing and Quality Assurance (4)
  • Network and Communication (6)
  • Authentication and Authorization (6)
  • Automation and Operation Excellence (13)
  • Machine Learning and Artificial Intelligence (6)
  • Product Design (7)
  • Hiring and Interviews (14)
  • Project and Team Management (14)
  • Engineering Culture (17)
  • Critical Thinking (25)
  • Career Growth (57)
  • Life Experience and Thoughts (45)

推荐文章

  • 谈谈分布式锁
  • 常见分布式系统设计图解(汇总)
  • 系统设计中的快速估算技巧
  • 从链表存在环的问题说起
  • 技术面试中,什么样的问题才是好问题?
  • 从物理时钟到逻辑时钟
  • 近期面试观摩的一些思考
  • RSA 背后的算法
  • 谈谈 Ops(汇总 + 最终篇):工具和实践
  • 不要让业务牵着鼻子走
  • 倔强的程序员
  • 谈谈微信的信息流
  • 评审的艺术——谈谈现实中的代码评审
  • Blog 安全问题小记
  • 求第 K 个数的问题
  • 一些前端框架的比较(下)——Ember.js 和 React
  • 一些前端框架的比较(上)——GWT、AngularJS 和 Backbone.js
  • 工作流系统的设计
  • Spark 的性能调优
  • “残酷” 的事实
  • 七年工作,几个故事
  • 从 Java 和 JavaScript 来学习 Haskell 和 Groovy(汇总)
  • 一道随机数题目的求解
  • 层次
  • Dynamo 的实现技术和去中心化
  • 也谈谈全栈工程师
  • 多重继承的演变
  • 编程范型:工具的选择
  • GWT 初体验
  • java.util.concurrent 并发包诸类概览
  • 从 DCL 的对象安全发布谈起
  • 不同团队的困惑
  • 不适合 Hadoop 解决的问题
  • 留心那些潜在的系统设计问题
  • 再谈大楼扔鸡蛋的问题
  • 几种华丽无比的开发方式
  • 我眼中的工程师文化
  • 观点的碰撞
  • 谈谈盗版软件问题
  • 对几个软件开发传统观点的质疑和反驳
  • MVC 框架的映射和解耦
  • 编程的未来
  • DAO 的演进
  • 致那些自嘲码农的苦逼程序员
  • Java 多线程发展简史
  • 珍爱生命,远离微博
  • 网站性能优化的三重境界
  • OSCache 框架源码解析
  • “ 你不适合做程序员”
  • 画圆画方的故事

近期评论

  • panzhixiang on 关于近期求职的近况和思考
  • Anonymous on 闲聊投资:亲自体验和护城河
  • 四火 on 关于近期求职的近况和思考
  • YC on 关于近期求职的近况和思考
  • mafulong on 常见分布式基础设施系统设计图解(四):分布式工作流系统
  • 四火 on 常见分布式基础设施系统设计图解(八):分布式键值存储系统
  • Anonymous on 我裸辞了
  • https://umlcn.com on 资源链接
  • Anonymous on 我裸辞了
  • Dylan on 我裸辞了
© 2025 四火的唠叨 | Powered by Minimalist Blog WordPress Theme
Menu
  • 所有文章
  • About Me
  • 关于四火
  • 旅行映像
  • 独立游戏
  • 资源链接