敏捷开发之LinkedIn的高效代码评审技巧

文章首发于公众号:松花皮蛋的黑板报
作者就职于京东,在稳定性保障、敏捷开发、高级JAVA、微服务架构有深入的理解

阅读和代码评审是每个工程师在日常工作中都要做的事情,然而一个标准的code review流程,实际上很难落地,它要求每次代码变更在部署到生产环境前,甚至是在提交合并前,都需要被另外一个小组成员进行正式的评审。在LinkedIn公司,自从2011年起code review成为了开发流程中法定、强制的一部分,也意味着它成为代码质量保证和知识分享中必不可少的一部分,目标是让团队成员能够迅速提升自己的技能水平

实施公司级的code review最大的一个收益是提升了研发流程的标准化,在LinkedIn公司每个团队使用相同的工具或者流程进行代码评审,意味着任何一个人对其他团队的项目可以提供评审帮助或者贡献代码,这消除了诸如“我可以修复代码中的错误,但如何构建代码并提交修复程序?”这样的问题,这反过来有助于增加工程组织中不同团队之间的协作

我们在将代码评审变成一项法定流程的过程中,为公司建立了良好健康的反馈文化,工程师在他们领域中乐于提出或者接收反馈,而不只是埋头苦干写代码。实际上,高质量的代码审查经验是在公司晋升参考中是举足轻重的,因为那是工程技能最直接的客观证据

通过过去很长一段时间实践,我们总结出了在代码评审中的一些最佳实践和技巧,如下面所示,通过问题的形式呈现,尽量让审查双方都能从中获得最大的价值

我真的明白代码变更的目的是什么吗?

为了加快高质量的code review流程和有效提高团队技能,每次变更提交的代码文件中应该包括变更概要,简要说明背后的需求或者动机是什么,而不是需要从代码更改本身反向推断。实际上,为提交代码写说明文档是重新梳理的过程,从中你可能会发现自己把需求实现搞复杂了,应该再简化下,于是就回头改代码,从而改善已有代码的设计,甚至培养出做事之前先进行推演等等好习惯

我提出的建议是积极反馈吗?

整洁的代码和高度测试覆盖率被视为理所当然的,然而有些code review过于关注代码问题,侧重点变成代码怎么修改才能变得更好,这非常不好,大部分人需要积极的反馈才能得到鼓舞和提高积极性,工程师也不例外,我们不能忽视正面赞赏的价值。当审查员发现代码中好的设计时,应该提出来并给予肯定,这种积极的反馈往往具有传染性,它能让整个团队变得更加有活力

我的代码评审评论表达清楚了吗?

和所有的代码提交一样,任何积极或者消极的反馈都不应该空谈,应该有针对性的解释,如果觉得代码提交者收到反馈后可能一头雾水,可以进行过度解释而不是简洁,不然会产生更多的问题,并需要更多来回沟通。当然,注释也可以非常简洁,比如”消除了重复代码”、“增加了测试覆盖率”,这种类型的解释有助于让团队的价值观得以明确

我是否需要感谢提交者的努力?

某些代码质量不高,需要返工重新编写,在这种情况下,重要的是仍然承认他为之付出的努力,他之前可能只是对业务熟悉程度不够,最佳方式是提供高质量的code review反馈和正确的解释,比如提出“谢谢你,每次代码提交中始终有好的设计”之类的话语,而不是帮他写代码,从长远来看,这其实是在一定程度上复制你的生产力

我们可以从代码评审中获益吗?

这个问题可以让我们非常强有力并且粗暴地评估code review是否有必要。在下班前,工程师应该像对待一个有帮助性的开发工具一样正视代码评审结果,优先级应该比其他工作还要高,如果认为没有作用,就将其删除。没有意义的code review评论的典型示例是与代码格式相关的,那些应该由自动化工具并且是在编写过程中验证,而不是最后由工程师来完成

“测试完成”部分是否足够彻底?

code review中,不但要审查提交者的代码,还要关注做过的测试,除了一些单元测试,还有一些可能是手动的测试。提交者最好列出所有测试过的案例,这样可以让审查者做出更多的测试建议,从而提高质量

在review反馈中,我是否太迂腐了?

一些code review在重要的问题上提出了相当多的修复意见,而不是强有力的建议,也就是说过于关注细节,过于炫技,从而拖慢了整个进度,甚至会造成双方的隔陔。建立一个清晰的、有明确目标、积极的、有吸引力的code review流程是避免上述问题的好方法

总结一下,一个标准的code review流程能够提升代码质量、团队技能和知识互通。当团队中每个工程师都意识到,其他人会阅读我的代码,同时我需要认真对待评审结果,下次代码编写要参考评论然后制作得更好,从而提高工作质量,这是增长和改善的关键

文章来源:www.liangsonghua.me

作者介绍:京东资深工程师-梁松华,在稳定性保障、敏捷开发、JAVA高级、微服务架构方面有深入的理解

全部评论

相关推荐

04-11 00:51
已编辑
门头沟学院 Java
先说一下楼主的情况:双非本大三,两段实习,javaer,想要找一个暑期大厂offer,努力了两个月,三月份每天的状态就是算法,八股,项目,四月份更是一个面试没有,最终还是没有结果,心碎了一地。期间面了一些中小厂,大厂只有腾讯约面,其他大厂都投了一遍,但是还是石沉大海。再看一下楼主的面试结果吧,就不说ttl了腾讯s3:三面挂csig:一面挂teg:三面挂wxg:一面挂没错,面了八次腾讯,两次三面挂,当时真的心都碎了。其他中小厂都有面,有的没过,有的oc,但是都没有去。其他大厂投了简历,但是不是简历挂,就是测评挂,都说今年行情好很多,各大厂都扩招,可是问题出在那里呢?学历背景吗?实习经历吗?还是简历不够好看?依稀记得,从年初七就离开了家里,回到学校,早早准备面试,当时自己认为凭借着自己的两段实习经历,以及大二就开始准备的八股算法,拿大厂offer不是问题,但是还是不敢放松,回校的状态每天就是算法,八股,还有查看各种招聘信息,想着尽早投机会多,但是事实证明,投的早,不如投的刚刚好。当时想着,先投一些中小厂开始面试,找找面试感觉,从2.10就开始有面试了,基本都是线下面试,面试的感觉都很不错,觉得自己的状态慢慢回来了,期间也有oc一些中小厂,但是自己的目标并不在此,只是想练一下手,遂拒。后面投了腾讯的暑期实习基地,不久就约面了,第一次面这么大的厂,多少有点紧张,好在运气还不错,遇到的面试官也比较好,一直干到了三面,期间看牛客有不少说一面就挂了的,感觉自己还是比较幸运的,但是没想到倒在了三面,一周后就挂了,伤心是有的,但是想到这才刚刚开始,还有很多机会,便继续准备下一次面试了,很快,被另外一个部门捞了,一进会议,面试官没开摄像头,看网上说没开摄像头很多都是kpi,但是自己给自己打气,认为面试官只是不方便开摄像头罢了,面完,感觉良好,没问什么很难得问题,基本都答出来了,算法两道也a了一道,感觉实习不会这么严格吧?还是过了一会挂了,因为这个?还是技术不太匹配?面试过程中说搞C++的,心想,搞c++的你面我干啥?唉,这时候有点气馁,然后就接下来半个月没有面试。这时已经是三月底了,看到牛客好多人都已经陆陆续续拿到了offer,看人家的面试准备也没那么早,有0实习的,有没刷算法的,有两个面的,,,唉,反正是一言难尽啊,感觉努力没有什么意义,面试多半是看面试官的感觉,主观性很大啊,只要你技术没有太大的问题。第三次面试腾讯,面试来的比较突然,期间已经有几天没看八股什么的了,临时看了一下之前自己做的面试笔记,但是面试却异常顺利,三天闯到了三面,自己也不敢相信,三面玩感觉也良好,脑子里不得不想着一些“offer结算画面”,但是过了一会查看流程显示“流程终止”,我?哎,当时真的有苦说不出啊,也是一晚没睡。后面就逐渐开始褪去大厂梦了,看着曾经跟自己交流的牛油,朋友,认识的人,觉得他们技术不太如你,算法刷的没你多,进了大厂,但是这又如何呢?能力强不强不是你了说了,面试官说了算。也逐渐知道,不是你能力好就可以了,还得有运气,运气,运气。这个过程太累了,和自己和解吧,不用非得大厂,找个合适一点的就好,放轻松一点。今天有点心事睡不着,闲着想写一些自己的面试过程,勿喷。附上一张面试的情况,公司就不方便透露了。
怒卷的斯科特:八分运气两分实力
点赞 评论 收藏
分享
frutiger:逆天,我家就安阳的,这hr咋能说3k的,你送外卖不比这工资高得多?还说大厂来的6k,打发叫花子的呢?这hr是怎么做到说昧良心的话的
点赞 评论 收藏
分享
06-04 17:59
已编辑
长江大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务