文档章节

每日站会、代码审查、结对编程 之开源中国实践

翟志军
 翟志军
发布于 2016/03/22 19:00
字数 2837
阅读 7411
收藏 77
点赞 9
评论 15
在我来到开源中国之后,尝试将每日站会、代码审查、结对编程这三种编程实践带入团队。而这个过程,我个人觉得是一项非常宝贵的体验。我觉得可以拿出来和大家分享。

先介绍下目前我们团队的结构:3名Java开发,1名前端,2名实习。

以下我不会详细介绍它们分别是什么,也无意讨论它们有什么好处坏处,本文侧重分享在实践它们的过程可能遇到的问题,以及我们是如何处理的。


每日站会
每日站会 Stand-up :是每天进行的会议旨在在组队成员之间进行状态更新。'半实时'的状态允许参与者了解到潜在的挑战以及用于处理一个困难或者耗时的问题的协调精力。它在一些敏捷软件开发过程中有着特定的价值,譬如Scrum,但是同样可以在任何开发方法论中被使用。术语 “站” 衍生于通过保持与会人员站立的状态(长时间站立会导致不适)从而帮助控制会议的时间的实践。

我们每天会早上花十几分钟(具体时长看团队大小),大家一起站(是)在卡墙前过卡。卡墙其实就是Team中的任务看板。就这样,我们从“已验收”列到“待办中”列,从上往下,一张卡一张卡的过。这里的卡是指定义了一个小功能需求的卡片。 


站会不过是向领导汇报
我在实践每日站会的时候,发现不少人把每日站会当成一种“向领导汇报”的过程。比如他们会习惯地汇报:我昨天做了1,2,3 blabla。一大串,仿佛说得少就是做的少。所以这个过程,我不断地指正,你们不是在向领导汇报,我们只需要对这件事情负责,说到你的卡时,你就说你的卡的当前状态就好了。慢慢地团队里就养成了对事不对人的文化。为什么呢?每日站会就是提醒我们每日的工作就是对这些“事”负责。

随着时间迁移,我们的团队就慢慢习惯了这种站会。也会在站会上开一些开玩笑了。不要认为这是浪费时间,这是团队文化中很重要的一部分。

站会时间把控问题
站会还可能会遇到的问题是站会时间的把控。所以,我们每日站会会有一个主持人。如果大家说偏题了,主持人就必须指正,让相关人在站会后自己讨论。如果大家讨论的这个问题是个大问题,那么,也是在站完会后再讨论。另外,主持人还要是轮换的,这样就可以将团队所有成员带入项目。

站会上的新人问题
每日站会常常遇到的问题是过卡时,这个人说得太细了,把功能的具体实现细节都说出来了。这时,我们不应该立即打断他。出现这样的情况,说明他一定是新人。我们应该选择在站会后单独找他重申一次每日站会的目的和内容。当然,一开始实践每日站会时,团队里除了你每个人都不懂时,你就有必要马上指正了。


代码审查
代码审查(Code review)是指对计算机源代码系统化地审查,常用软件同行评审的方式进行,其目的是在找出及修正在软件开发初期未发现的错误,提升软件质量及开发者的技术。代码审查常以不同的形式进行,例如结对编程、非正式的看过整个代码,或是正式的软件检查。 


我今天没有什么好说的
一开始,我实践时,遇到的最大问题是:团队成员喜欢说,我今天没有什么好说的。这句话听起来冷漠,其实背后的原因是大家不完全理解代码审查是什么,而不是因为他们真的没什么好说的。

这时,我会说:只要你今天做了的事情,你都可以说。然后,他们常常不知从何说起,接着,一上来就给我们讲代码细节。

遇到这种情况,我们需要再强调一遍代码审查需要说什么:上下文、你是如何解决问题的、解决过程遇到什么问题……有时被审查的人可能说的不够明白,我就会帮助补充。

这个过程,你可能会发现有些人在表达能力上的不足,导致听的人一头雾水。我的做法是理解他说的,然后尝试帮助他更好表达出来。这样,提升他的表达能力的同时,让他在团队里也更有归属感。

说得太多了
有时,有些成员可能会说的非常非常细。多人这样了,就会导致代码审查的时间过长。发生这种情况,将表达能力的问题排除外,大概就是这个人没考虑哪些应该是自己应该重点说出来的。这时leader就要站出来指正了。

没写代码怎么审查?
其实,我们实践的代码审查并不是十分严格。因为有时,我们一天下来没有写代码,而是做调研工作。遇到这种情况,被审查人也需要主动分享他今天的习得。有时,他说出来某个问题,也许其他成员也遇到过同样的问题,并解决了。这样就为团队节约时间。


结对编程
结对编程(Pair programming)是一种敏捷软件开发的方法,两个程序员在一个计算机上共同工作。一个人输入代码,而另一个人审查他输入的每一行代码。输入代码的人称作驾驶员,审查代码的人称作观察员(或导航员)。两个程序员经常互换角色。 


如何将结对编程带入团队?
我们的做法由一个懂得结对的人分别和团队里每一个人进行结对。结对前,详细说明结对可能遇到的情况,比如双方有争执,一直都是一个人写的情况,双方都遇到不懂的情况……然后,结对时穿插结对编程的知识。

团队成员中的两个都没有结对编程的经验,怎么办?
实际情况是我们遇到更麻烦的事情。
因为我在前端不擅长,所以我决定让两名前端结对。问题来了,这两个人都不会结对,在沟通方面也不是非常擅长。让他们结对后,我发现他们一起结对的时间非常少,一天下来基本就是各做各的。这时,我发现不对劲。我就分别找他们谈。为什么要分别呢?是希望他们大胆说自己的感受。

在和他们谈了之后,发现根本原因是他们没有完全理解结对编程的目的。这时,找到他们俩再重申一遍结对编程是为了什么,以及如何结对。

新人对结对编程常常有的疑惑?
他在写代码,我看着有什么用?
软件开发是一项集体脑力活,知识的流动在这项活动中非常关键。结对编程是促进知识流动的行为。
看别人写代码的人,我们称为“观察者”。写代码的人,我们称为“驾驶员”。观察者的职责是对写代码的人的代码进行审查。其实除了这点,我更看重的是这个分享思维方式的过程,会加速双方的成长。这个过程还能营造一种相互学习的文化。

我觉得我一个人一下子就写完了
说这句话的人的能力不会差。其实有这样的想法很正常。这时,我们就鼓励他多分享。当我深究下去时,他说写那些东西根本不需要动脑。还很得意的样子。不知道你们有没有发现其中的问题:他在做体力活。更大的问题是:他还不知道自己在做体力活。这时,我会说:当你在做体力活时,和机器没有区别,说明你在退步,这时,你应该跳出来,挑战自己,比如coach别人,或找到一种避免这种体力活的方法。

如果你有什么疑惑,可在本文评论留言。

以下是小结

每日站会,代码审查,结对编程实践的先后顺序的?
本质上是没有先后顺序的。但是如果你是一位新来的leader,你就需要考虑你加入的团队的情况了。我们是先施行每日站会,代码审查。最近一个月才开始实施结对编程。为什么呢?因为对这些编程实践,如果强硬推行,可能会受到排斥。你需要时间让团队成员消化。


给人留下“什么都管”的印象
由于我带来了这些新的实践,看到团队成员实践过程的一些问题就会指出,所以经常给人“什么都管”的印象。
当leader什么都管时,leader要问自己为什么什么要管,而团队成员也要反问自己为什么什么都要被管。排除leader的性格问题外,大多数时,是因为团队还处于比较初级的阶段。你问问自己,团队里有多少人可以自己做leader的就知道了。leader应该跟大家说清楚这点。这样大家就理解你了。但是这个“初级”的阶段要多长时间?就要看你什么时候培养出另一个leader了。


你会发现我在本文没有谈什么M捷或者精Y,是因为我想就事论事,不想谈理论,只想解决实际问题。

问题来了,你发现团队中没有人会结对,你作为leader不懂得如何结对编程时,怎么将结对编程带入团队中呢?
这时就需要请外援了。好听一些,请咨询顾问。如果你觉得看了我的文章,觉得我还行,也可以找我。我在开源中国众包发布了一个专家服务: 将每日站会、代码审查、结对编程带入团队

当然,你觉得看这文章对你有帮助,也可以打赏10元:

© 著作权归作者所有

共有 人打赏支持
翟志军

翟志军

粉丝 339
博文 76
码字总数 79851
作品 2
深圳
程序员
加载中

评论(15)

啦啦啦拉拉
啦啦啦拉拉
9带带网络编程
翟志军
翟志军

引用来自“jack_jones”的评论

第一张图,是什么工具?
team.oschina.net
jack_jones
jack_jones
第一张图,是什么工具?
如梦技术
如梦技术
不错
天蓬小猪
天蓬小猪
很牛逼 以前做过类似的,过程不错,效果也不错,至少团队成员喜欢交流沟通,不打赏了
子匠
子匠
翟老大威武83
jtu唐
jtu唐
现在的leader啊,一言不合就要求打赏
雨翔河
雨翔河
63
引鸩怼孑
引鸩怼孑
我们情况 做法相似 不同点是会议有测试每日总结
翟志军
翟志军

引用来自“成熟的毛毛虫”的评论

我看完了,的确是经验之谈,原谅我最后的扫码环节没做13
下次争取写一篇你自愿打赏的。
为什么站会会成为形式

敏捷宣言的那些大叔 图截自:http://agilemanifesto.org/iso/zhchs/manifesto.html 最近,项目上遇到了以前我从来没有遇到的事情:10多个人一个团队(概念上的),要应对9个外部需求提出方;...

翟志军
2017/05/07
0
0
不做代码审查又怎样?

从一次回顾会议开始 “要不……我们不做……代码审查了……试试?”还记得当有人抛出这个建议时周围同学的表情,那种表情用两个字加两个标点符号就可以形容:“什么?!” 对了,先介绍一下背...

oschina
2016/04/26
6.7K
27
如何防止程序员上班迟到?

转自我的个人博客: https://showme.codes/2017-03-03/prevent-late-for-work/ P.S. 这里的“迟到”指的是故意迟到。 看看满大街的招聘信息上都写着: 弹性上班,不打卡 我们还有必要思考如何...

翟志军
2017/03/03
0
0
结对编程 VS 代码审查:对比开发者文化

从上一份工作到现在的这份工作,我从结对编程的开发文化过渡到同行代码审查,这个转变过程是一个非常有趣的经历。我认为我要记录下些我所注意到的变化。 你可以找到很多标题是/(结对编程|代...

oschina
2014/03/13
2.9K
26
为什么结对编程并不那么受欢迎?

过去十多年中,笔者曾经与上百个开发团队共同合作,这些团队具有一个共同的特点就是:他们通常不会采用结对编程作为软件交付的技术。其中一些团队会讨论结对编程并且认同这种理念,不过由于某...

oschina
2016/06/27
7.3K
32
不朽经典,无我编程的十大戒律

无我编程的十大戒律最早出现在 1971 年 Gerald Weinberg 出版的《 程序开发心理学 》里。后由 Stack Overflow 网站的联合创始人 Jeff Atwood 在博客中整理列出。虽然过去了几十年,但这些经典...

达尔文
2017/06/24
1K
7
结对编程是每个软件公司都该采用的开发方式

如果说这世界上有一家公司懂“软件开发”,那非 Pivotal Labs 莫属。Pivotal公司的Edward Hieatt和他的同事都是从事敏捷开发培训,指导结对编程工作,在跟客户合作中,他们发现有大量的创业公...

oschina
2013/06/07
6.3K
44
Blockly 1.0 正式版发布,Google 可视化编程工具

Blockly 是 Google 开源的一个基于 Web 的可视化编辑器,只需要拖动几个图形就可以编程。Blockly 1.0 主要面向 Android 和 iOS 移动端。 Blockly 1.0 最终正式版拥有你在移动应用中原生使用 ...

王练
2017/06/20
3.4K
4
PMI-ACP 敏捷项目管理——模拟试题2

1、在项目的Sprint回顾会后,团队成员指出那是抱怨会,不是非常有效。Scrum主管应该怎么做? A 建议团队尊重敏捷宣言原则,解释其属于回顾会的组成部分 B 建议团队成员将他们的观察列入产品待...

隔壁老李头
2017/12/06
0
0
天呐,每日站会居然被开成这样

Scrum 是当前最流行的敏捷软件开发 实施框架。 Scrum 起源于软件开发项目,但它适用于任何复杂的或是创新性的项目。 可能有的小伙伴并不熟悉 Scrum ,我们先看下 Scrum 中文网的描述: Scru...

foruok
2017/11/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

jq 判断复选框是否被选中,复选框后台接收

1. 效果 2. 代码 html部分: JS部分: var rememberLogin = $("#rememberLoginId").is(':checked')//获取复选框是否被选中 var rememberLoginval = $("#rememberLoginId").attr('value')//拿......

Lucky_Me
9分钟前
0
0
python爬虫日志(3)-爬去异步加载网页

在浏览器检查元素页面中,选取Network中的XHR选项即可观察每次加载页面,网页发出的请求,观察url的规律即可利用封装的函数对每一页进行爬取。

茫羽行
9分钟前
0
0
《趣谈网络协议》之为什么要学习网络协议?

一、协议 1.协议的定义 简单说协议就是一个规则,保证沟通交流双方可以互相听懂、理解或者可以双方合作可以顺利进行的一个约定和规则。 2.生活中例子 (1)有一种叫“程序猿”的物种,敲着一种...

aibinxiao
11分钟前
1
0
Python数据分析numpy基础-维度的认识

什么是多维数组? 核心对象是同型的多维数组(简单理解就是一个表格,通常内容都是些数字),具有相同的数据类型。 概念: 1. axes(轴):数组的维度统称为轴。 2. rank:轴的数量称为rank。...

十年磨一剑3344
15分钟前
0
0
Java 正则表达式相关资料

1.java正则表达式过滤html标签

IT追寻者
18分钟前
0
0
点赞出现数字变大效果

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .container{ padding: 50px; border: 1px solid #dddddd; } .item{ position: relative; } ......

南桥北木
37分钟前
0
0
anroid中批量将px转换成dp

package com.qu;import java.io.File;import java.io.FileWriter;import java.io.IOException;public class Aaaa {public static void main(String[] args) {String fi......

android-key
38分钟前
0
0
shell导出svn差异文件

#!/bin/shOLD_VERSION=$1NEW_VERSION=$2USERNAME="bobway"PASSWORD="bobway"EXPORT_PATH="/home/export"SVN_URL="svn://127.0.0.1/bob"DIFF_URL="svn diff -r ${OLD_V......

bobway
47分钟前
0
0
不念既往,不畏未来

不念既往,不畏未来 只有活在当下,才能获得快乐

yizhichao
48分钟前
0
0
JS Base64 转文件,转二进制,图片转 Base64

/** * 网络图像文件转Base64 */function getBase64Image(img) { var canvas = document.createElement("canvas"); canvas.width = img.width; canvas.height = img.height;......

Jack088
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部