第五章-需求工程

1. 描述-3星

软件工程是以工程化思想进行软件开发,

需求工程是软件工程中的一个阶段

需求工程包括需求开发(技术视角)和管理(管理视角)两个维度。

软件需求是指用户对系统在功能、行为、性能、设计约束等方面的期望。

软件需求是指用户解决问题或达到目标所需的条件或能力,是系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件或能力,以及反映这些条件或能力的文档说明。

image-20230520181254006

基线:客户确认过的计划,以及客户、项目团体技术人员一起打成共识的东西

软件需求和业务需求两者的区别:

一般需求分类方法

软件、硬件、网络等需求,软件需求又可以分为:

  1. 业务(整体全局,补全用户描述不清的需求,需求抽象层级最高)
  2. 用户(用户视角,不同角色权限下的各个用户需求,偏向操作看到什么怎么操作)
  3. 系统需求(计算机视角)
    1. 功能性需求
    2. 性能性-非功能需求(安全性、可靠性)
    3. 设计约束(甲方提出的即非功能又非性能的需求,例如客户要求用JAVA,必须用XXX之类的需求)

QFD分类

需求分为:

  1. 基本需求(明示,常规需求)
  2. 期望要求(隐含需求,用户没说,但是他心理想要,你们的专业性在哪里?这种需求人家别人都可以你就不行么,还需要我说么?)
  3. 兴奋需求(多余需求,客户不关心,还消耗项目开发费用,从项目管理角度不要做)

如何区分那种续期?可以用原型方法来让客户选择补充。

2. 需求获取-5星

案例和论文考试内容比较多,例如问获取需求有哪些方式。

需求获取

  1. 用户访谈:1对1-3,有代表性的用户。(比较耗时,咨询开放式问题(问答题)和封闭式问题(选择题))

  2. 问卷调查:用户多,无法一一访谈。

  3. 现场观摩:针对较为复杂的流程和操作。

  4. 联合需求计划(JRP):高度组织的群体会议,各方参与,成本较高

  5. 情节串联板:一系列图片,通过这些图片来讲故事。

  6. 收集资料:把与系统有关的、对系统开发有益的信息收集起来。

  7. 参加业务实践:有效地发现问题的本质和寻找解决问题的办法。

  8. 阅读历史文档:对收集数据性的信息较为有用。

  9. 抽样调查:降低成本。样本大小=∝ * (可信度系数/可接受的错误) * (可信度系数/可接受的错误) (注:α-般取0.25)

    image-20230520231524459

非功能需求分类

PIECES框架-系统非功能性需求分类的技术

性能( Preformance):性能用于描述企业当前的运行效率,可以分析当前业务的处理速度。

信息( Information):信息和数据指标用于描述业务数据的输入、输出以及处理方面存在的各种问题

经济( Economics):经济指标主要是从成本和收益的角度分析企业当前存在的问题。

控制( Control):提高信息系统的安全和控制水平

效率( Efficiency):提高企业的人、财、物等的使用效率

服务( Service):提高企业对客户、供应商、合作伙伴、顾客等的服务质量。

3. 需求分析-4星

结构化重视流程

面向对象重视对对象,物或者人都抽象成对象

结构化需求分析

用数据流图来表现业务流向

  1. 数据流图 DFD 核心,用DFD进行功能建模,系统有哪些功能块,每个功能块的输入输出是什么,都通过DFD进行描述呈现,对整个系统进行初步认识。
  2. 状态转换图(STD)
  3. 实体联系图(ER)数据库部分进行讲解。
  4. 使用数据字典进行补充说明。

数据流图DFD

image-20230520233815562 image-20230520234536561 image-20230521135410064 image-20230521140253192 image-20230521141414206

顶层图和0层图中,外部实体没有变但是系统拆分成了更详细的系统。

数据流图平衡原则:

  1. 父图和子图之间的平衡:父同中有的流程,子图一定要有。

  2. 子图内平衡:黑洞、奇迹、灰洞

image-20230521140029638

外部实体:和系统交互的角色

image-20230521135457776 image-20230521141303477 image-20230521141325987 image-20230521141340626

image-20230521142027523

状态转换图

事件触发状态转变

image-20230521141513370

ER图

image-20230521141548107

面向对象需求分析

对象:属性(数据)+方法(操作)+对象ID

类(实体类/控制类/边界类)(学生实体类/协调/接口性质同外界沟通)

继承与泛化:复用机制

封装:隐藏对象的属性和实现细节,仅对外公开接口

多态:不同对象收到同样的消息产生不同的结果

接口:一种特殊的类,他只有方法定义没有实现

重載:一个类可以有多个同名而参数类型不同的方法

消息和消息通信:消息是异步通信的

用UML图表达业务流转情况

  1. UML图
  2. 用例模型
  3. 类模型

面向对象需求分析-UML

image-20230521152642407

重点是构造块里面的事物、关系、图三部分

对象三要素:属性方法对象ID。

类:是描述具有相同属性、方法、关系和语义的对象的集合,一个类实现一个或多个接口

接口:是指类或构件提供特定服务的一组操作的集合,接口描述了类或构件的对外的可见的动作。

构件:是物理上或可替换的系统部分,它实现了一个接口集合

包:是一种将有组织的元素分组的机制。

用例:是描述一系列的动作,产生有价值的结果。

协作:定义了交互的操作,是一些角色和其它事物一起工作,提供一些合作的动作,这些动作比事物的总和要大;

节点:是—个物理元素,它在运行时存在,代表一个可计算的资源,通常占用一些内存和具有处理能力。

image-20230521154252399 image-20230521191414227

UML中最重要的用例图和类图:

用例图

image-20230521191814809

使用关系=包含关系

image-20230521193027732 image-20230521193047495 image-20230521193141587

类是描述系统内部结构,但是用例不是

image-20230521194605314

第一空,用排除法:

泛化:执行顺序是先后执行,所以不属于父子泛化:

包含:提供的是共性,所以不是。

扩展:用的时候用到,有的使用不用,一定要存款之后才能用,所以也不是。

依赖:先后执行存在依赖。

第二空:

公共用例和具体的用例之间存在的就是使用关系,所以该题目选择B。

image-20230521200024102

改题答案C 泛化,题目可以改成任何地方都可以用UC1 替代UC2

问题方法:

  1. 区分动态图和静态图
  2. 具体每种动态图的区分

类图和对象图

考试方法,给类图和题干,对图中缺少内容进行填充,和用例图考察类似

image-20230521213055642 image-20230521214431287

泛化关系:子类特殊,父类一般

实现的线应该是 虚线,图中第一个错了。

image-20230521214514442

顺序图

image-20230521214943871

活动图

image-20230521215236988

4. 需求定义-2星

5. 需求验证-3星

6. 需求管理-4星