写点什么

代码审查最佳实践

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

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

关注

评论

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

AI技术在医疗领域中有哪些改变?

小魏写代码

Transformer大模型学习导引:光速掌握大模型

鲸品堂

大模型 企业号 3 月 PK 榜

基于SkyEye仿真飞腾处理器:运行U-Boot并加载Phytium-FreeRTOS

DevOps和数字孪生

SkyEye 飞腾处理器

CentOS下查看ssd寿命

百度搜索:蓝易云

centos 运维 SSD 云服务器 smartmontools

科普:嵌入式多核并行仿真

DevOps和数字孪生

仿真建模 多核并行仿真

北京大学讲座:大模型时代的软件研发:技术、范式与工具

华为云PaaS服务小智

人工智能 华为云

中国滑雪运动趋势洞察2024

易观分析

报告 滑雪

《Java核心技术·卷 I(原书第11版)》PDF

程序员李木子

雷龙科技Nand flash芯片试用体验

梦笔生花

存储 芯片 Flash

crawlab通过docker单节点部署简单爬虫

百度搜索:蓝易云

Java php Go golang Linux

Java+Github+Jenkins部署

百度搜索:蓝易云

golang GitHub Linux 运维 jenkins

报名最后一天!Farris-Vue前端组件创新挑战赛火热报名中!

inBuilder低代码平台

PHP基本语法解析与应用指南

百度搜索:蓝易云

php html 云计算 Linux 运维

Java 文件处理完全指南:创建、读取、写入和删除文件详细解析

小万哥

Java 程序人生 编程语言 软件工程 后端开发

开源推荐 | 简洁且强大的开源堡垒机OneTerm

37丫37

DevOps 运维 运维自动化 堡垒机 安全审计

AI大模型助力:离线生成中英双语字幕

百度开发者中心

人工智能 数字化时代 大模型

数据平台“国产替代”掣肘在迁移?奇点云的工业制造实践解读

先锋IT

Github 每日热榜 2024.03.18

天马行空的大杂烩

程序员 开源软件 最新软件

git rebase和merge区别

百度搜索:蓝易云

git Linux 运维 Rebase merge

2023 re:Invent 使用 PartyRock 和 Amazon Bedrock 安全高效构建 AI 应用程序

亚马逊云科技 (Amazon Web Services)

生成式人工智能

[自研开源] MyData v0.7.3 更新日志

LIEN

开源 数据集成 业务融合 API对接 mydata

低代码助力企业数据资产价值升级

Crabc低代码平台

低代码 数字化 数据服务

基于SkyEye仿真6678处理器:实现国产操作系统ReWorks仿真运行

DevOps和数字孪生

国产操作系统ReWorks SkyEye

牛刀专业低代码开发实战—配件出入库管理

牛刀专业低代码

低代码开发 低代码平台 牛刀低代码 牛刀专业低代码

arthas火焰图(async-profiler)在云交易中的运用

京东零售技术

后端 效能提升

招个Java工程师,却发现了一个宝藏平台

王磊

Java 面试

[人脸修复]基于CodeFormer的人脸修复模型配置

alexgaoyh

环境配置 CodeFormer 人脸修复 人脸复原 旧照片修复

深度解析大模型:概念、架构与应用价值

木南曌

AI 大模型

何为代码检查服务的门禁级检查

华为云开发者联盟

开发 华为云 华为云开发者联盟 代码检查

第43期 | GPTSecurity周报

云起无垠

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