经管08010_XP起步:关于“沟通”

多数谈话都是在有证人的情况下,某个人发表的长篇大论。
——Margaret Miller

任何软件开发项目的成功都直接与沟通成正比!

为了让他们了解你现在的一切,你会:
为他们写文档吗?
写每周状态报告吗?(我甚至被要求每天写工作报告)
如果在同一座办公楼里工作,给他们发过电子邮件么?
如果你很关心他们的近况,你会安排一间会议室,邀请所有你关心的朋友,然后规定他们答应你在最短的时间里做很多的事情吗?

——很遗憾,这些事情我都碰到过,但是我希望你不再会这么做!

XP通过以下4种实践帮助和促进开发人员做面对面的沟通:
1、结对编程(并经常改变配对)——通过口头讲述和解释代替大多数的文字文档,通过配对传播信息:应对人员流动风险。只在需要文档的时候编写最需要的文档,将更多的时间放在查看代码和与人交流上,会收获更大!

2、每天早上召开站立例会——提出自己的困难;找到能帮助自己的人;发布开发和准备过程中的惊喜;确保每天开始时都在做正确的事情。不要过分讨论细节问题!让牛人说话和分享,而不要神秘感或者有所保留;控制例会时间。

3、计划(实质上就是与客户的相互之间的谈话)——交流、沟通、倾听。客户和开发人员沟通。
4、鼓励即席沟通的团队气氛和环境——四处看看,当人们遇到棘手的问题寻求帮助时、在同班陷入困难时拉他一把,帮助需要帮助的人!工作场所布局合理,不要隔间!要白板!要大桌子!

沟通沟通沟通沟通!

经管08009_XP起步:意外情况的处理

像处理代码中的例外那样处理XP例外。
遇到例外,就尽可能简单地处理它们。
 
可能的意外情况及其处理方法:
1、奇数个开发人员——给该人分配一项“独立”任务,如预研和研究的工作;三人编程。——结对编程在一人不在场的时候,谨慎修改,修改后一定要告知对方。

2、客户不编写故事——开发人员自己根据客户的要求记录下这些用户故事。验证业务需求和设置优先级的人仍然必须是客户。
3、客户不编写验收测试——同上。
4、管理层规定的进度表不现实——沟通,离开,并保留诚实。或者项目推迟时道歉。一定要有勇气对客户说出真实的想法。
5、管理层不喜欢所做的评估——同上。
6、管理层不允许结对编程——尝试,换个方式。

 
不到万不得已就忽略每个例外,需要处理例外时,尽量保持简单。

经管08008_XP起步:先做最重要的事!

轻装上阵!——探险家的故事
工欲善其事,必先利其器!——林肯6小时磨斧子
 
如果没有按照如下方法使用过所有这些XP实践,就不该说:我在采用XP!
6个关键的XP实践活动:
1、将业务和技术分开(计划和估算)
2、小版本、短迭代
3、测试先行(先做单元测试)
4、结对编程
5、重构
6、持续集成
 
XP的价值:
1、简明:简单地思考——最简单的方法也是正确的。
2、反馈:尽早并经常地得到反馈——不但要接受变化,也需要变化。来自开发伙伴、经理、客户。迭代回顾。
3、沟通:成功与沟通成正比。
4、勇气:不退缩、不放弃。勇敢者游戏。坚持就是胜利!

经管08007_XP的理念:树立正确的态度

在一个充满谎言与欺骗的环境中,XP是不可能发挥作用的。
尝试XP需要勇气。
 
1、诚实和信任——XP不需要外交辞令。透明化、公开化。客户和开发人员坦诚相待、按计划行事。
    计划:
       
很多重量型开发方法预先做详细的计划,大部分计划都是建立在猜测的基础上,都会与实际产生偏差。
       
XP中做计划基于这样的前提:需要每一步都确认我们知道什么,不知道什么。我们根据初步需求(故事)的初步估算形成了一个初步的项目计划。

       
在一个迭代开始前,将详细的计划整合在一起。
       
迭代间隔简短,可以保证开发人员和客户的频繁及时沟通,了解项目进展。
    结对编码:
        坦诚相待、共同拥有代码。
        工作环境应该有很少或没有空间屏障。
        每天的站会上,交流最近的工作情况。
当然,XP也需要机智和变通。
   
2、谦逊
加入到极限编程软件工作室来吧……因为在这里你每天都感觉在进步!
允许自己犯错误,每个人都会犯错误!
XP团队中的每个成员都应该经常感觉自己很笨,这才是健康的。

 
3、甜蜜的自由
无拘无束的讲真话!
客户跟开发人员之间互相信任、坦诚相待,而不是开发人员给客户虚假的难以达到的许诺!
互相支持的环境、互相学习,共同进步!
对别人和自己诚实,必须谦逊;做到谦逊,就可教也;可教后,就会进步;进步了,就可以运用学到的知识获取更大的成功。

经管08006_XP的理念:非传统战略——克服来自经理和开发人员的抵触

XP让人感觉很不舒服,人们会抵制它。这种抵制来自恐惧和骄傲。通过将使用XP作为一种战略,可以客服这些情绪,增加获胜的机会。

1968年奥林匹克运动会,Fosbury带着他的“Fosbury跳”一路过关斩将,获得金牌并创下了新的奥运会记录。“Fosbury跳”不同于以往面对横杆劈腿跳的方式,而采用后背过杆并且肩膀先着地。坦白说,这看上去很蠢!但是,人们很难用传统方式击败使用非传统方式的获胜者。

XP就是一种非传统战略!使用它,可以开发出按时交付并具有很高商业价值的伟大软件,而且不需要开发人员加班加点的工作!使用XP,会增加获胜的机会!

最后,不要只为XP而关注XP,不要成功一个狂热的XP追星族,反而忽略了产品方面的问题!

XP只是手段,而不是目标!

克服来自经理的抵触
——经理们会反对使用XP,因为他们在方法选择上有着错误的假设。将问题的焦点放在降低软件开发费用上,他们就不再反对了。
1、了解经理的目标,帮助经理成功
2、开发成本——研发和修改的金钱、时间;留住高级开发人员;普通开发人员的贡献。
3、可能的反对意见:
   
XP不成熟——不试过又怎么知道呢?实践是检验真理的唯一标准!现在的状态就没有风险么?就是最好的么?穷则变!
    XP过分简单——kiss,简单就是美;XP简单,但是不过分;大部分文档不必要。
    结对编程成本太高——一个臭皮匠,弄死三个诸葛亮:-)
   
全职现场客户难以应付——防止开发人员等待客户或者猜测需求;典型的需求文档只有15%是完整的,7%是正确的。
   
XP太不正式——不要试图用有趣的PowerPoint幻灯片和PDF文档来掩盖问题。提供足够的文档,但绝不要提供不必要的文档:计划游戏、系统隐喻、需求故事、测试用例(关注结果)。

   
“XP的局限”——不要将XP当做百宝箱,什么都从里面拿,要知道他是一个整体,单一的实践可能立即产生正面的影响,从而让人们接受随后采用的其他实践,但是有可能造成不良后果。如:开发人员仅偶尔结对编程、不再编写文档,这样会缺少有价值的反馈。

   
克服来自开发人员的抵触
——开发人员会反对使用XP,因为他们可能看不到XP的优势。将问题的焦点放在XP的支持环境上,他们就不再反对了。
1、开发人员,喜欢跟机器交流,不喜欢跟人沟通。
2、开发人员希望:
    开发软件,而不是编写文档或整日开会;
    为自己开发的软件产品而自豪;
    工作中得到乐趣;
    一旦软件发行,再也不用去维护该产品。喜欢新的挑战,而不是给老代码补补丁。
3、可能的反对意见:
   
XP过分简单——真正含义是:“我学过其他软件方法,我的工作也因此取得了成绩,我不想再倒退。除此之外,在编程上我已经不像以前那么出色了,因为我还要花很多时间做一些‘更高级别的事情’。”

   
我不喜欢结对编程——开发人员不习惯成群的狩猎;而且认为没有个人代码的拥有权,就很难成为编程英雄。强调知识共享、改进代码质量及增强士气。(开发人员不喜欢代码被审查,也不喜欢审查别人的代码,尽管审查已经被证实在保证软件质量方面起着巨人的作用。几项研究同时表明,代码审查是对代码质量的最大贡献,甚至超过了测试!)结对编程比同行评审有过之而无不及!

   
XP稀奇古怪——编写代码前先编写测试用例并运行测试用例–代码变简单,因为仅需要通过测试即可,也不再担心别人修改自己的代码,测试用例也被当做很好的文档;允许不断改进设计以符合变化的需求–渐进的递增的设计,需求中的变化不是大量修改的借口;结对编程,经常要共享单个键盘和鼠标。

   
XP没有提供足够的信息——开发人员不喜欢创建文档,甚至一个都不想创建,但是他们喜欢有足够的信息指导工作。经常有没有足够的设计文档,过分依赖需求故事代替规格说明书,XP导致失败!把代码当做最好的文档!XP不是建议不编写文档,而是说不应该花时间去创建不毕业的文档。

   
——必要的文档:面向维护——wiki风格的常见问题数据库(10个类一页);技术备忘录(20个类一页);清晰一致的验收测试规则;测试用例和代码

    ——每天一个短会;测试用例针对逻辑而不是UI;需求和估算写在卡片上。