聊Code review(上)

简介: 为什么要做代码review?如何去做代码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。


分享者简介

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

个人公众号:荣平


                                                        中生代技术群微信公众号

                                                da9312524921e637b684eed7bf3249db58f7badc

目录
相关文章
|
2月前
|
缓存 网络协议 BI
阿里云云解析DNS个人版19.9元值得买,功能及特性介绍
阿里云DNS云解析个人版限时优惠19.9元/年(原价48元),全球100+节点,支持DNSSEC、智能解析、URL转发等功能,解析稳定快速,仅限个人开发者购买,限购1个,性价比高,值得入手。
282 13
|
3月前
|
存储 缓存 弹性计算
阿里云服务器实例怎么选?经济型、通用算力型、计算型、通用型、内存型区别及选择参考
在我们通过阿里云的活动选购云服务器的时候会发现,可选的云服务器实例主要以经济型、通用算力型、计算型、通用型、内存型为主,相同实例可能又分为多个实例规格(例如通用算力型u1与u2i),另外,同配置的云服务器往往有多个不同的实例可选。本文为大家详细介绍阿里云的经济型、通用算力型、计算型、通用型和内存型实例的性能特点及适用场景,以供大家选择参考。
370 25
|
7月前
|
Linux Windows
Windows 10/11从官网下载ISO的方法
本文介绍了两种从微软官网下载Windows 10/11 ISO镜像的方法。一是通过修改浏览器User Agent为Linux系统,使官网提供ISO下载链接;二是使用UUPDUMP工具,从官网下载并转换为ISO格式,支持最新开发版,操作简便。
|
5月前
|
传感器 人工智能 安全
AR 巡检在工业的应用|阿法龙XR云平台
AR巡检技术广泛应用于电力、石化、制造、交通等行业,通过AR眼镜或平板实时叠加设备参数、历史数据及操作指引,提升巡检效率与准确性。支持远程协作、自动记录分析,并可在高危环境实现无人巡检,大幅降低安全风险,推动智能化运维升级。
|
12月前
|
人工智能 C# C++
在 Visual Studio 上体验腾讯云 AI 代码助手
本文介绍如何在 Visual Studio 2022 中安装和使用腾讯云 AI 代码助手。首先,通过扩展管理器搜索并安装插件,重启 VS 完成安装。接着,在工具栏的“工具”中找到并启动助手,快捷键为 ALT + T。测试时输入问题如冒泡排序,助手会生成 C# 代码并可直接运行。建议优化默认代码语言为 C#、增加代码插入功能,并统一显示位置以提升用户体验。
979 1
|
JSON JavaScript 小程序
使用VSCode搭建UniApp + TS + Vue3 + Vite项目
`uniapp` 是一个基于 Vue.js 的框架,支持一次开发多端部署,深受前端开发者喜爱。本文详细介绍如何使用 `VSCode` 搭建 `uniapp` 项目,包括安装 `node` 和 `pnpm`、创建项目、安装扩展组件、配置 `Json` 文件注释及安装相关插件。通过这些步骤,你可以高效地使用 `VSCode` 开发 `uniapp` 项目,并享受代码提示和自动补全功能,提高开发效率。
1328 24
使用VSCode搭建UniApp + TS + Vue3 + Vite项目
|
安全 IDE Java
java代码开发规范详细解读
java代码开发规范详细解读
1084 0
|
存储 编解码 算法
PyMuPDF 1.24.4 中文文档(七)(4)
PyMuPDF 1.24.4 中文文档(七)
292 0
|
弹性计算 缓存 监控
云效将项目代码部署到云服务器ECS
云效支持一键和手动部署,一键部署因其高效、一致性和可重复性而受青睐,但也存在灵活性不足和初期设置复杂的挑战。优化方向包括简化脚本、提供选项、完善文档、集成监控和回滚机制。一键部署步骤概括为:准备云效项目和ECS,配置项目和环境,编写部署脚本,设置一键部署,测试脚本,审核发布,监控结果,及后续维护。实际操作应参照云效最新文档。