阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

代码审查的实践要素

  • 2013-07-08
  • 本文字数:1481 字

    阅读完需:约 5 分钟

虽然代码审查是一个被广泛采纳的实践,但是由于存在很多的实践方式,所以开发团队经常搞不清楚它的最佳实践是什么样的,Lorinda Brandon 尝试从多个方面来分析了正确的代码审查时间应该重点考虑的几个因素。

人员结构

在你的团队中有多少同事拥有足够的专业技能来担当合格的代码审查者?作者曾经和多个开发团队沟通过,这些团队都声称本身只有一个资深的开发人员,如果让他来负责所有的代码审查工作,那么团队的核心开发就无法开展了。作者也遇到过类似的情况。在一个小规模团队里,资深的同事总是忙不过来,因为核心的工作都在等着他做。

地理位置

你的团队成员是如何分布的?他们是否是分散在世界各地还是坐在同一个敞亮的办公室里? 代码审查需要精力的专注和反馈,如果开发人员能够面对面的沟通,那么审查工作会便于实施。而物理隔离的远程团队很难达到代码审查的满意结果。

所在领域

你所在的IT 领域需要遵守怎样的规则和约束呢?如果你在一个受到严格监管的行业,那么你必须遵循有关审计和报告的规则,这意味着你必须想办法跟踪代码审查的频率和质量。如果所在的领域把安全性作为重点,那么可能在代码审查过程中要引入安全审计。

复杂性

你的代码复杂性如何?在代码审查时,需要多个不同专业技能的审查者吗?例如,游戏开发可能会引入非常复杂的业务逻辑来处理文字交互和场景跟踪,同时还需要特定的动画处理和内存管理技术。在审查如此复杂的代码时,应该引入多个审查者从不同角度来检阅代码的质量。

而且在许多情况下,不同的项目有不同的需求——存在多个团队构建应用,需要不同的配置文件。这里有一些技巧可以帮助你改进代码审查过程的工具并解决一些可能会面临的问题:

1. 促进沟通

任何审查过程,不论是代码还是文档还是绩效,最好是面对面进行。在你使用工具做完代码审查之后,与相应的开发人员约个时间做口头的反馈。如果你们不在同一地区,可以利用视频或者电话来进行沟通,但是这种沟通是必要的,你可以以此作为协作和指导的一种手段。

2. 利用专业技能

如果被审查的代码与其他代码领域存在关联,或者对安全、性能、可扩展性等方面存在一定的影响,你可能无法只安排一个人来完成审查工作。你需要多个人来查看代码以确保所有可能的后果都被考虑在内。在这种情况下,最好找到一个工具来协助多个人完成审查工作。该工具的作用包括指定哪个人审查哪个角度并把相应的代码展现出来,而且还可以保存审查人员的注解。

3. 公开审查意见

审查工具的优点之一是多人可以集中地审查相同的代码。把所有人叫到一个屋子里做团队审查非常不利于大家考虑各个不同的方面。但是工具可以帮助你让大家分别查看代码并把所有的意见集中起来:

  • 避免意见重复,如果别人已经发表了类似的看法,那么后面的人就不用记录了。
  • 团队学习,通过查看别人的意见能够学习其他人的思维角度和专业领域。
  • 监督审查过程。

提到代码审查的工具,坚果云团队建议“使用好的工具进行轻量级的代码审查”:

“工欲善其事,必先利其器”。我们使用的是 bitbucket 提供的代码托管服务。每个团队成员独立开发功能,然后利用 Pull Request 的形式将代码提交给审查者。复审者可以很方便在网页上阅读代码,添加评论等,然后原作者会自动收到邮件提醒,对审阅的意见进行讨论。即使团队成员分布在天南海北,利用 bitbucket 提供的工具也能很好的进行代码审查。

Eric Landes 在一篇名为《敏捷技巧:什么时候以什么方式来进行代码评审》的文章中,提供了一个时间安排的例子:

  1. 概览本次代码评审的故事 (10 分钟)
  2. 讨论团队指标 (10 分钟)
  3. 强调评审的特别关注点 (5 分钟)
  4. 深入地评审代码 (55 分钟)
  5. 代码覆盖率
  6. 架构
  7. 深入的分析报告
  8. 总结并记录行动事项 (10 分钟)
2013-07-08 08:212751
用户头像

发布了 501 篇内容, 共 248.3 次阅读, 收获喜欢 57 次。

关注

评论

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

再仿个人主页来看 GetX 和 Provider 之间的 PK

岛上码农

flutter ios 前端 安卓 6月月更

如何针对海外不同地区进行音视频自动化测试?丨Dev for Dev 专栏

声网

自动化测试 Dev for Dev

【用户文章转载】版本管理这件事,没有偏执,惟有极致

龙智—DevSecOps解决方案

游戏开发 版本管理 CI工具链 周版本制度

leetcode 198. House Robber 打家劫舍(中等)

okokabcd

LeetCode 动态规划 数据结构与算法

转转统一权限系统的设计与实现(设计篇)

转转技术团队

权限系统 rbac

“多元化”通证经济模型:DAO的神经和血液

CECBC

一文带你认识HTML

未见花闻

6月月更

如何做好产品管理

PingCode

网站制作FAQ页面必要性及方法

小炮

IP核是什么?有什么类型?半导体IP核全攻略

龙智—DevSecOps解决方案

知识产权 半导体 芯片开发 半导体IP核 IP核管理

力扣每日一练之二维数组上篇Day4

京与旧铺

6月月更

研究uni-app的第五天

恒山其若陋兮

6月月更

揭秘攻防演练中红队需要什么样的人才

穿过生命散发芬芳

6月月更 攻防演练

数字人民币预付式消费的监管之道,智能合约能不能解决所有问题?

CECBC

频频破圈,走向百业:大模型的毕业季

脑极体

阿里云智能编码插件进行了一个上新大动作

阿里云云效

云计算 阿里云 云原生 代码

【LeetCode】数组中的 k-diff 数对Java题解

Albert

LeetCode 6月月更

数据质量管理

奔向架构师

数据治理 数据管理 6月月更

el-select数据量过大引发卡顿,怎么办?

华为云开发者联盟

前端 测试 数据 华为云

官宣!Apache Doris 从 Apache 基金会毕业,正式成为 Apache 顶级项目!

SelectDB

Apache 数据库 apache doris

95后阿里P7晒出工资单:狠补了这些个技术栈,真的香啊

Java全栈架构师

Java 程序员 面试 架构师 Java面试题

测试基础之:面试的信心来源于过硬的基础

甜甜的白桃

软件测试 核心竞争力 测试开发 功能测试 6月月更

【网易云信】C++ 静态反射在网易云信 SDK 中的实践

网易智企

c++ 开发工具

浅谈 REST API 身份验证的四种方法

wljslmz

REST API 6月月更

DevStream 成为 CNCF Sandbox 项目啦!- 锣鼓喧天、鞭炮齐鸣、红旗招展、忘词了。

胡说云原生

开源 cncf DevStream

Java Core 「9」J.U.C 同步工具类-1

Samson

学习笔记 Java core 6月月更

C++ 静态反射在网易云信 SDK 中的实践

网易云信

c++ 开发工具

八大误区,逐个击破(3):在云上,变更和数据的管理都不足为虑

龙智—DevSecOps解决方案

atlassian云版 版本选择 迁移上云

通过DAO的现状,看Web3最具影响力的基础设施M-DAO

小哈区块

盘点一些好用且小众的 Markdown 编辑器

宇宙之一粟

markdown编辑器 6月月更

vue prop传递数据

小恺

6月月更

代码审查的实践要素_语言 & 开发_崔康_InfoQ精选文章