【IT168 技术文章】
软件系统往往体现一定的功能,这些功能要符合一定的使用目的。现实世界是在不断变化的,而且变化的速度是越来越快,唯一不变的就是“变化”的主题。这一现实也就直接影响到了实现实际功能的软件系统,体现在需求、技术实现手段、应用环境等多个方面,这些都直接影响到了软件系统自身的稳定性。同时,由于快速变化这一事实,人们对于以后的预测能力也越来越有限,有时根本难以明确未来的需求,只能是根据环境的变化而随时调整,因此直接导致了软件生命周期越来越短这一现实,特别是应用软件,直接与这种变化紧密相连。
但是,软件开发往往需要一定的时间,一个软件系统从需求、设计、开发到投入使用,这一周期都不会很短,即从需求产生到实际能够投入使用这段时间,其本身就已经成为应用软件自身的风险,很可能当一个软件开发完成的时候,市场需求已经发生了变化,开发出来的软件已经不适用了。软件生命周期已经缩短,特别是应用软件,随着新业务的市场窗口变窄的趋势,其自身的寿命周期也在缩短。快速投放市场已经成为软件系统的首要因素。另一方面,由于快速变化的外部环境给软件产品带来的风险,成本控制也成为软件工程管理的一个重要方面,通过对需求变化的风险的评估来重新认识软件寿命周期,以合理的成本完成软件开发,也已经成为对软件产品管理者的一个挑战。
在传统的软件工程方法中,主要使用瀑布式顺序开发方法,包括需求分析和定义、系统设计、实现和单元测试、系统集成测试、运行维护等多个阶段,这一方法的优点是全面、严谨,但最大的缺陷,就是过程一旦启动就难以适应变化。这一方法是基于一个重要的假设前提——能够提出明确的需求。当面对快速变化、甚至是根本不明确的需求时,这种假设根本上就不成立,因此这种传统的开发方法的缺点就越来越突出,特别是应用软件的开发,由于它与市场的联系更加紧密,使用这种传统的开发方法,已经难以为继。我们需要寻找一种更加快速、成本合理的软件开发方法。
快速原型方法就是这样一种开发更加迅速、更加成本合理的开发方法。在软件开发过程中,最关键的步骤就是确切定义出需求,明确软件要实现的功能是什么,而这恰恰也是最困难的过程,因为现在许多用户在初期只有一个隐约的、大致的考虑,根本不可能提出具体明确的需求。这种情况下,使用快速原型进行反复交流、细化需求,就成为一种更加有效的方法。一个软件的原型,主要是模拟重要的功能和界面,但是一般不考虑运行效率,也不考虑系统的健壮性,出错处理也考虑不多,它的目的只是为了实际描述概念中的结构,使用户能够检测与其概念的一致性和概念的可用性。
目前主要有两种快速原型方法:
· 丢弃原型(Throw-away prototyping)。其目标只是为了明确需求,使用最简单的开发方法,以最低的成本实现一个可工作的系统,该系统只关注功能,不考虑开发工具、性能、容错、未来实际运行环境等。通过反复与客户交流和修改原型,使原型的功能能够充分体现客户需求。在明确了需求之后,原型就会被丢弃。以后软件的开发将根据明确了的需求按照传统的工程化方法来开发。
· 进化原型(Evolutionary prototyping)。其目标就是与客户一起工作,从一个原始的需求的轮廓开始,逐步改进,最终发展成为符合实际需要的系统。采用这种方法,就需要考虑到软件未来的运行环境等有关要求,这就要求从一开始就要对需求有一个比较清晰的认识,不能有方向性的错误。
快速原型方法存在的主要问题是:文档容易被忽略,建立原型过程中的许多工作会被浪费,项目难以计划和管理。但是这种方法的好处更大:能够适应不明确的需求,比传统的瀑布式方法要快得多,用户的介入更多,能够及早发现问题从而降低风险。 在软件开发过程中,面对快速变化的市场需求和新技术发展,最大的风险往往来自对需求的分析和技术实现手段的选择,通过原型化方法,首先以合理的成本细化需求、试验技术手段,把最主要的风险降到最低,从而在总体上降低软件开发的风险,加快软件产品的形成,降低软件开发的成本。
快速原型方法的过程,特别是进化的原型方法,与软件的版本升级有些类似。随着市场需求的变化,软件版本不断升级,每升级一次,就会增加新的功能,或者引入符合发展新趋势的技术手段。但是每一个版本都是产品化的,在产品质量方面都达到了相当的要求,这与软件原型是不同的,快速原型是一个由粗到细的过程,在最终形成产品之前,不论原型被修改了多少个版本,都还不能达到产品化的要求,不能对外发布。
使用快速原型方法的最大困难就是工程管理的问题,许多具有较强管理能力的企业对快速原型方法也感到畏惧,根本原因就是其不确定性所带来的风险。但是应该知道,快速原型的方法,正是为了针对主要风险,分解风险,尽早地、低成本地降低风险。否则,如果一味地强调软件开发必须以明确的需求为前提,采用传统的瀑布式开发方法,则会面临更大的市场风险,如果以不明确的需求采用传统的开发方法,软件开发本身也必然面临着灾难性的风险。因此,快速原型方法应该成为我们软件开发过程中降低风险的一种有效的方法。
许多企业在新的软件开发需求提出时,实际已经建立了自己的信息系统的基础架构,也已经开发了类似的软件系统,因此在新产品开发中应采用的技术手段方面,已经不存在问题,这时的风险主要存在于不明确的需求上,此时采用进化的原型方法,比丢弃的原型方法会更有效。为了加强对原型化方法的开发过程的管理,可以在整个原型化过程中把每一次对需求的细化看作是一次版本升级,在每一次升级过程中,细化了的需求是明确的(虽然还不一定是最终的),这就可以采用瀑布式开发管理方法,只是这一过程的周期会非常短,而且只要不是最终版本,成本就必须控制在最低。从另一个角度来说,如果企业的规划能力比较强,对整个产品发展、信息系统建设都有比较明确的思路,这对于降低单个软件产品的风险非常有利,限制了产品的风险,为单个软件产品的设计开发,提供了很好的基础。因此,使用快速原型方法,需要充分考虑到与企业原有的规划和基础设施的关系,并注意对它们的影响。下图是一种典型的快速原型方法的工作流程。
因此,通过提高项目管理能力,针对不同情况,在不同阶段,正确运用不同的工程方法,才能有效地控制风险,使软件开发保持强大的适应变化的能力,也就保持了软件开发者的生存能力。快速原型法为我们提供了一个很好的解决办法。
最后还需要强调一点。为了是软件工程管理能够适应这种快速变化的要求,使用相应的软件工程管理软件是十分必要的。它主要有几个方面的好处:
1, 建模工具和自动代码生成工具能够大大提高开发的速度。
2, 配置管理工具可以有效对对软件的变更进行管理。
3, 强大的测试工具可以更加有效地覆盖测试范围,提高测试的效率。
4, 强化对软件开发过程中的流程管理,加强沟通协作,提高工作效率。
5, 提高项目的绩效管理水平。
越是风险高的项目,就越需要引入强有力的管理工具,提高管理力度和管理水平。加强科学管理是提高风险管理水平的唯一出路。