原文:http://coolshell.cn/?p=1302  酷壳

Code Review中的几个提示

陈皓

Code Review应该是软件project最最有价值的一个活动,之前,本站发表过《简单有用的Code Review工具》,那些工具主要是用来帮助更有效地进行这个活动,这里的这篇文章,我们主要想和大家分享一下Code Review代码审查的一些心得。

首先,我们先来看看Code Reivew的用处:

  1. Code reviews 中,能够通过大家的建议增进代码的质量。
  2. Code reviews  是一个传递知识的手段,能够让其他并不熟悉代码的人知道作者的意图和想法,从而能够在以后轻松维护代码。
  3. Code reviews 也鼓舞程序猿们相互学习对方的好处和长处。
  4. Code reviews 也能够被用来确认自己的设计和实现是一个清楚和简单的。

你或许注意到了在上面的Code Reivew中的诸多用处中,我们没有提到能够帮助找到程序的bug和保证代码风格和编码标准。这是由于我们觉得:

  1. Code reviews 不应该承担发现代码错误的职责。Code Review主要是审核代码的质量,如可读性,可维护性,以及程序的逻辑和对需求和设计的实现。代码中的bug和错误应该由单元測试,功能測试,性能測试,回归測试来保证的(当中主要是单元測试,由于那是最接近Bug,也是Bug没有扩散的地方)
  2. Code reviews 不应该成为保证代码风格和编码标准的手段。编码风格和代码规范都属于死的东西,每一个程序猿在把自己的代码提交团队Review的时候,代码就应该是符合规范的,这是默认值,属于每一个人自己的事情,不应该交由团队来完毕,否则仅仅会浪费大家本来就不够的时间。我个人觉得“meeting”是奢侈的,由于那须要大家在同一时刻都挤出时间,所以应该用在最须要的地方。代码规范比起程序的逻辑和对需求设计的实现来说,太不值得让大家都来了。

10年前,上面这两件事会是理所当然的(10年前的中国的软件开发还没有Code Reivew呢),今天,在中国的非常多公司上面这两件事依旧被觉得是Code Reivew最重要的事,所以,我可以看到非常多开发Team抱怨Code Review就是一个形式,费时费力不说,发现的问题还不如測试,而评审者们初了在代码风格上有些见术,别的也就没什么用了,长而久之,大家都会開始厌烦这个事了。

所以,在今天,请不要把上面的那两件事分散了Code Review的注意力,取而代之的是,对于Bug,程序的作者要在Review前提交自己的单元測试报告(如:XUnit的測试结果),对于代码规范,这是程序作者自己须要保证的,并且,有一些工具是能够帮你来检查代码规范的。

当然,上述这些言论并非说,你不能在Code Review中报告一个程序的bug或是一个代码规范的问题。我仅仅是说,那并非Code Review的意图。

以下是我们觉得的几个小提示能够让你更好进行Code Review这项最有价值的活动。

1.- 常常进行Code Review

曾经经历过几个相当痛苦的Code Review,那几次Code Review都是在程序完毕的时候进行的,当你面对那近万行的代码,曾经N我掺和在一起的功能,你会发现,整个Code Review变得很地艰难,用不了一会儿,你就会发现大家都在拼命地打着哈欠,但还是要坚持,有时候,这种Review会持续3个小时以上,相当的夸张。并且,会议上会出现相当多的问题和争论,由于,这就好像,人家都把整个房子盖好了,大家Review时这挑一点那挑一点,有时候触动地基或是承重墙体,须要大动手术,让人返工,这当然会让盖房的人一下就跳起来极力地维护自己的代码,最后还伤了团队成员的感情。

所以,千万不要等大厦都盖好了再去Reivew,并且当有了地基,有了框架,有了房顶,有了门窗,有了装修,的各个时候循序渐进地进行Review,这样反而会更有效率,也更有帮助。

以下是一些观点,千万要铭记:

  • 要Review的代码越多,那么要重构,重写的代码就会越多。而越不被程序作者接受的建议也会越多,唾沫口水战也会越多。
  • 程序猿代码写得时候越长,程序猿就会在代码中增加越来越多的个人的东西。 程序猿最大的问题就是“自负”,不管什么时候,什么情况下,有太多的机会会让这样的“自负”澎涨开来,并開始影响团队影响整个项目,以至于听不见别人的建议,从而让Code Review变成了口水战。
  • 越接近软件公布的终于期限,代码也就不能改得太多。

我个人的习惯,而且也是对团队成员的要求是——先Review设计实现思路,然后Review设计模式,接着Review成形的骨干代码,最后Review完毕的代码,假设程序复杂的话,须要拆成几个单元或模块分别Review。当然,最佳的practice是,每次Review的代码应该在1000行以内,时间不能超过一部电影的时间——1.5小时(由于据说那个一个正常人的膀胱能够容纳尿液的最长限度)

当然,在敏捷开发中,他们不须要Code Reivew,事实上,敏捷开发中使用更为极端的“结对编程”(Pair-Programming)的方法 —— 一种时时刻刻都在进行Code Review的方法,个人感觉在实际过程中,这样的方法有点过了。另外,大家能够看看本站的还有一篇文章《结对编程的利与弊》来了解一下这样的方法的问题。

2.- Code Review不要太正式,并且要短

忘了那个代码评审的Checklist吧,走到你的同事座位跟前,像请师父一样请他坐到你的电脑面前,然后,花5分钟给他讲讲你的代码,给他另外一个5分钟让他给你的代码提提意见,这比什么都好。而假设你用了一个Checklist,让这个事情表现得非常正式的话,以下两件事中必有一件事会发生:

  1. 仅仅有在Checklist上存在的东西会被Review。
  2. Code Reviews 变成了一种礼节性的东西,你的同事会装做非常关心你的代码,但事实上他心里想着尽快地离开你。

仅仅有不正式的Code Review才会让你和评审者放轻松,人仅仅有放松了,才会表现得非常真实,非常真诚。记住Review仅仅只是是一种形式,而仅仅有通过相互的讨论得到了有意义和有建设性的建议和意见,那才是最实在的。不然,作者和评审者的关系就会变成小偷和警察的关系。

3.- 尽可能的让不同的人Reivew你的代码

这是一个好主意,假设可能的话,不要总是仅仅找一个人来Review你的代码,不同的人有不同的思考方式,有不同的见解,所以,不同的人能够全面的从各个方面评论你的代码,有的从实现的角度,有的从需求的角度,有的从用户使用的角度,有的从算法的角度,有的从性能效率的角度,有的从易读的角度,有的从扩展性的角度……,啊,好多啊,还让不让人活了。无论怎么说,多找一些不同的人会对你非常有优点。当然,不要太多了,人多嘴杂反而适得其反,基本上来说,不要超过3个人,这是由于,这是一个能够围在一起讨论的最大人员尺寸。

以下是几个长处:

  1. 从不同的方向评审代码总是好的。
  2. 会有很多其它的人帮你在日后维护你的代码。
  3. 这也是一个添加团队凝聚力的方法。

4.- 保持积极的正面的态度

再说一次,程序最大的问题就是“自负”,尤其当我们Reivew别人的代码的时候,我已经见过无数的场面,程序猿在Code Review的时候,開始抨击别人的代码,质疑别人的能力。太可笑了,我分析了一下,这类的程序猿事实上并没有什么本事,由于他们指责对方的目的是想告诉大家自己有多么的牛,事实上,靠这样的手段来表现自己的程序猿,事实上是就是传说中所说的“半瓶水”。

所以,不管是代码作者,还是评审者,都须要一种积极向上的正面的态度,作者须要可以虚心接受别人的建议,由于别人的建议是为了让你做得更好;评审者也须要以一种积极的正面的态度向作者提意见,由于那是和你在一个战壕里的战友。记住,你不是一段代码,你是一个人!

5.- 学会享受Code Reivew

这可能是最重要的一个提示了,假设你到了一个人人都喜欢Code Reivew的团阿,那么,你会进入到一个生机勃勃的地方,在那里,每一个人都能写出质量很好的代码,在那里,你不须要经理的管理,团队会自适应一切变化,他们相互学习,相互帮助,不不过写出好的代码,并且团队和当中的每一个人都会自己主动进化,最关键的是,这个是一个团队。

(请勿用于商业业用途,转载时请注意作者和出处)

Code Review中的几个提示的更多相关文章

  1. Code Review中应该关注的点

    Magic number/string If statement, you should always use single line or brackets Provide default valu ...

  2. 如何在python脚本开发做code review

    在软件项目开发中,我们经常提到一个词“code review”.code review中文翻译过来就是代码评审或复查,简而言之就是编码完成后由其他人通过阅读代码来检查代码的质量(可编译.可运行.可读. ...

  3. Code Review 从失败中总结出来的几个经验

    资深的程序员都知道 Code Review 可以对代码质量,代码规范,团队代码能力提升带来很大的提升,还有著名的技术专家"左耳朵耗子"也说过: 我认为没有 Code Review ...

  4. Code Review的一些典型内容

    如下是Code Review中一些典型的内容: 一.常规项: 1.代码能够工作么?它有没有实现预期的功能,逻辑是否正确等. 2.所有的代码是否简单易懂? 3.代码符合你所遵循的编程规范么?这通常包括大 ...

  5. 什么是Code Review(转)

    Code Review是一种通过复查代码提高代码质量的过程,在XP方法中占有极为重要的地位,也已经成为软件工程中一个不可缺少的环节.本文通过对Code Review的一些概念和经验的探讨,就如何进行C ...

  6. 什么是Code Review

    Code Review 是一种通过复查代码提高代码质量的过程,在XP方法中占有极为重要的地位,也已经成为软件工程中一个不可缺少的环节. 本文通过对Code Review的一些概念和经验的探讨,就如何进 ...

  7. Code Review(转)

    Code Review是一种通过复查代码提高代码质量的过程,在XP方法中占有极为重要的地位,也已经成为软件工程中一个不可缺少的环节.本文通过对Code Review的一些概念和经验的探讨,就如何进行C ...

  8. 关于Code Review

    为了保证代码质量,我们团队内部一直在推行Code Review.现在Code Review帮我们发现了很多代码的问题,提升了代码的可读性和质量,同时我们在Code Review上也花费了很多时间,有些 ...

  9. 漫谈Code Review的错误实践

    从刚开始工作时到现在,已经写了7年的代码,大部分代码都被人review过,自己也review了很多人的代码.在上一家公司的时候,我负责的一轮面试是专门进行Code Review的练习和经验谈. 通过在 ...

随机推荐

  1. HDU 4643 GSM 暑期多校联合训练第五场 1001

    点击打开链接 我就不说官方题解有多坑了 V图那么高端的玩意儿 被精度坑粗翔了 AC前 AC后 简直不敢相信 只能怪自己没注意题目For the distance d1 and d2, if fabs( ...

  2. 从Rational Rose 到IBM Rational Software Architect和IBM Rational Rhapsody

    2014/10/27 RSA升级,重装,不知怎么搞的,不能添加某些图(比如,活动图),重试了几次都不行,在其它电脑上没有问题.后来把其它电脑上的workspace复制过来,问题攻克了,原来是works ...

  3. MyBatis一级缓存引起的无穷递归

    MyBatis一级缓存引起的无穷递归 引言: 最近在项目中参与了一个领取优惠劵的活动,当多个用户领取同一张优惠劵的时候,使用了数据库锁控制并发,起初的设想是:如果多个人同时领一张劵,第一个到达的人领取 ...

  4. 从零开始学Xamarin.Forms(四) Android 准备步骤(添加第三方Xamarin.Forms.Labs库)

    原文:从零开始学Xamarin.Forms(四) Android 准备步骤(添加第三方Xamarin.Forms.Labs库)  1.安装对应dll     Update-Package Xama ...

  5. 潜水JVM

    原文地址:http://blog.jamesdbloom.com/JVMInternals.html(转载请注明出处和本文地址英文原文) 本文简要解析JVM的内部结构.下图显示了一个典型的一块JVM( ...

  6. c语言移位操作

    应该先看看C语言是指所有的位二进制算术位计算.即使输入的是十进制的数,在存储器存储为二进制形式. “<<”使用方法: 的格式是:a<<m,a和m式,要求m>=0. 功能: ...

  7. 假防病毒软件从电脑移植到了 Android 平台

    以前有位女研究生点击网络钓鱼的链接.随即出现实时扫毒画面的方式,接着呈现了扫毒结果,跑出十余笔病毒数据,记录了被感染的计算机的具体位置,并提示她必须更新防病毒软件,而她在付费两千元后收到"防 ...

  8. bootstarp modal自己主动调整宽度的JS代码

    $('#ajaxPage').modal('show').css({ width: 'auto', 'margin-left': function () { return -($(this).widt ...

  9. Unreal Engine 4 C++ 能够创建角色Zoom摄像头(资源)

    游戏摄像头可以观察到的距离越近,作用和拉远是一个比较普遍的要求,UE4它也实现比较简单. 在这篇文章中TopDown模板案例,解释如何,分步实施能Zoom摄像头. 创建TopDown模板C++项目达产 ...

  10. MongoDB学习笔记-基础概念

    mongodb中基本的概念 文档.集合.数据库 与关系数据库的概念对比更容易理解