写点什么

代码审查的实践要素

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

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

关注

评论

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

丰田汽车选用Mobileye和采埃孚的安全技术

E科讯

从酷睿双核到Tiger Lake-H,英特尔如何帮游戏笔记本完成蜕变

E科讯

HTTP/3 初体验

运维研习社

nginx 运维 HTTP3.0 5月日更

深入浅出分布式存储性能优化方案

焱融科技

云计算 分布式 高性能 云存储 超融合

2、kafka 2.8.0 源码环境搭建

杨四正

大数据 kafka 消息队列 kafka2.8

支付中心设计

try catch

支付 支付中心

进程内缓存助你提高并发能力!

万俊峰Kevin

缓存 微服务 本地缓存 Go 语言

kafka基本概念

杨四正

大数据 kafka 架构设计 消息队列 消息队列架构

DEMO WORLD分论坛聊些啥?高端制造、未来出行、皮肤科技、未来产业……

创业邦

创新

java性能分析与问题定位 实战

try catch

Java 性能分析

架构实战营模块3课后作业-基于“自研集群+MySQL存储”的消息队列架构设计方案

吴建中

架构实战营

Rust从0到1-错误处理-panic!

rust 错误处理 Error 不可恢复错误

人人都在谈的图数据库到底是个啥?

华为云开发者联盟

大数据 数据结构 数据 图数据库 华为云图引擎图数据库GES

🚄【Redis 干货领域】从底层彻底吃透 AOF 重写 (源码篇)

码界西柚

redis aof Redis 协议 Redis 核心技术与实战 5月日更

如何成为云原生技术高阶玩家?华为云最近做了这件事

华为云开发者联盟

容器 DevOps 微服务 云原生 华为云

论Http、Socket、WebSocket、WebService(SOAP)之间的区别

Damon

5月日更

让人工智能成为保险行业科技基因的一部分!

百度大脑

人工智能 保险

JavaScript+TensorFlow.js让你在视频中瞬间消失

不脱发的程序猿

JavaScript 人工智能 开源 TensorFlow.js

iOS开发底层原理技术~RAC深度解析

ios cocoa 程序员 移动开发

测试开发专题-开篇

禅道项目管理

软件测试 自动化测试 测试开发

冈萨雷斯《数字图像处理》学习总结及感悟:第一章 绪论 百闻不如一见

老猿Python

图形图像处理 数字图像处理 冈萨雷斯

私有云解决方案

anyRTC开发者

音视频 WebRTC RTC sdk

智能视频云3.0全景图来了!深度融合视频应用共创行业新生态

百度大脑

云智一体 智能视频 云智技术

前端实操案例丨如何实现JS向Vue传值

华为云开发者联盟

Vue 大前端 js Promise Vuex state

NumPy之:ndarray多维数组操作

程序那些事

Python Numpy 程序那些事

【LeetCode】找出第 K 大的异或坐标值Java题解

Albert

算法 LeetCode 5月日更

千万级学生管理系统考试试卷存储方案设计

Hesher

架构 Architecture 架构实战营 存储系统

详解JQuery框架的五大选择器

华为云开发者联盟

jquery 选择器 层级选择器 属性选择器 过滤选择器

飞桨前沿升级、顶级开源项目、产教融合育人,WAVE SUMMIT论坛内容先睹为快!

百度大脑

深度学习 飞桨

看MindSpore加持下,如何「炼出」首个千亿参数中文预训练语言模型?

华为云开发者联盟

框架 mindspore 盘古 NLP 大模型 中文预训练模型

多线程 VS 多进程(一)

若尘

多线程 多进程 Python编程 5月日更

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