随着用户需求的多样化,软件系统开始越来越复杂了,而复杂性带来的结果是软件开发管理越来越困难。然而,许多软件开发团队却没有适时地改变其管理模式。因此,越来越多的软件开发项目呈现出管理失控和混乱的迹象,软件开发的整个生命周期已经越来越成为人们关注的焦点。
为什么软件开发项目的管理是这么困难呢?原因在于许多软件开发团队没有选择合适的管理工具。一般来说,在软件开发过程中会有许多不确定的、经常变化的因素,如果在软件开发过程中缺乏合适的管理工具,这将会导致开发人员无法统一开发行为和思路。例如,在实现项目的各阶段和各种角色(架构师、项目经理、开发人员、测试人员等)的方法和思路并不一致,不但会对设计、质量、代码管理和部署产生负面影响,而且还会导致开发成本增加。
那么,我们应该怎样管理好软件开发的各种因素呢?就像教科书上经常所说的一样,如果我们能够很好的管理软件生命周期每一个阶段的质量,也就很好的管理了整个软件开发的整个过程。因此,如何最大程度地管理好开发过程成为目前业界讨论的焦点。本文介绍了在软件开发过程中一种常用的管理工具:软件生命周期模式,以及其概念和选择方法。
什么是软件开发生命周期模式?
软件开发工作本身是需要一个周期来完成的,而在周期的内部则包含了很多因素。一个因素的不稳定,在周期推移的过程中都很可能会造成类似生物学领域的蝴蝶效应----非洲的一只蝴蝶扇动翅膀可能会造成美洲大陆的一场龙卷风。这说明每一个事情都可能会对其它的事情产生连锁反应。因此,任何软件开发项目都必须进行适当的组织和管理,然后才能按预期计划成功地执行项目。也说是说,规划良好的软件开发生命周期将能够实现在更短的开发周期内构建软件的愿景。
(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编程,是把传统的系统设计和实现由敏捷软件开发过程中的验收测试、重构和测试驱动所取代;把传统的集成和部署由敏捷软件开发中的持续集成和短周期所取代。
其实上,无论是瀑布开发模式还是螺旋开发模式,软件生命周期模式的发展实际上是体现了软件工程理论的发展。在最早的时候,软件的生命周期处于无序、混乱的情况。一些人为了能够管理和控制软件的开发过程,就把软件开发严格的区分为多个不同的阶段,并在阶段间加上严格的审查,这就是软件开发模式产生的起因。它们体现了人们对软件过程的一个希望:严格控制、确保质量。
如何选择合适的软件开发生命周期模式?
众所周知,在软件开发过程中如果缺乏适当的管理,最终开发出来的软件产品质量是难以保证的。那么,在软件开发管理过程中,应该如何选择合适的软件开发生命模式工具呢?建议可参考以下几个步骤:
(1)评估软件开发范围和需求
当软件所有参与人员都能理解软件开发的范围和需求时,就能为软件开发可能遇到的突发事情和未来变化建立一个技术基线。这个技术基线、基础规则和假设应该包含识别和评估软件的功能性。一般来说,在前期需求明确的情况下可尽量采用瀑布模式或改进型的瀑布模式。而在不确定性因素很多时或很多需求无法计划的情况下,应该尽量采用增量迭代模式或螺旋模式。
(2)确定软件开发规模和阶段划分
确定软件的开发规模是决定开发管理工具的重要一步,也是最为关键的步骤。因为确定开发规模和阶段划分是明确软件开发生命周期的驱动动力,它可用来约束在开发过程中所采用的行动和资源,以及限制可以提供的选项。例如,对于规模小的建议采用瀑布模式;而在资金和成本无法一次到位情况下可以采用增量模式;而对于完全多个独立功能的开发可以在需求阶段就分功能并行,但每个功能内可以遵循瀑布模式原则;而其他项目一般可采用迭代模式。
(3)选择合适的软件开发生命周期模式
一个定义良好的软件生命周期模式,可以很好的指导我们的开发工作,使漫长的开发工作易于控制。事实上,我们也可以任意定义自己喜欢的软件生命周期模式。但是,如果生命周期模式定义不合理,却会制约我们的开发过程。因此,选择一个软件开发模式不应当将其作为一次性的活动来考虑。因为随着开发项目的进展,未知内容会逐渐变为已知内容,并且新的和意料之外的问题和风险都会随之出现。所以,选择开发模式应该要根据实际情况来进行,然后在此基础上再加以裁减以作出适当的修改和改良。
(4)跟踪和度量开发模式的效率
在软件开发模式选定后,应该要定时跟踪和度量开发模式的效率。例如,记录那些相关的信息和得到的经验教训。通过这样做的目的是为了记录一个"最佳开发模式"的选择过程,以获得选择开发模式的经验性。因此,跟踪信息应当被不断的收集起来,并且同原始模式和基线进行比较。如果执行情况出现效率低下或者明显的不同,那么校正开发模式就应当被考虑进来并加以实施,从而将项目开发拉回到正确的轨道上来。
【编辑推荐】