1、需求评审的重要性

  在软件项目中,需求分析是最开始的工作,同时也是最重要的工作。需求分析如果做得不够详细或者是偏离用户需求或者是存在缺陷的话,往往会给项目带来灭绝性的灾难,不重视需求过程的项目团队将自食其果。因此,如何保证需求分析的正确、准确性,成了决定软件项目成败的关键因素。在实际的项目过程中,需求阶段往往是由一两位需求分析人员与用户沟通用户需求,然后根据自己的理解输出软件需求说明书及软件原型。

  接下来的项目计划、软件设计、编码、测试等各个环节都以此为基准。俗话说,当局者迷,旁观者清,经验再丰富的需求分析人员也可能犯错,所谓智者千虑,必有一失,这是永远不变的客观规律。另外,受需求分析人员的理解及用户的表达等因素的影响,需求在传递过程中往往存在很大偏差。

  需求分析人员输出的需求分析说明书,到设计人员、编码人员、测试人员那里往往又会有不同的理解。因此,软件需求分析说明书的正确性必须得到彻底的验证,利益相关方必须彻底理解需求,并达成一致。要达成这一目标、降低需求风险,需求评审是一个行之有效的方法。

  目前,很多小型软件企业在需求阶段,往往是需求人员写完需求后再跟用户沟通一下,就直接进入设计开发阶段了,设计、编码、测试人员前期没有参与进来,根本没有进行需求评审。也有不少企业的需求评审存在“走过场”的情况,其他人员根本不关心软件需求,认为软件需求就是需求分析人员的事情,他们怎么写大家怎么做就可以了,在提需求异常时简单找几个错别字提一下应付了事,没有提出有效的需求异常。也有的时候,在需求评审会议中,大家的关注点常常会不知不觉的转向设计,结果需求评审会议成了设计讨论会议,大家想得最多的是需求如何实现,而不是需求文档本身有无问题。

  或者是因为没有做好前期准备工作,导致评审时间长、效率低,结果很多问题不了了之。这样的评审,最终效果可想而知。

  2、需求评审的关键

  下文根据笔者多年参与软件项目管理的切身体会及经验,从不同角度对需求评审方法进行论述。

  2.1 充分准备评审

  好的软件需求说明书,是进行有效需求评审的前提。

  首先,需求人员在与用户确认需求的过程中,一定不要放过任何一个细节,仔细体会用户的每一个要求。对于用户的要求,需求人员需要对其加以梳理:哪些是合理的需求,哪些是不合理的需求,还有一些可能是必要的但是用户没想到的需求。

  软件需求说明书不应该只是用户意愿的表达,而应该是从软件层面上对用户需求的总结。

  软件需求说明书对需求用例的描述一般分为基本流和扩展流,基本流是大家很容易想到的主要业务流程,而实际设计开发及测试过程中,最耗费时间的是实现扩展流的过程。因此不能只注重基本流,好的软件需求说明书,扩展流一定远远多于基本流,扩展流写得越完善,说明需求人员考虑得越周全。

  而实质上,如果扩展流写得不完善,后期的设计、开发及测试人员往往在相应的细节处理上无所适从。

  2.2 分层次评审

  用户的需求是可以分层次的,一般而言分成以下层次:

  ①目标性需求,定义整个系统需要达到的目标;

  ②功能性需求,定义了整个系统必须完成的任务;

  ③操作性需求,定义了完成每个任务的具体的人机交互;目标性需求是企业的高层管理人员所关注的,功能性需求是企业的中层管理人员所关注的,操作性需求是企业的具体操作人员所关注的。

  对不同层次的需求,其描述形式是有区别的,参与评审的人员也是不同的。如果让具体的操作人员去评审目标性需求,可能会很容易地导致“捡了芝麻,丢了西瓜”的现象,如果让高层的管理人员也去评审那些操作性需求,无疑是一种资源的浪费。

  分层次评审,可以让不同类型的参与人分别评审他们关注的内容,从不同的角度找到需求的异常,提高评审效率。

  2.3 正式评审与非正式评审结合

  正式评审时指通过开评审会的方式,将需求涉及到的人员集合在一起,并定义好参与评审人员的角色和职责,对需求进行正规的会议评审。很多时候,因为需求内容太多,正式的评审会议中不可能将每一个细节都涉及到,评审员也有一个理解需求的过程,在短短的会议中不可能发现太多问题。因此,需要与非正式评审相结合,在评审会之前可以先开会对大家进行需求讲解,然后把需求通过邮件等方式发送给相关人员,留几天时间,以便相关人员仔细研究,记录异常,在正式的评审会上讨论。

  2.4 分阶段评审

  需求评审应该在需求形成的过程中进行分阶段的评审,而不是在需求最终形成后再进行评审。可以根据需求人员进行需求分析的进度,将一个整体的软件需求分为不同的阶段,组织小规模的评审。在形成目标性需求后进行一次评审,在形成系统的初次概要需求后进行一次评审,对概要需求细分成几个部分,对每个部分进行各个评审,最终再对整体的需求进行评审。这样降低了需求返工的风险,提高了评审的质量。

  2.5 评审人员选择

  需求评审涉及到各层次人员,在进行评审员选择时,一定要将各层次人员都囊括进来,他们可能有用户、需求分析人员、产品经理、项目经理、架构师、概要设计人员、详细设计人员、编码人员、测试人员、质量保证人员等等。

  用户在进行需求评审时,关注点更多在于他们所要求的功能是否在软件需求说明书中都囊括进来了;架构师及概要设计人员更多关注的是在现有的技术条件下,是否能够实现需求中的要求,如果无法实现需求或者代价太大,可能就要需求人员与用户沟通更改需求;编码人员可能更多关注于某些细节,例如界面元素等;测试人员主要关注是否所有的需求都是可测试的;质量保证人员关注点在于输出物是否符合规范。各层次人员充分参与,便于他们理解需求,通过需求评审,达成一致意见,不至于需求在不同环节因理解不同而出现偏差。

  因为各层次人员的立场不同,对同一个问题的看法是不相同的,有些观点是和系统的目标有关系的,有些是关系不大的,不同的观点可能形成互补的关系。如果漏掉某一层次的人员,可能会漏掉很重要的需求。

  2.6 对评审人员进行培训

  常常见到有的项目的需求评审会议在主持人进行需求讲解时,与会人员似懂非懂,没有提出有价值的问题,致使会议没有取得预期的效果,不得不改日重新进行。有的项目的需求评审会议针对某一个细节问题与会人纷纷提出自己的意见,大家争执不下,结果,会议出现了混乱状况,主持人无法控制局面,致使会议大大超出了计划评审时间。因为各层次评审人员关注点不同,评审也需要技巧、把握关键点,因此,应该对各层次评审人员进行有针对性的培训。以便于参与评审的人员能够紧紧围绕评审的目标来进行,能够控制评审活动的节奏,提高评审效率。

  2.7 给予评审员充足的评审时间

  实践证明,需求的异常往往存在于细节方面,评审员理解软件需求又需要一个过程,要想找到这些异常,必须有充足的时间,以便充分理解需求、找出其中的缺陷,提出可行性建议。因此,从需求讲解到非正式评审再到正式评审,需要预留足够的时间。

  如果评审员是项目中的成员,项目负责人需要给项目成员专门下达需求评审的时间,如果评审员只能额外抽时间来研究需求,恐怕只能简单提几条质量不高的异常了事。评审自然也就达不到预期的目的。实践证明,在需求评审上多花一些实践是值得的,所谓“磨刀不误砍柴工”。

  2.8 把握需求评审的关键点

  (1)注意对软件需求说明书的正确性进行评审。需求规格说明的正确性通常可以从如下方面得以体现:

  ① 是否有需求与其他需求相互冲突或者重复?

  ② 是否清晰、简洁、无二义地表达了每个需求(“清晰”是让人能够读懂;“简洁”是让人愿意去读;“无二义”决定“读”的效果,是让大家对需求描述的理解能够达成一致)?

  ③ 是否每个需求都通过了演示、测试、评审,分析是否得到了验证?

  ④ 是否每个需求都在项目的范围内?

  ⑤ 是否每个需求都没有内容和语法上的错误?

  ⑥ 在现有的资源内,是否能实现所有的需求?

  ⑦ 每一条特定的错误信息,是否都是唯一的和具有含义的?

  (2)注意对软件需求说明书的实践性进行评审。所谓实践性是指需求本身是否来源于目前企业的相关业务规则和文件制度,而非源于分析师们经验主义的臆测。实践性是判断需求规格说明是不是理论联系实践、密切和用户联系的一个关键性指标。

  (3)注意对需求规格说明书的完整性进行评审。可由下面的问题清单来评审需求说明书是否“完整”:

  ① 编写的所有需求,其详细程度是否一致和合适?

  ② 需求是否能为设计提供足够的基础?

  ③ 所有对其他需求的内部引用是否正确?

  ④ 是否包含了每个需求的实现优先级?

  ⑤ 是否定义了功能说明的内在算法?

  ⑥ 是否包含了所有已知的客户需求或系统需求?

  ⑦ 是否遗漏了必要的信息?⑧是否对所有预期的错误条件所产生的系统行为都编制了文档?

  需求说明的完整性主要体现在需求说明的详细程度上,怎样判断该需求的描述是否详细呢?笔者认为需求需要精化,而不是仅仅提出精化功能、对象要考虑涉众参与者、做些什么、需要什么数据信息、受什么业务规则和条件限制、系统会有什么响应等。

  (4)注意对需求方案的可行性和成本预算进行评审。

  (5)注意对需求的质量属性进行评审。评审需求规格需要说明是否合理地确定了所有的性能目标,是否合理地确定了安全性方面要考虑到的问题。

  (6)注意对需求的可实施性进行评审:

  ① 是否对每个需求都设置了唯一性并且可以正确地识别它?

  ② 是否每个功能需求都可以跟踪到高层需求?

  需求必须可以测试,每个需求在特定的输入条件下应当能给出已知的输出结果,同时,需求应当层次分明,需要把单个需求下面的相关需求综合在一起形成一组需求功能。需求的可实施性除了可跟踪性还包括可测试性,事实上,分析人员和测试人员在编写代码以前把需求模型,分析模型和测试用例综合起来通盘考虑,检查出遗漏的、错误的和不必要的需求,软件需求在概念上的测试是一种很必要的技术,它可以在项目早期阶段发现需求的歧义和错误。

软件项目中如何开展有效的需求评审相关推荐

  1. 项目中,你们如何进行需求评审?

    开发甲:这个需求咱们能在技术上实现吗?需要的成本.资源是否可支持 开发乙:需求实现方案是否可验证,有没有轻便的实现方案?需求粒度怎么样,对进度.风险评估影响大吗? 测试甲:需求实现的客户群体.用户习惯 ...

  2. [周年感悟]看软件项目中的四种角色

    工作一年了,这一年没像大学那样拼命的发帖,拼命的写博客.然而毕竟是过了一年了,便以此文纪念我逝去的2011年吧! 2011年3月份到公司实习,实习到5月,然后回学校做毕业设计,7月份正式入职.若是从实 ...

  3. 【软件工程】用户在软件项目中承担的工作

    终端用户 终端用户既指软件的最终操作者,也是软件工程内的一个概念,指终端用户的抽象集合,用于区分单纯使用软件的用户和进行软件开发的开发者.这种抽象主要在设计用户界面时有用,用于代表普通用户的共同特性. ...

  4. [项目管理]工业工程理论在软件项目中的实践

    摘要:结合工业工程理论,对公司现有软件项目开发流程进行总结分析,优化项目管理流程.提升项目作业效率. 关键词:工作研究:流程分析:降低成本 引言 本人在IT行业从事软件开发工作,经过本学期工业工程伦理 ...

  5. 软件项目中的决策分析_软件工程中的决策管理

    软件项目中的决策分析 Every day we make a lot of decisions. I always wonder why, in so much companies, there is ...

  6. 浅论WBS分解在软件项目中的应用

    WBS分解在软件项目中的应用 [摘要]  本文结合项目管理的WBS方法,对某系统集成公司的管线资源管理项目进行工作分解,旨在说明WBS方法对项目渐近明细和项目的计划方面所能起到的重要作用. [关键词] ...

  7. 【软件工程】软件项目中的用户

    文章目录 终端用户 用户在软件项目中承担的工作 用户体验 用户友好 以用户为中心的设计 利益相关的用户 终端用户 终端用户既指软件的最终操作者,也是软件工程内的一个概念,指终端用户的抽象集合,用于区分 ...

  8. 如何在软件项目中生成物料清单(SBOM)

    随着软件合规.断供.漏洞等风险日益受到重视,需求方会要求开发团队提供软件的详细信息. 常用的方法是,研发团队从源码.配置文件.生成交付物等处提取所需信息按需求方要求的格式形成报告.这种手工生成方法,不 ...

  9. 软件项目中的功能风险矩阵

    软件项目中的功能风险矩阵 黄国强 2011-9-9 仿照美国总统艾森豪威尔的"时间管理优先矩阵",我画了一个项目功能风险矩阵图. 软件开发中,我们最先要做的就是必要而且有风险的事情 ...

最新文章

  1. 苹果要为app store速度奇慢付出代价
  2. GARFIELD@12-02-2004
  3. c#给定编码中的字符无效_C#程序检查给定的字符串是否等于(==)运算符
  4. 一文读懂YOLOv5 与 YOLOv4
  5. LNMP安装了哪些软件?安装目录在哪?
  6. js设计模式——3.观察者模式
  7. SpringCloud入门之Maven系统安装及配置
  8. python基础语法加爬虫精进_从Python安装到语法基础,这才是初学者都能懂的爬虫教程...
  9. 面向对象的数据库db4o: 安装并使用db4o
  10. java根据身份证号判断当前年龄
  11. web前端开发技术——第六章课后习题实验
  12. 详述白盒测试的逻辑覆盖法的条件组合覆盖及其优缺点
  13. CSS 实现鼠标移动到图片上图片变大
  14. 计算机的开机自检由什么程序完成,开机自检,教您怎么取消电脑上的开机自检...
  15. AntDsign菜单高亮
  16. C语言/C++常见习题问答集锦(十九)之C语言与漫天飞雪
  17. SV基础知识4----随机化和约束
  18. boss直聘账号异常登不上_五条人XBOSS直聘推出麻将盲盒
  19. Bokeh可视化图表使用教程
  20. 单价多少元一千克在c语言中怎么表示_小学三年级数学《克和千克的认识》说课稿范文...

热门文章

  1. Java售票方式_Java多线程之火车售票系统
  2. Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'dao' is exp
  3. iOS安全攻防(九)使用Theos开发SpringBoard的Tweat
  4. python爬虫爬取(中国空气质量在线监测分析平台)北京PM2.5,2013年至2018年的数据
  5. mysql 执行错误1395_主义 - 常规错误:1395无法删除连接视图
  6. 物联网服务器协议命令,物联网使用HTTP协议传输数据
  7. css实现一段文字的两端分散对齐(兼容所有浏览器)
  8. matlab在管理学中的应用简述【一】
  9. Pytorch函数expand()详解
  10. YOLOv2—更改CelebA数据集的bbox [by zhangzexuan][17.9.24updated]