当前课程知识点:软件理论与工程 >  第2章 需求分析 >  2.1 需求工程过程 >  2.1 需求工程过程

返回《软件理论与工程》慕课在线视频课程列表

2.1 需求工程过程在线视频

下一节:2.2 需求获取

返回《软件理论与工程》慕课在线视频列表

2.1 需求工程过程课程教案、知识点、字幕

大家好

我们今天继续开始

软件理论与工程的第二章

我是这章的主讲老师高广宇

下面我们开始

这一章的第一节

需求工程过程

我们知道在整个软件工程中

需求作为一个非常重要的环节

它对于整个软件开发

都起着至关重要的作用

所以说呢

在需求阶段

我们需要把相应的一些内容

包括需求的一些分析获取

要尽可能的做到最好

才能保证后期

软件开发过程中的顺利

所以说呢

我们这一章重点讲述一下

如何按照系统工程的思想

来进行这个软件的需求 分析

所以呢 我们这一节呢

我们将从这个

软件需求和需求工程过程

两个方面来进行介绍

首先的话呢

我们讲一下这个

什么是软件需求

用户为了解决问题

或达到某些目标

所需要的条件和能力

那在这一点里面呢

它的重点在条件或能力

也就是说我们这么一个软件

或者我们整个这个需求

它最后要实现

这么一个能力 对吧

第二个呢 是系统或者系统部件

为了满足合同标准规范

或其它正式文档所规定的要求

而需要具备的条件和能力

那这个呢

我们再关注一下前面的系统

或者系统部件这个词

那我们知道呢

这个是对前面的

这一句话的一个细化过程

是落到系统

或者功能的这个层面上

去理解什么是这个需求

我们因为从这个用户 对吧

从功能到系统多个层面去理解它

所以说呢

软件的需求就是包括

第一 第二 以及呢

我们对第一点

或者第二点中提到的一个条件

或者一种

能力的一种

文档化的表达

因为我们都知道

对于整个需求的工程过程

或者包括像软件工程来说

文档是它非常重要的一种产出

那也就是文档化的表述 对吧

那关于这个需求

在我们整个需求分析

这一章里面

我们可以更细化的去理解一下

我们从这个层次化的结构

来理解一下

首先呢 需求是对系统

应该提供的服务

和所受约束的一个描述

其次呢 我们根据呢

需求所面向的不同类型的涉众

也就是说呢

整个软件开发过程

或者需求开发过程中

所涉及到的各种不同的人物 对吧

各种不同的涉众

我们将整个需求呢

分成业务需求

用户需求

和系统需求三个层次

业务需求呢

通常是面向一些系统

开发的这个高层人员

或者说呢

我们这个用户中的一些

这个高层人员

它们所关注的一些

比较抽象的一些

比较全局的一些

这个要求或者能力来定义的

所以呢 它是在系统

需求描述的基础上

再加入的更加详细呢

设计层面的一些需求细节

第二个呢 是用户需求

这个呢 通常是面向我们

一些项目组的一些成员

一些实际使用的用户

项目经理 等等

所以呢 它是要用用户所熟悉的

表达形式

去给出需求的描述

第三个呢 是系统需求

其实这个呢

更多的是面向我们的

底层的一些开发人员 设计人员

所以呢 它要详细的给出

系统将提供的服务

以及系统所受到的一些约束

它通常的比用户需求

会更具体 更形式化

所以说呢

我们根据前面

对于整个需求

这个层次化的划分

我们去看一下整个需求开发

它不同的层次之间的一个关系是什么

通常来说呢

我们首先呢

先定义或者获取我们的业务需求

通过对业务需求的一个细化呢

它来指导呢

我们的用户需求

或者指导我们的需求获取

形成用户需求

我们再根据用户需求呢

来这个指导或者驱动

我们的开发人员

或者说设计人员

来获取或者凝练我们的系统需求

最后呢 根据系统需求

我们去指导在整个软件工程中的

软件设计

软件实现

以及呢 后续的各个环节

这是我们从软件需求的定义来看

它的三个需求之间这个关系

那接下来我们举个简单的例子

那什么是用户需求呢

比如这里面有一个例子

第一个例子比如说

软件必须能够访问外部文件

这些外部文件呢

是由其它工具创建的

这一句话呢

就描述了一个用户需求

大家回顾一下前面

咱们讲的用户需求

它在整个层次里面

属于第二个层次

是业务需求之下的

首先呢 它是站在了

我们所谓的用户的角度上

来描述我们这个软件

需要具备的这么一个功能

那实际上呢

它呢 比业务需求具体

但是呢 比系统需求抽象

那我们再看一下

针对这么个用户需求

它对应的系统需求是什么呢

那就看下面的这个1.1—1.3

首先呢 我们将上述的用户需求

需要细化为

第一 为用户提供

定义外部文件类型的一个工具

第二个 每种外部文件类型

在界面上要用一种专门的图标来表示

第三个 是当用户选择一个

外部文件的图标时

我们需要做的一些工作

那从这个描述上我们能看

它把用户需求更加的具体化

功能化 也形象化了

那对于这样的需求呢

系统开发设计人员看了之后

是非常容易理解

你给它用户需求

它通常是看不太明白

说具体要实现什么样的功能

所以从这个例子大家能理解出来

我们的用户需求和系统需求

它的一些这个关系

或者说各自的一些特点

那在软件需求里面呢

除了前面提到的

这个业务需求

用户需求

和我们的系统需求

实际上还有另外一类呢

非常重要的需求

因为我们前面提到

需求呢 是它所要提供的服务

和所受的约束

两个方面来构成的

那对于它的约束

我们可以更好的对应到

所谓的非功能需求

非功能需求指什么呢

通常 包括以下一些方面

第一个呢 它通常是对系统

提供的一些服务或功能

这个给出的约束包括呢

性能指标

质量属性

以及呢 它的一些时间约束

接口的约束 等等

都是属于外围的一些

这个约束条件

非功能需求呢

虽然它的重要性不如功能需求

但是呢 它是确保整个软件

我整个需求能够顺利执行的

一个非常必要的条件

所以呢 它最好也是可以被验证的

而且呢 实际上对于需求的量化呢

也通常的很难

所以呢 在这个里面

其实我们尽量的兼顾

但是也不见得一定需要实现这个

另外的话呢

非功能需求和功能需求

有的时候它是会发生冲突的

那包括呢

非功能需求之间

也是会发生冲突的

那这个时候呢

我们就要去兼顾

我们整个需求设计分析中

用户对于这个软件的

这个需求或者它的要求

侧重点所在

去区分主要矛盾和次要矛盾

从而呢 对它进行有所折中

这是关于这个软件需求

那我们从这个图上

我们能稍微更好的看到呢

对于功能需求和非功能需求

以及呢 我们层次化的

从业务需求 用户需求和系统需求

几个层面上去看

它们觉得一个相辅关系

那我们知道呢

前面也提到了

业务需求呢

指导用户需求

用户需求往下具体细化成

这个功能需求

而整个外围的非功能需求

包括质量属性 外部接口这些

一直贯穿始终

在对我们

整个层次化的需求设计过程中呢

起到一个约束的作用

当然我们最后的要形成一个

所谓的需求规格说明

当然我们也会中间的一些

这个文档生成

因为前面我们提到需求

它中间要产生大量的这个文档

包括这个项目视图与范围文档

这个使用用例文档

需求规格说明

这是这个

那我们软件需求呢

我们前面提到了

分各种各样的类型

那什么样的需求是好的需求

什么样的需求是不好的需求呢

我们稍微的挑几个

给大家稍微介绍一下

第一个完整性

这个是必然的

对一个需求来说

我们需要涵盖呢

整个用户

它所关心的所有的内容

所以呢 我们要确保它是完整的

第二个呢 是要正确性

这个也是

就是说 你需要使它光完整不行

我们还要真实反应用户的这个意图

还有包括

精确性 可行性 必要性 无歧义

无歧义也非常的重要

因为我们整个需求分析

或者整个需求工程过程中

无歧义在各个阶段

都是一个非常重要的要求

因为我们需要呢

用形式化定义的方式

确保每项需求后的每项功能

有且只能有一种解释

而且呢 是可以具有共同理解的

一个语音空间

最后呢 需求通常的

我们要求它是可验证的

就是我们不能太主观的

去描述这些东西

但是这个东西呢

没法去验证

所以呢 我们希望是客观定义

而且呢 这个客观定义的内容

是可以通过一些量化指标去验证的

这是我们对于一个优秀的需求

它所具备的一些特性

在软件需求分析

或者设计的过程中

有优秀的需求

那我们必然也会想到说

那到底有没有一些需求的一些错误

或者不好的一些需求呢

当然有 对吧

这里面我列了

四种比较大的类型的这个

常见的需求错误

第一个呢

没有反映用户的真实需求

那这个的话

其实是对应到前面里的

违背了所谓的完整性

正确性 精确性等等

第二个呢 模糊或者歧义的需求

前面我们也提到了

要无二义性 对吧

我们的需求呢

要这个有且唯一的去反映

某一个需要和内容

第三个就是明显的信息遗漏

这个跟前面的

这个完整性要求有关系

第四个就是不必要的需求

就是说呢 这个需求需要反映

用户的真实目的 真实需要

不要加入这个需求工程师

或者是开发人员

自己主观的一些内容

去加入一些呢

不必要的需求

你加入了之后

用户呢 反而觉得这是个累赘

不是他所关心的问题

所以呢 我们一定要去客观的反应

这是这个常见的一些错误

那我们稍微举一个例子

那这个里面呢

是一个关于

这个系统需求的一个实例

我们比如要开发一个

大学图书馆的一个系统

在这个系统里面呢

有三个需求

那我们描述

比如在这个问题里面我们能看到呢

这个系统需求1和3呢

是以不同的详细程度

我们在描述呢

我们的一个查询

或者存储的这么一个功能

那在这个问题里面呢

我们第二个需求

实际上 就是一个有问题的需求

大家看一下

这个它的问题是什么 对吧

我们回归下前面提到的几种

这个有问题的需求

实际上大家认真关注一下

多种对吧

问题就在这两个字

多种浏览器提供用户阅读馆藏文献

这个多种

是一个非常含糊的表达

不够精准

我们在真正描述需求的时候

需要精确到说到底是几种

或者说是哪几种

哪几种类型的

只有这么明确了

后期的开发 设计

才能够呢

非常顺利

要不然就有可能就是说呢

在这个理解上存在误区

用户理解的多种

和这个需求分析人员

和设计实现人员理解的

都不太一样 对吧

这是关于这个

我们的一个这个例子

那我们接下来呢

我们再认真描述一下

在如此的一个软件需求背景下

软件工程

它包括什么样的一些过程 对吧

首先 第一个的话呢

就是软件工程的一个过程

我们知道整个过程呢

是一组相关活动的集成 对吧

我们把一组活动融合到一块

那它就过成了一个过程

而整个需求呢

应该是由若干的过程来构成的

所以呢 需求工程过程呢

就是系统开发中

需求开发活动的一个集成

那通常来说呢

需求工程的开发过程

如图所示

包括两大块

一块呢 是需求开发

另外一块呢

是需求的管理

而需求的管理呢

是对整个需求开发

构成的一个管理

一个外围的一个模块

那对于需求开发呢

我们又细化成呢

问题的获取 分析

还有呢 需求规格的一个说明

和最后的需求的一个验证

所以这其实就对应到

整个需求工程中呢

这个五个不同的过程

我们从这个流程图上

能够更好的看到

首先是需求的一个获取

获取的需求之后呢

我们对这个需求进行一个分析

然后呢 我们通过一些需求建模

去进行需求规格的一个说明

最后呢 我们对我们需求规格说明

形成的东西

我们要进行需求的一个验证

然后在整个这个过程中呢

我们要对这个需求

进行一个需求的一个管理

而且这个过程中

我们也会生成

各种各样的一些成果文档 对吧

在各个不同的一个阶段

那同样呢

我们也可以通过一个垂直的一个关系

或者说整个一个迭代

和并发的一个过程来看待一下

需求工程过程

它通常包括就是

把需求开发和需求管理呢

就说大量会不断的迭代并发

因为整个需求管理

是外围的一个模块

它始终关注

整个需求开发的一个过程流程

所以说呢

它会根据整个需求的变化

去做一些变更的控制

从而呢 驱动整个

需求开发的一个变化

同样的 因为我们知道

需求工程

是在整个软件工程里的第一个环节

我们也会结合后期

这个系统开发过程中它的一些反馈

同时呢 来调整我们整个

这个需求工程的一些任务

或者说它的一些产出

那所以呢 这就对应到

前面提到的需求工程过程的

一个并发和迭代

那我们这个图呢

更加精细的反应了

迭代的一个需求开发

构成的一个模型

当然能看到我们从用户

从需求分析

从规格说明

到验证 到问题域 对吧

我们整个一个

是一个闭环

而且这个闭环里

有多个回路

那也就代表了整个一个

明显的一个迭代的开发过程

这个大家可以结合

我们前面讲的内容

再深入理解一下

好 那我们今天这一节的

这个讲解就到这为止

大家回去呢

再回顾一下这个ppt

好 谢谢大家

软件理论与工程课程列表:

课程概述

-课程概述

第1章 软件与软件工程

-1.1 软件的本质

--1.1 软件的本质

-1.2 软件工程

--1.2 软件工程

-1.3 软件过程结构

--1.3 软件过程结构

-1.4 过程模型

--1.4 过程模型

-1.5 敏捷开发方法

--1.5 敏捷开发方法

-第1章 习题

--第1章 习题

第2章 需求分析

-2.1 需求工程过程

--2.1 需求工程过程

-2.2 需求获取

--2.2 需求获取

-2.3 需求分析

--2.3 需求分析

-2.4 过程建模

--2.4 过程建模

-2.5 面向对象建模

--2.5 面向对象建模

-第2章 习题

--第2章 习题

第3章 软件设计

-3.1 设计概述

--3.1 设计概述

-3.2 设计的概念

--3.2 设计的概念

-3.3 设计模型元素

--3.3 设计模型元素

-3.4 体系结构概述

--3.4 体系结构概述

-3.5 体系结构风格

--3.5 体系结构风格

-3.6 构件级设计

--3.6 构件级设计

-3.7 UI设计

--3.7 UI设计

-3.8 基于模式的设计

--3.8 基于模式的设计

-第3章 习题

--第3章 习题

第4章 UML方法

-4.1 UML概述

--4.1 UML概述

-4.2 UML 及UML中的事物

--4.2 UML 及UML中的事物

-4.3 UML关系和图

--4.3 UML关系和图

-4.4 UML 图细节(上)

--4.4 UML 图细节(上)

-4.4 UML 图细节(下)

--4.4 UML 图细节(下)

-第4章 习题

--第4章 习题

第5章 软件测试

-5.1 软件测试策略

--5.1 软件测试策略(上)

--5.1 软件测试策略(下)

-5.2 测试传统的应用系统

--5.2 测试传统的应用系统

-5.3 测试面向对象的应用系统

--5.3 测试面向对象的应用系统

-5.4 测试web应用系统

--5.4 测试web应用系统

-5.5 测试移动应用系统

--5.5 测试移动应用系统

-第5章 习题

--第5章 习题

第6章 项目管理

-6.1 软件项目估算

--6.1 软件项目估算

-6.2 软件过程管理

--6.2 软件过程管理

-6.3 软件配置管理

--6.3 软件配置管理

-6.4 项目版本控制及调试

--6.4 项目版本控制及调试

-第6章 习题

--第6章 习题

2.1 需求工程过程笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。