聊Code review(上)

篇前的话:本文主要关注互联网应用程序如何做Code review(代码审查)方面。上篇主要描述什么是code review, 为什么要去做,主要包含哪些内容;下篇,主要讲如何组织人员做代码review,对程序员,以及团队有什么影响,重点在下篇。

从事过几年程序开发的猿猿们(注1),听过、或抱怨过: “某某系统的代码太烂”或“某某人的代码太烂”。本文着重说应用软件的code review,将从这些问题去探讨:为什么要做代码review?如何去做代码review,应该注意些什么?在代码层面之外,它能带来什么惊喜吗?

为什么要做代码review?

先看一段Wiki百科的对 Code reveiw 的论述:

代码审查(英语:Code review)是指对计算机源代码系统化地审查,常用软件同行评审的方式进行,其目的是在找出及修正在软件开发初期未发现的错误,提升软件质量及开发者的技术。代码审查常以不同的形式进行,例如结对编程、非正式的看过整个代码,或是正式的软件检查。

代码质量特性归类为6个方面:功能性、可靠性、可用性,效率、可维护性,可移植性。(注2)      

通俗的讲:程序代码,是解决问题的,是和计算机交互的语言,即指令。代码审查,是为了确保指令下达后,能得到预期的结果,并且不会带来我们不希望的东西。程序是用来解决问题,为我们工作的;代码审查,就是确保代码质量,问题得到正确解决,并不能带来新的、不能接受的问题(问题是永远不可能消灭干净的,问题始终是转换中)。

代码,不仅是人和计算机交互沟通的语言工具,更是程序员之间沟通的主要载体。根据贝尔实验室的研究,程序员80%以上的时间花在沟通上。所以有必要在进入软件开发之前,软件团队应该有对代码规范达成共识、并形成相应的文档。该文档,通过代码review的工作进行不断的完善,使之成为新加入程序员的首要学习的知识文件,帮助其快速融入团队和工作。即应该把代码当作团队沟通的一门语言去进行规范,以减少团队沟通成本。

代码规范,以Java为例,可以包括命名规范和书写规范。命名规范包括,包、类,接口、成员变量、方法声明、局部变量、常量的命名。一般遵循下列原则:

1、 尽量使用完整的英文描述符
2、 采用适用于相关领域的术语 ;如医疗软件中各种专业术语。
3、采用大小写混合使名字可读 ;如驼峰命名。
4、尽量少用缩写,但如果用了,要明智地使用,且在整个工程中统一
5、 避免使用长的名字(小于 15 个字母是个好主意)
6、避免使用类似的名字,或者仅仅是大小写不同的名字
7、 避免使用下划线(除静态常量等)

下列是一些不符合规范代码的简单例子:

  • int  a, b, c;
  • public boolean insert1(...);          

正确的代码,应该反映出业务相关性,如:

  • int  previous, current, next;
  • public boolean createUser(...);

对于一些有争议的方面,例如接口命名是否采用大写“I”开头,集合类型的变量是否采用复数。团队采用一个统一的标准就好,不需太过纠结。

书写规范,主要指代码样式、方法或接口的声明、表达式使用是否恰当,代码是否需要拆分,是否有重复代码可以抽取出来,注释是否清晰明了,异常处理、日志记录等。是用空格,还是制表符,用什么换行符?接口入参,是否需要加入版本参数?超过100行的方法代码是否可以拆分?异常处理是由程序本身处理,还是抛出给调用方?日志该如何记录?以上这些都需要结合具体应用或部署场景来做决定。一般建议,为了移植性,统一使用空格,换行符应根据生产系统决定。当接口需要给不同用户,提供有差别的服务时,加入版本参数更好。超过100行的代码要看逻辑是否还可以拆成更小的逻辑单元和代码复用角度去衡量。异常处理,当调用方知道异常类型,而且异常和业务相关时;应将异常抛出由调用方处理。当调用方无法知道或确定的异常,应由程序本身进行处理,并做适当的日志记录。

下列是一些简单代码的例子:
           x = x ^ y;
           y = x ^ y;
           x = x ^ y;

          temp =  x;
          x = y;
          y = temp;

上面的代码都是做值交换操作,前者高效,后者明了。可读性决定了维护性,比效率更为重要。好的代码,应该让大家一眼能看出来,即必须有良好可读性,例如加上一行注释会不会更好呢:
           //   整型值互换
           x = x ^ y;
           y = x ^ y;
           x = x ^ y;

以上只是一些列举,其它约定还有很多,安全性、效率、依赖耦合性要求等,但一般通用原则是应当加入到通用规范中去,例如开闭原则,迪米特法则,单一职责原则;根据语言的不同,是先编译后运行,还是动态编译;运行环境的不同,如32位,64位,小型机、大型机,会有不同的要求。扩展开来,完全可以写成一本书,此处不一一列举。在做代码规范时,把考虑进去是完全必要的。互联网行业发展快,往往因为市场机遇等原因,时间成本的原因,可以将实现功能、稳定可靠地运行、易于阅读理解和维护,作为基本的软件质量要求的底线;效率、安全、可移植性,作为提升软件质量的次要重点。

代码质量是软件的生命线,应当在团队进入软件开发前,达成的共识,依靠团队的力量,不断完善代码的实践,形成良好规范,达到最终提高代码质量的目的。团队成员的代码质量意识,是做好code review的基础,好的代码体现出来的是程序员的素质和人品。

注1:并没性别歧视的意思,为方便男女程序员统一用“猿猿”代称。

注2: 《代码质量》——Diomidis Spinellis,电子工业出版社,P4。



分享者简介

易荣平,架构师,总体规划成员, 负责国美在线总体架构规划,技术规范制定和技术研发推广。善于分析解决复杂业务需求,提出技术解决方案。了解产品设计、敏捷开发,对技术充满热情,关注电商、互联网、云计算、大数据、人工智能。

个人公众号:荣平



                                                        中生代技术群微信公众号

                                               

时间: 2024-09-09 02:26:55

聊Code review(上)的相关文章

聊Code review(下)

 如何进行Code review? 见过很多架构师.高级软件工程师抱怨过Code review没什么效果,这次review出现的错误,下次review时还会出现.也碰到过猿猿抱怨的情况:Code review 浪费时间,很多业务还等着开发呢:或者,Code review那就是某人装X.为什么Code review 那么不好做,没有效果,而且很多公司做不好呢?我的观点是,思路比方法重要,Code review  是为了推广代码的最佳实践,而不是挑出代码存在的问题. 读过上篇应该能得出这样的结论--

同行代码审查(Peer Code Review)实战经验

同行代码审查(Peer Code Review)实战经验 我有时候会听到我们的团队成员这样议论: "项目的Code review 只是浪费时间." "我没有时间做Code review." "我的发布时间延迟了,因为我的同事还没有完成我代码的Code review." "你相信我的同事居然要求我对我的代码做修改吗?请跟他们说代码中的一些联系会被打断--如果在我原来代码的基础之上做修改的话." (LCTT 译注:Code Rev

Code Review for Vue 2.0 Preview

是的!Vue 2.0 发布了! Vue 2.0 preview 仓库在此 首先,当我第一次看到 Vue 2.0 的真面目的时候,我的内心是非常激动的 Demo 来个简单的 demo,首先把 dist/vue.js 导入到一个空白的网页里,然后写: 当然,在大家阅读下面所有的内容之前,先想象一下,这是一个运行时 min+gzip 后只有 12kb 大小的库 <script src="./dist/vue.js"></script> <div id="

我们是怎么做Code Review的

前几天看了<Code Review 程序员的寄望与哀伤>,想到我们团队开展Code Review也有2年了,结果还算比较满意,有些经验应该可以和大家一起分享.探讨. 我们为什么要推行Code Review呢?我们当时面临着代码混乱.Bug频出的状况. 当时我觉得要有所改变,希望能提高产品的代码质量,改善开发团队面临的困境.并且我个人在开发上有很多经验,也希望这些知识能够在团队内传播. 各种考虑后,我们最后认为推行Code Review能改善或解决我们面临的很多问题. 这篇文章的目的不是告诉大家

敏捷软件开发实践-Code Review Process

介绍: 在敏捷软件开发中,从代码的产生速度上来看,要比传统Waterfall产生速度高很多.因为我们把时间安排的更加紧凑了.那么这么多的代码,如何能保证这些代码质量呢?很多人可能直接想到静态代码检测工具.没错,那些是可以定义一个代码检查规则来确保代码的质量,但是那个仅仅是从语言角度,那么逻辑是否已经最优化了?可重用性是否已经优化到极致了?这些是静态代码工具不能完成的,所以我们需要Code Review 实现方式: 对于已经在项目组很久的人来说: 虽然传统的code review就是把代码从仓库c

工程中Java Code Review发现的问题汇总

工程中Java Code Review发现的问题汇总 概述 最近对团队内近期开发的一些Java web工程进行了Code Review,这些Code主要是需要在多个工程中复用的基础组件,Java代码为主.审核中发现了一些编码问题(暂时不考虑设计模式.架构层面的),这里进行一下汇总总结. 问题列表 注释 普通的程序员最痛恨接手或使用没有文档的代码,而程序员一般又不喜欢些文档,代码注释是文档的一种,在Code Review中发现工具扫描时注释率很高,但是真正进去去看,注释率极低. 接口一定要有详细的

Code Review 理论与实战

一. Code Review 简介 1 Code Review 的目的 凡事知其然还要知其所以然 , 我们首先需要知道什么是 Code Review 和我们使用它的目的是什么. Code Review 是一种用来确认方案设计和代码实现的质量保证机制,通过这个机制我们可以对代码,测试过程和注释进行检查. Code Review 主要用来在软件工程过程中改进代码质量,通过 Code Review 可以达到如下目的: 在项目早期就能够发现代码中的BUG 帮助初级开发人员学习高级开发人员的经验,达到知识

不重视 TDD 与 Code Review 的代价

近些年来,越来越多的人开始向我咨询测试驱动开发(TDD)的好处.所谓 TDD,就是在将代码进行部署之前,利用各种自动化测试来确保代码能够正常工作.在进行测试的时候,你需要寻找测试失败的地方,然后不断修改,必要的时候还需要对代码进行重写.实践证明,TDD 是软件开发过程中必不可少的一环.而且它还能够帮助企业和员工节省大量的时间. 近些年来,越来越多的人开始向我咨询测试驱动开发(TDD)的好处.所谓 TDD,就是在将代码进行部署之前,利用各种自动化测试来确保代码能够正常工作.在进行测试的时候,你需要

7 个 code review 的技巧(转)

Code review,中文译为「代码审查」,是指对代码进行系统性的审查,通常是和其他开发者来共同进行.这里作者就讲了在 Asana 中他们是怎么来做代码审查的. 1.先确定 code review 的目标优先级 在 code review 之前先和你的团队成员明确 code review 中事项的优先级. 作者认为 code review 中应该做的事: 熟悉同事在编程时的思考方式,这样其余同事以后如果有需要就可以更轻松.快速的修改代码. 向同事介绍修改了哪些文件,增加了什么样的功能,这样在问