写点什么

代码审查最佳实践

  • 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:594961
用户头像

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

关注

评论

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

kotlinalso函数,34岁程序员年薪50w

android 程序员 移动开发

产业数字化的思考

Geek_vidmje

端智能研发核心套件:MNN 工作台深度剖析

阿里巴巴终端技术

深度学习 ios android 移动端 端智能

企业系统太多?WorkPlus让工作事半功倍

WorkPlus

喜大普奔!BFE 控制平面正式开源发布!

百度开发者中心

负载均衡 云原生 Go 语言 开源技术

开源应用中心 | KodBox快捷高效的私有云在线文档管理系统

开源技术

华为云企业级Redis:助力VMALL打造先进特征平台

华为云数据库小助手

GaussDB GaussDB ( for Redis ) 华为云数据库

kotlin开发网站,字节跳动大神讲座

android 程序员 移动开发

华为全球首发《全光自动驾驶网络白皮书》,助力打造品质联接新体验

打造价值交付体系,企业 CIO 如何应对 DevOps 命题?

BoCloud博云

DevOps 云原生

netty系列之:使用netty实现支持http2的服务器

程序那些事

Java Netty 程序那些事 响应式系统

EMQ 映云科技5G 边缘计算工业解决方案获中国移动创客马拉松大赛三等奖

EMQ映云科技

5G 物联网 边缘计算 移动互联网

RTE2021 实时互联网大会参会感想

轻口味

1024我在现场 10月月更

ironSource 斩获 2021 年度鲸鸣奖三大重量级奖项

技术干货 | 闲鱼:一个优秀的 Push 平台,需要经历怎样的前世今生

蚂蚁集团移动开发平台 mPaaS

消息推送 push mPaaS

[架构实战营] 模块一作业

张祥

架构实战营

kotlinui库,字节跳动内部学习资料泄露

android 程序员 移动开发

kotlin实现接口,已开源下载

android 程序员 移动开发

5面阿里斩获offer(Java岗),原来阿里面试官总喜欢问这种问题

进击的王小二

Java java面试 大厂面试

面试官:如何防止 Java 源码被反编译?我竟然答不上来。。

Java 编程 程序员 架构 面试

3面蚂蚁,一路过关斩将 成功拿到offer定级P6,大厂面试雀食有点难!

进击的王小二

java面试 大厂面试 阿里巴巴面经总结 java

没有一个行业能比房地产中介更需要CRM

低代码小观

企业管理 房地产业 管理系统 企业管理系统 行业管理系统

kotlin入门教程百度网盘,阿里开发7年大牛

android 程序员 移动开发

kotlin协程实现原理,【绝对干货】

android 程序员 移动开发

来,肝了这份网络安全学习计划无敌

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 学习安全

kotlin库,大佬带你看源码

android 程序员 移动开发

Python爬虫实战 | 利用多线程爬取 LOL 高清壁纸

JackTian

Python 程序员 爬虫 后端 实战

各位Oracle DBA们,你们期待的在线实训环境终于来了

墨天轮

MySQL 数据库 oracle redis 实训

game+defi系统开发需求(公司)

Kafka是如何实现高性能的,程序员进阶知识点

android 程序员 移动开发

行云创新马洪喜出席云栖大会,解读云原生时代开发者工具变革探索与实践

行云创新

开发者 云原生 行云 云栖大会 马洪喜

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