浅谈软件项目的需求管理

软件项目区别于其它项目的最显著的特征是其不可见性,它不像硬件购销、建筑工程,都是实实在在可见的东西。而软件项目在系统交付之前很长一段时间,客户是无法感知自己想要的系统究竟是什么样子。因此,需求管理就显得十分重要,据相关统计数据分析,软件项目90%以上失败的原因都在于没有重视需求或者需求管理方面做的不到位导致的。

需求管理作为软件项目管理的一个重要内容,贯穿项目实施的全生命周期。俗话说:万事开头难。需求作为软件开发的第一个环节,其重要性不言而喻。市面上关于需求管理的相关理论和书籍很多,但多数停留在理论层面,实操性不强。本文主要是根据我们以往项目的经验,进行一些需求管理方面的探讨。我们可以简单的将软件项目的需求管理分为需求获取、需求分析与验证、需求变更控制三个核心内容。

(一)需求获取

需求获取是软件项目需求管理的第一个过程,在这个过程中我们需要运用科学的方法以及相关的项目经验库辅助我们进行需求获取。需求获取的核心内容是通过调研掌握软件项目的实际需求,以便于指导整个项目的实施。需求获取的主要方法包括:用户访谈、问卷调查、现场观摩、头脑风暴等方法。在实际的项目操作过程中,相对比较明确的需求,我们可采用比较固定的需求获取方式,比如:问卷调查等。而对于相对比较模糊的需求或者说用户无法清晰表述自己需要的是什么的时候,我们可采用比较灵活的方式,例如:用户访谈、现场观摩等。

需求的类型主要包括:业务需求、用户需求和功能需求。在需求获取的过程中,无论采用哪种方法,我们都需要自顶向下或自下向上去了解用户真实的想法。业务需求的获取对象主要是客户的高层领导,我们都知道,项目的发起、实施、最终的成败很大程度上都取决于高层领导,我们需要对他们进行访谈,了解高层领导的公司战略、发展方向,更为重要的是获取他们对将要开发的软件系统的期望,以及希望该系统在解决现有业务问题,对公司整体战略的支撑方面的期望。帮助我们去更好地理解系统的宏观构想。在掌握了业务需求后,我们需要对中层管理人员进行调研,核心问题是搞清楚在宏观战略目标落地的这层,或者说指标细化并负责实施的中层他们对软件系统的期望以及实际要求,他们或希望此系统能够带来工作便利,或希望此系统能够做到精细化管理,如此等等。但他们都是具体的业务部门负责人,对自身的业务以及系统对业务的促进方面,有比较深刻的体会。最后,我们需要在掌握了业务需求、用户需求的基础之上,通过对IT管理部门、主要操作人员的需求调研或根据我们对需求的理解,细化出系统的功能需求,这个需求是最低层次的需求,也是一个层层落地的过程。

(二)需求分析与验证

在获取到软件项目需求后,接下来的工作就是对需求进行分析与验证,在项目的实际操作过程中,主要包括:需求分析建模、需求规格说明书编写和需求评审三个大的阶段。

需求分析建模主要是对已搜集到的信息进行提炼、分析和仔细审查,为最终用户所看到的系统建立一个概念模型,确保所有干系人都明白其含义,并能找出其中的错误、遗漏或不足。需求分析是软件项目需求管理的最重要一环。

在需求分析与建模过程中,对于用户需求不确定或用户无法清晰表述需求的,为了加快项目进度,我们往往采用原型法进行需求分析与建模,即根据我们的经验以及对用户基本需求的理解,用Axure等原型设计工具搭建一套原型系统。另外,我们还需要采用UML工具进行用例分析、用例描述等,并最终编写形成《软件需求规格说明书》。

需求验证或需求评审是衡量需求阶段产出成果的重要手段,在完成需求分析与建模后,项目相关干系人应组织召开需求评审会,邀请相关专家、外部相关单位等进行需求评审,就需求分析的结果《需求规格说明书》、原型系统等进行评审,并对评审结果进行签字确认,确保需求没有偏离用户要求,又略高于用户要求。

(三)需求变更控制

需求管理贯穿于软件项目开发的全生命周期,在完成需求获取、分析与验证等任务后,项目组将根据形成的相关报告进行系统设计、编码、测试、发布等工作,这些过程其实都会涉及到需求的变更,这就需要我们有一套较好的机制和方法来管理和控制需求变更,以便于项目能够按期保质又在成本范围内完成。

通常的做法是我们为了避免需求变更的无序、频繁、过度,在项目启动时会制定一套章程,会有一个CCB(变更控制委员会),通过召开项目启动会的方式,给相关干系人确定项目的实施方法、里程碑、沟通计划,并着重强调需求变更的流程。

在实际操作中,首先是通过VSS等版本控制工具对需求文档进行管理,建立需求基线,并通过需求跟踪矩阵对需求项进行详细标注。

其次,是在项目执行过程中对需求进行变更控制,有一套规范的流程,过程虽然繁琐,但能够给项目的风险控制带来很好的效果。用户提出需求变更申请,由项目实施团队进行需求变更的评估,评估包括可能造成的对系统其它功能的影响、实施此次变更需要投入的工作量等,评估完成后由变更控制委员会确定是否同意变更。如果同意,则由项目组进行变更的实施,并对上线后的变更内容以及整个系统进行验证,确保不影响系统运行和操作。如果不同意,则变更不成立,直接驳回用户方。通过这样一种虽然看似繁琐的方法能够很好地进行需求变更的控制,可以有效避免无序、无理、过度的需求变更,确保项目在可控范围内实施。

以上是我们对软件项目需求管理的一点认识,软件需求管理之所以重要,主要是因为绝大多数项目的失败主要由需求的理解不到位、需求的变更没有得到有效控制等原因造成的。因此,这就要求我们在软件项目的需求管理方面,要下更大的力气去做好需求的获取、分析、变更控制,结合项目管理的相关理论,如PMBOOK、CMMI等,在项目实践中,不断总结经验教训,做好需求管理。

浅谈软件项目的需求管理,布布扣,bubuko.com

时间: 2024-08-02 06:58:41

浅谈软件项目的需求管理的相关文章

浅谈软件项目开发过程中的主要项目风险及对策

软件项目成果的需求分析方和软件项目的承担者都十分关心这样的一个问题:什么样的因素会导致软件项目的失败?与项目有关的因素的改变将对按时.按经费预算交付符合预定质量要求的软件成果产生什么样的影响?这些都属于软件项目开发过程中考虑的风险问题. 软件项目的风险是指在软件开发过程中可能出现的不确定因而造成损失或者影响,如资金短缺.项目进度延误.人员变更以及预算和进度等方面的问题.风险关注未来的事情,这意味着,软件风险涉及选择及选择本身包含的不确定性,软件开发过程及软件产品都要面临各种决策的选择.风险是介于

浅谈软件项目团队的建设和稳定

如何建设团队?如何保持现有团队稳定?这些都是很高深的问题,但解决方案却很简单. 因为答案只有两个字. 吃饭!吃饭!吃饭! 聚餐!聚餐!聚餐! 大城市我不清楚,至少热干面这种二三线城市,要保持团队人员的凝聚力的一个最简单办法就是聚餐吃饭. 毕竟中国的事情都是在饭桌上达成的.我也不清楚为何聚餐/一起吃饭为何有如此的神奇作用,反正每次 无论我作为组长还是作为组员去聚餐,就能深刻感受到团队/小组集体的凝聚力.或许我需要找本关于 中国的饭桌文化的书来认识学习一下. 作为项目小组组长除了请大家吃饭之外,最好

浅谈软件需求分析

浅谈软件需求分析 一.什么是需求分析? 通俗的讲,对用户的意图不断揭示和验叛的过程,要对经过系统可行性分析所确定的系统目标做更为详细的描述. 假如你是个建筑工程师,有个客户找你建一个鸡窝,这个时候要需要与客户沟通,来确定客户到底想要一个什么样子的鸡窝.我们应该注意三点: 1.准确的理解和描述客户需要的功能. 客户说,我的鸡窝要三层的,带电梯,饮水池,厕所,饮水池要自动判断水位供水,电梯要可以同时乘坐10只鸡-.客户滔滔不绝的讲了一大堆,你也都非常忠实的按照自己的理解再一一的向客户描述一遍,以便于

浅谈软件工程师的代码素养

WeTest 导读 写这篇文章时内心是比较忐忑的,因为文章的话题范围非常大,怕自己驾驭不了.在实际工作中,维护过很多类型的代码,其中不乏高级工程师完成的逻辑,大家的需求能力都很不错,能够快速满足产品的需要,但很少能有人能注意到代码的整洁度,甚至很多代码经过多人维护后已经变得无法再进行任何一处的修改,最后不得不花大量的时间进行重构.因此我决定还是写一篇文章来"浅谈"软件工程师应具备的代码素养,希望能够对大家有所帮助,水平所限,如有不当之处还请不吝指正~ "程序是写给人读的,只是

软件项目与过程管理第八周作业

内容:软件项目与过程管理课程内容总结 经过八周时间的学习,软件项目与过程管理课程已经逐渐接近了尾声.通过这八周的学习,我对软件项目与过程管理课程有了更深的理解. 一.关于团队项目. 团队项目是本次软件项目与过程管理课程中最重要的一部分.我们团队项目是作业管理系统.在项目开发的整个过程中,我们在项目经理的带领下,项目团队的每一个成员团结合作.相互沟通,团队成员之间相互学习彼此的优点和技术,在每个成员的共同努力下,基本完成了此次软件开发项目. 通过这次团队项目, 我的总结如下: 1.在项目的开发过程

浅谈软件性能测试中关键指标的监控与分析

浅谈软件性能测试中关键指标的监控与分析 一.软件性能测试需要监控哪些关键指标? 软件性能测试的目的主要有以下三点: Ø  评价系统当前性能,判断系统是否满足预期的性能需求. Ø  寻找软件系统可能存在的性能问题,定位性能瓶颈并解决问题. Ø  判定软件系统的性能表现,预见系统负载压力承受力,在应用部署之前,评估系统性能. 而对于用户来说,则最关注的是当前系统: Ø  是否满足上线性能要求? Ø  系统极限承载如何? Ø  系统稳定性如何? 因此,针对以上性能测试的目的以及用户的关注点,要达到以上

浅谈C++容器动态内存管理的优化

在信息学竞赛中,C++的容器的用途非常广泛,但经常因常数过大而超时.怎样才能提高它们的效率呢? 我们知道,容器是存储同一类对象的对象,既然"对象"我们无法改变,那么我们只能从"存储"入手,不难想到,不同容器在实现上的根本区别是它们对应着不同的内存组织方式,内存管理无疑是这种实现的核心,所以优化内存管理是加快容器效率的最好途径之一. 一.内存分配器简介 怎样才能优化内存管理呢?很简单,C++为我们提供了这样的接口,我们可以通过自定义容器模板中的最后一个allocato

浅谈软件开发者应具备的基本素质

我们常常能在一些电子产品的发布会上听到新产品修复了某些BUG.开发出了某些先进的功能: 我们常常会听到某些黑客攻击某些网站的消息,也可能受过某些电脑病毒的侵害: 我们也常常能在一些科幻大片里见到程序员在紧急关头敲打代码拯救世界. 每天,我们都在使用着电子产品,使用着软件程序开发者的成果.但是,对于普通人,软件开发又高深.难以涉猎.而作为软件开发者,又应该怎么样对待软件开发,应当具备哪些素质?我正在学习软件开发,下面从个人的角度,浅谈自己的看法. 开发软件的基本前提是站在他人的角度考虑问题:软件开

软件项目与过程管理第七周作业

问题:关于文档修订方面内容的总结及本次项目中所编写的文档的重要性说明. 一.立项说明书 1.立项说明书能详细地说明项目的可交付成果和为提交这些可交付成果而必须开展的工作. 2.立项说明书是项目利害关系者对项目范围的共同理解,说明了项目的主要目标. 3.立项说明书能够使项目团队能够实施更详细的规划,在执行过程中指导项目团队的工作,并构成评价变更请求或增加的工作是否超出项目边界的基准. 4.立项说明书能够明确提出了哪些工作要做,哪些工作不要做,以及要做的水平,这决定了项目管理团队控制整个项目范围的好