AICon 深圳站聚焦 Agent 技术、应用与生态,大咖分享实战干货 了解详情
写点什么

代码审查最佳实践

  • 2015-05-13
  • 本文字数:1218 字

    阅读完需:约 4 分钟

代码走查是可以有效提高软件开发人员代码质量的伟大工具之一。不过与其他工具一样,代码走查也有可能会被滥用。在其最近发布的一篇博文中,Kevin London 将其在 Wiredrive 的代码走查的原则具体化,并且为读者介绍了应用这些原则的最佳实践。

简而言之,代码走查是两个或多个开发人员针对用于解决某一问题的代码所提出的修改建议,所进行的讨论。有许多文章都谈及到代码走查的益处,如知识分享、代码质量以及开发人员成长等。不过在关于代码走查中所寻求的目标以及如何进行代码走查讨论方面的文章并不多。

代码走查所寻求的目标

体系架构 /设计

在体系架构 / 设计方面,建议遵循如下原则:

  • 单一职责原则每个类应该有且只有一个职责。更甚于此,我一般会将此原则应用于方法之上。对于某个方法来说,如果需要用“和”来描述方法的功能,那么该方法的抽象级别就可能是有问题的。
  • 开 /闭原则如果是面向对象的语言,那么是不是所有的对象都对于扩展是开放的,而对于修改是封闭的?
  • 重复代码:关于重复代码,我遵循“三振出局法”。第一次出现代码拷贝,可以保持现状,暂不处理,尽管我并不喜欢这样。如果第二次出现代码拷贝,就需要进行代码重构,将公共的功能抽象出来。

在系统架构和设计方面,除了上述实践之外,还包括诸如斜视测试攻击、潜在缺陷、错误处理以及效率等。

编码风格

在编码风格方面,主要包含如下方面的最佳实践:方法命名、变量命名、函数长度、类长度、文件长度、文档注释、已注释代码、方法参数数量以及可读性等。

测试

从测试的角度来说,则需要从测试覆盖度、测试粒度、模拟器的数量、是否符合需求等方面考虑代码走查工作。

提前完成代码自检

在提交代码之前,要提前完成代码自检。使用 git add 添加有改动的文件或目录,然后运行 git diff --staged 命令检查尚未提交的改动。一般来说,会关注如下情景:

  • 是否有包含 TODO 的注释?
  • 变量名称是否有意义?
  • 以及其他前述所提及的事项。

如何处理代码走查

在如何处理代码走查进程方面,Kevin London 提出了一系列关于代码讨论所用的手段。包括提出问题、称赞 / 强化良好实践、私下讨论细节、解释原因、对代码不对人、指出修复的重要性等。

关于心态

开发人员有责任保持可正常运转并且易于维护的代码。因此在代码走查的过程中,务必要保持开放的心态。虽然这对于所有人而言都并非易事。

一般来讲,对于审查人员所提出的建议,如果没有明确的不采纳理由,最好根据建议修改代码。如果审查人员对某行代码提出问题,也就意味着这行代码将来也会对其他人造成困扰。此外,代码改动有可能会帮助揭示出更大的架构性问题或缺陷。

参考资料

整洁代码艺术书单

关于代码走查最佳实践更多详细的介绍,请参考作者的博文


感谢崔康对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-05-13 08:595264
用户头像

发布了 75 篇内容, 共 65.7 次阅读, 收获喜欢 6 次。

关注

评论

发布
暂无评论
发现更多内容

LiteOS内核源码分析:位操作模块

华为云开发者联盟

LiteOS 源代码 位操作 bit Huawei LiteOS

Three.js杂记(十一)—— 精灵与粒子(绘制中国地图)

空城机

大前端 WebGL 3D渲染 3D可视化 three.js

Python-计算机视觉-OpenCV-video

Aldeo

Python OpenCV Video

uni-app跨端开发H5、小程序、IOS、Android(七):uni-app渲染

黑马腾云

html5 uni-app 大前端 3月日更

前端开发:数据处理方法分享(其一)

三掌柜

vue.js 大前端 3月日更

中国最可靠的 Go 模块代理

happlyfox

学习 3月日更

Kubernetes认证管理员

云原生

Kubernetes 云原生 k8s CKA

【Axure9百例NO.45】中继器的不同场景下的样式处理

zhuchuanming

原型设计 Axure 交互原型

开源的 Switch 模拟器——GitHub 热点速览 v.21.12

HelloGitHub

GitHub 开源

教你如何用霍夫变换完成扭曲车牌识别

程序媛观澜

机器学习 图像识别

2021春招Java后端开发面试总结:25个技术专题(最全面试攻略)

比伯

Java 编程 架构 面试 程序人生

纸币会消失吗:数字货币如何走进我们生活

CECBC

货币

区块链圈频现百万元年薪招聘 现金+股票仍难觅良才

CECBC

区块链人才

「产品经理训练营」作业 06:用户路径地图与漏斗模型

狷介

产品经理训练营

区块链下乡

CECBC

区块链

领跑行业!浪潮云斩获“2021云管和云网大会”多项殊荣

云计算 云原生

时间复杂度总结

我是程序员小贱

3月日更

面试拜佛保过?圈内罕见阿里面试官手册,2021最强面试笔记非它莫属

Java 程序员 架构 面试

Wireshark数据包分析学习笔记Day19

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

一个有情怀的PPT模板下载网站

happlyfox

学习 3月日更 工具分享

moviepy音视频剪辑:moviepy中的剪辑基类Clip的属性和方法详解

老猿Python

去了解一下区块链

空城机

区块链 笔记 区块链发展

开启Python学习之旅,分享学习路上的神器集合!

王小王-123

Python 学习 资源分享 工具分享

Python API 邮件发送测试

HoneyMoose

如何减少加班导致的离职?

石云升

项目管理 28天写作 职场经验 管理经验 3月日更

渣硕试水字节跳动,本以为简历都过不了,123+HR面直接拿到意向书

Java 程序员 架构 面试

产品经理能力不够,产品方法论来凑

lenka

3月日更

《Redis 核心技术与实战》学习笔记 07

escray

redis 学习 极客时间 3月日更 Redis 核心技术与实战

(Day30) 谁来驱动变革

mtfelix

28天写作 bewriting

moviepy音视频剪辑:视频剪辑基类VideoClip的属性及方法详解

老猿Python

Python 编程语言 音视频 Moviepy

域名和服务器的购买和配置

空城机

阿里云 轻量级服务器 云翼计划

代码审查最佳实践_最佳实践_丛一_InfoQ精选文章