持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第30天
需求的定义
IEEE
(1)用户为了解决问题或达到某些目标所需要的条件或能力;
(2)系统或系统部件为了满足合同、标准、规范或其它正式文档所规定的要求而需要具备的条件或能力;
(3)对(1)或(2)中的一个条件或一种能力的一种文档化表述。
满足需求就是解决问题
当现实的状况与人们期望的状况产生差距时,就产生了问题。
要解决问题:就需要改变现实当中某些实体的状态或改变实体状态变化的演进顺序,使其达到期望的状态或演进顺序。
解决问题、改善现实、满足用户期望的条件与能力就是需求
问题域
问题域是需求的背景,要理解需求,先理解问题域
问题域: 解决问题必须涉及的事物和事件
例如需求:提高3%利润率——问题域:利润的构成
需求:提高工作效率——问题域:工作分工及其效率瓶颈
问题域的背景信息被称为问题域的特性。
与需求的区别是,问题域是客观存在的,这些规律不会因为引入解系统而改变。需求则是可以打折、部分满足甚至不满足的。
解系统
软件系统通过影响问题域,能够帮助人们解决问题,称为解系统
解系统是问题的解决手段,并不是问题的产生地,解系统不是问题域的一部分。解系统与问题域之间存在可以相互影响的接口,以实现交互活动。
问题域与需求
问题域需求是用户对问题域当中的实体状态或事件的期望描述
需求并不针对解系统,他的描述尽可能使用问题域的语言,尽量不涉及解系统的专业名词。
系统应该使用数据仓库技术建立客户关系管理系统CRM,以扩大5%的销售额。(X)----太多解系统专业名词
应用系统12个月后,销售额应该扩大5%。(√)----专注于问题
需求开发的最原始出发点就是用户需求,或者需求的源头---问题
解系统与需求规格说明
解系统的核心是软件解决方案和解决方案在通用计算机上的实现。
解决方案描述的是软件系统与问题域交互的过程,侧重于软件系统中与外界交互的部分。
实现部分则主要是软件内部的组成元素、结构关系、物理实现等软件系统的构造要素。
需求工程所关注的仅仅是解决方案,不涉及软件的实现细节。
需求工程师接收用户提出的问题与需求,分析问题域的背景,建立软件解决方案,并将解方案传递给后续软件开发者。软件开发者负责将解决方案变为软件实现。需求是用户与需求工程师的协作基础,解决方案是需求工程师与软件开发者的协作基础。
因为解决方案以对交互的方案定义了软件系统的功能,所以解决方案被称为软件系统的需求规格说明。需求开发最终的目的就是提供一个高质量的需求规格说明,它定义了一个能够解决用户问题、满足用户需求的软件对外交互方案,是后续软件开发活动的工作基础。
需求规格说明的典型描述方式是:“系统能够......”或者“如果用户提出......请求,那么系统应该......”
问题解决的基础---模拟与共享现象
共享现象: 解系统之所以能解决问题域中的问题,是因为问题域与解系统之间存在有效的互动,并在互动中互相影响,而问题域与解系统能够互动的基础是解系统部分模拟了问题域独立与影响:初看问题域与解系统是相互独立,互不影响;一旦认识到解系统对问题域的模拟性,它们就会变得紧密联系,互相影响。
模拟与交互性: 解系统对问题域的模拟则带有交互性,解系统会在自身中保持一份与问题域现象一致的信息,并随着问题域现象的变化而变化;在有就是问题域会期待在解系统中看到一致的信息,并据此展开自己的行为。
如果用户未能将现实的情况实时地输入到软件中,或用户在工作时,完全忽视系统提出的输出,那么,软件系统就会失去影响和改变现实的能力,就不可能解决现实问题或满足现实需求。这充分说明软件系统必须得到用户的认可,否则就会失去价值!
实际上问题域与解系统并不是相互独立的:
其中存在共享现象,解系统通过共享的问题域信息进行模拟,为我们提供解决方案
共享现象: 就是解系统所描述的问题域部分该部分在两个系统中同时存在。除了共享现象之外,问题域还有一些没有被解系统模拟的知识,因为现实世界非常复杂,不可能也没必要在解系统中完全重视。
如图书馆中的图书每页是否被损坏、是否被涂抹等信息不需要在软件系统中建模。
解系统会从特定的角度对问题域知识进行抽象和简化,并模拟简化后的知识。
解系统还包含并非来自现实模拟的特征,也不对应任何问题域的知识,却是解系统必不可少的部分。如:系统采用什么数据库系统、采用什么模型设计、采用什么方式建立索引等……
问题解决的方法---直接与间接
共享现象:是解系统的一部分,所以解系统可以对其施加操作,适当改变这些知识。知识的改变会通过交互性传递给问题域,问题域在会接受改变的基础上继续规律性的运作,使问题得到解决。
例如:某银行的某一用户在某个站点上,当他存入或取出一定数的款,他的个人账户记录就随机改变,其他站点也就接受这一现实。
又如:某一超市,根据某个商品的出入库信息的预测,对某商品做出进该商品,还是退给厂家,以保证某商品的正常运转。
直接的方法: 模拟并操纵共享现象是软件系统满足需求最直接的方法。
间接的方法: 软件系统操纵共享现象影响问题域的一部分,然后利用问题域内在的规律性自动影响另一部分。
在使用间接的特性时,要防止未预见的连锁反应。间接特性不会与解系统直接交互,不会受到解系统的直接影响,但是却可能因为连锁反应而受到影响。
问题解决方案---需求规格说明
因为解系统解决问题的方法是改变共享知识,影响问题域的运行,进而满足用户的需求。所以需求规格说明包括两部分:
(1)对共享现象(模型)的描述。(数据)
(2)系统对共享现象所施加的操作的描述。(功能)