【IT168 技术文章】
问题的提出:笔者近几年一直从事信息系统的开发,特别是有关国家机关和企业信息系统的开发工作,取得了许多的经验和教训。其中一个深切的体会是,需求的不断变化,如果不能很好的应对,会导致整个项目的进度和质量都难以控制,最终使整个系统失败。特别是在我国,用户对于如何应用计算机软件并没有一个成熟的经验,在项目进行中用户会频繁的改变和增加各种要求。当最终完成系统的建设时,却发现企业的业务需求已经发生了很大的改变,一方面是系统的设计已经无法很好地满足新的需求,另一方面是项目周期大大超过预期,项目发生亏损。
据美国软件工程实施现状的调查,软件研发的情况也是很难预测,大约只有10%的项目能够在预定的费用和进度下交付。在商用软件产业中,这一现象尤为严重。
因此如何从软件工程的角度,通过采用适当系统设计方法和加强项目管理来解决需求不断变化的问题,是各个软件开发商的一个重要课题。通过实践,感到采用敏捷方法的基本思想和原则来设计系统和处理需求变化问题,能够产生较好的效果。
下面就从系统设计和项目管理等方面谈一下这方面的体会。
需求变化带来的问题
作为软件开发商,当接到一个项目后,一般的做法是首先由用户提出需求,然后开发商根据用户的需求作出一个系统实现方案,而用户通常并没有实质地理解方案,随即通过了方案,开始了软件的开发工作。根据笔者所开发过的多个系统,开发前期,大多数单位并没有明确的想法,也提不出确切的需求,因为业务人员不了解计算机技术是怎样实现业务流程的。用户总是希望开发单位根据当前的业务流程先做出一个样板来,然后再进行改造,而多数用户认为软件修改很容易。
尽管已经做好了系统规划,签订了功能较明确的合同,然而随着系统分析、系统设计和系统实施的进展,当客户在项目部署后看到真正的软件系统的界面及操作方式,客户的需求就被激发起来,会根据自己的对软件的理解和日常工作的习惯,对软件的处理及操作方式提出修改,而这种修改往往比较随意,因此导致开发方需要对流程、界面、以及相关文档经常的大量的修改,这些成为开发方的一个很大的负担,而这种负担对用户基本是看不见的。
用敏捷方法方法应对需求变化
1.敏捷建模(Agile Modeling)进行系统设计
软件开发过程一般是要尽早完成需求分析,停止需求的变动,将这些需求作为设计的基础,然后开始构筑系统,这是瀑布方法————基于计划的生命周期。这种方法是通过大量的前期工作来减少变化。
一旦前期工作完成,当需求变化时,这样的方法就会有很大的问题。
另外一个重要原因是,许多单位的管理模式都处在探索阶段,可能引起变动的因素很多,因此根据现行的管理模式设计出的信息系统将面临使用单位管理模式的变化的考验,包括许多的工作流程的细节处理方式式否合乎工作人员的习惯等问题。
系统在设计时要充分考虑这些不确定因素,才能适应这些变化。特别是数据结构要以系统灵活性为主,其次才是考虑系统性能的提高。
在软件开发出现工期或bug等问题时,开发人员常抱怨是由于需求的变化造成的,对于软件的修改存在抵触情绪。实际上在商业软件开发领域,需求变化是很正常的,问题是我们该怎样对待它。为了适应需求的变化,必须采取不同的设计态度。这里介绍敏捷方法的几点思想,对如何应对需求的变化很有教益。
主张简单、递增的变化、拥抱变化是敏捷建模方法的核心原则之中的三个。
敏捷建模主张当从事开发工作时,最简单的解决方案就是最好的解决方案,尽可能的保持模型的简单。
对无法在项目一开始就固化的需求进行演进型的设计。你现在不必要对这个系统进行过分的建模,只要基于现有的需求进行建模,随着项目的进行,项目环境和需求发生变化时,再来完善和重构这个系统。
递增的变化是指你不用在模型中包容所有的细节,你只要开发一个小的模型或是概要模型,打下一个基础,然后慢慢的改进模型。
敏捷建模采取不同的设计态度来“拥抱变化”。它认为需求时刻在变,人们对于需求的理解也时刻在变。随着项目的进行,项目环境也在不停的变化,因此你的开发方法必须要能够反映这种现实。对于用户的反馈,要勇于对自己的代码进行修改,丢掉坏的代码。
对于易变的需求,敏捷方法使用了一系列实践。其核心则是迭代式开发,寻求快速的反馈,用户经历过一次或几次的迭代之后,对软件开发和业务需求如何实现已经有了形象的认识,用户提出的需求基本上可以代表他们的真实需求。这时,就可以将需求进行冻结。后面如果还有修改,将是细节的调整,不会对软件的架构产生重大的影响。
按照上述的敏捷方法的原则来设计系统,则能够使我们正确的看待用户需求的变动,从而较好的适应需求的变动。如果项目管理者和程序开发人员真正的理解并贯彻这种方法,用这种思想去管理项目,那么就能有效的避免出现项目后期软件架构混乱、补丁加补丁、系统性能大大减低的情况。