浅谈软件项目中的需求分析与需求管理
李杰-11603080115
2019年4月14日
摘要:
需求管理在软件开发项目管理中起着至关重要的作用。本人以曾作为项目经理参与的国内某期货交易所核心结算业务系统(下称“结算系统”)的项目为例,阐述需求管理的流程和自已摸索出的–些需求管理方法和心得。
关键词:
项目管理需求管理软件项目开发
引言:
在如今软件开发领域,尽管各种开发技术越来越先进,可利用的软件开发工具和方法也越来越多,但仍然有相当比例的软件项目失败。究其原因,常常是由于在项目开始阶段没有正确地理解、确定和定义需求,或者是由于在项目进展过程中没有正确地管理需求。
众所周知,项目管理的三要求为TQC (时间、质量、成本)。我个人认为,在软件开发项目中,要使TQC目标最大化,范围管理中的需求管理有着至关重要的作用,这与当今中国软件开发的特征有很大关系。当前中国软件开发的领域集中在应用开发领域,多以开发业务管理系统为主。而中国是新型经济体,在企业管理等领域处于逐步摸索、不断变更,以适应国际化竞争的转型初期。在此转型阶段,各企业的管理模式、业务管理方法等有很大不同,且自身也处于不断否定自己的管理、不断变更自己的管理方法和调整业务模式之中。
软件需求管理的流程:
软件需求是软件项目开发工作的-一个重要源头。需求管理一-般由需求分析师和项目经理共同完成的。需求分析师尽可能准确的理解和获取客户需求及潜在需求,编写《需求规格说明书》,而项目经理则需通过加强需求管理,有效的防范和减少不必要的需求变更。按我多年项目开发管理经验,我个人认为,需求阶段准备把握了各类需求(功能、非功能、潜在需求等)并有效地管理需求,项目也就已经成功了一半。
在负系统时,按需求工程的方法论,将需求管理的流程可划分为如下几部分:
一、制定需求管理计划
需求管理计划往往被软件项目管理人员所忽视,很多项目经理在开发项目时,一上来就是让需求分析师跟客户谈需求去,这样做会导致需求工作的盲目性甚至可能让需求分析师无所适从。
在本项目启动时,我通过如下步骤制定需求管理计划:
① 确定需求沟通机制;确定需求变更管理办法;
② 确定需求跟踪方法;
③ 确定需求管理涉及的干系人,并明确职责;
④ 明确需求管理工具;
⑤ 编写需求管理计划。
二、需求调研
需求调研是需求分析师一项非常 重要的工作。在本项目中,我确定了对期货核心结算业务吃得很透,具有5年以上相关经验的技术人员作为需求分析师负责与客户的需求访谈和调研,并成立需求组,在需求组中还配备了软件设计师和软件测试工程师旁听。我认为,在需求阶段,虽然以需求分析师为主,但软件设计师和软件测试工程师参与非常重要,他们可以了解第一手的需求信息。
三、需求分析与定义
针对获取的用户需求进行分析和整理,并规格化,形成需求规格说明书。针对每项功能需求,定义需求的重要性、优先级、实现的难易程度。
四、需求确认
针对需求规格说明,和客户业务、技术人员起来,通过讲解的方式,确认需求,并最终让客户方需求接口负责人签字确认。
五、管理需求变更
管理需求变更是需求管理中非常重要的一环,也是经验不足的项目经理容易忽视的地方。
在软件项目中,没有不变的需求,不能指望在需求阶段- -蹴而就,就此确定下来。随着设计和开发的深入,有些原定的需求本来就可能显得不合理;加之时间的推移会伴随着客户业务的变化和发展,需求变更是不可避免的。管理需求变更,是项目成功的关键因素。
在结算系统项目中,我采用如下方式对需求变更进行管理:
1.需求变更申请需书面提出,并由客户方需求接口人签字认可。当我方收到需求变更申请时,先由项目组经理与客户方需求接口人协商,协商未果,由包括双方领导在内组成的CCB(变更控制委员会)审核,是否接受变更;
2.CCB审核确定接受的需求变更,录入需求管理工具TD,并通知相关方(包括设计组、开发组、测试组),评估影响范围及工作量;
3.针对需求变更,进行相应的设计和开发的调整;
4.验证需求变更是否完成。
六、需求跟踪
针对需求列表,定期对需求进展进行跟踪。
需求跟踪是指跟踪一“个需求从定 义、实现到验证的全过程,包括编制每个需求同系统各类元素之间的联系文档,这些元素包括其他类型的需求、体系结构、其他设计组件或模块、源代码模块、测试用例、帮助文件等。需求跟踪的目的是建立与维护“需求-设计编码测试”之间的一致性, 确保所有的工作成果符合用户需求。
如果采用手工操作方式,对需求进行跟踪,将是一个非常繁重的体力活。在本项目中,我们应用TD(Test Director,主要用来管理需求,bug缺陷,测试计划,测试用例,测试报告)管理工具,该工具把需求定义、设计(每项设计关联一.个或多个需求点)、开发(建立开发模块与需求点的关联矩阵)、测试(每个测试用例关联一一个或多个需求点)有机的联系在一起。
我负责专人(本项目以系统集成人员兼职)来定期扫描和跟踪需求的进展,可以让我随时了解项目的进展以及离完全符合客户所有需求还有多远的距离。
关于软件需求管理的提醒:
(1)要充分识别客户的需求和潜在需求
客户的需求各种各样,纷繁复杂,我们要从中将这些需求进行分类。有些需求是现

有的业务规则和功能、有些是对现有工作的抱怨、有些是客户根据自已理解设想的业务规则和功能。针对各类需求,我们要有不同的对待方法,尤其要慎重对待对现有工作抱怨的需求,这类客户他对现实不满,但又没有想法设想一套新的业务规则和功能,这时候需要我们充分理解,抓住客户抱怨的本质,通过自身对客户业务的理解,帮助客户设计一套能解决他的抱怨的新的规则和功能。
在本项目开发中,我们有重点地针对客户抱怨较大或较多的需求,内部召集相关人员充分挖掘客户的需求和潜在需求,并运用快速开发工具AxureRP搭建系统原型,以直观易懂的界面作为交流工具,充分讨论其是否满足客户的真实需求。
(2)需求确认非常重要
在以前的项目中,经常在项目验收时存在客户反悔、扯皮的事情,而项目开发时需
求文档等各类开发文档却都很齐全。究其原因,跟需求没有正式确认有很大关系。有些项目经理或需求分析人员抱怨项目时间紧,客户需求人员没空,所以免了需求确认这一环节。但我认为这一环节一定不能免。哪怕项目组再忙,客户再忙,一定要想办法让客户书面确认需求并签字。在本项目中,需求分析完成后,我通过给客户逐步讲解需求,同时逐步让客户对需求进行确认。在客户需求变更后,我通过会议纪要、需求变更单等让客户确认签字以保存当前协商的成果。
(3)需求双方都要务实
需要双方领导层达成共识,需求是无止境的,项目成功才是关键的。在本项目初期,我请求我方领导和客户方领导多次沟通,定下保证实现项目主要需求,一定要保障项目成功的基调,并为此做了一.些物质上的一些激励,即我方拿出项目合同额10%的钱,激励由甲、乙双方共同实际参与此项目的项目人员,当然包括客户方的需求人员,如果项目按时上线,实现所有主要的日常业务功能,那么就可以参与分享此项目奖,否则该项目奖池归零。
(4)设计实现别让需求扩大化
追求完美是技术人员的通病。在校期间,课程设计等计算机实现方面,学生追求算法完美可以认为是一种美德,但项目是受多种因素约束的,我们不可能实现完美无缺的项目。我们的设计人员-定不要把需求放大,放到-个更完美,适应性更强的模型中,这样无形中扩大了项目范围,加大了项目的实现成本,对项目对个人都是有害的。我们在提炼客户需求的时候,可以采用“往前跨半步”的方式,满足客户现在以最近的将来可能需要的需求以满足系统的灵活性,切总追求更加抽象化,更加完美,盲目扩大需求范围,要知道,简单是美,适用的才是最好的。
(5)严格规范需求变更控制流程
项目开发中,需求变更是永恒的主题,我们要采取恰当的措施,正视这个问题。以前项目开发过程中,由于客户方相关人单方面跟项目某一个开发人员指出说原理解的需求不正确,需重新拟定,导致后来需求变更泛滥,项目无法收尾的惨剧。
在本项目中,由双方领导层、双方项目经理等组成变更控制委员会CCB,并要求开发人员不得私自答应或接受客户某一个需求提出人员的需求变更,所有变更必须以客户方需求接口人汇总整理后,以书面方式提出向开发方项目经理申请,开发方项目经理可以与客户方需求接口人讨论是否接受和拒绝需求变更,当不能达成一致时,交由CCB,由CCB决定是否变更,确有变更的,录入到变更控制系统TD,并通知各方实施变更。通过这套机制,客户要实现需求变更不是那么随便,有很多人会参与监督这一变更过程,客户也害怕自己的形象受损,有效杜绝了客户需求提出人员对需求的朝令夕改和源源不断提出的可有可无的需求的情况发生。
(6)别忽视需求跟踪
不要等到UAT(User Acceptance Test,也就是用户验收测试,或用户可接受测试)时,才发现需求未实现,或实现不全,这样会让验收工作苦笑不得,影响在客户方的形象。在本项目中,我委派系统集成人员兼做定期的需求跟踪,每个月-次,以检查正在进行的设计和开发,其功能点是否符合对应的需求。
(7)抓住客户方需求接口人
在项目启动初期,一定要要求客户规定唯一一个需求接口人,这个接口人就是项目开发方的教练(coach)。在需求阶段,需求接口人需始终跟需求组一起,跟客户的各个部门-起讨论客户需求,所有部门的需求需经需求接口人同意。这样做好处很多,客户方需求接口人起着沟通项目甲乙双方桥梁的作用,甚至算半个乙方(项目开发方)的人。在讨论和汇总客户各部门、各人员的需求时,客户方需求接口人可以帮项目组过滤-些无用或很次要的需求,也可以协调客户部门各人员需求的冲突,更可以协调项目甲、乙双方的需求理解偏差和冲突。客户方需求接口人还可以通过全程参与项目需求管理,了解更多以前没有机会了解的业务,提升自身业务能力,这也是他(她)所乐见的。在项目验收时,客户方需求接口人可以根据自身全程参与,更深入地理解系统需求的重点,在验收或试用阶段如果有实际操作人员有反悔的情况,他(她)可以更深入地对业务和对系统的理解来调停。
(8)苦练内功,适当引导客户需求
有很多时候,项目组开发人员抱怨客户需求太霸道,实现起来很别扭。但究其原因,发现是由于你别客户牵着鼻子走,客户说怎样就怎样,但客户又不是计算机设计专家,导致项目开发人员抱怨不断。我们在项目开发过程中,-定先要虚心听,且要多问几个为什么,然后在自已公司找相关业务专家、行业顾问多咨询,以更简洁、更合理的模型来满足客户需求。如果自己公司缺乏行业经验,一定要聘请业务专家、行业顾问等专业人士,通过行业知识和业务的培训和专业指导等方式,提高项目团队特别是需求分析师对客户需求的把握能力。此外,还可以对客户方业务人员提供免费的计算机和软件开发等基础支持的培训,以便引导客户需求提出人员以更接近技术人员的方式提出合理的需求。

浅谈软件项目中的需求分析与需求管理相关推荐

  1. 浅谈软件性能测试中关键指标的监控与分析(转)

    浅谈软件性能测试中关键指标的监控与分析 一.软件性能测试需要监控哪些关键指标? 软件性能测试的目的主要有以下三点: Ø  评价系统当前性能,判断系统是否满足预期的性能需求. Ø  寻找软件系统可能存在 ...

  2. java 定时任务怎么关闭_浅谈springboot项目中定时任务如何优雅退出

    在一个springboot项目中需要跑定时任务处理批数据时,突然有个Kill命令或者一个Ctrl+C的命令,此时我们需要当批数据处理完毕后才允许定时任务关闭,也就是当定时任务结束时才允许Kill命令生 ...

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

    软件项目成果的需求分析方和软件项目的承担者都十分关心这样的一个问题:什么样的因素会导致软件项目的失败?与项目有关的因素的改变将对按时.按经费预算交付符合预定质量要求的软件成果产生什么样的影响?这些都属 ...

  4. 浅谈软件项目需求分析

    这里不是写标准化的理论知识,而是想写写对软件需求工作的感受.         理论上的需求管理是要解决系统需求做什么的问题,以此界定系统功能和非功能性的内容.需求指的是由项目接受的或项目产生的产品和产 ...

  5. 浅谈软件开发过程中的项目管理

    摘要:大量软件开发实例表明,如果不能在软件开发中加强项目管理,随着国内软件行业的不断发展与壮大,国内的软件开发企业将面临严峻的挑战性与风险性.因此,为了确保软件开发的效率与质量,必须认识到强化项目管理 ...

  6. 浅谈软件开发中的假设条件

    翻开第一篇聊假设条件的博客,发现已经快2年了.那篇主要涉及了点架构方面假设条件的东西,不是很全,今天开一篇聊一下软件开发中的假设条件.如果把假设条件限定在架构方面,稍显冷门.但如果将其扩展到整个软件开 ...

  7. 浅谈软件项目规模估计——怎么估?

    做事所花费的时间总是比你预期的要长,即使你的预期中考虑了侯世达定律. -- 侯世达,哥德尔.埃舍尔.巴赫 周三的下午,我像平常一样,写着代码听着歌,突然从天而降一份莫名其妙的故事列表,说让我给个人天, ...

  8. 浅谈Java项目中要不要使用实体类

    问题背景:   经过在学校的努力学习,2021届菜鸟毕业喽.终于踏上了接受社会毒打的历程,毕业后入职第一家公司,欢天喜地的打开项目准备写下毕业后的第一套增删改查,然后emmmmmmm   公司的项目中 ...

  9. 浅谈软件编程中的8大数据结构

    文章目录 前言 一.为什么要研究数据结构 二.数据结构的分类 1.数组(Array) 2.链表(Linked List) 3.队列(Queue) 4.栈(Stack) 5.散列表(Hash) 6.树( ...

  10. 浅谈Android项目中的build.gradle文件

    一.gradle简介 gradle是基于groovy语言的. Android Studio是采用Gradle来构建项目的.Gradle是一个非常先进的项目构建工具,使用了一种基于Groovy的领域特定 ...

最新文章

  1. [UWP]实现一个轻量级的应用内消息通知控件
  2. 第十七届智能汽车竞赛-多车编队组入门讲解
  3. python面试-Python面试题总结
  4. GDCM:西门子CSA转DICOM文件的测试程序
  5. Android 使用本地应用在线播放流媒体文件
  6. Django(part19)--Django中的应用
  7. springboot事务回滚源码_002 | 搭上SpringBoot事务源码分析专车
  8. 关于微型计算机的原理 叙述正确的是,微型计算机原理练习附答案概念.doc
  9. nginx反代web页面没有正常显示_web漏洞-SSI注入漏洞深入详解
  10. SQL语句常用优化技巧
  11. 多线程下载Android
  12. 吴恩达机器学习cs229一二节总结
  13. 项目经理不得不知道的里程碑计划及其重要用途
  14. 实时网速怎么看快慢_iQOO怎么显示网速 网络状态实时查看
  15. es7之Reflect Metadata
  16. 在windows系统上搭建CTS测试环境过程记录
  17. 拼多多商家刚开店是如何破零的?
  18. 安卓输入法 车机版_百度输入法车载版-百度输入法车机版v8.2.1.18 安卓版-腾牛安卓网...
  19. MyBatis9.28 + jdk1.8+Mysql 5.7
  20. 求空间中点到线的最短距离(Revit二次开发)

热门文章

  1. redhat7的wget使用
  2. 勒索病毒家族信息判断
  3. 传智播客-刘意-java深入浅出精华版学习笔记Day10
  4. 灰灰考研c语言讲义,灰灰全书之数据结构试讲
  5. Qt高级编程完整源码
  6. 手机上如何免费压缩JPG
  7. 使用yum快速部署Oracle安装环境 11g
  8. Matlab遗传算法
  9. linux教程期末考试,Linux-期末考试试题8套(含答案)-linux期末
  10. 【人脸识别】基于模板匹配算法实现人脸识别matlab源码