InfoQ网站上有两篇介绍Visual Studio产品团队敏捷实践经验的中文文章,推荐给大家!
《大型软件开发项目中的功能小组模型── Visual Studio开发团队的敏捷实践经验分享(一)》
《功能小组模型的过程与质量控制 - Visual Studio开发团队的敏捷实践经验分享(二)》
题外话:前天听说欧盟也无条件批准了Oracle对Sun公司的收购,虽然还需要等待俄罗斯和中国等国家的批准,但相信那只是时间的问题了。一个曾经在软件行业无比辉煌的公司,一个曾经缔造了众多顶级软件和硬件(Solaris、Java 、MySQL)的公司,就这样说没就没了,真是不敢相信。“江山代有人才出,各领风骚数百年”,对于IT行业可用不了数百年了,也就是数十年吧,应该改为“市场代有人才出,各领风骚数十年”。市场的选择是无情的,倒下了一个Sun,还会有更多站起来。
今天(2010/01/23)是周六, 一整天都在参加InfoQ在上海闵行紫竹微软新园区举办的“京沪两地敏捷Scrum训练营”上海站的活动。活动分为上下两场:上午主要是由雅各布森公司吴穹博士的“敏捷软件开发之Scrum实践(上/下)”,介绍敏捷开发和Scrum的北京和理论方面的知识;下午是由微软钟鸣所做的“大型团队中的Agile-微软研发团队的敏捷开发实践”和北京金桥公司王然的“基于Visual Studio 2010大型敏捷项目开发”,分别介绍了微软开发工具部门上海团队所采用的Scrum流程和经验,以及如何采用Team Foundation Server 2010来进行敏捷项目开发。总体来说感觉还是不错的,理论+实践经验+工具,应该是不错的搭配。
我所在的开发团队已经成功的应用Scrum有段日子了,但通过这次培训,对以前一些模糊的概念得到了澄清,了解了一些新观点和名词,触发了我的一些新想法,还是颇有收获的。下面是些具体的收获和见闻,给大家报告如下:
不要误读敏捷宣言
下面四条就是敏捷宣言(Agile Manifesto)的内容,往往会被敏捷的“粉丝”或者激进者误读,或者用来误导领导。 他们通常会把这里的over翻译为“不需要”或者“不要”等。敏捷看似是《笑傲江湖》中的“独孤九剑”,以无招胜有招,但那要看是谁来用,并不是人人都可以的。只有风清扬这样的super senior前辈,和令狐冲那样的super smart晚辈才能真正用得上“无招胜有招”,才能真正可以把over翻译为“不要”。而我等泛泛之辈,只能将其翻译为“重于”,也就是说,对于绝大多数(99.99999%)的团队而言,在敏捷开发中,方法、文档、工具合同以及计划都是必须的,区别在于要让它们的存在更合理有效,不要动辄就是几百页无人愿看的文档。
Be Agile rather than do Agile
敏捷的本质是要找出开发流程中不合理和浪费资源的内容,并加以改进。只要所做的工作能达到这样的效果的我觉得就是一种适合你的敏捷方法。而并不一定说是必须遵循别人的已有的方法和步骤才叫敏捷。而且往往是公司、人员和项目性质等不同,别人成功的敏捷应用绝大多数情况下是不适合你的。
采用敏捷方法的提议多是从实际的开发团队兴起,而终止于老板或者老板的老板。原因很简单,一线的技术人员对新的开发方法更为敏感和强烈的热爱,他们经常会提出对现有流程好的改进意见。但很多敏捷方法涉及到对现有流程人员的改变,如Scrum,没有老板的支持是绝难完成的。现在很多公司采用的是“弱项目,强职能”组织模式(不确定这是不是CMMI要求),而Scrum的Feature team/Feature crew的组织方式则正好是相反。
相对而言,采用TDD和XP要简单一些,两三个开发人员就可以实施,不需要过多的组织调整。
推广敏捷方法不是大跃进
不要把推广敏捷当成一场运动,不是要搬到现有的一切而从头来过,那样只会招致更多人的反感和阻力。现存的东西总有它合理的地方,推广敏捷是针对其中不合理的东西进行渐进式的改变。
这是我在这次活动中听到的一个新名词,ATDD的全称是Acceptance Test-Driven Development,也即是接受性测试驱动开发,它也是敏捷方法中的一种。
Default/Images/ScrumAgile.png" alt="" width="640" height="260" />
Scrum最大的难点应该说是Product Backlog到Sprint Backlog的任务挑选和分解的过程,这需要构架师的参与。另一个难点是如何让测试能跟上敏捷的步伐,特别是在当下仍以手工测试为主的情况下。
采用了Scrum方法,会不会让团队成员感觉更累呢?确切地说:它人爱偷懒的人会更累了,呵呵。Scrum以项目管理实践为核心,它不同于XP和TDD。它要达到的管理效果,我用16字总结如下:分工明确、责任到人、项目透明、过程可控。在相对开发周期比较短(一个迭代周期在2-4周)的情况下,每个人的时间分配和利用都比较明确,这样就很难再有偷懒的机会了。
什么是Scrum?
Scrum一词是指自英式橄榄球的争球,英文解释是这样的: (rugby) the method of beginning play in which the forwards of each team crouch side by side with locked arms; play starts when the ball thrown in between them and the two sides compete for possession。Scrum 将软件开发团队比拟成橄榄球的争球队,有明确的最高目标,熟悉开发流程中所需具备的最佳典范与技术,具有高度自主权,紧密地沟通合作,以高度弹性解决各种挑战,确保每天、每个阶段都朝向目标有明确的推进。
有明确时间约束的活动才是更有效地活动,否则经常会为不必要的话题展开冗长而无结果的讨论。“学生综合症”告诉我们只有在考试前那段时间才是学习效率最高的时候,同样到的现象的也存在项目开发中。只有到最后快要提交的时候,大家才会搁置不必要的意见,达成可接受的公示。
保证Scrum过程的顺利进行,这样的牧羊犬的职责是明确:对外保护“羊群”不受“狼群”干扰,对能保证“羊群”按时、按量吃草。
什么是敏捷?
敏捷是一个组织素质,也包括组织成员素质。它代表了一组体系和原则,它们的目标是使组织变得更能够自适应,反应更迅速以获得商业成功。
“排队原理”- 给每个人的时间安排到100%并不是一件好事
经常会发现路上塞车并一定应为出事故了,排队原理解释了这种塞车出现的原因,以及对开发团队的启示。
成熟的敏捷团队是相对稳定的组织
敏捷团队不是游击队,打一枪换一个地方,人员经常分撒变动。成熟的敏捷团队是相对比较稳定,大家能够在一起经历多个Sprint。其中的道理很简单,人员和组织的磨合是需要时间和成本。