随着计算机技术的快速发展和进步,计算机软件已经在工业控制、电子商务、电子政务、金融证券、电力通信等领域得到了广泛的应用。软件系统开发过程中,需求分析可以帮助软件工程师与用户进行沟通,能够快速的获取软件需要完成的操作功能,以便满足用户的需求,具有重要的作用。
2 什么是需求分析
结构化软件开发一般分为分析、设计、开发、测试、验收与运行等阶段。开发前,会进行前期的可行性研究;在运行开始以后,还要进行后期维护。需求分析是结构化开发中的重要阶段。通常情况下,国内软件开发公司在做欧美和日本的项目时,对前期的可行性研究参与得较少,一般都是对方已经做完可行性研究,国内软件开发公司从需求分析开始做起,直到软件开发后的运行和维护。所谓需求分析,是指对要解决的问题进行详细的分析,弄清楚客户的需求,包括需要输入什么数据,要得到什么结果,最后应输出什么,等等。可以说,软件工程当中的需求分析就是确定要计算机做什么。
3 需求分析的重要性
从需求分析的定义上,就可以看出需求分析在软件开发过程中的重要性了。需求分析做得不对,后面的步骤做得再好,也只能是南辕北辙,无法满足客户的要求。研究表明,改正产品付诸应用后所发现的一个需求方面的缺陷,比在需求阶段改正这个错误要多付出大约100倍的成本。而另一项研究发现,在需求开发阶段发现的一个错误,平均仅需要花30分钟修复,但若在系统测试时发现则需要5-17个小时来修复。
需求工程的成功与否直接关系到系统给的命运,需求工程绝对不是软件开发的前期任务,而应该在整个系统的生命周期里都扮演着重要角色。在需求工程阶段解决和根除需求引起的问题可以大大降低生产和维护的成本,提高用户的满意度。在软件开发的过程中,需求工程阶段是了解用户需求的最佳时期,但很大一部分用户不知道、不了解需求工程,以至于在和他们交流的时候,他们都不能准确完整的说出自己的需求,因而对于从事需求工程的人员来说,能够正确的理解用户的需求观点,利用一些方法和技巧来启发用户阐述清楚自己的需求是很重要的。需求工程作为了解并实现软件开发者的目标的重要手段,有着不可替代的作用。
比如一个失败的案例:由于和客户签订了合同,5个月必须交付软件,开发时间紧迫,导致项目计划时做需求分析的时间只给了2周时间(理由是客户的文档已经提供好了,照着做即可)。结果,由于前期对客户文档理解得不是很清楚,导致开发进行到3个月的时候发现需求上有争议。在和客户确认后得出结论:如果要满足客户的要求,则需要对整体架构进行修改。虽然最后按期交付了软件,但是整个项目组最后两个月每天都在加班,包括周末,而且软件质量也没有得到客户的充分认可。
再如我們在了解客户需求的同时,应该尽量了解客户为什么要这么做,帮客户一起想需求,以便我们开发的软件能够更好地为客户服务。每天开完会后,我们应该把客户的需求整理好,发给同事进行研究分析,建立简单的基础模型并研究技术可行性。需求分析结束后,保持每周至少3次电话会议与客户进行沟通,随时了解客户的需求。最后正因为在前期阶段进行了这种细致的需求分析,项目组在很少加班的情况下,不但按时交付了项目,并且得到客户的充分认可。
4 软件需求分析的任务
软件工程的发展来源于信息需求对它的推动,现在互联网技术和应用越来越成熟,信息的获取也逐渐变得简单和完整,但是由于资源的开放性、系统与系统的相互渗透性、用户的变动性让需求变得多目的、多变化,增加了软件制作的难度,但同样带来了巨大的用户市场。需求的获取同样也是困扰软件工程的绊脚石。需求与资源的搭配不合理,就会影响软件工程的发展。未来适应变化多端的用户需求,必须让软件也随之变化。要满足多样化的信息需求,提取合适的信息需求建立模式,就要有相应的系统对需求信息进行分析和总结,通过程序化的模式来制定切实可行的软件方案。
国项目中,在前期分析时软件开发的核心技术人员和测试人员就已经进入项目组,每天技术人员会对分析的结果提出技术实现的难点以及改进的方法,笔者在随后的会议上就会和客户进行讨论,尽量在满足客户需求的同时,使用更简单可行的技术,这样就为以后的开发奠定了基础,使开发时的工作量大大减少。测试人员也在需求时提出从测试角度看到的问题,同样在需求分析阶段得到解决,节省了大量的开发时间。
需求工程在未来发展中会有如下几个方面的着重考虑:(1)缩小需求工程在理论研究阶段取得的成果同实际应用中得到的效果的差距,通过得到的结论来更好的设计软件;(2)规范需求工程的各种机制,可以有需求工程规格数据的搜集、整理、制作、实现以及维护,也可以有需求工程的问题的解决办法;(3)保证需求工程有较高的质量。这一点是需求工程最为关键的要求,质量的高低直接影响了未来实现效果的好坏。需求工程就是对未知问题进行探索、处理的过程。未来必然会朝着对象具体化、分析自动化的方向发展。
5 进行需求分析的注意事项
5.1 需求分析是分析人员与用户共同的责任
用户必须对软件功能和性能提出初步要求,并澄清一些模糊概念。而需求分析人员则要认真了解用户的要求,细致地进行调查分析,把用户做什么的要求最终转换成一个完全的、精细的软件逻辑模型,并写出软件的需求规格说明,准确地表达用户的要求。在一些项目中,由于时间紧迫,一些模糊问题没有及时澄清,导致最后返工,影响了项目进度。
5.2 需求分析阶段研究的对象是软件项目的用户要求
需要注意的是,必须理解用户的各项要求,但又不能全盘接受所有的要求。在一些项目中,针对客户提出的需求,了解客户的意图后,发现技术上实现有很大难度。我们了解到这个需求对客户来说不是十分重要,于是和客户商量出一个折中的解决方案,绕过技术难点,并且没有降低客户满意度。
5.3 主动积极了解客户业务和相关知识
求讨论集中于业务需求和任务,因此要使用术语。客户应将有关术语教给分析人员,而客户不一定要懂得计算机行业的术语。由于通常情况下客户对计算机术语了解不多,需求分析人员应该尽量将计算机术语转化成通俗易懂的语言,这样便于和客户沟通。而对于客户方面的术语,一方面不懂的时候一定要问;另一方面也要多学习。
6 结语
综上所述,需求分析是软件开发周期中的重要阶段,关系到软件开发的成败。我们在软件开发中应该充分重视这一阶段,尽量将问题在这一阶段解决好,为后期的软件开发打好坚实的基础,使项目能够保质保量的完成。随着软件工程的发展和应用,软件需求分析技术也得到了极大的改进,软件需求分析技术已经逐渐向原型化系统、敏捷需求分析、构件和组件等方向发展,其适用于PC软件、移动终端软件等不同类型软件的需求分析,可以导出完善的软件功能,满足用户多样化的需求。