10月份ACM Communications刊发了George V. Neville-Neil的文章:Kode reviews 101- A review of code review do's and don'ts.他的公司经历了一轮裁员,但是不久发现系统的某些部分内容没有人能理解,只能高薪聘之前的员工做"顾问"来收拾烂摊子.而这种情况已经再三上演,怎样才能让足够多的人了解系统,Neville-Neil给出的对策是:代码审查 Kode Reviews.
何以至此
Neville-Neil并没有详细说明他们的公司为何再三陷入这样的泥潭的,我们可以通过周围发生的事情做出一个猜测。事情的源头是系统中的一部分代码在功能完成之初就缺少必要的注释和文档,更糟糕的是有一些试验性的代码没有清除掉。这部分代码的编写者离开之后,接替者是不愿意修改或者删除不是他们编写的代码。他们的理由是:“我不懂那段代码,我来的时候就已经写好了”。这其实是典型的反模式:Lava Flow(岩浆流)-这些代码刚刚出现的时候还具有可变的本质,但是天长日久就像玄武岩一样坚硬难以去除。这种代码的影响比变量名不规范,面条代码的还要严重。
编译器可以读你的代码但不了解你的意图和设计,于是只有写代码的人懂得那块代码的意图。事实上Neville-Neil的公司就真的高薪聘回那些代码编写者。
而代码审查是可以在源头上将问题解决,问题解决的早晚付出的代价可是真的不一样的。
Why
Neville-Neil指出一个事实:很多人会忽视代码审查,认为代码检查是非生产性的,只是一群人坐在一起了解那些他们不熟悉的代码。
这种观点作者没有给出评价,我认为是对错参半:
-
发现代码问题,找出系统中的Bug,提高软件质量
-
团队中更多的人熟悉代码:这恰恰就是Neville-Neil希望的。
-
代码检查会占用新功能的开发时间,但是将问题尽早的暴露出来
Neville-Neil表示代码审查对于他们来讲有点亡羊补牢,但它依然是危机中项目良好的自救方式。
How
不是所有的开发者都懂得如何进行代码审查,并保证代码审查的效果。
Neville-Neil详细阐述了他对代码审查的从计划、组织到执行,以及如何保证过程有效的种种看法。我们一起来看一下:
从上图看出,他将代码审查分成三个阶段:准备阶段,检查阶段,后续。而每一个阶段都有一些重要的原则来保证过程的有效性。
准备阶段 要用心挑选要审查的代码,挑选最重要的部分,然后通知到与会者提前熟悉。
安排时间 代码审查最被人诟病的就是对时间的占用,因此安排时间极其重要。首先时间安排在与会者头脑清楚的时候比如早晨,其次就是要控制会议的长度。
检查阶段代码检查的过程重要保持与会者的清醒状态,作者的建议是喝咖啡提神。 检查阶段的启动是以简短的介绍开始,能让与会者有一个总体的印象。之后的切入点是头文件、基础数据、基类,对代码有了一个基本的了解之后就可以深入到具体的方法了。
检查什么 代码检查很容易纠缠于细节,很多人像玩游戏积累点数乐此不疲的指出每一处拼写错误,这转移了大家的注意力忽略了代码的整体结构,减少了挖掘出深层次的问题的可能。这类问题直接一带而过,然后继续。
过程有效进行过程中,要做好记录(安排专门的会议记录人员),并在会议结束时做简单的回顾。白板和活动挂图都是很好的辅助工具。
后续 之前的所有工作的重点在高效的发现问题,发现重要的问题以及问题能够如实的记录问题。之后的工作就是问题的解决,这里需要责任到人,每一个问题都有专门的负责人。借助代码版本管理工具,可以对代码的修改做回顾。我觉得这里可以把之前缺失的文档和注释进行补充来描述重要的设计。
总结
通过代码审查能够在开发的早些时候发现问题,并规避Lava Flow的出现。代码审查最为人诟病的是占用开发时间,因此良好的准备、安排时间并注重代码审查会议的有效性极为重要。发现问题不是目的,目的是解决问题,代码审查之后的工作落实也要跟踪。建议大家读读George V. Neville-Neil的这篇文章:Kode reviews 101- A review of code review do's and don'ts.
参考资料:
《反模式:危机中的软件、架构和项目重构》
Code review is systematic examination (often as peer review) of computer source code intended to find and fix mistakes overlooked in the initial development phase, improving both the overall quality of software and the developers' skills.
源文档 <http://en.wikipedia.org/wiki/Code_review>
分享到:
相关推荐
"kode": "BWP", "nama": "Bawang Putih", "jumlah": 150, "harga": 150000.0 }, { "kode": "CAB", "nama": "Cabai", "jumlah": 100, "harga": 50000.0 }, { "kode": "DAY", "nama": "Daging Ayam", ...
【2009 KODE5 华丽GUI】是一个针对2009年KODE5比赛设计的图形用户界面(GUI)项目。KODE5是一个知名的国际电子竞技比赛,其中包含多个游戏项目,可能包括Counter-Strike(CS)。在那个时期,为了提升比赛体验和专业...
而“kode:XML元编程”可能指的是一个项目或技术,它利用C++进行XML的元编程,以实现更高效、灵活的XML处理。元编程是在编译时对程序进行操作的一种技术,可以生成代码、优化性能或提供更高级别的抽象。 C++中的XML...
Kode 已经应用在一款大型的横版格斗手游,实用性和稳定性都可以保证,同时 Kode 也会持续地更新,随着项目开发 Kode 已更新到 v3 了,v3 做了按需加载(lazy loading)优化,对于大型的应用(游戏)加载优化有很明显...
7. **易于学习和使用**:Bootstrap3 的文档详细且全面,对初学者友好,开发者可以快速上手并应用到实际项目中。 "kode"模板可能在原版Bootstrap3的基础上进行了额外的定制和优化,比如增加了更多独特的设计元素、...
Tabel Kode untuk pemetaan RBI Skala Besar dari Badan Informasi Geospasial
它是使用功能强大插件实现的,这是唯一可用的插件,可让您通过PhoneGap Build在应用程序构建中投放广告(所有其他广告SDK都要求您在本地构建应用程序)。 在Android平台上运行的已编译应用程序的一些屏幕截图: ...
总结来说,Kode-Agile是基于敏捷开发理念的全面解决方案,它通过JavaScript技术,为软件开发团队提供了一站式的项目管理工具,帮助团队更好地实施敏捷实践,提高开发效率,确保项目的成功交付。无论你是初次接触敏捷...
我是赛科德(Sai Kode),全日制博士学位。 是位于汉斯维尔的阿拉巴马大学电气与计算机工程系的学生,研究领域是航空动力学和控制系统。 我正在位于汉斯维尔的阿拉巴马大学电气与计算机工程系的著名教授Yuri B. ...
IELET2001G25Kode Dette er kodedelen av prosjektinnleveringen,我准备安装了instruksene。 杜finner为serveren / tjeneren我mappen 于ESP32en的Du og 和mappen Dersom Portene eråpne,serveren er oppe,...
"Kode后台框架模板(蓝色风格)"是一个专为开发者设计的前端框架,主要用于构建管理界面或后台系统。它的核心特点在于其蓝色调的设计风格,为用户提供了清晰、专业且舒适的视觉体验。此模板通常包括一系列预设的HTML...
【标题】"kodestudio.github.io:Kode静态Web的源代码" 是一个与开源Web开发相关的项目,其中包含了创建静态网站所使用的源代码。Kode Studio在GitHub上提供了这个项目的源码,旨在为开发者提供一个平台,用于构建、...
这个项目旨在提供一个简洁、高效且易于理解的Lisp解释器,为开发者提供了在Go环境中探索和使用Lisp语法的可能性。 1. **Lisp语言介绍**: Lisp,全称为"LISt Processing",是一种历史悠久的高级编程语言,以其独特...
压缩包中的"kode后台管理模板"很可能包含了以下文件结构: 1. HTML文件:包含主页面、登录页面、各种管理页面等,展示模板的基本布局和样式。 2. CSS文件:定义模板的样式,包括全局样式和特定组件的样式。 3. ...
科德一个简单的 bash 脚本添加shebang(如果需要) 添加信息标题添加代码模板(可切换) 使文件可执行更新信息标题的最后修改列支持的... 对于termux ln -s $PWD /kode $PREFIX /bin/kode 用于 linux 桌面sudo ln -s $
kode80CloudsUnity3D, Unity3D实时体云渲染解决方案 kode80CloudsUnity3D ( Ver 1.1.0 )kode80云是一个实时的体积云呈现解决方案,提供完全动态。动画。3D cloudscapes和自定义编辑器。 所有特性,从云密度和形状到...
Kode Injector可帮助您通过注入JavaScript或CSS代码来修改浏览器正在访问的网站。 重要说明:此扩展名需要激活“允许访问文件URL”。指向本地文件的链接应具有“文件”协议,例如:“ file:///index.js”。请在此处...
在【描述】中提到,Kode Web包含了以下主要组件和页面: 1. **主页(Home)**:通常作为系统的入口,展示关键信息和操作快捷方式,设计简洁明了,方便用户一目了然地获取系统状态。 2. **登录(Login)**:用户...
Lumen试图通过减轻大多数Web项目中使用的常见任务(例如路由,数据库抽象,排队和缓存)来减轻开发的痛苦。 官方文件 该框架的文档可以在上找到。 安全漏洞 如果您在Lumen中发现安全漏洞,请发送电子邮件至taylor@...