软件的需求是从哪里来的?可能你会毫不犹豫的回答:从客户那里调研来的。这只回答对了一部分。简单的、小规模的、技术含量不高的软件功能基本上是依据客户提出的需求完成的,而复杂的、大规模的、技术含量高的的软件功能除去客户提的需求外,还需要由软件工程师根据新的理论、技术、硬件、未来发展的展望等提出来补充需求。作为一名合格的需求工程师,不但要能够通过调研获取客户提出的原始需求,而且还能根据新知识、新技术为客户的软件提供自己设计的需求。

1.什么是原始需求、分类

所谓的“原始需求”,就是指从客户那里获得的尚未进行分析加工的需求,这些需求大都是从客户视角(业务)、以客户用语(非IT)表达的。可以将调研的原始需求归集为三个层面:目标需求、业务需求、功能需求。

1)决策人提出的目标需求
在与企业的经营者、主管信息化的领导、信息中心的负责人等交流时,由于他们是企业导入信息系统的决策人,所以他们提出需求中有相当部分是对未来系统建造的“目标需求”。比如他们对新系统提出的目标需求可能是这样描述的,新系统要做到:
【例1】以市场产品销售为驱动、以制造成本控制为中心、以加工进度计划为抓手、以质量风险控制为保障,以…等等
【例2】构建的交易平台,信息来源清楚、判断公正透明、不允许黑箱操作…等
可以看出此类需求的内容大都是与企业制定的经营管理、发展战略、里程碑计划、IT规划等大目标相关联的。是将“信息系统的建造”放在“企业发展规划”的大框架中考量的。所以需求的粒度非常粗、概括,它属于客户用语描述的 “方向性原始需求”。

2)管理者提出的业务需求
在与企业中的各个业务部门管理者进行调研时,由于他们大都不是信息化的专家,也没有多少使用信息系统的经验,因此他们提出的需求大都是以自己熟知的业务为基础的,他们提出的需求形式可能是这样的:
【例3】 对物流的过程进行全程监控、并做到从下订单到客户接受签字为止的全程数字化追踪、查询,并实时向客户发出通知。
【例4】为降低产品成本,材料要进行集中采购,每次采购数量大于1000公斤时必须由公司统一采购,少于1000公斤时可以自行选择供应商,但价格不能高于全年的平均单价…等。
可以看出这类需求已经给出了用户的明确业务需求,非常具体,要解决什么问题、要做什么事、遵循什么标准等,只是这个需求粒度还不足以确定在系统中需要什么具体的软件功能。
它属于客户用语描述的 “业务性原始需求”。

3)使用者提出的功能需求
最后一种就是直接给出系统中要实现的 “软件功能需求”,这个需求及比较容易理解了,它具体地描述了有哪些功能、每个功能要解决什么问题,功能的原型、属性、要符合的条件和标准等。比如
【例5】要开发一个材料采购系统,需要的功能有:材料编码库、客商库、采购合同编制、合同变更、到货验收、出入库记录、材料领取…等。
【例6】要开发一个服务供应商管理系统,需要的功能有:基本信息登记、历史业绩、新用户审批、未完成合同一览、质量事故履历…等。

2. 三个分类的转换关系

最终所有的需求都要以功能需求的形式传递给后面的设计工程,功能需求记录了系统要实现的要求。因此需要将目标需求和业务需求转换为功能需求,


图1 需求转换关系

1)目标需求
目标需求由于比较抽象,所以第一步需要将其转换为用“业务需求”的形式来描述,因为业务需求接近于客户的业务,容易解读。参见图1(转换1)。

2)业务需求
业务需求是用客户的业务用语描述的,第二步要将业务需求转换为功能需求。通过用流程图进行具体的解读,就可以看出来用什么功能来实现这个业务需求。流程图上的节点,就是未来系统中的功能。参见图1(转换2)。

3)功能需求
从业务需求中识别出功能需求后,又可以再分为两类:业务功能需求、系统功能需求。它们是续设计工程的输入,设计工程中就是依据它们进行具体的功能设计。

从上述的三种原始需求的形式可以看出来,前面的1、2两类需求并不能直接判断系统要开发什么样的具体功能,也就是说,目标需求和业务需求必须要落地,要能够找出对应的“功能需求”才能在系统中实现。从原始需求的分类中可以看出,越是具体功能不清楚的目标需求、业务需求,需求工程师、软件架构师等可发挥作用的地方就越多。

3. 总结,需求并非都是来自于客户

到了这里我们就明白了:构建信息系统的需求并非都是从客户那里直接获得的,完成系统中的很多需求是由开发过程中不同岗位的软件工程师(包括:咨询师、需求工程师、架构师、开程序员、实施工程师等)提案的。为了更好地理解需求的来源,再按照功能实现难度将获得的需求分为基本需求、中级需求和高级需求,参考图2。


图2 需求的来源

1 ) 基本的需求a
它们来自于“对客户调研而获得的需求”,这些是客户的基本需求,它们以“功能需求”为主、“业务需求为辅”。它们都比较直观,直接给出的就是要实现的功能,如【例5、例6】基本上按客户意愿进行设计和开发,内容大部分在需求调研、需求分析阶段内确定。
通常需求调研工作成果的绝大部分是这些基本的需求。以满足这样的需求为主开发的系统,主要影响系统操作层的用户满意度。

2) 中级的需求b
它们来自于“通过完善、落地业务需求而获得的需求”,它们属于中级需求,这类需求以“业务需求”为主,是通过对业务需求进行具体化、优化、补缺、提升的过程中产生的需求,如前面提到的【例3、例4】的需求,经过分析设计后,给出实现业务需求的功能。
中级需求是由软件工程师和客户共同对业务需求进行分析、理解、设计而确定的,它的正确与否极大地影响着企业中间管理层以上领导者对系统的满意度。

3) 高级的需求C
它们主要来自于软件工程师“根据客户的目标需求和业务需求,结合新的设计理念、新的管理理念、新的IT技术等提出来的需求”,可以是说它们是软件工程师“设计出来的需求”,属于“设计需求”,比如:事找人的流程方案(智能化处理业务)、企业数据资产的应用、企业自主信息化方案、新型客户端用硬件等。
这类需求需要软件工程师要有足够的专业知识和综合架构能力,否则就难以发掘出来,如前面提到的【例1、例2】,这类需求也为完成的系统带来了明显的高附加价值,特别对提升企业经营者满意度有着举足轻重的作用。

这里要顺便提一句:别不拿领导的需求当需求。因为很多经验不足的需求工程师,他们在调研时往往只关注操作层用户的需求(因为操作层用户的需求容易与软件功能相关联),而忽略或丢掉了领导提出的需求,原因是领导提出的需求表达形式比较抽象、不易落地、或不知道如何应对,而这些需求能否被反映到系统中恰恰是决定系统设计水平高低的重要依据。

■上述三类需求获取的难度顺序为:设计需求c>完善需求b>调研需求a。

关于对“设计需求”的理解再举一个例子,我们每个人都有智能手机,它的功能有多少是由手机用户提出来的呢?可能很少,新功能大都是由开发商提倡、引领、推广的,因为他们具有更高的视角、前瞻性,可以从数字化、信息化、智能化、AI、物联网等多维度思考、综合考量,而我们一般的个人用户是不可能提出这样的需求的,这就是典型的“设计需求”来源。

软件工程师要认识到,需求工程(调研与分析)完成了,并非是需求获取的工作全部完成,只是由客户直接提出来的原始需求完成了,而通过分析、设计发掘高端需求的工作刚刚开始。

■本博文系列的下一篇:需求、需求工程与需求分析师 — 3. 需求工程的构成

关于需求工程的详细说明,请参考《大话软件工程—需求分析与软件设计》一书。

需求、需求工程与需求工程师 — 2.需求的来源相关推荐

  1. 软件需求工程 高校教学平台 软件需求规格说明书 part 1 (重点!!!)

    点击查看 软件需求工程 高校教学平台 卷首语 文章目录 引言 编写目的 项目背景 预期的读者和阅读建议 预期读者 阅读建议 参考资料 总体描述 产品基本信息 产品前景 用户类及其特征 产品功能概述 用 ...

  2. 对南摩工程师有需求的大老板们 老板姓名

    对南摩工程师有需求的大老板们 老板姓名 对南摩工程师有需求的大老板们 老板姓名(微博昵称) 单位 招人需求 邮件 点评 茹立云 sogou C/C++工程师 私信 茹总是搜狗总经理 陈宇微博 联想 C ...

  3. 需求获取的三阶段:需求背景、需求调研、需求分析(1)

    软件需求的获取是软件开发过程的第一步,需求质量是决定软件成功与否的重要前提,如果获取的需求有了偏差或是遗漏,其结果可能导致后续的分析.设计与开发都出现问题:反之,如果获得了全面.严谨.逻辑表达清晰的需 ...

  4. 需求获取的三阶段:需求背景、需求调研、需求分析 (3)

    收集到了客户的需求后,下一步就到了对需求进行分析的阶段,在这个阶段就要理解需求.分析需求.最后确定系统需要实现的功能需求.这一阶段非常重要,因为前期收集到的需求表达形式各种各样,不一定都是用" ...

  5. 需求与业务的区别、需求设计与业务设计的区别

    "业务和需求",这两个词软件工程师们每天都会用到几次,但却不一定很清楚两者的区别:"业务"指的是软件客户现在从事的工作,"需求"指的是客户对 ...

  6. [需求管理-2]:什么是需求以及需求的收集与识别

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:[需求管理-2]:什么是需求以及需求的收集与识别_文火冰糖的硅基工坊的博客-CSDN博客 目录 第 ...

  7. [架构之路-95]:《软件架构设计:程序员向架构师转型必备》-5-需求分析之需求列表(功能需求、质量需求、约束条件)

    前言: 在愿景分析+商业分析之后,就是用户需求开发,然后就是需求分析. 在业务需求分析领域,主要完成三个输出: 需求列表:功能需求.质量需求.约束条件 => 第5章 用例图 => 第6章 ...

  8. 软件项目需求调研报告模板下载_需求调研规范

    本文明确项目调研阶段的工作划分及流程,作为产品经理或者项目经理及参与项目调研的项目组成员,在调研阶段的工作指导以及相关约束条件,如何高效的进行调研.通过本文所明确的管理规则,促进医疗事业部需求调研的管 ...

  9. 宏观经济需求与供给分析之:需求的收入效应、替代效应和需求定律

    需求 需求的概念: 意思是指人们在某一特定的时期内在各种可能的价格下愿意并且能够购买某个具体商品的需要. 收入效应 收入效应是指在货币收入不变的情况下,某种商品价格变化对其需求量的影响.如果某种商品价 ...

最新文章

  1. 浅析枚举类型(Enumerated types)
  2. php实现 求int型数据在内存中存储时1的个数(函数都可自己实现)
  3. 计算机科学讨论,第七章计算机科学讨论报告
  4. java事件的接收_spring发布和接收定制的事件(spring事件传播)
  5. 纯电动SUV哪吒U Pro即将上线:最高续航610公里
  6. [翻译] GiFHUD
  7. Leetcode每日一题:176.second-highest-salary(第二高的薪水)
  8. python利器-python利器去广告版
  9. 模型描述的关系模式_图解各种管理模型大全--管理模型大全
  10. 通达OA 2011-2013 通杀GETSHELL
  11. 缺失.NET Framework组件的解决方法
  12. python正弦波叠加方波_电赛初探(一)——正弦波、方波、锯齿波转换
  13. 【中科院】分子生物学-朱玉贤第四版-笔记-第14-16讲 真核生物基因表达调控
  14. 在附近小程序中展示你的小程序-微信小程序开发-视频教程21
  15. OpenAI gym Atari游戏的环境设置
  16. php去除英文和标点,php实现过滤中文标点符号及过滤英文标点符号的示例代码
  17. ttkefu怎么取消英文版?显示中文版
  18. android开发中为MultiAutoCompleteTextView控件添加其他分隔符
  19. 【哈夫曼树】创建哈夫曼树
  20. golang无穷大的判断

热门文章

  1. C++函数模板5分钟入门
  2. opencv Hog Demo
  3. Qt 二级菜单无法输入中文
  4. LNK2019无法解析的外部符号 public: static struct cv::Ptr class cv::xfeatures2d::SURF问题解决
  5. 深入浅出的排序算法-冒泡排序
  6. 用NGINX做负载均衡,keepalived高可用
  7. angluar.js 学习
  8. 用Backbone.js创建一个联系人管理系统(四)
  9. 关于hkcmd.exe造成的和Eclipse之间热键冲突
  10. android surfaceview 清屏