中小软件开发企业承接的项目通常都会在时间紧、人员少、项目预算有限的条件下完成。在这些"恶劣"条件下,常常遇到项目进度拖延、工作量超出预期,导致整个项目费用严重超支。某个小软件公司的项目经理曾经对笔者总结他的经验:"一个看起来像20万能做完的项目,如果客户付你60万,那么赚头应该还不错;如果客户付你50万,做得好还能赚钱;如果客户付你40万,那么八成的可能会赔本。"
所以,作为中小软件开发企业的项目经理,必须密切关注如何提高项目开发效率、减少项目开发中的重复劳动和资源浪费、提高项目的可控性。而导致项目失控的最主要原因,通常都来自于需求分析阶段,即:需求不确定、对需求的了解不充分、项目开发过程中不断更改与增加需求。不断变更的需求不仅增加额外的工作量,而且会导致系统结构混乱,软件质量难以保证。所以,中小软件企业必须关注需求分析中的重要环节。根据笔者多年的项目经验,在需求分析过程中,应着重关注如下几个方面:
站在用户角度理解需求
在需求分析过程中,仅仅"倾听"用户的需求是远远不够的。因为用户并非软件设计师,通常都无法完整描述需求。而且"用户"是一个虚的概念,实际上往往包括领导、中层和具体操作人员几个层面,这些人员在需求上会有差异甚至冲突。因此,作为需求分析人员,不能仅仅作为需求的"了解"者,而应该作为实际上需求"提出"者。在这个过程里,不仅要与用户不同层面的人员交流、沟通,而且要多了解用户实际工作的场景,有条件的情况下,甚至要做一个"实习生",亲身体验用户的日常工作。譬如笔者一个朋友为了给一个商场做收银系统,亲自做了两个星期的收银员。
在深入了解用户业务流程的基础上,完全站在用户一面,将自己假设成用户的员工,关注用户工作的每一个细节,从用户角度,整理需求,将需求系统化、条理化、完善化,才能最大程度减少后期需求增加或更动。
使用快速原型协助用户确定需求
在需求分析中后期阶段,需求分析人员通常会拿需求分析报告与用户讨论,最终敲定需求。实际上,需求分析报告通常并不是良好的沟通工具。原因在于需求分析报告往往非常冗长,而且不直观。我们无法指望用户能从冗长的文字描述想象出实际使用系统的场景,甚至不能奢望用户有看完报告的耐心。所以,必须找出一种简单、直观的方式,模拟系统最终的实现效果,让用户有直观的感觉。
使用快速原型是一种非常好的方法。利用快速原型,能尽可能模拟用户实际使用的场景,将系统直观地展现给用户,尽早发现潜在问题。
控制不合理的需求增加
做软件就像装修房子,永远可以找得到需要增加的东西、需要改变的地方。当需求分析进行到后期阶段,必须与用户沟通好,适时冻结需求。很多项目经理为了讨好用户,往往倾向于过多承诺,或对用户提出新的需求不加限制,常常导致项目失控,无论是时间失控、质量失控或是预算失控,最终都会导致客户关系受损。所以,最开始一定要和客户沟通清楚,拿多少钱,干多少活,方案报价一旦确定,新需求一定受限。
设计要有灵活性
无论需求阶段做多少工作,都无法完全避免需求变更。如果在设计系统框架时,没有良好的架构思想和能力,只是在功能上达到了暂时的需求,这样需求一旦发生变化,原来的框架就变得非常不稳定,这样的框架是非常脆弱的。因此,软件架构的灵活性非常重要。在做架构设计时,必须设计一个有弹性的、能适应变化的、易理解的、有助于重用的软件体系结构。
采用合适的需求管理工具
高效管理需求是一个软件项目成功的必备条件。在需求管理方面有很多成熟的软件可以协助需求分析人员准确描述功能需求、工作流程、人际界面,并且对需求实现与变更进行控制、跟踪、监控。譬如IBM的Rational工具。使用此类工具,可以显著降低风险,提高需求分析与管理效率。