写点什么

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

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

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

关注

评论

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

【GO】LGTM_Grafana_gin_trace中间件(3)_代码实操

非晓为骁

golang Grafana Trace gin tempo

华为“轻松打卡全世界”活动提供一站式出境服务,全球酒店预订85折起

最新动态

Golang微服务框架Kratos应用NSQ消息队列

golang nsq Kratos #微服务

下一个时代的船舵,李彦宏握住AI原生应用

脑极体

AI

演讲实录:DataFun 垂直开发者社区基于指标平台自主洞察北极星指标

Kyligence

数据分析 指标中台

选择住宅ip代理还是数据中心代理?

巨量HTTP

代理IP http代理

《操作系统实战 45 讲》笔记5——接口与虚化

袁世超

操作系统 Cosmos LMOS

Golang微服务框架Kratos应用Pulsar消息队列

golang pulsar Kratos #微服务

Golang微服务框架Kratos应用RocketMQ消息队列

golang RocketMQ 消息队列 Kratos #微服务

多模态 多引擎 超融合 新生态!2023亚信科技AntDB数据库8.0产品发布

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库

[文本提取]基于Apache Tika的文本内容提取

alexgaoyh

Java nlp tika 文本提取 内容提取

Golang微服务框架Kratos应用Kafka消息队列

golang kafka Kratos 消息列队 #微服务

沉浸式体验与 AI 数智助理一起工作的一天

Kyligence

人工智能 数据分析

Linux 爱好者线下沙龙:LLUG 2023 深圳硬核来袭 | 第三站

OpenAnolis小助手

沙龙 龙蜥社区 开源操作系统 LLUG Linux中国

TiDB 7.1.0 LTS 特性解读丨关于资源管控 (Resource Control) 应该知道的 6 件事

PingCAP

数据库 TiDB

"开源奥斯卡”认可!天谋科技 IoTDB 企业版荣获 OSCAR 开源尖峰案例开源技术创新(商业产品)奖

Apache IoTDB

Golang微服务框架Kratos应用RabbitMQ消息队列

golang RabbitMQ Kratos #微服务

如何出色的进行“自我介绍”?

王磊

Java java面试

CIIS 2023丨聚焦文档图像处理前沿领域,合合信息AI助力图像处理与内容安全保障

合合技术团队

人工智能 文档 智能 多模态 大模型

医疗虚拟仿真和虚拟现实有什么区别?哪个更好?

3DCAT实时渲染

虚拟现实 虚拟仿真 实时云渲染

使用 Databend 加速 Hive 查询

Databend

API网关是如何提升API接口安全管控能力的?

不思jo

安全 API

Golang微服务框架Kratos应用NATS消息队列

golang 消息队列 Kratos #微服务

华为云,让AI算力入山河

脑极体

云计算

狂热过后,RPA到底是什么?

金小K

RPA RPA评测 RPAxAI

杭州悦数加入龙蜥社区,共同探索图数据库的未来

OpenAnolis小助手

数据库 开源 操作系统 龙蜥社区 杭州悦数

C++输入流和输出流介绍

芯动大师

Golang微服务框架Kratos应用MQTT消息队列

golang mqtt Kratos #微服务

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