如何做有效的代码走查

每天读一篇一线开发者原创好文

▍作者简介

丁一:无线研究院敏捷教练,技术爱好者,喜欢阅读和分享,致力于让敏捷管理实践和技术实践在团队中更好的落地。

代码走查,英文词语叫:Code Review,也叫“代码审查”,它是我们公司的一项传统保留项目。记得一位工作超过20年的老员工说过:“我加入中兴的时候就有代码走查了。”,可见这项实践的悠久历史。

1.代码走查的形式

代码走查的形式有很多种,主要有以下几种形式:

每日走查:只针对每日提交的内容进行评审,走查时间和地点都比较灵活。

专项走查:针对某个具体问题或者专题进行走查。评审人需要提前发送评审内容给大家进行预审,然后安排专门的会议室进行评审,时间较长。

结对互查:提交代码前指定某位同事进行线上评审,评审通过后才能合入代码。

本文要介绍的是每日代码走查,就是大家围在一台开发机周围,逐一轮换讲解所有提交的内容。

就即使是每日代码走查,也被我们团队玩出了花样:

谈心式走查

批判式走查

半蹲式走查

伴侣式走查

2.代码走查的好处

持续、有效的开展代码走查,将会收获许多收益,具体表现在:

能及时发现代码中的Bug,保证版本质量。

提升代码的可读性、可维护性,建立团队共同的编码风格。

有利于知识共享,打破技能壁垒,避免单点故障。

通过展示自己的优秀代码和设计思路,提升了个人成就感。

通过讲解自己的代码,对个人沟通能力也是一种提升。特别是对于平时比较内向或者不太喜欢发言的同学。

给大家提供了一个每天交流、沟通的平台。工作一天了,也挺累的了,是时候停下手工的编码工作,一起说说话,交流一下了。

3.代码走查中的“坏味道”

虽然代码走查有这么多好处,可在实施的过程中并不会像想象中的那么美好,会遇到各种各样的问题,总结起来的“坏味道”有:

开发的时间本来就不多,再加上代码走查,会打乱开发节奏。

评审的同事对代码不熟悉,发现不了问题。

讨论发散或者纠缠在某个具体细节中,导致时间把控不好。

评审量大。只能走查部分同事的代码,其他同事的内容没有覆盖。

提问题的总是那几个人,其他人都是围观群众。

4.如何做有效的代码走查

虽然代码走查很多团队都在做,但要想真正做好它并不是件容易的事情。我们团队经过长期实践,摸索出一些经验和大家分享:

4.1代码走查的时间

代码走查建议在固定时间举行,当团队养成习惯后,就会很自然成为团队日常工作的一部分。以我们团队为例,走查时间安排在:

每天下午16:30--17:30;

第二天上午9:00--9:30。

分两块时间走查是考虑一次走查的内容会很多,有些内容可能走查不完,就分两次进行。如果当天下午能把全部过完,第二天上午就再进行走查活动。

另外,在实践的过程中,如果有同事反馈代码正写在“兴头”上或者正在定位紧急故障,可以申请延缓或者不参加本次走查活动。

4.2代码走查的内容

我们团队的走查内容已经超越了代码本身,还会涉及方案审查、演示等活动。

具体评审内容为;

新增代码:bug修改,新特性或重构引入的代码变更。

设计方案:一般为增量式方案评审。

Mini showcase:针对每日实现的功能进行展示。

4.3代码走查的关注点

l静态编码问题

主要关注静态编码错误、编程风格、命名合理性、Clean Code等内容。

虽然这部分检查项也有有意义,但完全可以在合入代码时,通过静态检查工具(比如Findbugs,PMD等)消除掉。还是要尽量留给团队成员走查业务或者设计等问题。

l功能问题

代码的行为是否与预期一致,其逻辑是否是正确无误?

l设计问题

针对现有的设计提出不同的思路,多问问为什么这么做,有没有更有效的方法,这样通过集思广益可以提供更加优良的设计方法。

l测试问题

v测试用例是否完备?

v测试用例实现是否有效?

l性能问题

新增功能或者修改功能是否对已有性能测试结果有不良影响?

l安全问题

v开源软件协议风险

v是否有安全漏洞

4.4角色

代码走查中的角色需要从不同的维度考虑。

l从业务角色考虑:

业务角色尽量完备:至少包括BA、Dev、QA等角色。特别是BA,无论再忙,还是要参加到团队的走查活动中,从设计层面上保证实现没有走偏,也能从开发人员那里获取最新的问题反馈,从而及时对方案进行修改。

切记:代码走查不只是开发人员的事情!需要多种角色同时参与,因为走查活动不仅仅要看功能是否实现了,还要看代码和设计是否一致?测试用例是否完备和有效?

l从走查活动的角色考虑:

一般包括如下角色:

这里要提的一个关键角色是主持人,

我们团队之前走查代码是没有主持人的,走查时经常出现讨论发散、时间控制不好的情况。

在回顾会上,大家针对这个问题做了讨论,最后选举了一位值得信赖的女主持人。

有了主持人之后,情况果然有了很大改善。一旦发现讨论发散、时间过长的情况,主持人会及时喊停,把大家拉回到正确的节奏上。

主持人要求有敏锐的洞察力,良好的大局观,并且有一定的影响力,最好由团队选举产生,可以是SM,也可以不是。

(找找女主持人在哪里?)

4.5走查过程

4.5.1走查前

每个人介绍下要今天走查的内容和预计时间,便于主持人做好规划。

优先走查自己认为风险较大的地方。

4.5.2走查中

l讲解人先介绍业务背景和代码关键流程,

避免一上来就讲代码,这种方式跳跃性比较强。只有对这部分代码非常熟悉的同事才能发现问题,而那些第一次接触的同事很难做到这一点,于是很快就会失去走查的兴趣。

l一次走查的代码尽量少。

走查的代码行数控制在200--400行。

在审查大的修改时,不仅要看很多行代码,还要查看大量的依赖代码才能理解。

将待审查的代码隔离为小的修改可以降低审查者的精神负担并让审查过程更加顺畅。

l代码走查一页纸规范

很多团队都制定了代码走查一页纸规范,比如资源使用完要释放,多线程并发问题等。有了走查清单后,便于团队快速识别问题,提高走查效率。

l记录发现的问题

对于代码中发现的问题,可以由记录员记录到文档中。而我们团队的做法是让讲解人直接在代码中以to-do的方式进行标记。

4.5.3走查后

对于走查中记录的问题或者代码中标示为“todo”的条目进行修改,然后在下次走查时检查是否修改完成。

4.6沟通

在代码走查时,有时会看到为了争一个问题,双方搞的面红耳赤。在我们强调良性对抗的同时,也要尽量避免由于沟通问题导致的不必要冲突。

前面也提到过,代码走查问题的本质是一个沟通问题。所以这里要提一下代码走查中的沟通技巧:

l对于评审人

1.避免出现“你为什么”,“你为什么不”这样的问题。

它会使人对立,“为什么把它声明为全局变量?”可以更好地表达为“我不明白为什么这里用一个全局变量”。

2.不要提出可能听起来带指责的要求或言论。

例如:“你没有遵循标准XYZ”,更好的方式是:“你对标准 XYZ 有什么看法,它是否适用于这里?”。

3.不要吝啬自己的赞扬。

当发现有好的代码实现或者设计思路时,请及时给与表扬。

l对于讲解人

保持好心态,别人是针对代码提问题,而不是针对人。

本文来自企鹅号 - 中兴开发者社区媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏玉树芝兰

笔记应用怎么选?

第一句是“好脑子赛不过烂笔头”。记笔记很重要。数字时代,我们应善用科技的成果,使用笔记应用来记笔记。

1262
来自专栏云计算D1net

未来云计算服务安全的五大漏洞盘点

黑客从哪里进攻,服务商就在哪里防御,哪里也就是云计算服务的安全战场?由此总结出未来安全的五大漏洞。 ? 第一 、用户接入门户 这里最容易遭到的攻击如下: 1 密...

3604
来自专栏猿人谷

如何系统学习Linux

linux太难用了!(一通鼠标点击,进入/etc) 学习linux,你忘记windows的思维方式了吗? 怎么安装软件阿?那一堆文件是干什么的阿? 学习linu...

4476
来自专栏大数据文摘

15分钟破解保险箱!美国小哥200美元自制开锁机器人

去年,一位名为Nathan Seidle的美国小伙制造了一个低成本机器人,花费了30分钟来打开一个SentrySafe牌保险箱。这个机器人可以将上百万的密码组合...

1183
来自专栏镁客网

维基解密称CIA正在侵入你的电视和手机,监控你的一言一行

1234
来自专栏斑斓

用户体验设计与习惯的因袭

一个月前,微信公众平台的文章编辑器改版。我以为会有重大突破,阅读了公告,因为抱着期待的心态而过分高估,结果是微微的失望。然而,我还没有到“如鲠在喉”的地步,于是...

4386
来自专栏Java学习网

成为专业程序员的 6 个技巧

成为专业程序员的 6 个技巧 1.在你责怪别人之前,先检查自己的代码 先想一想自己的假设和其他人的假设。来自不同供应商的工具可能内置不同的假设,即便是相同的供应...

3176
来自专栏Flutter入门到实战

重构并没有你想象的那么简单

  上个月,有个以前的同事问我:“你在的时候,为什么不把原来的系统都重做了,我们明明有实力啊”。

1083
来自专栏SDNLAB

SDxCentral 2015年NFV报告

1 报告概述 《2015年网络功能虚拟化(NFV)报告》将为读者提供关于NFV市场的发展趋势,以及目前取得进展等方面的观点。我们已经开始看到,在运营商,甚至在企...

3183
来自专栏编程

编程语言遇上超级英雄,谁才是真的本命?

每一种编程语言都有自己的独特风格和个性,这种个性的张扬往往会吸引一群人,变成一个社区的狂欢。如果把编程语言比作超级英雄,你觉得哪些英雄是你心中的本命呢?笔者根据...

26510

扫码关注云+社区

领取腾讯云代金券