项目管理系列--从零开始Code Review[转]
从零开始Code Review
这篇帖子不是通篇介绍Code Review的方法论, 而是前大段记录了我们团队怎么从没有这个习惯到每天都进行review的过程, 后小段给出了我的一些建议. 希望能对诸位的团队有所帮助.
如果转载, 请注明出处http://blog.csdn.net/uxyheaven/article/details/49773619
最初来到这个新组建的团队是木有code review的. 头说, 这个月你来搞吧.
当我第一次知道必须得搞review的时候, 其实我是拒绝的! 因为我觉得…呀…你不能叫我马上搞立马搞, 第一, 我要试一下, 我又不想说…团队之前就没有这个习惯. 我搞了以后, 那个耽误每天的工作时间啊. 结果同事一定会骂我, 给他们增加额外的工作量. 我说先让我尝试尝试. 现在呢…每天都在review!每天都在review呢…我还推广到了其他团队!来!来!来!大家试试看!
觉得困难, 开展不起来, 想拒绝的原因有很多:
- 团队成员写完需求就不管了, 没有code review意识
- 技术氛围不强
- 水平参差不齐
- 没有合适的工具
- …
但是总的来说就是一条, 木有code review. 如果已经有了, 无论是真的在搞, 还是形式主义, 主持一下都是不难的.
从零到一, 从无到有总是困难的, 咱开始了若干次尝试之路:
第一次尝试
最初的版本是其他团队的写的, 到我们团队接手的时候, 啥都木有. 什么逗号等号左右不空格, 类名首字母小写, 方法名首字母大写; 依赖乱七八糟; 在view里写业务, 在view里发网络请求. 看到这样的代码我当时心里是崩溃的.
我先尝试一个人帮整个团队review. 零散看了几天, 问题代码贴了几十张ppt, 槽点太多, 看起来很感人. 后来自己放弃了.
结论
Code Review 一个人看所有人的代码是不可取的.
第二次尝试
结对编程可以看做是一种敏捷化的Code Review. 直接结对会被头劈死. 于是我想着采用新的结对编程方式.
两位程序员新成结对小组, 每人一台电脑, 坐在临近的工位上, 两人合作完成一组功能(可以是两个或多个独立的模块)的设计, 代码实现. 但对已某一个模块来说设计和代码是分开的, 一个人负责设计, 另一个人负责写代码, 对于其他模块则反之.
当我在团队里寻找可以结对的伙伴的时候, 发现木有可以设计模块, 项目进度又差不多, 可以结对的小伙伴.
结论
Code Review的模式需要接地气.
第三次尝试
第三次尝试, 我想用一个游戏的方法去开展review
- 每次的review主持轮流当, 由大伙推举当前找得bug最少的同学来主持.
- 每轮开始的时候,先贴出代码来, 由下面的同学说问题.(大伙这个时候关注下哪位同学次次都木有发现问题)
- 最后由主持的同学将所有的问题列出来.
- 进入下一轮
- 如果经常是下面的同学说的比主持人多,主持人第二天继续.
- 主持的同学,每日最少准备6张问题ppt断.
- 指出的问题由主持人来指定一个修改的同学修改.
- 第二天的主持人负责把当天得bug录入jira, 并且负责跟踪这些修复.
太理想化了, 根本开展不起来.
结论
不要自己觉得好就是好, Code Review是团队的事情, 方案定了得拿出去溜溜.
第四次尝试
无奈之下, 我去请教我的头, 如何去开这个头. 头就给了两个字: 强压.
于是小伙伴们便在我的淫威之下开展了第一次的code review. 我用的是之前第一次整理出的ppt. 效果竟然好的意外. 小伙伴们互相吐槽被我指出来的渣渣代码, 气氛很是欢乐.
不过关键问题还是没有一个统一的标准去改. 于是咱紧接着就安排了一场代码规范的分享. 再接下来的一次review, 大货吐槽的点就相对集中了.
结论
Code Review初期需要有标准. 让小伙伴们知道如何去review.
第五次尝试
由于之前的氛围很好, 有小伙伴A提议拿出他负责的模块来集体review. 有主动的, 当然不能拒绝. 后面几天安排的都是review他的模块了. 顺带还做了一次他的模块的设计分享.
在有天的review中, 有个小伙伴B表示这样现场重构不是他擅长的. 我们: 那你擅长啥? 小伙伴B: 我擅长xxx. 我: 那下周你来给大货分享下吧. 小伙伴B: 好, 我准备一下.
结果小伙伴B深藏不漏, 连续分享了一整个系列.
结论
闻道有先后, 术业有专攻, 不要低估你的小伙伴们. 给他们展示自己的机会.
第六次尝试
我被挂的任务是code review, 所以偶尔还是会看看小伙伴们代码的. 有天突然发现有个小伙伴C, 在重构优化代码了. 咱顺势和他说了一些编程方面的思想和技巧, 告诉他还可以这么重构, 用查表发代替条件语句, 用多态代替提条件语句, 用runtime生成方法名, 用runtime 执行方法. 于是他也出来一个技术分享. 可惜的是关于编程思想的分享讨论起来就木有那么激烈了, 这个只能慢慢来了. 不过当咱吃完饭快8点回到公司的时候, 发现有两个小伙伴DE在写demo, 在讨论之前C的技术分享.
结论
不能急于求成, 一股脑的灌; 编程的思想需要慢慢悟, .
第七次尝试
有次review, 我有事提前走了. 但是呢, 本是半个小时分享大伙觉得还不尽兴, 又延长了二十分钟. 之前有几场分享, 也都不是我主持的. 后续的review我将尝试进一步淡化我的主持. 让我们的review可以自组织的进行下去.
结论
Code Review需要达到理想的状态 - 不需要我也能自如地运转, 不然最后就会轮为政治任务.
第八次尝试
到了第八次尝试,基本已经定型. 感谢公司提供gitlab代码托管平台. 我们再第一时间将团队多个项目迁移到了新平台上去, 然后开发流程改成了gitflow, 当一个功能开发完成后, 会发起Merge Request, 大伙在这个时候便可以开始code review了,互相吐槽的言语和片段也都被记录了下来, 当收集齐了两个赞的代码, 才允许合并进来. 整个过程感觉良好.
结论
Code Review需要有工具, 需要有不reivew不让合并的规矩.
建议
如何做出从零开始code review呢, 我的建议是:
- tech leader 强压所有人开始 code review, 这是最重要的一步
- 安排一次编码规范的技术分享
- 前期经常回顾, 这次的code review开展的怎样, 有哪些地方可以改善
- 对于积极的同学表示鼓励, 支持现场重构代码
- 每天不光可以review代码, 也可以安排整场的技术分享
项目管理系列--从零开始Code Review[转]的更多相关文章
- iOS从零开始 Code Review
http://www.cocoachina.com/ios/20151117/14208.html 这篇帖子不是通篇介绍Code Review的方法论, 而是前大段记录了我们团队怎么从没有这个习惯到每 ...
- 从零开始 Code Review,两年实战经验分享!
作者:wenhx http://www.cnblogs.com/wenhx/p/5641766.html 前几天看了<Code Review 程序员的寄望与哀伤>,想到我们团队开展 Cod ...
- 项目管理系列--好用的代码评审(Code Review)工具
1. Gerrit Gerrit is a web based code review system, facilitating online code reviews for projects us ...
- 如何在python脚本开发做code review
在软件项目开发中,我们经常提到一个词“code review”.code review中文翻译过来就是代码评审或复查,简而言之就是编码完成后由其他人通过阅读代码来检查代码的质量(可编译.可运行.可读. ...
- Code review应该怎么做
代码评审有两种不同的方法,一种是代码走查,一种是代码审查,我们这里讨论的仅指代码走查.通常自己写的代码都难以发现问题,需要以第二双眼睛再次检查代码,帮助我们及时地发现潜在的问题. 做代码审查之前,团队 ...
- 2018年Code Review状态报告
Code Review 代码评审是指在软件开发过程中,对源代码的系统性检查.通常的目的是查找系统缺陷,保证软件总体质量和提高开发者自身水平. Code Review是轻量级代码评审,相对于正式代码评审 ...
- 开发中Design Review和Code Review
一.Design Review 详解 翻译为设计评审,也就是对需求设计进行审核,防止出现异常问题,例如下面的这些 可用性 外部依赖有哪些?如果这些外部依赖崩溃了我们有什么处理措施? 我们SLA是什么? ...
- 我们是怎么做Code Review的
前几天看了<Code Review 程序员的寄望与哀伤>,想到我们团队开展Code Review也有2年了,结果还算比较满意,有些经验应该可以和大家一起分享.探讨.我们为什么要推行Code ...
- Code Review 程序员的寄望与哀伤
一个程序员,他写完了代码,在测试环境通过了测试,然后他把它发布到了线上生产环境,但很快就发现在生产环境上出了问题,有潜在的 bug. 事后分析,是生产环境的一些微妙差异,使得这种 bug 场景在线下测 ...
随机推荐
- SOLR企业搜索平台 二 (分词安装)
标签:linux lucene 分词 solr 全文检索 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://3961409.blog ...
- 用FileZilla服务器端和客户端实现本机与虚拟机之间文件上传和下载
1. FileZilla简介 2.准备工作3.安装 FileZilla Server和配置3.1.问题及解决方法3.2.添加目录3.3.测试FIP4.安装FileZilla Client5.连接服务器 ...
- android 中如何模拟back键
主要是在使用Fragment时能够返回前一级,所以才找到了这些资料. 有两种方式可以实现,直接上代码 方法1: public void onBack(){ new Thread(){ public v ...
- ubuntu安装ICE记录
背景本文档介绍在unbuntu环境下如何安装ICE,并用C++写一个ICE应用 ICE简介ICE是ZEROC的开源通信协议产品,它的全称是:The Internet Communications En ...
- php 中将完整的年月日时分秒的时间转换成 年月日的形式
strtotime() 函数将任何英文文本的日期或时间描述解析为 Unix 时间戳(自 January 1 1970 00:00:00 GMT 起的秒数), 将完整的时间格式转换成时间撮的形式,再去进 ...
- [ActionScript 3.0] 动态绘制扇形实例(拖拽绘制)
package { import flash.display.Shape; import flash.display.Sprite; import flash.events.MouseEvent; / ...
- 模块sys, os, glob, pickle, subprocess常见用法
参考python常用标准库 http://blog.51cto.com/lizhenliang/1872538 一. sys 1. sys.argv 脚本名1.py, 命令行中执行python 1 ...
- Flink学习笔记:Time的故事
本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...
- vue培训记录
在公司做了一次vue相关的培训,自己整理了一些大纲.供大家参考学习! ### 1. 项目构成及原理 [Vue](https://cn.vuejs.org/)###* 主流框架见解及差别 * react ...
- stark - 2 ⇲路由分发
在介绍前面三个注意点后,开始写stark组件内容. from django.apps import AppConfig from django.utils.module_loading import ...