SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4541|回复: 5

[赏析] 流水先生新作《软件集成策略》赏析三

[复制链接]
发表于 2013-9-13 07:47:04 | 显示全部楼层 |阅读模式
11.把改进方案讲给老大听
; h* M; y" J3 v

" h% i* n1 ^8 y- U* `' o- J7 J
晓川所在的部门,叫配置管理部,晓川到现在也没弄清楚为什么叫配置管理部。晓川曾经问过师父这个问题,师父说,“牛就叫牛,没有为什么。既然当牛,那就吃草耕田,不用想这么多。”配置管理部的责任呢,主要是三件事儿,各个项目每两周一次的软件集成,软件开发完毕后的对外发布,还有版本控制工具的支持和维护工作。

/ P* U" A2 L' v7 X( C4 w% W部门经理,也就是晓川的老大,是个三十多岁的女同志,好像比师父还小一点。她桌上摆着她宝贝儿的照片。一起吃饭的时候,她聊起过自己的经历,说在这家公司呆了很多年,当初公司主要搞硬件,她搞固件上的编程,后来老了,觉得越来越干不动了,刚好公司加强软件研发,有这么个机会,就过来了。她总说自己经验也不多,让大家在技术上要多钻研。她确实不太懂技术细节,但是在她手底下工作,大家都觉得挺舒服的。) J, @/ ?; p' C' o, T; S  Z
: d8 @% D. N& W# A& m) [
在跟项目经理老刘开会之前,晓川的老大先来到晓川工位上,找晓川和晓川的师父了解情况。老大开场白说,本来是想安排晓川学着干点儿别的活儿的,不过既然项目上提出了需求,那可以考虑。我们一起讨论一下看行不行。现在先来看看工作量。

3 W/ g, O: L( c  ?; L“晓川,一周出一个版本,你的工作量会不会加倍?”老大问。+ g! S- h! K' x" T& E8 E& C. M

/ ~3 D( u% O7 `6 h: e& X
有些工作会加倍的。比如发邮件通告集成的启动和结束,比如创建基线的时候打标签,等等。但是这不是工作的主要内容。工作的主要内容是对付版本合并时的冲突,以及随后编译构建时的冲突。这些工作不会加倍。”晓川答。
* J  n; v4 [2 ^+ X( A
“这么说,工作量会略有增加,但不会增加到以前的两倍?”“嗯,有可能。但是也有可能降低了。”“我是说总工作量,不是每轮集成的工作量。”“嗯,我明白,我就是想说,当从每两周出一个版本变成每周出
% |& m0 T. L3 s; ?, \; s
一个版本后,总的工作量有可能会降低。”老大满脸疑惑,看看晓川,又看看师父。师父也满脸疑惑。晓川看两个人都满脸疑惑,就提议找个白板画一下。在白板上,晓川开始画图。如图4所示。8 {" r$ ~& L5 b) A. d

4 V- m0 y( h; H% ^* j+ P1 s0 H- u1 @0 ?
边画边解释:“简便起见,假定每两周的提交一共有六个,而且每个提交的改动量都一样多。如果每周集成一次的话,那么发生的合并就分别是,处理第一个提交,无需合并。处理第二个提交,一份改动跟一份改动合并。处理第三个提交,一份对两份。第四个,一份对三份。第五个,一份对四份。第六个,一份对五份。”
" l* @* }" I" k7 i+ k6 }5 g
老大还有点儿疑惑,师父解释了两句。看老大点头了,晓川接着说:“而如果每周集成一轮呢,那么第一轮中,发生的合并是,处理第一个提交,无需合并。处理第二个提交,一份改动跟一份改动合并。处理第三个提交,一份对两份。这跟每周集成一轮时的情形一模一样。不过,从处理第四个提交开始,就不一样了。第四个提交,这里变成了下一轮集成要处理的第一个提交。”
( ~4 a* G5 a; g# k9 G0 q  @) _1 s1 x; Q5 a9 `
晓川边说边画。“这第一个提交呢,又不用合并了。第二个提交,一份对一份。第三个提交,一份对两份。”
晓川说到这儿,图也画完了。两种情况放在一起,是这个效果。如图5所示。
8 ]! G5 d* s/ I8 O
! E$ g! H2 G) k; {: C. h0 M& H, x/ ?/ O  `  ~* t3 T% P

' C# ]4 {& {- ^% @/ U  N, h, f
“现在集成时主要精力是处理合并时的版本冲突,以及合并带来的编译链接错误。如果合并的量小了,那么这两方面的问题都会减少,所以集成就轻松了。至少理论上是这样。”
+ T9 w. i2 b$ j( l0 }
老大又问了些问题,晓川一一解释。最后老大说,好,知道了。谢谢。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
 楼主| 发表于 2013-9-13 08:16:22 | 显示全部楼层
12.跟项目经理谈判

( Y5 v# m; Q! m+ F
# U' U& v: t" A4 m
晓川觉得老刘和老大之间的讨论,虽然和颜悦色的,但是有点儿像是谈判。
1 h5 v  X' O; f) \- Q
老刘:“如果每周集成一次的话,对项目会很有利。你们的功劳很大。”
& i# j/ Y1 p( J% e) {
! Y+ g- V& i, w/ ?
老大:“按照一贯的做法,都是每两周集成一次。我担心,以现在的资源,不能做到每周一次。而我们一时也没有更多资源。”
( g+ f0 K  T: s
老刘:“从前几周的经验上看,三天左右就能完成一轮集成了。一周一次应该也问题不大?”
1 O( h' B$ I4 O' G; H6 k/ r
  |3 A4 R! X. u- u$ m) l) t- }
老大:“这个项目还在扩大,从以往的经验上看,集成会越来越困难的。我们不能太乐观。”
) z# D5 X/ A8 z# s% [
老刘:“我想我们可以先试一试,等以后看情况再调整?”9 s1 X6 p* S0 T7 T" e( Z% p, `  {7 P

  r  p/ _$ \$ O! H: g
老大:“从两周变一周容易,从一周变两周可就难了吧?”
( Z: E! O# m  X; _7 {2 p! t
老刘:“嗯,这个我理解。不过你看,要是每周一次集成的话,那项目确实收益很大。我们就明确地说,只是试试看?”
, ~, n/ L) p+ h8 \. @& W! p1 L- c: I. d- K; T$ x2 l" x- }: U
老大:“那你看这样怎么样,不做硬性规定,但如果周四集成就结束了的话,那下周就开始新一轮集成。如果到了周四晚上集成还没结束呢,那下周就像现在这样空过去。不能满打满算。晓川除了做集成,也还有其他工作。”

- z* s1 k# e; @9 m8 J
老刘:“你是说,你们不承诺每周一轮集成,但如果情况允许,就会每周集成一次?
0 Q7 f' \& P+ Q: _& w# Q
老大:对。

$ k2 v  i* ^" [* |/ G
老刘:可以。
8 m! j. h6 R! f2 a6 n1 ^; \
老刘:好。那我们试试看吧。

. m3 }6 Z) S" s, T+ X9 x
老大:好,我们试试看。我来写会议纪要。
+ M3 j8 Z7 j4 [, J; p
老刘:多谢你们的大力支持!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-13 08:18:58 | 显示全部楼层
13.敲定第三个改进

! m3 G! Z7 `1 \9 R* W, J( N2 A7 z, h% ]) w9 d- h3 b0 Q, m
在项目例会上,这次是老刘跟大家说这个事儿。因为没有承诺,所以项目计划暂时还按现在的情况定,但是大家都答应,就像前两次改进一样,如果两个开发任务间的等待时间真的缩短了,那么就依此来调整各开发组的工作安排,争取尽早完成项目。
3 f  w  `' W/ w+ {" S' T
大家大都感谢晓川愿意尝试每周集成。但是有一位领导提醒说,这样会增大程序员的工作量。比如,程序员在按过去的频率不做集成的那周的周五完成了工作。照以前的做法,在下周一提交前,他们需要把上周出的基线合并到他们的任务分支上,然后再构建。上周的基线,内容是截止到上周初大家的提交。而现在,在下周一提交前,他们需要把这周出的基线合并到他们的分支上,然后再构建。这周的基线,内容连截止到这周初大家的提交也包括进去了。也就是说,要合并的内容变多了。& q1 @8 k! h$ B- V
$ {7 e% U+ P) \
以过去开会的经验,这类问题很容易问到。所以晓川这次在开会前,仔细分析了程序员那边工作量的变化。他的结论是,在统计意义上,程序员的工作量不会变化。不过这需要一些数学知识。简单起见,晓川在会上试着说:“您说得对,由于集成变频繁后,可能会有更多的提交进入到更新的基线,因此程序员向自己任务分支合并的工作量会变大。不过好在另一方面,集成变频繁后,程序员在任务开始时,所基于的基线,也有可能会变得更新了。里外里,就抵消了。”
9 _" _1 D2 U- ~6 j! C1 H
“里外里就抵消了吗?我仔细想想……”那位领导说。
4 O0 F8 v4 {# p! m2 v  x; Z
" L+ y' U+ g7 @: o$ J: X- F
老刘看看大家,说:“这样吧,你们俩会下再仔细讨论。我的意见是,即便是程序员的工作量增加一点,也值。因为集成现在是我们的瓶颈。以前的两个改进,都让程序员的工作量增加了一点儿。我看效果就挺好。”
! O# \; k7 S% u+ F2 G, A4 z; J
晓川想说,“也未必。其实等集成遇到问题再去找程序员,他们更烦。他们还不如保证质量再提交呢。”不过话到嘴边儿,晓川犹豫了一下,觉得有点儿不妥。正在这当儿,老刘已经开始谈下一个话题了。* x9 e9 U" `1 a0 S3 d- n: h

! D' J* R! m. b2 E$ V% Z" m8 o2 f
会后,那位领导又来找晓川。请晓川认真讲解为什么“里外里就抵消了”。领导说,这种分析方法有点儿意思。晓川兴致所致,干脆把集成工程师这边的总的工作量也会降低这个猜测给说了。

( {% I% o5 o4 J, z; K“也就是说,你的工作量降低了,而程序员的工作量也没增加?”领导问。  W, x, @- }/ b  \; [5 H& L7 k& j# Y
) j. d% V. J( S
“Yes, Sir.”
; @6 _* _: Q' t1 B& P3 `
“那这部分工作量去哪儿了?跑到谁头上去了?”, M9 F8 A( y9 H
7 o8 r1 I6 Y5 t" W, X" g0 ]! T" l
“没转移。它就是消失了。”
+ m7 ^+ p3 L& ?0 V
领导拍拍晓川的肩膀,没说啥,走了。% x. b# k3 ?% G

% `8 W. C7 P6 x/ d7 S
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-13 08:21:05 | 显示全部楼层
14.每日构建

/ K0 X) a' ?& T4 t9 o: k& M) X" r$ X% w7 ~7 M$ I
其实晓川也没有完全的把握。但是事实证明了每周一轮集成是可行的。不仅可行,而且集成比以前更顺利。第一次未隔周就进行的集成,没把握,晚上加了加班,第二天中午竟然就做完了。随后一周的集成也是这样。

+ z: m0 N5 s! R) t$ K5 T; X9 `
晓川开始主动提出更密集的集成:“老大,其实每天集成,也差不多能行。只要晚上稍微加一点班。”

) x. G6 R- p" m  L- E老大说:“好。要是能不加班,就更好了。”9 y9 A7 W) j/ b$ H% s. ^) b

! @2 }- x5 m+ n6 O+ s
晓川:“嗯,三点开始集成,到六点下班。如果比较顺利,基本没有版本合并冲突,也没有什么构建错误,那倒是够。但这很难保证。”
8 X( {. w( j6 n" P: M: C" ^0 z
老大:“最好是偶尔才需要加班。对了,我记得以前是下午一点开始集成。现在改成下午三点了。如果改回去,是不是加班就能少一点?”& v, I* \# A6 L$ W

$ [; G5 Z" x. a, V( u
晓川:“那倒是。不过……”

9 F7 S7 l% |. C- t老大:“这只是我的建议。你去和项目上讨论吧。”6 m; A; E7 n# Y/ @

6 {9 i$ y+ H9 Q
晓川去和老刘讨论每天出一个基线。老刘说,他举双手支持。晓川再提把提交截止时间提前的事儿。老刘沉思了一下,露出狡黠的笑容,“其实把提交截止时间定在啥时候都无所谓。不过既然你想提前,那我就帮你提前。”
在项目例会上,大家觉得每天集成这个提议不错。但是有些同志对集成时间提前到下午一点钟表示担心。于是老刘说:“过去我们特别在意集成的开始时间,因为错过了这一次,就要再等一个星期。以后就没必要啦,反正一天一集成,今天没赶上,还有明天呐。”
: X3 o0 K$ a5 I- l6 M  k
有个开发组长不同意:“现在提交得先升级任务分支再构建。就一上午的时间,中间在再出点儿错,怕就来不及了。拖到明天,明天再出错怎么办?”* e# |8 x# [3 o" |2 Y6 V9 r
5 ?% I- @: E  [. Y
晓川解释说:“要是集成下午一点钟开始,从经验上看,当天下班前大概就能做完了。这时候有提交的程序员就可以升级任务分支,然后启动编译构建,等第二天早上再收结果。这样就把晚上的时间利用上了,还不用加班。”

2 |9 _2 e4 M$ g. O! U开发组长:“现在构建分编译和链接两步,然后还要加资源文件进去。所以启动构建后,还得人盯着,程序员得加班才行。”
+ B. T$ C- K  ]- U) d% P' T; S- q
晓川:“我写了个小脚本,可以把它们串起来了。我自己就在用。”晓川现在集成的任务量不大了,所以有空的时候,在学习脚本语言。这是他的一个小小的成果。
8 \9 B: s: @- _5 V- }' W9 f9 `% S! ~" d- A6 U* n
开发组长仍然坚持:“如果你下班前没完成集成呢?那程序员得加班等着你出基线?”6 _! m, y  X; g! ?& M% ~

5 F( W3 |/ f3 J$ J1 W
老刘发话了:“晓川,这种情况的话,就不必要求必须基于最新基线了吧?前一天的基线,也差不多吧?”
6 S* O4 J, @3 Y! u
最后讨论的结果是,大家同意了每天下午1点钟开始集成。前提是,如果下午 5点半之前,当天集成结束,那么第二天的提交必须基于这个基线。而如果当天集成没有在下午5点半之前结束,那么第二天的提交可以基于上一个基线。9 L( O8 @6 L  j$ e7 }' V

  N0 p& `1 B- \" g- q% h
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-13 08:24:45 | 显示全部楼层
15.在春节到来之前
  L: j, |, A% c- E) c4 b

8 y! D, X* H# D2 U; s: I8 S5 Q
实践的结果是,只有在很少的情况下,晓川需要加班来处理集成。于是,一般来说,等待提交的程序员们都能在当天下午 5点半之前拿到当天出炉的基线,并让提交基于这个昀新的基线。这样,在处理程序员的提交时,因合并而遇到的合并冲突以及构建问题,就很少了。从而很少需要加班来完成集成工作。这就形成了一个良性循环。
8 Y0 v9 A. x1 n9 X2 O; d2 d  t5 m
程序员们就更不需要为此加班了。过去那种加班等着解版本合并问题的日子,好像是很久以前的事情了。加班帮晓川解决构建问题的情景,也变得越来越少见了。
0 |2 x- W, Q) v  i8 j: b: A5 T  i+ d) N  @
其他项目也纷纷要求每天集成一次。理由很简单,昀大的项目都能做到,更何况其他项目呢。不断有部门内外的同事,来向晓川询问、了解相关情况。他每一次都强调,不是简单的加快集成频率就行了。前提是程序员提交的代码都基于昀新或者比较新的基线,而且都能编译构建通过再提交。而这些要靠QA部门的支持才能实现。
晓川跟别人讲是 QA部门的支持,在心里跟自己说的则是,“这些我是跟英英合作完成的。”
, ?% u$ v  b  X1 Z: f
春节眼看就要到了。已经有同事请几天年假提前回家了。有的项目打算放假前就实现每天集成一次。其他的项目打算等春节过完,大家都回来了再弄。9 h& g" b6 M9 B; i6 H4 x
7 y: v! s6 @7 q5 J- k
除了做集成和接待各种来访,晓川在考虑如何让集成工作更自动化。原因是,现在集成工作的压力越来越小,所以集成工作无聊的一面就越来越显露出来。每天都在做重复的事情,发邮件、收邮件、合并提交、找人解合并冲突、构建、找人解决构建问题、出基线、汇总修改内容以便出报告。嗯,相比之下,写点脚本啥的,多好玩儿啊。
# Q& T8 k) L4 p- ^0 a* v
前些日子,那个把构建串在一起的小脚本,就是在这样的指导思想下写出来的。晓川打算把其他部分也自动化。但是好像不太容易。比如,如何让计算机自动地根据程序员申请提交的信件来依次进行从各个任务分支到集成分支的合并操作呢?伤脑筋啊。晓川想了好几个方案,都不太可行。大概是自己的编程技术不够吧。还要多学习。嗯,不管了,先回家过年吧,等过年回来再研究。
, _2 q9 {+ I# a9 N- t! e& i$ o9 K( u6 X
就要回家过年了。晓川还有点儿依依不舍。舍不得在这座大都市的生活?不,他挺喜欢在家乡的生活。关键问题是在这里工作蛮有意思的,让人激情澎湃。嗯,不光是激情澎湃。晓川想起英英来。和英英一起工作的时候,就会觉得格外愉快。不光是工作的时候,就算不聊工作的时候也是。
" R, l+ {! i* F. z5 x9 z3 l9 w4 o
记得那次在食堂打饭时碰到英英,就一起吃午饭。席间,英英说起她很想去北海玩儿,说还没有去过。晓川就很诧异,“你在北京上的大学吧?一直没去过?”5 x9 }3 ]& p/ ]. m. f: J3 A) Y& L
/ }! K1 a. ]" `3 m
英英:“哎呀,不是那个北海啊。”

% Y; R3 y' q" ^! M# x$ a- z0 u0 i晓川:“哦,你是说,广西北部湾那个北海?是想去银滩吧?”
( Q. f4 H5 X. w0 `3 j4 I0 Z7 I3 N9 s, k
英英:“不是那个,不在国内。”- b3 @5 Y5 O/ i: z0 d: V

* Z7 q3 C" `; `' W. i; R晓川:“难不成,你对北海油田感兴趣?”: T7 y% T+ m( Z$ G' Q  c1 y

/ H: `* m8 V8 V1 e5 `英英:“我说的是苏武牧羊所在的北海。就是现在的贝加尔湖。 ”& a5 F% y! u+ ]) o, p) {
  g" |; g1 A$ `$ n
晓川捶桌子,做气愤加无奈状。
8 J7 e3 ~6 j( g$ E5 {2 ^7 c; P! w- Z1 i
过了一会儿,晓川跟英英说,“我最想去的地方呢,是静海。”. J, I9 ]# S4 R: {. V& E5 p- Q

* i- ?& n" f4 a4 r2 E# U8 u' ?% g英英:“静海县大邱庄?”) [) v" _5 y" X0 r7 |* p0 n  A
! H; b4 `/ T# U) v8 ]' z
晓川:“不是。”' b% @/ g0 q" {- S4 J2 g4 S5 X  E

- k) \7 X4 t. T% s
“那还有哪个静海啊?”英英搜肠刮肚想了半天还是想不出来。
. b, v+ `" X% Z0 i+ N
“你就告诉我吧!”
( E+ a* J( V5 F7 n2 ~; A$ M
“月亮上那个静海。阿波罗登月的位置。”
' H  m9 A/ C8 z4 ~5 o5 m" V# Y+ E
轮到英英捶桌子了。

1 ~& G" t( R; a) T  \0 H
回复 支持 反对

使用道具 举报

发表于 2014-9-12 12:07:18 | 显示全部楼层
好看,在故事中学习,真的很棒。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|无图版|SCMLife.com ( 京ICP备06056490号-1 )

GMT+8, 2018-4-22 19:34 , Processed in 0.075366 second(s), 8 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

快速回复 返回顶部 返回列表