写点什么

敏捷技巧:什么时候以什么方式来进行代码评审

  • 2010-12-08
  • 本文字数:1558 字

    阅读完需:约 5 分钟

Eric Landes 最近在一篇名为《敏捷技巧:什么时候以什么方式来进行代码评审》提到

代码评审是一个帮助团队提高他们的软件成熟度的工具,并最终意味着交付给客户更高的价值。

他从如下几个环节来介绍代码评审

敏捷工程实践

Eric 首先建议从如下通常敏捷团队需要用的工程实践来展开:

  • 测试驱动开发
  • 持续集成
  • 作战室
  • 结对编程
  • 小版本发布
  • 重构
  • 代码共有

并强调

团队需要确保在代码评审时将好的开发原则牢记于心,进行代码评审是让团队关注他们何时以及是否遵循这些原则和良好实践。

什么时候实施代码评审

代码评审的时机应该由团队来决定,这没有什么标准,这取决于你的团队成熟度和 Sprint/ 迭代的周期,Eric 的建议是

如果你的团队 2 周一个迭代或者 sprint, 那么两个 sprint 之后进行第一次代码评审似乎是个好时机,这时候有足够的代码来评估… 而且好的代码评审能够确保团队关注良好的工程实践,并允许不断引入新的实践。

谁来做代码评审

各种开发水平的开发者应该都要来参加,能够让团队成员学习并强化基于代码的原则,并且一定要有讨论和反馈。同时

你的 QA 同事也要参与,如果他们也有开发任务的话。

开始进行代码评审

如果你是一个团队领导,Scrum Master 或者项目经理但从来没进行过代码评审,别害怕!

因为代码评审并不需要完全手工进行,有一些现成的工具而且团队的技术成员也会来帮你,但你要做好充分的事先准备。

准备

Code Coverage 代码覆盖率

Eric 告诉读者

一个团队需要有一些基本的质量标准,比如单元测试的业务逻辑的代码覆盖率,有很多这样的工具,比如.NET 环境下的 nCover,Visual Studio Test 等,Java 环境则有 jCover, hansel, CodeCover 等。

并且

代码覆盖率会反映一些问题,如果有覆盖率有低于 20% 的代码,那可能要对其提出疑问…要注意…也许会有一个好的理由,但是这更多是一个谈话的开始,而不只是一个报告卡。

Architecture 架构

对于代码评审的架构部分,Eric 提到

这也是个了解架构的好时机…要把所有的老架构图和最新的架构以及类库放到一起进行…

Code Analysis 代码分析

可以借助于工具来做一定的事先分析,

在会议之前通过分析工具过一遍代码,这样你可以知道关注什么,从哪开始。

相应的工具比如.NET 环境下的 nDepend,他们生成的报告可以告诉你循环的复杂度以及继承的深度等。

代码评审

准备好后就可以和团队进行会议了,但要预留出讨论的时间,给团队来互动并相互指导。 Eric 建议

团队的大小和特点决定会议需要多长…比如在一个 8 个开发者,一个项目经理,一个开发经理的团队,大概需要一个半小时来进行代码评审…但这只是在第一次会议有用,之后就要基于第一次的结果来适应和调整。

实际当中我们的代码评审时间可能比这个都要长,如何更有效地展开代码审核会议,作者还提供了以下一个时间安排的例子:

1) 概览本次代码评审的故事 (10 分钟)

2) 讨论团队指标 (10 分钟)

3) 强调评审的特别关注点 (5 分钟)

4) 深入地评审代码 (55 分钟)

a) 代码覆盖率

b) 架构

c) 深入的分析报告

5) 总结并记录行动事项 (10 分钟)

这样的例子可以提醒团队关注什么是最重要的,这也会因团队实践而不同。在评审中团队成员不仅要关注单元测试的覆盖率,复杂度,也要关注依赖性,耦合性等。

他总结说

在会议中,团队应当讨论上面所列的问题,而且任何问题都应该可以交流…如果需要对之采取行动…那就记下要跟进的事项,以确保问题得到解决。 在会议结束的时候…回顾行动项目并且提示团队实践中的积极方向。

代码评审实施完了!

你也许已经按照上面的步骤实施了一次代码评审,他最后再次提醒读者

记住代码评审是一个帮助团队提高他们软件工程成熟度的工具,而且这将最终意味着交付给客户更高的价值!

Eric Landes 是一个来自于大型公司 IT 部门的项目经理、特别专注于敏捷团队的教练。他拥有超过四年的经验使用敏捷 / 精益技术以实现客户价值和并让团队专注于项目。

感谢金明对本文的审校。

2010-12-08 04:514226
用户头像

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

关注

评论

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

Spring 依赖注入有哪几种方式

千锋IT教育

龙蜥技术委员会主席杨勇:下一代操作系统展望

云布道师

开源 操作系统

论文领读|基于 VQVAE 的长文本生成

澜舟孟子开源社区

人工智能

Kotlin类声明和构造器(constructor)

子不语Any

android kotlin 11月月更

易观千帆 | 2022年10月银行APP月活跃用户规模盘点

易观分析

报告 手机银行

超级自动化行业前景广阔——首个数字化转型国家标准发布:价值体系优化、创新和重构是数字化转型根本任务

九科Ninetech

完全解析大数据中MapReduce的运行流程

好程序员IT教育

大数据 MapReduce Service

云视频会议哪家强?华为云会议更专业“会”更好!

i生活i科技

华为云大数据平台,助力企业数字化转型成效明显

爱尚科技

挖掘数据价值,华为云大数据BI解决方案有绝招

科技怪授

做电商的看过来,华为云大数据BI方案驱动业务增长

科技怪授

服务全球开发者!灵雀云与Ubuntu推出一体化云原生解决方案

York

容器 云原生 操作系统 开源生态

华为云大数据轻量级解决方案,让数据“慧”说话

科技怪授

2022年10月中国网约车领域月度观察

易观分析

报告 网约车

Kotlin函数和扩展(extension)

子不语Any

kotlin Andrdoid 11月月更

华为云大数据BI 解决方案的超高性价比

IT科技苏辞

易观分析:2022年Q3中国跨境进口零售电商市场规模为1124.8亿元

易观分析

报告 跨境电商

人人都可以给想象插上翅膀(内含AI绘画教程)

鼎道智联

openai AI绘画 鼎道智联

项目管理软件有哪些?

优秀

项目管理软件

【web 开发基础】PHP使用自定义函数库 (39)

迷彩

web开发基础 11月月更 自定义函数 函数库引入 函数库

从传统数据治理转向主动数据治理!

用友BIP

华为云大数据BI解决方案助力“智能智造”

爱尚科技

【SpringBoot】配置文件的加载与属性值的绑定

石臻臻的杂货铺

springboot 11月月更

Pycharm 搭建 Django 项目

千锋IT教育

Java通讯录管理系统

我是一个茶壶

Java 11月月更 通讯录管理系统

亚马逊云科技云从业者加速训练营上线啦!

亚马逊云科技 (Amazon Web Services)

培训与认证

适用场景全新升级!扩展 Dragonfly2 作为分布式缓存系统架构 | 龙蜥技术

OpenAnolis小助手

开源 架构 分布式 龙蜥技术 dragonfly2

W3C白皮书之小程序技术标准

FinFish

小程序 W3C 小程序化 miniapps

Prometheus 监测 RocketMQ 最佳实践

阿里巴巴云原生

阿里云 RocketMQ 云原生 Prometheus

记一次HBASE的故障分析和排查过程

鲸品堂

大数据 11月月更

Linux vi/vim

芯动大师

vim教程 11月月更 Linux指令

敏捷技巧:什么时候以什么方式来进行代码评审_研发效能_晁晓娟_InfoQ精选文章