2009年3月4日星期三

Craig Larman来访小结

Craig Larman这次来我们这里一共三个星期,期间我花了一些时间参与大师Coach研发部门的各项活动,并与大师讨论了一些关于Agile和软件工程的问题。感觉学习到了不少东西。

生活中的大师是非常浪漫的,这不是本文的重点。在工作中的大师是非常严谨的,常常引用一些已有的论文或研究结果,当谈到个人观点时总是很小心。

大师比较强调工程师的软件设计能力。当然,他也反对BDUF(Big Design Up-Front),但他认为,一定的事先Design还是需要的。例如在一个迭代周期伊始,team应该组织一个Design Workshop,来讨论和决定一些Design的大体状况。当然大师也重调不断的refactoring。大师说:“TDD can also make very bad design.”他要说明,仅依靠某种开发方式是不会自然而然的得到好的design的,关键是要有设计的能力。大师甚至引用禅宗的道理来比喻软件设计(http://terry-yinzhe.spaces.live.com/blog/cns!92560BAA05230C71!315.entry)。





大师还讲解了一些需求分析的方法。这些方法多是在他帮不同的team组织backlog grooming与sprint planning I时引入的(backlog grooming与Sprint Planning I是Scrum中的两项活动,这两项活动的一个共同目的是澄清需求)。并且大师给出了切实可行的ATDD方式,包括:
1.如何用user story的方式来描述需求
2.如何把user story拆分成合适的大小
3.如何把user story用use case、表格或UML的方式来详细描述
4.如何把前面需求分析的结果用workflow或者data table的方式用pseudo test script来描述等。
在sprint中间(或者说一个迭代周期内)就以这些test script的通过为目标进行开发。大师强调“需求”与“设计”间的区别,要求需求分析一定要尽量面向最终用户。(http://terry-yinzhe.spaces.live.com/blog/cns!92560BAA05230C71!376.entry

大师强调,瀑布开发是限制软件交付能力的主要因素。但他引用COCOMO模型来说明,在一个项目中人的因素最重要(http://terry-yinzhe.spaces.live.com/blog/cns!92560BAA05230C71!407.entry)。在批评有些人对Scrum中有“所有的人能做所有的事”这种理解时明确的指出,我们要的是specialist,不是generalist,当然最好是generalized specialist(http://terry-yinzhe.spaces.live.com/blog/cns!92560BAA05230C71!355.entry)。


大师还谈到了应用agile的目的。他说,agile的目的不是提高生产力,或者提高质量,agile就是为了agile,“The purpose of adopting agile is to be agile”。Agile的目的不是用更少的人做更多的事,并且做得更好。这些目的都是通过提高人的能力或者其它软件工程手段得到的。Agile的目的是关注客户价值,提高交付能力和灵活应对改变等。从而,使企业有机会及时为客户创造更多价值,并不断改进。因此他说,“be agile”比“do agile”更重要。也正因此,大师也说,与其学会agile的方法,不如学会agile的思想。大师称之为thinking tools,主要包含了:System Thinking、Lean Thinking、Queuing Theory等。这些思想方法全部包含在他与Bas Vodde合著的《Scaling Lean And Agile - Thinking And Organizational Tools》中。

当然,大师的言行不止于此。最后引用他给我在他的《Applying UML and Patterns》这本书上的留言:
“May all your objects be suitably coupled.”
-- Craig Larman


没有评论:

发表评论