新宇

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 87|回复: 0

需求、需求工程与需求工程师 — 1.定义、作用

[复制链接]

2

主题

3

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2022-9-20 15:26:59 | 显示全部楼层 |阅读模式
在软件实现的过程中,需求分析的正确与否是软件成功的基础和前提,需求内容不但包含了客户对软件的期望与要求,同时它也影响着系统采用的架构方法、实现技术等。需求工程质量的优劣,直接影响着后续设计工程和开发工程的质量,也关系到最终软件整体的质量。需求工程师是需求工程中的主角,需求工程师水平的高度,不但影响需求成果而且也直接影响完成软件水平的高低。在这里就需求、需求工程和需求工程师三个要素的内容、作用和关系做一些探索。
1.定位

■需求:需求就是客户对要开发软件提出的业务和系统两个方面的期望和要求。
客户对软件提出需求的多少取决于该客户的经验,如果经验多就会提得多(包括业务、系统),如果经验少,则提出的需求少,不足部分要由需求工程师补足、完善。

  • 需求工程:用工程化的方法系统地获取客户需求,包括调研、分析、编制资料,最终精准地描述出待开发软件的特征和相关约束。
  • 需求工程是完成软件开发全过程的第一步,需求工程的作用归集为一句话就是:收集客户想要做什么、最终确定实际做什么。
  • 需求工程师:是需求工程全过程的主要执行角色。他从客户那里收集需求,并将客户原始形态的需求表述,经过梳理、补全、确认,全部转换为符合计算机软件要求的标准表达形式,以供后续的设计、开发之用。
  • 需求工程师是客户与开发工程师之间的沟通桥梁。
对于开发一款应用软件来说,需求工程成果的质量极大地影响着这个软件的结果,是决定软件成败的重要环节,需求工程的成果是【需求规格说明书】,它不但是后续设计与开发的依据,同时也是客户对完成系统评估、验收的依据。
另外,需求工程的内容也极大地影响着软件开发的成本、技术、周期,资源、质量以及最终客户的满意度等诸多方面。需求工程的成果不但会影响客户最后获得的效果,也会影响到软件开发者的最终利益。
完成一款软件的工作可以粗分为三个阶段:需求工程、设计工程和开发工程,三者的关系如图所示。


1)需求工程:收集客户的原始需求,通过梳理、分析,形成的【需求说明规格书】,它作为设计工程的输入以及开发工程成果的客户验收依据。
2)设计工程:依据①的成果再进一步分析、抽提,形成架构、功能和数据的设计成果,这是开发工程编码的依据。
3)开发工程:依据②的成果,用编码将设计成果转换为最终的软件,交付客户。
2.作用

1)从图1的推进变化上可以看出,需求工程①担负着将客户原始需求内容理出头绪并形成一份清晰明了、可以确认的【需求规格说明书】的任务;而从②~③的一系列工作,越靠后的部分就越单纯,与业务的直接关联就越少。   
2)从图中①、②和③的梯形的坡度夹角α的大小可以看出如下内容:
□需求工程阶段梯形坡度的夹角α1最大,这说明在将模糊不清的客户原始需求转换到清晰标准的需求的过程中,需求工作起的作用最大,它将大部分的不清晰、不确定的业务问题全部解决了。

  • 设计工程阶段的夹角α2其次,这个部分重点解决技术实现层面的不清晰、不确定的内容。
  • 开发过程阶段的夹角α3最小,理论上说这个部分就应该没有不清晰、不确定的问题了。
3)α1的夹角越大越好
从上述夹角变化可以看出来,需求工程①是开拓者,它担负了最为“杂、乱、累”的工作,从客户原始需求到编码的3个阶段中对需求收敛*起的作用最大。①部分图形的收敛越大(梯形的坡度大),以后的设计②、开发③的图形就越接近于等边矩形,这意味着工作就越顺利。否则②和③阶段的坡度依然很大,就说明需求工程做的不到位,将很多的未解决的问题推到了后续工程上,这样会在后续的设计和开发中不断地发现前期的需求问题从而造成设计和开发的返工。


试想一下,如果需求工程阶段梯形的夹角α1趋近于0,即梯形的上下边长S1=S2,参见图2,就意味着需求工程师就像是个“传声筒”,将调研的客户原始需求原封不动地交给了后面的设计师,设计师由于没有直接接触用户 ,就要花费大量的时间与需求工程师沟通,需求工程师没有搞清楚的问题还要再去问客户,这就造成了时间的浪费。
4)α3的夹角越小越好
通常软件开发成本构成中③开发工程的成本占比最大,这个成本中还包括了返工、维护等。所以如果需求问题、设计问题都在①和②的部分内解决,将个性化问题尽可能地通过分析和设计转换为共性的方法解决,就可以最大限度提升开发阶段模块的复用性。
夹角α3越小,就意味着利用已有的模块可以覆盖大部分新需求。需求个性化内容少是提升开发效率、降低软件成本的最有效方法。
5)夹角α与功能复用率的关系
需求工程①对需求的收敛越大,后续的设计工程和开发过程的变化就越少,就越容易进行规范化、标准化作业,这两个阶段的成果就越容易复用。这一点对于现在广泛进行的面向对象设计、平台式架构、模块化系统设计等非常重要,也就是说对客户需求中个性与共性作如下处理:

  • 个性的内容最好在①阶段中处理,转换成具有共性的内容
  • ②中尽量都是共性的内容,个性的内容尽可能地利用共性的组合形式来实现
  • ③在软件开发中没有或很少有个性内容,这样开发效率最高(可复用的内容最多)。
如果①和②没有做好,个性的内容大量的进入到③阶段,用技术方法解决去个性问题就有可能造成大量不必要的冗余。
在不少软件企业中没有设计阶段的概念,也没有计岗,基本上就是将需求调研的结果直接传递给了开发工程师,如图3所示。


由于对需求不清楚,开发工程师通常要花费远多于需求工程师的时间去研究需求,而很多对开发工程师来说很复杂的需求在客户现场很容易就搞清楚。这样的软件开发管理方式就等于是把需求阶段的工作后移到了开发工程中,后移的结果就会使得系统变得复杂,成本大幅度提升、交付时间加长。
3.总结

在前面的三个图形中,图1表达的状态最为理想,图3的状态最差。
1)一般来说,如果需求工程师的工作优秀、到位,就会带来软件开发的整体时间短、效率高、效果好。反之,则时间长、成本高、效益差。
很多的软件项目都会尽量地压缩需求阶段的时间,尽可能地给开发留足时间,看似合理实则不然,由于需求阶段的粗放工作,造成开发返工的风险更高。这个做法使得每个阶段都不能积累可以复用的成果,是个“恶循环”。
2)在正确完成软件开发的前提条件下,三个阶段中只有开发阶段的时间可能缩短,比如:通过编码技术进步、提升功能复用性、平台模块化等方法。
需求阶段的工作是最不容易缩短的,因为需求工程师要将面对的无限多的可能性(业务领域、客户/用户的想法、多样的专业知识等),这个工作非常依赖于个人的能力和经验。
做好软件重要的第一步:选好需求工程师、组织好需求工程、获得正确的需求。

注:关于“收敛”的含义

  • 收敛,指的是收集到的原始需求与同类系统标准之间的差距,经过梳理分析之后,原始需求越接近系统标准,说明收敛越快,可复用度就越高,新设计、开发工作量越小,效率就越高。
  • α角度越大就说明在该阶段收敛的速度就越快,这个阶段的工作贡献就越大。

★★推荐★★
■ 关于需求分析、需求分析师的参考书,这里介绍「大话软件工程—需求分析与软件设计」一书(各大电商平台有售),该书主要以需求分析师为对象,从软件项目开发的实战出发,一步一步详细地地介绍了需求分析师从咨询、需求调研、需求分析、需求设计、需求文档的各个阶段所需要的理论、方法、标准、模板。该书可以作为需求分析师的实操工具书和案头字典。


■ 「大话软件工程—需求分析与软件设计」介绍
■ 「大话软件工程—需求分析与软件设计」视频课程,请点击下方的链接进入李鸿君课堂
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|新宇

GMT+8, 2025-7-5 07:52 , Processed in 0.287290 second(s), 19 queries .

Powered by Discuz! X3.4 技术支持:迪恩网络

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表