安徽财经大学管理科学与工程学院 汪 莹 孙玉涛
软件需求是指用户在功能实现等方面的期望,开发人员根据用户需求规划系统功能模块,从而进行可行性分析等后续工作。通俗地说,就是明确开发什么,了解所开发软件需要做到哪些以满足用户需求。优秀的需求分析应当具有完整性、一致性以及可追溯性的特点。完整性是指该分析几乎完全概括了客户所需的功能需求、客户需求和业务需求,把各方面因素都考虑到需求分析中;一致性是指业务需求与功能需求相一致,客户需求与业务需求相一致;可追溯性则要求所有的需求都是可以追究的,不能凭空设想,要有据可依。
需求分析还要应用图形工具,主要包括数据字典、数据流图、层次方框图和Warnier图等。
需求分析是软件工程中的基础环节,是用户与系统开发人员的交流工具,系统地描述了现实状况,把现实问题转化得易于管理。所以,需求分析是软件开发的重要环节。良好的需求分析能够有条不紊地引导后期开发工作,明确开发内容;而缺漏的需求分析则会造成返工或重新分析,增加成本。
(1)用户与系统开发人员的交流工具。用户要表达出诉求,开发者要了解诉求,从而才能开发出真正满足用户需求的软件系统。用户通过需求分析向开发人员陈述所要求实现的诸多功能,开发人员则通过需求分析了解问题从而规划系统。如果开发者不够了解用户需求,或者用户不能完整表达自己的诉求,开发出来的系统则不能实现客户需求,也就是失败的系统。
(2)开发系统的基石。只有在获取了完整详细的用户需求后深入了解将要开发的系统的具体功能,才能进行编码、测试和维护的一系列工作。基石不牢则不成楼,在没有进行详细的需求分析的情况下,开发者就相当于走在错误的道路上,最终是不能达成实现功能的目的的。只有将需求分析做好,才能进行后续工作,否则将导致返工或开发失败。
完整准确地完成需求分析工作应当从三个层次入手,即业务需求、用户需求和功能需求,同时,。业务需求反映了组织机构或用户对软件系统、软件产品高层次的目标要求。用户需求文档描述了用户使用产品必须要完成的任务。功能需求定义了开发人员必须实现的软件功能,是的用户能完成他们的任务,从而满足了业务需求。
需求分析应当考虑到每一位最终软件的使用者要求,避免各种遗漏造成的修补甚至是重新分析而增大的成本代价,因此每进行一项工作都要保留详细文档。
(1)整理问题。从用户的各个方面考虑,将问题收集整理出来,方便下一步工作;
(2)走访询问。根据所整理出来的问题,和所要开发软件涉及的部门、机构的人员进行交流沟通,从而更改补充需求;
(3)优化需求。根据详细的调查走访和沟通,整合需要实现的功能,结合数据库、开发工具等开发所需软件,进一步细化并优化所需实现功能,提取出业务核心流程;
(4)建立概念模型,编写详细的《软件需求规格说明书》。规格说明书一般包括说明书介绍、产品定义、产品的前景和功能描述、用户类别描述、运行环境、外部接口描述、系统特征和其他非功能需求描述等。
软件开发的每一个过程都会存在相应的风险,需求分析也一样。这些风险主要表现为:
(1)无法获取完整准确的信息。在实际开发过程中,一方面,用户常常会不知如何表达他们的需求信息,对此我们应当与用户进行反复沟通,理解用户需求,更加细化第一步中所整理的问题,引导用户思考,同时可以根据大致要求引用现有的类似案例或系统,让用户在使用过程中发散思维发现问题;另一方面,由于日常工作紧凑或其他,被走访的工作人员常常没有多少时间或耐心应对我们的调查沟通,对此我们可以尽量采取调查问卷的形式,精简问题以防占用过长时间,而对一些问卷无法展现的问题,我们再进行个别情况的详细询问;
(2)客户要求变更。客户往往会由于考虑不当而一再改变需求,或是给出模棱两可的信息后随时变更要求。这对于软件开发工作是极为不利的,既影响进展又增加了成本。对此,我们应当对客户的每个要求尽量做到最大程度的细化并进行详细的审计考察以及确定;
(3)开发人员分析不够充分。有些开发者对于系统不明确,无法挖掘出核心需求,或是时间不足导致分析不够充分,更有缺乏相关业务知识或没有耐心不够重视等因素导致系统的需求分析不完善。对此,我们开发者要加强专业知识,提升职业素养,重视需求分析工作。
需求分析是软件工程的第一步,也是至关重要的一步。完整准确的需求分析是编码、测试和维护系统的保证。进行需求分析要从客户和开发工具两个角度出发。从客户角度来看,尽量满足客户需求并最大程度地挖掘出潜在和长远需求是开发者的基本任务。从开发工具的角度来看,满足需求的同时要兼顾开发工具如何实现功能,以便更好地设计模块和界面。需求分析同时也要求开发人员具有相应的专业知识和职业素养,在与客户沟通时能够保持耐心和细心,从而获得更为完整准确的信息。
需求分析的重要性可见一斑,风险性也是并存的。降低风险需要开发人员耐心的沟通和细心的整理审核,只有在客户与开发人员共同协作下,做出合理的可行的需求分析,才有可能开发出具有价值的系统。
[1]张海藩.软件工程[M].清华大学出版社.
[2]王立福,孙艳春,刘学洋.软件工程[M].北京大学出版社,2009:10.
[3]郑人杰,马素霞,殷人昆.软件工程概论[M].机械工业出版社,2010:3.
[4]Roger S.Pressman.软件工程:实践者的研究方法[M].机械工业出版社,2010:10.