技术开发 频道

敏捷思维:组合使用模式

【IT168 技术文章】

    我们已经讨论了敏捷架构设计的4种过程模式,在这一章中,我们对这四种过程模式做一个小结,并讨论4者间的关系以及体现在模式中的敏捷方法论特色。通过这一章的描述,大家能够对前面的内容有更进一步的了解。

    四种模式的着重点

    我把源自需求、团队设计、简单设计、迭代设计这4种过程模式归类为架构设计的第一层次,这4种模式能够确定架构设计过程的框架。这里需要对框架的含义进行澄清:架构设计的框架并不是说你要严格的按照文中介绍的内容来进行架构设计,在文章的一开始我们就指出,模式能够激发思考。因此,这一框架是需要结合实际,进行改造的。实际,我们在这一个部分中介绍的,比较偏向于原则,我们花了很大的时间来讨论原则的来龙去脉,而原则的度,则要大家自己去把握。为什么我们不讨论原则的度呢?这里有两个原因,一个是软件开发团队各有特色,很难定义出一个通用的度。第二个原因是我的水平不够,实践经验也不够丰富。

    前面提到的四种模式其实是从四个侧面讨论了架构设计中的方法问题。源自需求提供了架构设计的基础。在软件过程中,架构设计是承接于需求分析的,如果没有良好的需求分析活动的支持,再好的架构设计也没有用。因此我们把这一模式放在首位,做为架构设计的目标。

    有了确定的目标,还需有组织的保证,这也就是第二种模式――团队设计的由来。敏捷方法提倡优秀的沟通,因此团队设计是必要且有效的。而团队设计的另一个意图,是保证架构设计的下游活动得以顺利的进行,例如详细设计、编码、测试等。由于开发团队中的人大都加入了架构设计,因此最大程度的减小了不同的活动间的信息损耗和沟通效率低下的问题。如果说源自需求模式是起承上的作用,那么团队设计模式则是扮演了启下的角色。

    在软件设计的过程中,沟通往往扮演着非常重要的角色。从团队设计开始的几种模式所要解决的都是沟通的问题。团队设计对沟通的贡献在于它能够把设计意图以最小的代价传播到开发团队的每个角落。这样,设计和下游的活动间由于沟通不畅产生的问题就能够得到缓解。一般而言,设计到编码会经历一个信息损失的过程,编码人员无法正确理解设计人员的意图,设计人员却往往无法考虑到一些编码的细节。虽然我们可以通过共通的设计符号来提高沟通的质量,例如UML。但是实践证明,只要能够保证畅通的沟通,即便没有优秀的开发方法,项目成功的概率依然很高。因此对于单个的项目来说,最关键的问题还是在于沟通。只要组织得当,团队设计是一个值得应用的模式。当然,配合以UML为代表的建模语言,更能够提高沟通的效果。

    在设计中,我们发现,当设计信息转换为编码信息需要一定的时间,这个时间包括设计的组织时间,设计被理解的时间。如果设计比较复杂,或者说设计的文档比较复杂,编码人员花在理解上的时间就会大大增加。因此,权衡后的结果是,相对于详细的设计说明书而言,简单的设计说明书再配合一定程度的面对面沟通能够起到更好的效果。"简单要比复杂有效",这就是简单设计模式的基本思路。

    同样,简单的思路还会用在软件开发的各个方面,例如文档、设计、流程。坚持简单的原则,并不断的加以改进,是降低软件开发成本的一种很有效的做法。

    在有了以上的思路之后,我们还需要面对两个现实的问题。需求的变化将会导致设计的不稳定,而需求的复杂性又会导致简单架构设计的困难。为了解决这个问题,我们引入了迭代的方法,将问题分割为多个子问题(把一个复杂的问题分解为多个较简单的子问题是计算机领域最常见的处理方法)。这样,问题的范围和难度都大大降低了。而更关键的是,由于对用户需求理解不充分或用户表达需求有错导致的设计风险被降到最低点。迭代和前面几个模式都有关系。

    需求和迭代

    源自需求模式是架构设计中的起手式,没有这一模式的支持,架构设计只能是空中楼阁。其实,源自需求模式严格意义上并不能算是敏捷方法论的特色,而应该算是软件开发的天然特性。不幸的是,就是这么一个基本的原则,却没能够引起开发者足够的重视。

    敏捷方法论中把需求摆在一个非常重要的位置,我们把源自需求模式作为架构设计的第一个模式,主要的目的是承接架构设计的上游工作――需求。需求决定架构,因此,我们在经典的瀑布模型中可以看到需求到设计的严格的分界线,但是在实际的开发中,按照瀑布模型的理论往往会遇到很多的问题,所以,我们尝试着把需求和(架构)设计之间的界限打破,形成一个重叠的地带,从而提高软件开发的速度。因此,我们在源自需求模型中指出,架构设计是紧随着需求开始的。

    需求对软件开发最具影响就是需求的不稳定性。我们都非常的清楚软件开发的曲线,越到软件开发的后期,修改软件的成本越高。因此,在软件开发上游的需求的变动将会对软件开发的下游产生天翻地覆的影响。为了协调这一矛盾,软工理论提出了螺旋开发模型,这就是我们在迭代开发模式中的讨论的理论基础。把软件开发过程分为多个的迭代周期,每一次的迭代周期最后都将生成一个可交付的软件,用户在每一次的迭代结束后,可以试用软件,提出下一步的需求或是改变原先的需求。通过这样的方式,把客户、开发商的风险降到一个可以接受的水平上。

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

0
相关文章