软件工程项目尤其是大型软件项目,由于项目目标的不确定性和项目实施过程的复杂性,常常造成项目超出控制范围,而对于解决软件项目管理失控的问题,注意力往往集中在软件项目的进度控制上。按时交付产品被认为是对软件项目最重要的要求,保证进度对项目管理形成了极大的压力。对进度控制的重视源于对面向硬件的项目管理的一般认识。面向硬件的项目管理的经验积累要比软件项目管理的成熟得多,但是由于产品特性差别很大,硬件项目管理的一些一般方法并不一定适用于软件项目,如:硬件项目中对最终产品的定义一般比较明确,产品设计完成后的变更很少。而软件项目中客户的需求往往很难预先明确定义,而在开发过程中和维护阶段的频繁变更更是难以控制,这些特点造成了在项目初期要明确定义整个项目的范围是很难的,在此基础上,即便进度计划很细致严格,项目生命周期内脱离计划控制的风险仍然是非常大的。
相比传统的软件开发方式,现代软件开发方式的一个最为彻底的改变是更侧重于关注客户的需求与愿望,开发符合产品规格的软件只是完成了一半工作,另一半是帮助客户配置出产品能够实现的功能,软件项目中更多的时间用在实现这些功能需求上,因此应该站在客户的角度来考虑软件项目管理的问题[2]。
项目的最终的目的是满足客户对最终产品的要求,在很多软件项目中客户最关注的并不一定是按时交付的软件产品,而是产品能够让客户满意。客户需要的不仅仅是按时交付,而是尽快交付的满足需要的可用的产品。软件产品的可用性决定于很多因素,但最终对软件可用性的认可决定于客户。
造成软件产品不能令客户满意的原因有很多,软件需求调查不深入,与客户的沟通不充分,软件产品推广实施不利等,这其中有许多客观存在的障碍。软件需求调查阶段,即使客户自己对自身需求的了解也不一定清晰,由于最终产品还只是纸面上的设计,客户对产品未来的功能无法明确地描述,有时遗漏,有时不切实际;开发设计者对客户需求的理解客观上也存在一定的困难;由于开发周期上的限制,时间空间上的限制,客户需求的变更和客户对开发设计成果的反馈都难以对最终产品产生快速及时的影响。针对这些障碍必须采取必要的策略,把产品失败的风险降到最小。
目前主要的软件工程方法在追求客户满意度上的都存在一些问题:瀑布式只适用于较成熟的重复开发的项目,灵活性、应变能力最差,但项目的可视性强,更容易被客户理解,因此目前在签订软件项目合同时常用瀑布式的进度安排,不过这种进度安排却往往因为流于形式而成了一纸空文;原型法能较好地解决需求调查阶段的问题,使需求更明确,目标产品的轮廓跟清晰,但对需求的变更没有好的控制,有时反而容易引起客户需求轻率的频繁的变更;演进式对于变更的反应快、灵活,而且通过在每一迭代周期前期对风险的控制,能做到比较慎重和冷静的回应变更请求。但演进式项目的可视性不强,而且,演进版本的控制不严格,容易引起客户对产品理解的混乱。 |