10月份ACM Communications刊发了George V. Neville-Neil的文章:Kode reviews 101- A review of code review do's and don'ts.他的公司经历了一轮裁员,但是不久发现系统的某些部分内容没有人能理解,只能高薪聘之前的员工做"顾问"来收拾烂摊子.而这种情况已经再三上演,怎样才能让足够多的人了解系统,Neville-Neil给出的对策是:代码审查 Kode Reviews.

    

 何以至此

 

    Neville-Neil并没有详细说明他们的公司为何再三陷入这样的泥潭的,我们可以通过周围发生的事情做出一个猜测。事情的源头是系统中的一部分代码在功能完成之初就缺少必要的注释和文档,更糟糕的是有一些试验性的代码没有清除掉。这部分代码的编写者离开之后,接替者是不愿意修改或者删除不是他们编写的代码。他们的理由是:“我不懂那段代码,我来的时候就已经写好了”。这其实是典型的反模式:Lava Flow(岩浆流)-这些代码刚刚出现的时候还具有可变的本质,但是天长日久就像玄武岩一样坚硬难以去除。这种代码的影响比变量名不规范,面条代码的还要严重。

    编译器可以读你的代码但不了解你的意图和设计,于是只有写代码的人懂得那块代码的意图。事实上Neville-Neil的公司就真的高薪聘回那些代码编写者。

    而代码审查是可以在源头上将问题解决,问题解决的早晚付出的代价可是真的不一样的。

  

Why

 

        Neville-Neil指出一个事实:很多人会忽视代码审查,认为代码检查是非生产性的,只是一群人坐在一起了解那些他们不熟悉的代码。

         这种观点作者没有给出评价,我认为是对错参半:

  • 发现代码问题,找出系统中的Bug,提高软件质量
  • 团队中更多的人熟悉代码:这恰恰就是Neville-Neil希望的。
  • 代码检查会占用新功能的开发时间,但是将问题尽早的暴露出来

 

 Neville-Neil表示代码审查对于他们来讲有点亡羊补牢,但它依然是危机中项目良好的自救方式。

  

How

 不是所有的开发者都懂得如何进行代码审查,并保证代码审查的效果。

   Neville-Neil详细阐述了他对代码审查的从计划、组织到执行,以及如何保证过程有效的种种看法。我们一起来看一下:

 kodereview 

 

从上图看出,他将代码审查分成三个阶段:准备阶段,检查阶段,后续。而每一个阶段都有一些重要的原则来保证过程的有效性。

  • 准备阶段 要用心挑选要审查的代码,挑选最重要的部分,然后通知到与会者提前熟悉。
  • 安排时间 代码审查最被人诟病的就是对时间的占用,因此安排时间极其重要。首先时间安排在与会者头脑清楚的时候比如早晨,其次就是要控制会议的长度。
  • 检查阶段 代码检查的过程重要保持与会者的清醒状态,作者的建议是喝咖啡提神。 检查阶段的启动是以简短的介绍开始,能让与会者有一个总体的印象。之后的切入点是头文件、基础数据、基类,对代码有了一个基本的了解之后就可以深入到具体的方法了。
  • 检查什么 代码检查很容易纠缠于细节,很多人像玩游戏积累点数乐此不疲的指出每一处拼写错误,这转移了大家的注意力忽略了代码的整体结构,减少了挖掘出深层次的问题的可能。这类问题直接一带而过,然后继续。
  • 过程有效进行过程中,要做好记录(安排专门的会议记录人员),并在会议结束时做简单的回顾。白板和活动挂图都是很好的辅助工具。
  • 后续 之前的所有工作的重点在高效的发现问题,发现重要的问题以及问题能够如实的记录问题。之后的工作就是问题的解决,这里需要责任到人,每一个问题都有专门的负责人。借助代码版本管理工具,可以对代码的修改做回顾。我觉得这里可以把之前缺失的文档和注释进行补充来描述重要的设计。

     

     

    总结

         通过代码审查能够在开发的早些时候发现问题,并规避Lava Flow的出现。代码审查最为人诟病的是占用开发时间,因此良好的准备、安排时间并注重代码审查会议的有效性极为重要。发现问题不是目的,目的是解决问题,代码审查之后的工作落实也要跟踪。建议大家读读George V. Neville-Neil的这篇文章:Kode reviews 101- A review of code review do's and don'ts.

     

    参考资料:

    《反模式:危机中的软件、架构和项目重构》

    Code review is systematic examination (often as peer review) of computer source code intended to find and fix mistakes overlooked in the initial development phase, improving both the overall quality of software  and the developers' skills.

    源文档 <http://en.wikipedia.org/wiki/Code_review>