软件需求的含义

软件需求

对大多数人来说,若要建一幢数百万元的房子,他一定会与建房者详细讨论各种细节,他们都明白完工以后的修改会造成损失,以及变更细节的危害性。然而,涉及到软件开发,人们却变得“大大咧咧”起来。软件项目中百分之四十至百分之六十的问题都是在需求分析阶段埋下的“祸根”(Leffingwell 1997)。可许多组织仍在那些基本的项目功能上采用一些不合规范的方法,这样导致的后果便是一条鸿沟(期望差异)—开发者开发的与用户所想得到的软件存在着巨大期望差异。

在软件工程中,所有的风险承担者(stakeholder)(这个词很有意思,原义是赌金保管者。我看过很多的翻译,有翻译成涉众的,也有的翻译成参与者的,但是我想他的主要意思就是和这个项目有密切相关利益的人)都感兴趣的就是需求分析阶段。这些风险承担者包括客户、用户、业务或需求分析员(负责收集客户需求并编写文档,以及负责客户与开发机构之间联系沟通的人)、开发人员、测试人员、用户文档编写者、项目管理者和客户管理者。这部分工作若处理好了,能开发出很出色的产品,同时会使客户感到满意,开发者也倍感满足、充实。若处理不好,则会导致误解、挫折、障碍以及潜在质量和业务价值上的威胁。因为需求分析奠定了软件工程和项目管理的基础,所以所有风险承担者最好是采用有效的需求分析过程。

软件需求的定义

IEEE软件工程标准词汇表(1997年)中定义需求为:

(1)用户解决问题或达到目标所需的条件或权能(Capability)。

(2)系统或系统部件要满足合同、标准、规范或其它正式规定文档所需具有的条件或权能。

(3)一种反映上面(1)或(2)所描述的条件或权能的文档说明。

需求的层次

下面这些定义是需求工程领域中常见术语的定义说明。

软件需求包括三个不同的层次—业务需求、用户需求和功能需求—也包括非功能需求。业务需求( business requirement)反映了组织机构或客户对系统、产品高层次的目标要求,它们在项目视图与范围文档中予以说明。用户需求(user requirement) 文档描述了用户使用产品必须要完成的任务,这在使用实例(use case)文档或方案脚本(scenario)说明中予以说明。功能需求(functional requirement)定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足了业务需求。所谓特性(feature)是指逻辑上相关的功能需求的集合,给用户提供处理能力并满足业务需求。软件需求各组成部分之间的关系如图所示。

作为补充,软件需求规格说明还应包括非功能需求,它描述了系统展现给用户的行为和执行的操作等。它包

括产品必须遵从的标准、规范和合约;外部界面的具体细节;性能要求;设计或实现的约束条件及质量属性。所谓约束是指对开发人员在软件产品设计和构造上的限制。质量属性是通过多种角度对产品的特点进行描述,从而反映产品功能。多角度描述产品对用户和开发人员都极为重要。

值得注意的一点是,需求并未包括设计细节、实现细节、项目计划信息或测试信息。需求与这些没有关系,它关注的是充分说明你究竟想开发什么。

Frederick Brooks在他1987年的经典的文章“No Silver Bullet:Essence and Accidents ofSoftware Engineering ”中充分说明了需求过程在软件项目中扮演的重要角色:

开发软件系统最为困难的部分就是准确说明开发什么。最为困难的概念性工作便是编写出详细技术需求,这包括所有面向用户、面向机器和其它软件系统的接口。同时这也是一旦做错,将最终会给系统带来极大损害的部分,并且以后再对它进行修改也极为困难。

为什么这么说呢,因为在大多数的软件系统中,最终用户可能都不清楚他的需求是什么,这是千真万确的。如果你的用户告诉你需求就是这些了,不要相信他,继续刨根问底,直到你们都筋疲力尽了。

软件需求

对大多数人来说,若要建一幢数百万元的房子,他一定会与建房者详细讨论各种细节,他们都明白完工以后的修改会造成损失,以及变更细节的危害性。然而,涉及到软件开发,人们却变得“大大咧咧”起来。软件项目中百分之四十至百分之六十的问题都是在需求分析阶段埋下的“祸根”(Leffingwell 1997)。可许多组织仍在那些基本的项目功能上采用一些不合规范的方法,这样导致的后果便是一条鸿沟(期望差异)—开发者开发的与用户所想得到的软件存在着巨大期望差异。

在软件工程中,所有的风险承担者(stakeholder)(这个词很有意思,原义是赌金保管者。我看过很多的翻译,有翻译成涉众的,也有的翻译成参与者的,但是我想他的主要意思就是和这个项目有密切相关利益的人)都感兴趣的就是需求分析阶段。这些风险承担者包括客户、用户、业务或需求分析员(负责收集客户需求并编写文档,以及负责客户与开发机构之间联系沟通的人)、开发人员、测试人员、用户文档编写者、项目管理者和客户管理者。这部分工作若处理好了,能开发出很出色的产品,同时会使客户感到满意,开发者也倍感满足、充实。若处理不好,则会导致误解、挫折、障碍以及潜在质量和业务价值上的威胁。因为需求分析奠定了软件工程和项目管理的基础,所以所有风险承担者最好是采用有效的需求分析过程。

软件需求的定义

IEEE软件工程标准词汇表(1997年)中定义需求为:

(1)用户解决问题或达到目标所需的条件或权能(Capability)。

(2)系统或系统部件要满足合同、标准、规范或其它正式规定文档所需具有的条件或权能。

(3)一种反映上面(1)或(2)所描述的条件或权能的文档说明。

需求的层次

下面这些定义是需求工程领域中常见术语的定义说明。

软件需求包括三个不同的层次—业务需求、用户需求和功能需求—也包括非功能需求。业务需求( business requirement)反映了组织机构或客户对系统、产品高层次的目标要求,它们在项目视图与范围文档中予以说明。用户需求(user requirement) 文档描述了用户使用产品必须要完成的任务,这在使用实例(use case)文档或方案脚本(scenario)说明中予以说明。功能需求(functional requirement)定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足了业务需求。所谓特性(feature)是指逻辑上相关的功能需求的集合,给用户提供处理能力并满足业务需求。软件需求各组成部分之间的关系如图所示。

作为补充,软件需求规格说明还应包括非功能需求,它描述了系统展现给用户的行为和执行的操作等。它包

括产品必须遵从的标准、规范和合约;外部界面的具体细节;性能要求;设计或实现的约束条件及质量属性。所谓约束是指对开发人员在软件产品设计和构造上的限制。质量属性是通过多种角度对产品的特点进行描述,从而反映产品功能。多角度描述产品对用户和开发人员都极为重要。

值得注意的一点是,需求并未包括设计细节、实现细节、项目计划信息或测试信息。需求与这些没有关系,它关注的是充分说明你究竟想开发什么。

Frederick Brooks在他1987年的经典的文章“No Silver Bullet:Essence and Accidents ofSoftware Engineering ”中充分说明了需求过程在软件项目中扮演的重要角色:

开发软件系统最为困难的部分就是准确说明开发什么。最为困难的概念性工作便是编写出详细技术需求,这包括所有面向用户、面向机器和其它软件系统的接口。同时这也是一旦做错,将最终会给系统带来极大损害的部分,并且以后再对它进行修改也极为困难。

为什么这么说呢,因为在大多数的软件系统中,最终用户可能都不清楚他的需求是什么,这是千真万确的。如果你的用户告诉你需求就是这些了,不要相信他,继续刨根问底,直到你们都筋疲力尽了。


相关内容

  • 软件概要设计报告模板
  • 概要设计报告 1. 引言 1.1 编写目的 ............................................................... 3 1.2 项目风险 ..................................................... ...

  • 系统开发规范与文档编写试题(附答案)
  • 系统开发规范与文档编写期末综合练习 一.单项选择题 1.按照软件的工作方式进行分类,能够对实时发生的事件和数据及时进行处理的软件应分类为( ). A.并行处理软件 B.分时软件 C.交互式软件 D.实时处理软件 2.非常适合于在软件开发初期很难确定用户需求的情况所采用的软件开发过程模型是( ). A ...

  • 大连交通大学(软件工程)复习大纲(最新修改)
  • <软件工程>复习大纲 第1章:软件工程的范畴 重点掌握如下的内容: 1掌握软件工程.软件危机.生命周期的概念 1% 2掌握维护的3种分类并能够结合具体例子进行判断 1% 3掌握为什么没有计划.文档和测试阶段 1% 了解如下内容: 1了解软件工程的传统生命周期模型(瀑布模型)的阶段划分和各 ...

  • 基础管理的心得体会范文
  • 一.项目要进行整体管理,善始善终 整个项目开始要做好项目整体计划,在项目的整个过程中,始终要按照项目计划执行,如若遇到项目发生变更,要进行影响分析,得到批准后制定变更计划,并按变更计划执行.变更的影响情况,如:费用,时间进度等要通知相关的项目利益干系人,说明变更的原因和产生的影响. 北京安通学校法律 ...

  • 华为软件测试笔试题
  • 华为软件测试笔试题 试题一 一.判断题 1.软件测试的目的是尽可能多的找出软件的缺陷.(Y) 2.Beta 测试是验收测试的一种.(Y) 3.验收测试是由最终用户来实施的.(N) 4.项目立项前测试人员不需要提交任何工件.(Y) 5.单元测试能发现约80%的软件缺陷.(Y) 6.代码评审是检查源代码 ...

  • 什么是需求
  • 一.什么是需求 软件需求 对大多数人来说,若要建一幢数百万元的房子,他一定会与建房者详细讨论各种细节,他们都明白完工以后的修改会造成损失,以及变更细节的危害性.然而,涉及到软件开发,人们却变得"大大咧咧"起来.软件项目中百分之四十至百分之六十的问题都是在需求分析阶段埋下的&quo ...

  • 软件工程学习
  • 绪论 0.1软件工程的背景 从定义上说,软件工程是一门工程学,因此它和其它工程学科有一系列相同的职责.一个相同的特征是都必须有一个彻底说明要做什么东西的过程,及需求分析:但另外,软件项目受制于非常频繁的变更 0.2 软件工程的活动  定义要使用的软件开发过程  管理项目的开发活动  表述想要的 ...

  • 信息化理论与实践
  • 1.信息是经过采集.记录.处理并以可检索的形式存储的数据. 2.信息的本质属性:可识别性.可出理性.可检索性.可存储性. 3.信息.只是.数据的关系:信息不同于数据,(信息是经过加工以后.并对客观世界产生影响的数据.)信息也不同于知识(知识是以某种方式把一个或多个信息关联在一起的信息的信息结构,是个 ...

  • 软件测试工程师笔试试题(大集合)
  • 软件测试工程师笔试试题 软件测试工程师笔试试题 01. 为什么要在一个团队中开展软件测试工作? 02. 您是否了解以往所工作的企业的软件测试过程?如果了解,请试述在这个过程中都有哪些工作要做?分别由哪些不同的角色来完成这些工作? 03. 您是否了解以往所工作的企业的软件开发过程?如果了解,请试述一个 ...