在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

代码审查最佳实践

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

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

关注

评论

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

YashanDB数据库日志管理及异常恢复技术解析

数据库砖家

AutoMQ GitHub 突破 8,000 Star!

AutoMQ

架构 云原生 #Github 流数据

时序数据库 IoTDB 集成 SpringBoot Starter,实现时序数据库“零配置”接入

Apache IoTDB

威胁情报平台:通过上下文威胁源信息,全面防御网络入侵

运维有小邓

日志分析 日志管理 #日志分析 日志收集

数字藏品(NFT)开发的步骤

北京木奇移动技术有限公司

区块链 数字藏品 软件外包公司

PAI Physical AI Notebook详解4:基于仿真的GR00T-N1.5模型微调

阿里云大数据AI技术

人工智能 阿里云 模型训练 PAI

破局复杂业务场景:百度数据分析平台(TDA)分析增强与性能优化的双轮驱动

百度Geek说

数据分析 百度数据分析平台 分析增强与性能优化

星闪音频,开启“真无损”非凡音质

极客天地

从 OpenSearch 到 Apache Doris:领创集团日志系统升级实践,降本 45%

SelectDB

apache 社区 数据库 大数据

智慧监督之路:穿透式联查与智能风险识别的融合

inBuilder低代码平台

智慧监督 穿透式联查 智能风险识别

狄耐克以脑机交互技术破局睡眠困境,打造非药物干预新路径

新消费日报

存储失忆症的AI守护官

脑极体

从60帧到360帧:对比ToDesk、向日葵、TeamViewer三款远程巨头的画质进化

小喵子

远程协作 远程 ToDesk

RAG 应用落地指南:基于 EventBridge 构建高可用、可扩展的数据处理管道

阿里巴巴云原生

阿里云 云原生 EventBridge 事件总线Eventbridge

麒麟芯片,暴风雪里的绿洲

脑极体

AI

Spring Boot中使用Swagger3.0.0版本构建RESTful APIs

刘大猫

人工智能 云计算 算法 物联网 大模型

好用的AI PPT制作软件有哪些?8款主流工具功能对比

职场工具箱

人工智能 效率 办公软件 AI工具 AI生成PPT

如何为阿拉伯用户做设计?

inBuilder低代码平台

UX设计 阿拉伯文适配 RTL系统适配 语言布局逻辑

AI多智能体舆情系统:数字世界的“千里眼”与“先知团”

上海拔俗

IT外包与勒索软件:英国经济安全面临的技术风险

qife122

网络安全 IT外包

司马阅携手中网管家,打造湖南AI高地:2025企业AI落地应用峰会长沙站盛势举行

司马阅

YashanDB数据库日志管理及故障排查技巧

数据库砖家

浏览器插件开发经验分享二:如何处理日期控件

一树论

GPUStack v2:推理加速释放算力潜能,开源重塑大模型推理下半场

GPUStack

大模型 大模型推理 vLLM Sglang 高性能推理

ExecuTorch整数溢出漏洞分析与修复指南

qife122

网络安全 移动开发

云拨测:当“正常变更”摧毁全球网络时,谁来守护你的业务可用性?

阿里巴巴云原生

阿里云 云原生 云拨测

别再烧钱做AI!大模型微调GPU终极指南:从入门到放弃?

LLaMAFactoryOnline

人工智能 大模型 AIGC 大模型微调 LLaMA-Factory Online

后 AI 时代测试职业关键的能力——去认知偏差

技艺的尾巴

AI 测试 认知偏差

编程界变天!ClaudeOpus4.5发布:拳打谷歌,脚踢 OpenAI,附保姆级使用教程

王磊

公开仓库镜像哈希泄露安全争议

qife122

安全漏洞 容器安全

竞品月入50万流量的秘密,我用这个免费工具全看到了,AI出海新手的流量分析救星

陆通

出海

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