从定制一个软件项目到最终的实现不仅是个漫长的过程,也是充满变数的过程,全面理解与正确领悟用户需求演变的本质与应对的策略应当是需求分析人员所要具备的素质。
有理由认为面向对象的理念降低了开发过程的难度,但却强化了需求分析在项目过程中的地位与作用。需求分析人员是否具备、是否能够驾驭面向对象的概念对项目的成功率关系会更加重大。下面就说明一下需求分析与项目风险的关系。
来自用户的风险投资者总是在摸索的过程中不断调整自己的实现目标,尽管软件开发商使尽浑身解数也跟不上用户需求的变化,最终只能是疲于应付敷衍了事。
投资方的感觉是上当受骗却又无可奈何,开发商则抱怨用户需求漫无边界、任意变更。这种公说公有理、婆说婆有理的局面在合同条款中难分伯仲,不能说是两败俱伤,起码也是各有苦衷。
造成这种局面固然存在着客户方的原因,但要把责任全部归结给“上帝”似乎也有失公允,因为用户对于计算机应用毕竟是外行。现实地说问题解决的关键只能是提升自身的设计能力来化解这种项目过程中可能出现的危机,所以需求分析在项目过程中的作用就像航标或是舵手,一旦有所偏颇对项目过程影响重大。“对象”作为最接近真实事物的载体,把主观思维与客观事物形成映射关系。通过这种映射把设计构思的模式标准化,把实现的方式规范化,这就是“对象”在软件设计过程中的作用。
所以,需求分析过程中善于发现与发觉可以被归结成“对象”的元素非常必要。它以体现为承载技术设计的单元载体,也可以被构造成同时承载技术与业务的合成载体。面向对象的设计理念为软件的开发开辟了一条前所未有的光明之路,但要想在这条路上走好,就要学会全面应用并自由驾驭面向对象的理念。规避项目过程中的风险,应当是从需求构架的构思过程开始,而不是在设计过程中开始。
来自开发过程的风险如果基于“面向过程”的开发理念,面对项目过程中源源不断的用户需求及频繁的功能变更,会使开发效率、工程质量与服务能力面临着严峻的考验。
进度停滞不前、性能难以把握、可靠程度低、测试工作量大、整体成本失控等一系列的问题很可能发生,最终导致交付周期长、实施难度大、应变能力差、相对寿命周期短的必然性后果。面向对象的诱惑力就在于它能彻底改变这种困惑被动的局面。达到设计目标的途径可以有很多种,如果没有得力的指导与约束,问题就会变得复杂起来。
设计者常常会在仁者见仁、智者见智的抉择中困惑不已,而客观评价这些主观构思方面的优劣并没有多大的说服力,这里有技术上的原因,也有思维方式不同、习惯上的差别、视野视角的变化等原因。这往往是造成项目管理难度大、可控性不强的主要原因之一。对于专业人士来说崇尚“阳春白雪”的高雅固然没错,但如果对“下里巴人”的技术不屑一顾也未必就是合理的选择。因为“阳春白雪”会意味着更多成本的支出,如果“下里巴人”能够兑现订单也未必非要“阳春白雪”不可。
技术的意义在于创造价值并兑现市场利益,当企业面对市场的时候,驾驭技术的本质并不在于技术本身,如何用尽量小的代价获取相对好的市场回报才是技术价值的意义所在。推崇先进的开发理念并不等同于对技术的迷信或盲目崇拜,技术对于企业来说只是一个生产手段,而不是研究的对象。忽略技术在企业过程中的作用并不妥当,但盲目追求技术上的先进性也同样具有极高的风险性。制定技术路线、把握技术介入的深刻程度都是决定项目盈利能力的控制要素。软件企业中不能没有技术,但企业毕竟不是基础技术的机构,这也是技术管理人员经常容易步入的一个误区。在引入了面向对象的理念之后,通过对象的封装可以在很大程度上形成设计实现
的客观约束,从而避免过多的自由发挥空间,使整个团队能够沿着基本相同的设计方式完成设计任务。
关于业务对象的抽象与封装如果是从实现的过程中去总结摸索,将会是一个漫长而重复的实践过程,如果在需求分析阶段就能够造出对象原型,对于有效屏蔽上述种种风险具有非常明显的改进效果,也就是说面向对象绝不仅仅是编程人员需要掌握的理念,需求分析人员对此理念的驾驭能力对项目的影响程度要比程序员多得多。