需求工程
金芝
中国科学院数学与系统科学研究院
zhijin@amss.ac.cn
本讲内容
? 课程目的和背景
? 教学和考试方式
? 教学大纲和主要内容
课程的目的
? 了解需求工程中的研究和
实践的现状
? 需求工程在软件和软件工
程中的地位和角色
? 需求工程中当前常用的技
术、方法和工具
? 选择一种或多种需求工程
技术,获得对这些技术的
实践经验
? 理解需求工程的基本本质
? 获得对在需求工程领域进
行进一步研究的背景知识
? 对需求工程研究的方法学
的观点
? 该领域当前的研究的观点
和方向
? 对相关文献的了解
教学和考试方式
? 每星期 1?3小时的课( 13个星期),其中:
? 1~2次文献阅读和课程设计
? 1次课程设计报告
? 考试和评分
? 30%课堂学习、讨论、课程设计报告等
? 70%课程设计报告
为什么需要需求工程?
? 工程:有用的人工制品的构建,强调最终产品的实用性
和目的性(而不是创造性,对比与艺术)
? 需求:构造任何人工制品之前,首先要弄清楚的是 ——
意图(为什么需要它)
? 其它大部分工程学科都不需要需求工程
? 软件工程的特殊性:如何配置通用的机器去实现特定的
目的(产品是无形的,但是是有目的的)
软件工程的特殊性带来对软件的意图的理解上的困难:
软件问题往往包含了最复杂的难题
现实世界也没有对之进行任何物理上的约束
需求工程有多重要?
? 需求工程是软件工程的根基,项目规模的大小决定错误的代价
? 失败项目的例子:
? Performing Rights Society( 演出权益协会),PROMS项目,花费 1100万英镑之后被放弃
( 1992年)。其中糟糕的需求工程是项目失败的一个主要因素,包括未能以常人能够理解
和检查的形式表达软件需求。
? Wessex Regional Information Systems Plan( 地区信息系统),RISP项目,花费了 4300
万英镑之后被放弃( 1990年)。其主要原因包括缺乏对 RISP项目范围的清晰定义。
? London Stock Exchange( 伦敦股票交易),TAURUS项目,花费了 7500万英镑后被取消
( 1993年)。许多问题起源于未能协调那些不一致的需求。
? London Ambulance Service Despatch System( 伦敦救护车服务派遣系统),在运行两天
后被关闭( 1992年),源于社会服务领糟糕的需求分析。
? Swanick Air Traffic Control( 空中交通控制),计划在 1998年完成,但 2001年还未完成
(额外开支 1.8亿英镑)。主要原因包括:缺乏健壮的需求规格说明而继续进行系统实现。
Standish Group的调查结果
? 调查范围,1995年开始,全国范围内的 8000个
软件项目
? 调查结果
? 三分之一的项目没能完成,而
? 在完成的三分之二的项目中,又有二分之一的项目没
有成功实施(几乎四分之三的项目有问题)。与需求
过程相关的原因占了 45%,其中:
? 缺乏最终用户的参与,13%
? 不完整的需求,12%。
1996 欧洲的调查结果
?IT,产品和服务部分的软件开发者一致将
需求规格说明 和 管理客户的需求 排序为他
们所面对的最重要的问题 。
? 需求被认为比编写文档、测试、质量保证、
标准、设计、配置管理和程序设计要明显
更容易出问题 的地方。
其它一些调查结果
? Boehm (1981)
? 以后修正需求错误比在需求阶段修正它要多化 200倍
的代价。
? Brooks (1987)
? 构建软件最困难的阶段是精确地决定要构建什么
? ESI (1996) – 对 17个国家 3800公司的调查
? 大多数 (>50%) 被发现的问题在需求规格说明和管理

评述
项目需求无疑是在软件项目前期造成
麻烦的一个最大问题,一个又一个的
研究已经发现,当项目失败时,需求
问题通常正是其核心问题。
(,Software Runaways》,Glass,1998)
需求工程是“最关键性的和最易出问题的领域” 。
( Hooper and and Hsia,1982)
需求工程为什么难?
? 浅层理解:软件工程是要做出一个系统,
其中,需求工程关注系统将要做什么,后
续阶段关注系统将怎样来实现。
? 深一层的理解:软件工程的产品是用来解
决问题的。其中,后续阶段是关于如何解
决问题,而需求工程的目的是定义所需解
决的问题。
需求工程困难的根源
? 需求工程
? 定义不足的问题 ?定义良好的问题
? 目的是:找出解决方案
? 需求工程阶段的结果是创造出来的
? 几乎是一个从无到有的过程
需求工程困难的表现
? 领域知识
? 需求分析过程需要融入问题领域的知识
? 信息沟通与知识传递
? 知识和信息需要从客户或其他人那里获得,
传递存在的知识并不想想象得那么容易
? 输入是朴素和粗糙的,而输出要完全精确
? 需要大量细化和求精的工作
教学大纲
? 引言性材料
? 需求工程是什么
? 为什么需求工程很重

? 基础
? 关于需求工程的学科
交叉的观点
? 基本的需求工程活动
? 抽取需求
? 建模和分析需求
? 传递需求
? 对需求达成共识
? 进化需求
? 集成式需求工程
? 需求工程过程
? 需求工程工具
引言性材料
? 按工程学生命周期的
需求工程
? 需求工程的维
? 基本的需求工程过程
? 什么是一个需求?
? 需求的重要性
? 规格说明的作用
? 应用领域
? 信息系统 OR 嵌入式
系统
? 过程、方法和技术
? 需求工程的根基
? 可行性、风险、操作
的概念
? 以人为中心的开发
需求工程的学科交叉性
? 系统理论和系统工程
? 什么是系统
? 系统的控制和进化
? 工程的生命周期
? 数学和逻辑
? 一界谓词逻辑
? 模态、时态、和超协调逻辑
? 代数和关系模型
? 计算机科学
? 自动机理论
? 抽象、分解、和面向对象
? 软件体系结构和设计模式
? 社会科学
? 人类学和民族方法学
? 组织行为学
? 社会心理学
? 政治学
? 认知科学
? 认知心理学
? 语言学
? 知识表示
? 哲学
? 观察实验法和科学的哲学
? 现象学、认识论和本体
抽取需求
? 要抽取的东西
? 系统的边界
? 投资人和用户
? 视点
? 目标和任务
? 情景 /用例
? 抽取技术
? 交谈、问卷、考察、会议
? 原型法
? 知识抽取技术
? 谈话分析
? 文本分析
? 抽取过程
? 询问循环
? 用例分析
为需求建模并进行分析
? 企业建模和分析
? 业务规则和组织结构
? 目标、任务和职责
? 软系统分析
? 数据建模
? 实体关系模型
? 行为建模和分析
? 结构化分析
? 面向对象分析
? 形式化方法
? 领域建模和分析
? 领域工程和重用
? 特定领域模型
? 为非功能需求建模
? 非功能需求的分类
? 性能建模和分析
? 可用性建模和分析
? 安全性、保密性、和可靠性建
模和分析
? 分析需求模型
? 有效性和合法性
? 一致性检查
? 模型模拟
? 自动推理
? 工具
? CASE和元 CASE
? 形式化分析工具
传递需求
? 规格说明
? 为需求建立文档
? 规格说明语言
? 使需求成为可度量的
? 契约的观点
? 文档标准
? 标准在需求工程中的作用
? 标准的例子,IEEE,DoD、
ESA,ISO
? 可跟踪性
? 向前 /向后需求可跟踪性
? 可跟踪性的矩阵
? 多媒体和电子文档的作用
? 建立需求文档的工具
? DOORS,RTM,Requisite
Pro,等等
达成一致的需求
? 验证客户需求是否生效
? 需求审查
? 形式化审查和走查
? 原型法
? 协商和冲突
? 计算机支持的协商
? Win-Win
? 本体的方法
? 为需求赋优先级
? 增量式开发过程
? 质量函数部署
? 包选择
? 商用成品软件( COTS) 的
作用
? 特征匹配
? 上下文的问题
? 矛盾的问题
? 政策和组织的问题
? 获得和基金支持的问题
? 协商和确证工具
进化需求
? 管理变化
? 影响分析
? 基准线和变化请求
? 配置管理和版本控制
? 需求和软件维护
? 管理不一致性
? 关于不一致性和变化的不
可避免性
? 从不一致性中学习
? 特征交互
? 与不一致性共存
? 产品家族
? 需求的重用
? COTS的作用
? 软件体系结构的作用
? 需求管理工具
集成式需求工程过程
? 方法工程
? 需要多种方法
? 方法设计和元模型
? 方法选择
? 方法集成
? 方法客户化
? 问题框架
? 分析模式
? 应用领域
? 面向视点的需求工程
? 多个视角
? 需求过程的
? 需求过程
? 选择过程模型
? 过程的类型
? 过程改进
? 工具支持
? 元 CASE
? 元建模工具
? 工具集成
教科书
? 教科书
? 本课程主要面向研

? 我们更多采用近期
的文章,而不是现
成的教科书
? 大多数的文章都有
电子版
? 供参考的教科书(限于软件
工程领域)
1,软件工程:实践者的研究方
法,Roger S.Pressman,
McGraw-Hill
2,需求工程,Ian
Sommerville,John Wiley
& Sons
3,软件需求,Karl E.Wiegers,
Microsoft Press
4,需求分析与系统设计,
Leszek A.Maciaszek,
Addison-Wesley
5,??
用于研究的文献来源
? IEEE International Symposium on Requirements
engineering (自 1993年起,每两年一次 )
? IEEE International Conference on Requirements
engineering (自 1994年起,每两年一次 )
? 杂志
? Requirements Engineering Journal
? IEEE Transactions on Software Engineering
? ACM Transactions on Software Engineering and
Methodology
? ??