谈谈代码评审(code review)
什么是代码评审(code review)? 根据维基百科的定义,代码评审是一种通过若干人员检阅源代码方式来进行的软件质量保证活动。根据软件工程的经典理论,代码评审应该是收益很高的活动,因其产生在Coding阶段(属于开发生命周期的早期),在开发生命周期越早发现问题,解决问题的成本越低。工程实践也能印证这个结论。 代码评审有以下目标:
- 提高代码质量和可维护性(可读性,一致性)
- 发现代码缺陷
- 知识经验传承
- 发现更好的解决方案
- 满足QA指导方针
本人根据针对网络上某代码评审最佳实践的公开文章谈谈自己的想法。
原则1:每次只评审小于200~400行的代码。
--》 我的观点:这个只要是考虑到一次评审的代码过多,评审者发现问题的能力将大量缩小。如果一次评审过多代码,会对评审者带来智力和心理两方面的挑战。从智力上来说,抛开极少数智力超群者不谈,对普通人来说,一次评审更少量的代码更容易理解代码的意图(同时减少了与代码作者的沟通成本,提高效率)。这也是符合分而治之的解决问题方法论的。从心理上来说,一次评审过多代码会对评审者产生倦怠感,评审者主观上通常会降低评审的细致度。根据我的经验,如果某项软件开发任务代码量比较大,可将此任务分解为若干子任务。子任务的划分粒度尽量做到一周的代码提交量(提交的代码需要测试通过)。当然,子任务的划分是建立在良好的设计文档基础上,否则子任务划分的随意度比较高且工作量评估容易不准确。
原则2:代码评审速度应小于每小时300~500行。
--》 我的观点:这条主要是考虑评审的细致度,细致度越高越能发现更多问题。换算一下,一个20行的函数,评审时间应不少于2~4分钟。
原则3:检查清单(checklist)可以大幅改善评审结果
--》 我的观点:检查清单对代码作者和评审者都有作用。对代码作者来说,可以在编码的时候就犯止犯类似的错误。对评审者来说,可以帮助评审得更全面,特别是找出遗漏的问题。检查清单可以定期更新,在评审过程中发现的问题都可以对照检查清单,看看是否需要添加新的条目。最新的检查清单需要在团队内公布,最好是放在一个固定的位置方便随时查看。这个检查清单可以考虑和编码规范放在一个文档,互为对照补充。
原则4:团队领导者应建立一种正面的评审文化,即应正面看待评审中发现的问题
--》 我的观点:为什么需要完全正面的看待在评审中发现的问题?如前文所述,在代码评审中发现问题的修复成本非常低,所以发现越多问题越是好事。只有完全正面看待代码评审发现的问题,评审者才会有更大的动机会发现更多的问题。对于代码作者来说,在代码评审中发现问题,可以帮助自己修正错误的编码习惯和提高自身的编码能力。同时,完全正面看待评审发现的问题,能使得评审者和代码作者建立更为和谐的关系,更有利于发现更多问题。为了建立正面评审文化,领导者需要在团队中宣贯在评审中发现问题表明代码作者和评审者通过成功的团队合作提高了代码质量,领导者绝对不应将评审中发现的问题列入任何针对个人的考核因子。
原则5:轻量级的代码评审是有效率的和现实的
--》 我的观点:软件工程理论中非常正式的代码评审一般要召集不同角色的工程师,通过召开会议来逐行审查代码并进行讨论。但是这种方式成本比较昂贵,较少有公司能够负担起这种人力成本。所以现今大部分公司都倾向于实施非正式的代码评审,一般是基于工具。最简单的非正式代码评审可以是基于邮件列表,缺点是无法很好的记录评审过程中的修改历史和沟通信息。幸运的是,现在有很多可以用于做代码评审的工具,包括商业的和免费的。
另外,我想再做一些补充。对设计的评审应该基于设计文档,在代码评审阶段去评审设计将会是低效的并且需要花费巨大的沟通成本。当然如果在代码评审阶段发现了设计的问题,需要回过头去重新修改&评审设计文档。
综上所述,轻量级的代码评审对于业界大部分的软件开发组织都是一个很好的选择。是否在内部建立起正面的评审文化常常起决定性的作用。根据我的观察,是否进行有效的代码评审也基本上是区分二流软件开发组织和三流软件开发组织的一个明显标志:)
谈谈代码评审(code review)的更多相关文章
- 自动提交Git branch代码评审到Review Board系统
背景 敏捷软件开发中,越小的反馈环,意味着软件质量越容易得到保证. 作为组件团队,我们的开发任务中,往往存在一些特性涉及到几十个功能点,开发周期持续数周或数月的情况.如何在开发过程中保证软件质量,是个 ...
- 如何在python脚本开发做code review
在软件项目开发中,我们经常提到一个词“code review”.code review中文翻译过来就是代码评审或复查,简而言之就是编码完成后由其他人通过阅读代码来检查代码的质量(可编译.可运行.可读. ...
- 高效code review指南
大多数程序员都知道并且相信code review(代码审查)的重要性,但并一定都能很好的执行这一过程,做好code review也需要遵循一定的原则.流程和规范. 我们团队的code review实践 ...
- Code Review 五问五答
Code Review 是什么? Code Review即代码审查,程序猿相互审核对方的代码. Code Review能获得什么好处? 提高代码可维护性 你写的代码不再只有编译器看了,你得写出审核人能 ...
- 漫谈Code Review的错误实践
从刚开始工作时到现在,已经写了7年的代码,大部分代码都被人review过,自己也review了很多人的代码.在上一家公司的时候,我负责的一轮面试是专门进行Code Review的练习和经验谈. 通过在 ...
- 【转载】 漫谈Code Review的错误实践
原文地址: https://www.cnblogs.com/chaosyang/p/code-review-wrong-practices.html ------------------------- ...
- 后端code review finished 12-28
今天只有天赋和士杰有相应的后端代码的code review工作,因为并没有召开daily scrum.只是天赋和士杰对后端所有的代码进行了review,对代码进行了整理并删除了一些残留的0 refre ...
- Code Review 从失败中总结出来的几个经验
资深的程序员都知道 Code Review 可以对代码质量,代码规范,团队代码能力提升带来很大的提升,还有著名的技术专家"左耳朵耗子"也说过: 我认为没有 Code Review ...
- 15个最佳的代码评审(Code Review)工具
代码评审可以被看作是计算机源代码的测试,它的目的是查找和修复引入到开发阶段的应用程序的错误,提高软件的整体素质和开发者的技能.代码审查程序以各种形式,如结对编程,代码抽查等.在这个列表中,我们编制了1 ...
随机推荐
- 十分钟快速搭建Python+Selenium自动化测试环境(含视频教程)
文章首发于微信公众号:爱码小哥 准备安装包: 一:安装python: 双击python-3.7.6.exe执行文件 2.点击下一步正在安装: 3.如图所示表示安装完成: 校验环境是否安装成功: ...
- ASP.NET Core静态文件处理源码探究
前言 静态文件(如 HTML.CSS.图像和 JavaScript)等是Web程序的重要组成部分.传统的ASP.NET项目一般都是部署在IIS上,IIS是一个功能非常强大的服务器平台,可以直接 ...
- OSCP Learning Notes - Exploit(7)
Pre-Exploit Password Attacks Tools: 1. ncrack Ncrack 0.6 ( http://ncrack.org )Usage: ncrack [Options ...
- CUDA Programming Guide 学习笔记
CUDA学习笔记 GPU架构 GPU围绕流式多处理器(SM)的可扩展阵列搭建,每个GPU有多个SM,每个SM支持数百个线程并发执行.目前Nvidia推出了6种GPU架构(按时间顺序,详见下图):Fer ...
- 动手实现一个较为简单的MQTT服务端和客户端
项目地址:https://github.com/hnlyf168/DotNet.Framework 昨天晚上大致测试了下 ,490个客户端(一个收一个发) 平均估计每个每秒60个包 使用mqtt协 ...
- 设计模式:chain of responsibility模式
目的:弱化发出请求的对象和处理请求对象的之间的关系 理解:每个处理请求的对象仅仅只关注自己能处理的请求,不关系其他请求 优点: 无需一个管理类来匹配所有的请求,更灵活 责任链可以动态的调整 Andor ...
- 【mysql】- 索引使用篇
回顾 每个索引都对应一棵B+树,B+树分为好多层,最下边一层是叶子节点,其余的是内节点.所有用户记录都存储在B+树的叶子节点,所有目录项记录都存储在内节点. InnoDB 存储引擎会自动为主键(如果没 ...
- [翻译]ASP.NET Core在 .NET 5 Preview 7的更新
.NET 5 Preview 7现在可以用了,可以进行评估了.这是此版本中的新增功能: Blazor WebAssembly应用程序现在针对.NET 5 更新了Blazor WebAssembly的调 ...
- CentOS7 firewalld docker 端口映射问题,firewall开放端口后,还是不能访问,解决方案
# 宿主机ip: 192.168.91.19 docker run -itd --name tomcat -p 8080:8080 tomcat /usr/local/apache-tomcat-9. ...
- Huffuman树--------找最值学会用sort和cmp
问题描述 Huffman树在编码中有着广泛的应用.在这里,我们只关心Huffman树的构造过程. 给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下: 1. ...