【IT168 专稿】
随着用户需求的多样化,软件系统开始越来越复杂了,而复杂性带来的结果是软件开发管理越来越困难。然而,许多软件开发团队却没有适时地改变其管理模式。因此,越来越多的软件开发项目呈现出管理失控和混乱的迹象,软件开发的整个生命周期已经越来越成为人们关注的焦点。
为什么软件开发项目的管理是这么困难呢?原因在于许多软件开发团队没有选择合适的管理工具。一般来说,在软件开发过程中会有许多不确定的、经常变化的因素,如果在软件开发过程中缺乏合适的管理工具,这将会导致开发人员无法统一开发行为和思路。例如,在实现项目的各阶段和各种角色(架构师、项目经理、开发人员、测试人员等)的方法和思路并不一致,不但会对设计、质量、代码管理和部署产生负面影响,而且还会导致开发成本增加。
那么,我们应该怎样管理好软件开发的各种因素呢?就像教科书上经常所说的一样,如果我们能够很好的管理软件生命周期每一个阶段的质量,也就很好的管理了整个软件开发的整个过程。因此,如何最大程度地管理好开发过程成为目前业界讨论的焦点。本文介绍了在软件开发过程中一种常用的管理工具:软件生命周期模式,以及其概念和选择方法。
什么是软件开发生命周期模式?
软件开发工作本身是需要一个周期来完成的,而在周期的内部则包含了很多因素。一个因素的不稳定,在周期推移的过程中都很可能会造成类似生物学领域的蝴蝶效应----非洲的一只蝴蝶扇动翅膀可能会造成美洲大陆的一场龙卷风。这说明每一个事情都可能会对其它的事情产生连锁反应。因此,任何软件开发项目都必须进行适当的组织和管理,然后才能按预期计划成功地执行项目。也说是说,规划良好的软件开发生命周期将能够实现在更短的开发周期内构建软件的愿景。
(1)什么是软件开发生命周期?
同任何事物一样,一个软件产品或软件系统也要经历孕育、诞生、成长、成熟、衰亡等阶段,这一般称为软件生命周期。软件开发生命周期(SDLC)是指软件开发的全部过程、活动和任务的结构框架。许多软件开发工具厂商都提出过各种软件生命周期方法论,它们有人将SDLC解释为一组步骤或者里程标(Milestone)。但无论是谁的解释,SDLC的一般步骤包括:确定问题、可行性分析与开发计划、收集需求、分析与设计、编码开发、测试、安装、维护。
生命周期法也称结构化系统开发方法,是目前国内外较流行的软件系统开发方法。尤其在开发复杂的大系统时,显示出无比的优越性。它的基本思想是:将软件工程学和系统工程的理论和方法引入到软件系统的开发中,按照用户至上的原则,采用结构化、模块化自顶向下对系统进行分析和设计。具体的说,是通过把整个软件生命周期划分为若干阶段,使得每个阶段有明确的任务,使规模大、结构复杂和管理复杂的软件开发变的容易控制和管理。它的优点是强调系统开发过程的整体性和全局性,强调在整体优化的前提下考虑具体的分析设计问题,即自顶向下的观点。它从时间角度把软件开发和维护分解为若干阶段,每个阶段有各自相对独立的任务和目标,从而降低了系统开发的复杂性,提高了可操作性。
(2)软件生命周期模式
对于不同的软件系统,可以采用不同的开发方法、以及运用不同的管理方法和手段。实际上,软件生命周期法在开始的时候只是一个概念。因此,在应用软件开发生命周期法时,许多开发团队会把这一个概念进行工具化,这一个工具化就是软件开发生命周期模式。通过软件开发生命周期模式,我们能清晰、直观地看到软件开发的全过程。
在过去的10年中,软件生命周期模式及其许多变体获得了广泛的认可。在各种软件开发方法和过程改进模式中的技术革新也得到了承认,如Rational Unified Process(RUP)、Capability Maturity Model(CMM)、ISO 9000-3 等。典型的几种生命周期模式包括:瀑布模式、演化模式、螺旋模式、快速原型模式、喷泉模式和混合模式等。在这里只介绍其中最常用的几种模式:
①瀑布模式:它首先是由Royce提出,该模式由于酷似瀑布闻名。在该模式中首先确定需求,然后拟定规格说明,在通过验证后方可进入计划阶段。因此,瀑布模式中至关重要的一点是只有当一个阶段的文档获得认可才可以进入下一个阶段。瀑布模式通过强制性规约来确保每个阶段都能很好的完成任务,但是实际上却往往难以办到。因为整个瀑布模式几乎都是以文档驱动的,这对于非专业的用户来说是难以阅读和理解的。虽然瀑布模式有很多很好的思想可以借鉴,但是在过程能力上有天生的缺陷。
②演化模式:它主要是针对事先不能完整定义需求的软件开发。它的方法是用户先给出待开发系统的核心需求,并且在核心需求实现后,再提出反馈以支持系统的最终设计和实现。也就是说:开发人员首先会根据用户的需求开发核心系统,然后提供给用户试用;用户试用后再提出增强系统能力的需求;最后开发人员再根据用户的反馈,实施迭代开发。实际上,这个模式可看作是重复执行的多个瀑布模式。演化模式要求开发人员把项目的产品需求分解为不同组,以便分批循环开发。但这种分组并不是随意性的,而是要根据功能的重要性及对总体设计的基础结构的影响而作出判断。
③螺旋模式:它是瀑布模式与演化模式相结合,并加入两者所忽略的风险分析所建立的一种软件开发模式。螺旋模式基本的做法是在瀑布模式的每一个开发阶段之前,引入非常严格的风险识别、风险分析和风险控制。直到采取了消除风险的措施之后,才开始计划下一阶段的开发工作。否则,项目就很可能被暂停。另外,如果有充足的把握判断遗留的风险已降低到一定的程度,项目管理人员还可作出决定让余下的开发工作采用另外的生命周期模式,如演化模式,瀑布模式或自定的混合模式。
④过程开发模式:它又叫混合模式或元模式,是指把几种不同模式组合成一种混合模式,它允许一个项目能沿着最有效的路径发展。因为上述的模式中都有自己独特的思想,现在的软件开发团队中很少说标准的采用那一种模式的,因为模式和实际应用还是有很大的区别的。实际上,许多软件开发团队都是在使用几种不同的开发方法组成他们自己的混合模式。
最后,我们来总结一下。螺旋模式是典型的迭代式生命周期模式,而RUP则是近代迭代式生命周期的代表。与螺旋模式相比,RUP将风险管理放在更重要的地位。最新的迭代式生命周期模式的代表是模式驱动架构(MDA)和敏捷(Agile)软件开发。MDA模式是基于可执行规格说明的思想,是现代转换模式的代表,其核心技术是组件技术。而敏捷开发生命周期的典型代表是XP编程,是把传统的系统设计和实现由敏捷软件开发过程中的验收测试、重构和测试驱动所取代;把传统的集成和部署由敏捷软件开发中的持续集成和短周期所取代。
其实上,无论是瀑布开发模式还是螺旋开发模式,软件生命周期模式的发展实际上是体现了软件工程理论的发展。在最早的时候,软件的生命周期处于无序、混乱的情况。一些人为了能够管理和控制软件的开发过程,就把软件开发严格的区分为多个不同的阶段,并在阶段间加上严格的审查,这就是软件开发模式产生的起因。它们体现了人们对软件过程的一个希望:严格控制、确保质量。