本文以某个IT产品销售公司的信息系统项目的开发为背景,讨论了一个信息系统需求分析的整个过程,其重要特征是:所涉及的项目是原有系统的一个升级替换版本。因此,需求分析过程不同于建立一个全新的系统,大体上可分为三个阶段:()实施逆向工程获得对系统的初步了解;(2)在第1步的基础上写出基本需求,交由客户评审补充;(3)在第2步的基础上开发原型,利用原型与客户交流,最终获得基线需求。针对上述三个阶段,本文论述了所使用的分析方法与工具以及所遇到过的一些典型问题和措施,最后对需求分析中使用的工具,谈一些自己的初步体会。
我于1998年8月至2000年7月参加了某个大型集团的企业信息系统的开发工作,该大型集团的业务主要涉及到IT类产品的进销存。本人在项目中负责系统分析的工作,该集团企业原先已委托某个电脑公司开发过一套IT类产品管理系统,但是该老系统存在两个主要的问题:(一)系统运行速度非常慢,如商品销售开单时,从确定开单到开单完成有时需要1~2分钟左右的响应时间,让客户无法忍受。(二)系统数据不准确,经常出现实物库存与电脑库存严重不相匹配的情况,使销售数据的统计产生一些混乱,有关财务的数据因此无法有效使用,只能采用人工录入方式补充进行。在这种情况下,该集团的总经理决定参考原有系统重新开发一个系统,以便解决原系统所存在的上述两个难以克服的难题。注;原系统采用PB6.5开发,数据库采用SYBASE,服务器采用Windows2000Server,客户端采用Windows 98,程序架构采用的是传统的C/S结构。
鉴于该集团业务操作复杂,流程多,涉及人员多等特点,以及项目完成时间短,经费有限,人员有限等限制约束条件,再考虑到必须避免前一系统出现过的结构混乱与难于维护等问题,我们决定要对原系统的需求做一个比较彻底的和切实可行的分析,由于原有系统已经开发了近两年,并且客户也有了一定的使用经验,业务基本流程本身也并没有太大的变化,因此,我们把需求分析的过程分为三步:()分析原有系统的结构,主要是数据库结构和程序结构,(2)在获得第(1)步结果的基础上写出基本需求,交由客户评审补充,(3)在第(2)步的基础上开发原型,利用此原型与客户交流,从而获得最终可用的需求结果。下面按上述三步分别加以论述。
第一步是实施逆向工程,获取原有系统的基本需求
由于原有系统在功能上大体上能基本满足客户的需求,并且在两年多的开发中也积累了不少经验,因此,从中可以获得一些有益的参考,也可以避免多走弯路。在这一阶段,我们采用的主要工具是PB自带的Power Designer和PB Documents;前者主要用来分析数据库结构,后者主要用来分析程序结构,便于开发人员与高级用户理解程序。采用这两个工具的原因是:原系统过于庞大,模块多,数据库模式多,表格量很大,仅靠人工的方法很难从中获得一个比较完整的、明确的系统结构以及整体构成,而且原有系统未能提供一套正确完整有效的设计文档,于是我们只能依靠工具辅助来进行。在使用Power Designer分析数据库,并且用PB Documents分析原程序中的PBL以后,我们对原系统的结构有了一个初步的了解,再结合对原系统的使用,基本明确了功能与流程的需求,并在此基础上用人工录入方式,产生了初步需求的自然语言文档。这里指出,使用Power Designer的一个不足之处是:如果一个表中的字段过多,而且又同时依赖多个表时,输出的表格相关图形很复杂,有很多交叉,且难于调整,不方便阅读及打印。
第二步是在第一步的基础上进行的,即写出系统基本需求,交由客户评审和补充
通过第一步的逆向工程,我们获得了系统的基本需求。为了充分记录需求的变化及需求之间的依赖关系,我们决定选用Rational公司的Requisite PRO作为我们的需求管理工具,Rational公司有一整套用于需求管理的工具,功能非常强大,包括Requisite Pro、Clear Quest等等,这些需求分析工具可以对需求进行全面的管理,包括记录需求的变化情况,需求之间的依赖关系等等。但是,我们考虑到Rational的一套工具全面实施会非常昂贵与复杂,需要非常强的项目管理能力才能全面实施,因此,我们只采用了其中最简单的一部分功能,那就是记录需求变更,记录需求之间的依赖关系,其他跟RUP有关的功能都给略去了。之所以这样做,主要是考虑到项目的经费、人力以及国内软件开发的实际情况。正如前面所说,我们根据自己的理解并写出基本需求后,交由客户做评审井做适当补充,我们将经过补充整理后的需求作为正式需求记录入Requisite Pro所维护的数据库中,并对各个需求进行分类,设定优先级等,这些工作完成后,就可以从数据库中直观地了解客户到现在为止提出了哪些需求,哪些需求是必须优先考虑的,哪些是难度较大的等等。
在这个过程中,我们遇到了一些问题,譬如:用户对我们用自然语言书写的需求文档有许多地方不理解,往往在花了较长时间阅读之后,仍不明白我们所描写的需求过程与他们所完成的业务之间的对应关系;另外是由于首次采用Requisite Pro进行需求管理,在类型划分,属性值的确定上,部分开发人员没有经验,造成了不少反复,对于前者,我们的方法是想办法增加一些示意图,将大的流程分解为小流程,再与客户反复交流与沟通,最终达到双方理解一致的目的。对第二个问题,则参考了一些例子,再结合实际中属性的使用情况,给予取舍或者选择,经过这一阶段的工作,我们建立了基本的需求库,定出了基本需求规格说明。
第三步则是在第二步的基础上建立起原型,利用原型与客户进行更深入的交流,通过交流修改相应的需求
在这一阶段的工作是在对第二步任务进行报告交流的基础上进行的。我们用PB开发了一个原型系统,就具体的业务流程与客户进行交流与沟通,通过原型,客户发现了许多我们与他们的理解相互不协调的地方,我们在修改需求的同时,也在Requisite Pro需求数据库中记录下修改的历史。事实证明,这种记录历史的作用是很有效的,如曾经有客户在两个不同的时间对同一需求提了相反的需求,我们根据历史记录很快证实了该客户的提法有错误,在事实面前无需再作争论,同时利用Requisite Pro,我们还发现了一些需求相互之间有矛盾。经过这一阶段工作,我们终于获得了经过用户认可的需求基线,即是可用于下一步进行详细设计的基线需求。
在这个项目中,我们利用了Power Designer、PB Documents等逆向工程分析工具和Requisite Pro需求管理工具,这些工具的使用,使我们提高了工作效率,起到了一定的辅助作用。但是,就需求分析工具方面而言。我们觉得国内应用得还是太少了,这一方面是因为对需求分析不够重视,另一方面是因为管理水平还达不到相应的层次。Rational公司的一整套需求分析工具,其功能是非常强大的,国外已在普遍地使用,在国内也逐渐开始普及,特别是那些通过CMM二级以上评审的单位,都必须使用工具对需求进行管理。在本项目中,我们仅仅利用了Requisite Pro功能的一些小方面,已经体会到该工具对于项目管理的诸多好处。如果一个有实力的公司能够全面实施RUP,那么需求管理这个老大难的问题会变得不再那么棘手了,项目的质量也会得到相应的提高。目前国内由于CMM热潮的兴起,已经逐渐重视需求分析,也逐渐使用需求分析工具,这是非常可喜的,当然,更希望在不久的将来,能用上国产的需求分析工具,那时我们的软件产业也许会真正地腾飞了。
评注;采用逆向工具进行再工程的应用很多,本文给出了一个实际的例子。写作有条理,也很实际。合理地界定了需求分析的现实水平。所采用的需求分析的方法与工具相对较合理科学。能在对项目讨论的同时抒发议论、使用体会、爱国心和事业心。深度还可以提高,例子宜更加丰富一些。