UML软件工程组织

架构设计中的方法学(7)——组合使用模式(2)
作者:林星 本文选自:IBM DW中国 2002年09月28日

请注意迭代的前提:需求的易变性。因此,对于那些需求容易发生变化的项目,我们就可以使用迭代式的开发过程,虽然我们会付出一些额外的成本(刚开始这个成本会比较大,但可以用较长的迭代周期来降低这种成本),但是风险减小了。而对于需求比较固定的项目,是不是有必要使用迭代的方法,就要看具体的环境了。因此,我们是根据实际的情况选用开发方法,而不是因为先进或是流行的原因。

实际上,由于现代社会的特性,大部分的项目都是可以采用迭代方法。因此,我们的选择就变成了了迭代周期应该要多长。迭代周期在理论上应该是越短越好,但是并没有一个绝对的数值,时间的跨度一般从几周到几个月。一般来说,迭代周期会受到几个因素的影响:

各模块的关联程度。在软件开发中,我们有时候很难把一些模块分离开来,要开发模块A,就需要模块B,而模块B又需要模块C。各模块的关联程度越高,迭代周期越长。当然,也相应的解决方法,我们可以在各模块的功能中选取出一些关键点,作为里程碑,以里程碑作为迭代完成点。

人员技能、经验的平均程度。团队中成员的开发能力、开发经验良莠不齐,这也是造成迭代周期延长的一个原因。能力低、经验少的开发人员会拖后每一次迭代的时间。针对这种情况,做好统筹规划就显得非常的重要,可以通过一两次的迭代,找出队伍中的瓶颈人员,安排相应的对策。

工具的缺乏。迭代周期越短,就意味着build、发布的次数越多,客户也就有更多的机会来修改需求。这要求有相关的工具来帮助开发人员控制软件。最重要的工具是回归测试工具。每一次迭代都需要增加新的功能,或是对原先的功能进行改动,这就有可能引入新的bug,如果没有回归测试,开发人员就需要花费时间重新测试原先的功能。

计划、控制的能力。迭代周期越短,所需要的计划、控制的能力就越强。因为短时间内的计划制定和实施需要高度的细分,这就要求开发团队的管理者对开发能力、工作量、任务分配有很强的认识,才能做好这项工作。不过,迭代周期越短,同样开发时间的迭代次数就越多,而团队调整、改进计划控制的机会就越多。因此,后期的迭代一般都能够做到比较精确的控制。而这样的做法,要比问题堆积到软件交付日才爆发出来要好的多。没有突然落后的软件,只有每天都在落后的软件。

简单和迭代

简单和迭代关系是双向的。

在现实设计我们很难界定出简单设计的程度。怎样的架构设计才算是简单?按照我们在简单设计模式中的讨论,刚好满足目前的需求的架构设计就算是简单的设计。但是,从另外一个方面考虑,需求的易变性限制我们做出简单的设计,因为我们不能够肯定目前的需求将来会发生什么样的变化。因此,为了克服对未知的恐惧,我们花了很大的力气设计一些灵活的、能够适应变化的架构。这是源自需求模式对简单设计模式的影响。

源自需求和迭代设计的关系的讨论建议我们把需求分为多个迭代周期来实现。那么,相应的架构设计也被分在多个迭代周期中。这样的方法可以降低架构设计的复杂程度。因为设计人员不需要考虑软件的全部需求,而只需要考虑当前迭代周期的需求。复杂性的降低将会有助于架构设计的简单化,从而达到简单设计的一系列的好处(参见简单设计)。

我们从迭代设计中的最后一个例子可以清楚的看到迭代设计是如何把复杂的需求给简单化的。把握迭代设计有助于我们避免过分设计的毛病。这是个技术人员经常犯的毛病。我所在的团队很多时候也无法避免。例如,在很多的项目中,我们都会花费大量的时间来设计数据库到业务实体的映射。诸如此类的技术问题对开发人员的吸引程度是不言而喻的,但是必须看到,这种的设计会导致开发成本的大幅度上升。更为糟糕的是,除非有丰富的经验,这种类型的设计给开发工作带来的价值往往无法超过其成本。

因此,我们需要学会权衡利弊,是否有必要投入大量的资源来开发其实并没有那么有用的功能。因此,迭代设计和简单设计的结合有助于我们摆脱过度设计的困扰,把精力集中在真正重要的功能之上。

此外,简单的设计并不等同于较少的付出。简单的设计往往需要对现实世界的抽象,回忆我们在简单设计中讨论的测量模式的例子,它看似简单,但实现起来却需要大量的业务知识、很强的设计能力。因此,做到简单是程序员不断追寻的目标之一。

在很多的方法论中,一般并不过分注意代码重复的问题,要么是不关注,要么认为适当的代码重复是允许的。而XP却把代码重复视为良好代码的大敌。"只要存在重复代码,就说明代码仍有Refactoring的可能。"这种观点看起来非常的绝对,这可能也正是其名字中Extreme的来历(英文中的Extreme属于语气非常重的一个单词)。从实践的角度上来看,追求不重复的代码虽然很难做到,但是其过程却可以有效的提高开发团队代码的写作质量,因为它逼迫着你在每次迭代重对代码进行改进,不能有丝毫的怠惰。而这种迭代的特性,促进了简单的实现。

团队和简单

我们在简单设计中提过简单设计需要全面的设计师。除此之外,它还需要团队的配合。简单意味着不同活动间交付工件的简单化。也就是说,类似于需求说明书、设计文档之类的东西都将会比较简单。正因为如此,我们很难想象一个地理上分布在不同地点的开发团队或一个超过50人的大团队能够利用这种简单的文档完成开发任务。

因此,简单的设计是需要团队的组织结构来保证的。简单的设计要求团队的相互沟通能够快速的进行。架构设计完成后,架构的设计思路传达给所有的编码人员的速度要块,同样,编码中发现问题,回馈给设计者,设计者经过改进之后再传达给收到影响的编码人员的速度也要快。象这样高效率的传播我们可以称之为"Hot Channel"。

为了保证"Hot Channel"的高沟通效率,最好的组织单位是开发人员在3到6人之间,并处于同间工作室中。这样的结构可以保证讯息的交互速度达到最高,不需要付出额外的沟通成本,也不需要过于复杂的版本控制工具或权限分配。根据我的经验,一个共享式的小型版本控制工具、网络共享、再加上一个简单的网络数据库就能够解决大部分的问题了。

在理论上,我们说只要分配得当,大型的团队同样可以组织为金字塔式的子团队,以提高大型团队的工作效率。但是实际中,随着团队的人数的增加,任务的正确分配的难度也随之加大,沟通信息上传下达的效率开始下降,子团队间的隔阂开始出现,各种因素的累加导致敏捷方法并不一定适合于大型的团队,因此我们讨论的敏捷方法都将受到团队的特性的限制。

模式的源头

如果你对XP有一定的了解的话,那么你可能会感觉到我们讨论的模式中应用了XP的实践。确实如此,XP中有很多优秀的实践,如果组织得当的话,这些微小的实践将会组合成为一套了不起的开发方法。不过,目前的软件开发混乱的现状阻止了先进的软件方法的应用,对一个身体虚弱的病人施以补药只会适得其反。因此,在前面讨论的模式中,我们应用了一些容易应用、效果明显的实践方法。在实践中适当的应用这些方法,并不需要额外的投入,却能够有很好的效果,同时还会为你的团队打下一个良好的基础。

作者简介:

林星,辰讯软件工作室项目管理组资深项目经理,有多年项目实施经验。辰讯软件工作室致力于先进软件思想、软件技术的应用,主要的研究方向在于软件过程思想、Linux集群技术、OO技术和软件工厂模式。您可以通过电子邮件 iamlinx@21cn.com 和他联系。

『引自 IBM DW中国』

上一页  



版权所有:UML软件工程组织