代码审查的5点经验教训总结
我们时常会听到团队成员说:
“这个项目搞代码审查简直是在浪费时间。”
“我没时间做代码审查。”
“发布会延迟,是因为我那个卑鄙的同事还没有审查过我的代码。”
“你能相信我的同事居然要求我改我的代码吗?我这么优雅完美的代码哪里还需要改呢。”
我们为什么要做代码审查?
任何专业的软件开发人员其最重要的目标之一就是要不断提高自己的工作质量。但是只有团队协作才能力往一处使,劲往一处用,提高软件质量。代码审查是实现这一目标最重要的途径之一。特别是,代码审查可以:
-
从另一个角度发现缺陷和更好的解决办法。
-
确保至少另外还有一人熟悉你的代码。
-
通过翻阅资深开发人员的代码,帮助培训新员工。
-
促进知识共享。
-
激励开发人员更好地写代码、解决代码中的问题,以免在审查时被别人揪出来。
代码审查要彻底
然而,除非能实实在在彻彻底底地在代码审查上花时间和精力,否则上述目标是很难实现的。
我的看法是大概25%的原始开发时间应该花在代码审查上。举个例子,如果一个开发人员需要用两天时间来实现某个程式,那么就应该花大约4小时进行审查。
当然时间并不是最重要的,关键是要看你能否正确审查代码。你必须了解你正在审查的代码。这意味着你不仅仅要知道它的的语法,还必须理解代码是如何融 入应用程序这个大环境下,成为组件或库的一部分。如果你不能把握每一行代码的含义,那么你的审查就不到位,也不会非常有价值。这也是为什么良好执行的代码 审查,大多不可能迅速被完成:因为我们需要时间来研究各种代码,如能触发给定功能以确保第三方API正确使用的代码。
在审查时,除了要寻找代码缺陷和其他问题,你还应该确保:
-
囊括所有必要的测试。
-
已经写入了恰当的设计文档。
即使是那些擅于写测试和文档的开发人员,也会在改变代码的时候忘记更新。代码评审时就应该确保这些资料不会随着时间而变得毫无用处。
避免过度的代码审查
开发人员应该努力清空积压的审查任务。有一种方法是在早上代码审查,在开始自己的开发工作之前先搞定审查任务。当然你也可以午饭前后或者是一天结束之时审查代码。总而言之,你应该将代码当作是日常工作的一部分,而不是工作的负累,所以你应该避免:
-
没有时间处理积压的审查任务。
-
由于审查的没有完成而导致了延迟发布。
-
傻乎乎地再去审查已经不相干的代码,在交给你之后已经被改的面目全非。
-
因为时间紧迫急急忙忙地走个过场。
编写可审查的代码
出现代码积压而失控的问题,审查人员并不是唯一一个需要负责的人。举个例子,如果你的同事花了一周时间为一个大型程序添加了乱七八糟的代码,那么发布的补丁就会变得很难审查,有太多的内容需要理解和钻研。甚至于连代码目的和基本架构都看得云里雾里。这是写代码的不是。
在编写可审查的代码之前,还需要做一些准备。如果需要做一些棘手的架构决策,那么最好和审查人员先讨论一番。这将能让你的代码更容易审阅和理解,因 为他们提前已经知道你想实现什么以及计划如何实现。这也可以避免,要是审查人员之后提出一个截然不同又更好的方法,而导致你不得不重写一大片代码的情况。
项目架构应该在设计文档中详细描述。这很重要,因为它能让新的项目人员更快地理解现有的代码库,还能有助于审查人员更好地完成他们的工作。此外,单元测试能让审查人员更好地理解各个组件的使用。
如果在你的补丁中还包含了第三方代码,那么单独提交。试想一下,要是代码中间插进去9000行jQuery,是不是大大增加了审查的难度!
创建可审查代码最重要的步骤之一就是给你的代码审查做注释。这需要你自己预先审查过,然后在你认为有助于审查人员理解的地方添加注释。我发现,注释 后的代码审查所需的时间相对较短(通常只需几分钟)。当然,代码注释还是应该酌情使用。此外,有研究表明,开发人员自己在给代码注释的时候也会发现许多存 在的缺陷。
代码重构
有时候,我们必须重构代码库。如果恰巧碰到的是一个大型的应用程序,那可能就会需要几天的时间(甚至更多),同时会产生大量的补丁。在这种情况下,想要做到标准流程的代码评审可能是不切实际的。
最好的解决办法是逐步重构代码。先给定一个合理范围,确定相应的代码库,然后朝着目标方向做整改和重构。第一部分完成之后,审查并发布,然后进行第 二部分的重构……,直到全部完成。这种阶段式的方法可能并不总是可行的,但是如果我们在思考和规划时使用这样的方法,可以避免重构时大规模的单片补丁。当 然这种方式可能需要的重构时间更多,但是也会产出更高质量的代码,以及更加轻松的审查过程。
如果增量重构代码还是不可行,那么还有一个解决办法就是结对编程。
解决争端
毫无疑问,团队中的每个成员都是人才,但是这也很容易导致在面对特定的编码问题时,会出现意见分歧的情况。作为开发人员,我们应该保持开放的态度,并且也要能虚心接受审查人员给出的不同意见。
而作为审查人员,说话要委婉。在提建议之前,先考虑一下你的意见是否真的更好或者仅仅只是因为品味不同而已。如果你选择的代码区域确实需要改进的, 那么整个说服过程就会简单得多。并且话要这样讲,“这里还值得考虑一下……”,“有人建议说……”,而不是“我闭着眼睛写的算法也能比你的高效。”
当然如果你们双方都不肯妥协的话,可以要求你们都尊重的开发人员来看一看,给出他的意见。
作者:小峰
来源:51CTO

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
云达科技技术处协理李家瑞:合作才是硬道理
2016年8月5日,全球开源领导厂商红帽携手ZD至顶网、Intel、云达科技共同举办的主题为“开放 融合 开源开启存储新世界”的2016年中国开源企业存储峰会在北京富力万丽酒店隆重召开。在峰会下午,云达科技(QCT) 技术处协理李家瑞发表了以“Ceph参考技术架构与QCT解决方案”为主题的精彩演讲。演讲结束后,我们邀请到李家瑞先生坐客ZD专访间,针对Ceph架构以及当前市场趋势发表个人观点。以下为独家专访视频。 记者:请您介绍下云达科技主要的业务在哪个领域。另外,也分享一下您在此次开源存储峰会上演讲的主要内容。 李家瑞:云达科技是上市公司广达电脑集团的一个子公司,之前广达做了很多面向IT产业的OEM、ODM业务。随着云时代的来临,我们也发展出了服务器、存储、网络交换器这样的业务,来服务更广大的云计算平台提供者。 随着这几年业务的进展,我们除了做OEM、ODM业务之外,也开始发展自有品牌的业务。云达科技就是我们发展自有品牌业务而创建的一个子公司。云达科技除了原来的服务器、存储器、网络交换器以及机架产品外,我们也进入到解决方案领域里面,包括今天跟红帽在合作的存储解决方案,就是在这样一个过程...
- 下一篇
《Kinect应用开发实战:用最自然的方式与机器对话》一导读
前 言 为什么要写这本书Kinect以Natal为开发代号在CES2010一亮相就光芒四射。发布会上那段视频令我印象深刻:你可以用身体自如地进行游戏,而且无需任何控制器。也许就在那一刻,全世界的很多技术爱好者都在想:“我们还可以用Kinect干点什么呢?”我将这段视频转发给复旦大学附属中山医院的阴忆青博士。他看完后敏锐地问道:“是否可以基于Kinect开发手术室的应用?”那时Kinect还未正式发布,但这个念头着实让我兴奋不已。我们似乎已经进入了这样一个时代:计算机已逐渐拥有与人类媲美的感知能力—它们能看到、触摸到、感觉到我们所处的地点和运动状态。科幻电影银幕中的场景,正逐步出现在我们的身边,并成为生活中的一部分。Kinect正是在这样的背景中诞生的,人机交互从二维世界扩展到三维空间,而且是非接触的交互体验(Touch-Free)。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Red5直播服务器,属于Java语言的直播服务器
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Hadoop3单机部署,实现最简伪集群
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音