软件工程基础:下篇深度解析

发表时间: 2023-12-08 16:05

需求工程

软件需求的3个不同层次

  • 业务需求:客户对系统高层次的目标要求。
  • 用户需求:用户要求系统必须能完成的任务。
  • 功能需求:开发人员必须实现的软件功能。


需求工程的活动主要被划分为5个阶段

  1. 需求获取
  2. 需求分析
  3. 形成需求规格(需求文档化)
  4. 需求确认与验证
  5. 需求管理


需求开发

1. 需求获取

2. 需求分析

3. 需求定义需求规格说明书严格定义 or 原型方法

4. 需求确认与验证需求评审 + 需求测试


需求管理

1. 变更控制

2. 版本控制

3. 需求跟踪

4. 需求状态跟踪



需求获取的基本步骤

  1. 开发高层的业务模型
  2. 定义项目范围和高层需求:描述系统的边界
  3. 识别用户角色和用户代表
  4. 获取具体的需求
  5. 确定目标系统的业务工作流
  6. 需求整理与总结


需求获取方法

  • 用户面谈
  • 需求专题讨论会
  • 问卷调查
  • 现场观察
  • 原型化方法
  • 头脑风暴法


需求管理的主要活动

  1. 变更控制
  2. 版本控制
  3. 需求跟踪
  4. 需求状态跟踪


变更控制过程

  1. 问题分析和变更描述
  2. 变更分析和成本计算
  3. 变更实现


变更策略

  1. 必须遵循变更控制过程。
  2. 由变更控制委员会CCB决定。
  3. 绝不能删除或修改原始文档。
  4. 未获得批准的变更不允许设计和实现。
  5. 项目风险承担者应该了解变更的内容。
  6. 变更保持水平可追踪性。


需求跟踪

1. 正向跟踪检查《需求规格说明书》中的每个需求是否都能在后继工作成功中找到对应点。


2. 逆向跟踪:检查设计文档、代码、测试用例等工作成功是否都能在《需求规格说明书》中找到出处。


需求跟踪矩阵:保存了需求与后继工作成果的对应关系。

结构化分析与设计

1

结构化分析 SA


分析的步骤

  1. 分析业务情况,做出反映当前物理模型的数据流图DFD。
  2. 推导出等价的逻辑模型的DFD。
  3. 设计新的逻辑系统,生成数据字典和基元描述。
  4. 建立人机接口,提出可供选择的目标系统物理模型的DFD。
  5. 确定各种方案的成本和风险等级,据此对各种方案进行分析。
  6. 选择一种方案。
  7. 建立完整的需求规约。



分析的结果

  1. 功能模型:数据流图DFD,描述系统的功能需求(过程建模 / 功能建模)。
  2. 行为模型:状态转换图STD,描述系统的状态和引起状态转换的事件和条件
  3. 数据模型:实体联系图E-R,描述系统中各个实体之间的关系
  4. 数据字典:对DFD中的各个元素做出详细的定义和说明。


数据流图DFD

功能建模、过程建模。

核心:数据流

目的:描述系统的功能需求

DFD的4种基本元素

1. 数据流:描述数据的流向。

2. 加工:表示对数据进行的加工/处理和转换。

3. 数据存储:表示用数据库形式存储的数据。

4. 外部实体:描述系统数据的提供者、或数据的使用者。


DFD的建模过程

  1. 明确目标,确定系统范围。
  2. 建立顶层DFD图。
  3. 构建第一层DFD分解图。
  4. 开发DFD层次结构图。
  5. 检查确认DFD图。


数据流图DFD的作用

1. 从数据传递和加工的角度,利用图形符号,通过逐层细分,描述系统内各个部件的功能、数据在各功能模块之间传递的情况,是需求分析的手段

2. 描述系统的功能需求,为系统建立功能模型,是结构化分析方法中理解和表达用户需求的重要工具

3. DFD概括描述了系统的内部逻辑过程,是需求分析结果的表达工具

4. DFD作为一个存档的文字材料,是进一步修改和充实开发计划的依据

5. DFD的顶层图定义了系统与外部实体间的界限和接口,清晰界定出系统的范围。


数据流图DFD中的常见错误

错误1:黑洞 --- 加工只有输入,没输出。

错误2:奇迹 --- 加工只有输出,没有输入。

错误3:灰洞 --- 加工的输入不足以产生输出,两者不对称。

错误4:加工没有编号。

错误5:数据的流向没有经过加工。数据流的流向必须经过加工

错误6:数据流没有方向箭头。

错误7:数据流没有名称。



数据字典DD

数据字典:是系统中使用的所有数据元素定义的集合,目的是对DFD中出现的所有元素都加以定义和详细说明,使得每个图形元素的名字都有一个确切的解释。

数据字典的组成

  1. 数据项
  2. 数据结构
  3. 数据流
  4. 数据存储
  5. 处理过程


数据字典的作用

  1. 按各种要求列表,列出所有数据条目,保证系统设计时不会遗漏。
  2. 互相参照,便于系统修改。
  3. 由描述内容检索名称。
  4. 一致性检验和完整性检验。


2

结构化设计 SD


SD是面向数据流的设计方法,以SRS和SA阶段所产生的数据流图和数据字典等文档为基础,是一个自顶向下逐步求精模块化的过程。

SD方法的基本思想是将软件设计成由相对独立且具有单一功能的模块组成的结构。

概要设计:主要任务是确定软件系统的结构,对系统进行模块划分,确定每个模块的功能、接口、模块之间的调用关系,形成系统结构图SC。

详细设计:主要任务是为每个模块设计实现的细节,每个模块的实现算法、所需的局部数据结构。

信息隐藏与抽象:采用封装技术,将模块的实现细节隐藏起来。

模块化:功能--做什么,逻辑--怎么做,状态--使用的环境和条件。

模块的外部特性:模块名、参数表、影响。

模块的内部特性:完成其功能的代码、仅供模块内部使用的数据。

  • 非直接耦合
  • 数据耦合:传递简单数据。
  • 标记耦合:传递记录等复杂信息、数据结构。
  • 控制耦合:传递的信息中包含用于控制模块内部逻辑的信息。
  • 通信耦合:共享了输入或输出。
  • 公共耦合:公共的数据环境,全局数据结构
  • 内容耦合:一个模块直接访问另一个模块的内部数据。


  • 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。
  • 顺序内聚:必须顺序执行。
  • 通信内聚:所有处理元素集中在一个数据结构的区域上。
  • 过程内聚:必须按特定的次序执行。
  • 时间内聚:必须在同一时间间隔内执行。
  • 逻辑内聚:完成逻辑上相关的一组任务。
  • 偶然内聚


系统结构图SC:模块结构图,反映了系统的总体结构,各模块之间的层次结构。

详细设计的基本步骤

  1. 分析并确定输入/输出数据的逻辑结构。
  2. 找出输入数据结构和输出数据结构中有对应关系的数据单元。
  3. 按一定的规则由输入、输出的数据结构导出程序结构。
  4. 列出基本操作与条件,并把它们分配到程序结构图的适当位置。
  5. 用伪码写出程序。


详细设计的工具

1. 图形工具:业务流图、程序流程图、PAD图、NS盒图、IPO图。

流程图:只能描述执行过程,不能描述有关的数据。


PAD图:问题分析图,既表示逻辑也描述数据结构,支持自顶向下的过程,可自动转化成高级语言程序,更直观,结构更清晰。


NS盒图功能域明确,容易表示嵌套层次关系,具有强烈的结构化特征,不能任意转移控制,不适合复杂程序设计。


2. 表格工具:一张表描述过程的细节。


3. 语言工具:PDL伪代码,描述模块内部的具体算法,可作为注释直接插在源码中,也可由PDL自动生成代码。


3

结构化编程 SP


结构化程序设计采用自顶向下、逐步求精的方法。

各个模块通过“循序、选择、循环”的控制结构进行连接,并且只有一个入口和一个出口。

程序 = 算法 + 数据结构

面向对象分析与设计

1

面向对象分析 OOA



OOA模型的5个层次

1. 主题层

2. 对象类层

3. 结构层

4. 属性层

5. 服务层


OOA的5个活动

1. 标识对象类

2. 标识结构

3. 定义主题

4. 定义属性

5. 定义服务



对象之间的2种结构

1. 分类结构:一般 与 特殊

2. 组装结构:整体 与 部分



OOA的基本原则

1. 抽象:抽取共同的、本质的特征,过程抽象 + 数据抽象。

2. 封装:把对象的 属性(数据) 和 操作(服务) 结合为一个不可分的系统单位,隐蔽对象的内部细节。

3. 继承:特殊类对一般类的继承,不再重复定义一般类中已定义的属性和方法。

4. 分类:把具有相同属性和服务的对象划分为一类,用类作为这些对象的抽象描述。

5. 聚合:多个对象的组装。

6. 关联

7. 消息通信:对象之间只能通过消息进行通信。

8. 粒度控制

9. 行为分析



分析的步骤

1. 确定对象和类:类是多个对象的共同属性和方法的集合。

2. 确定结构:分类结构:泛化-特化、组装结构:整体-部分。

3. 确定主题:指事物的总体概貌、总体分析模型。

4. 确定属性:数据元素,描述对象或分类结构的实例。

5. 确定方法:收到消息后必须进行的一些处理方法。



分析的结果

1. 用例模型:从用户视角分析需求,描述系统的功能需求

2. 分析模型

静态分析模型:描述系统的基本逻辑结构,展示对象和类如何组成系统。

动态分析模型:描述系统的动态行为,展示对象在系统运行期间不同时刻的通信和交互。



用例建模的步骤

1. 识别参与者

2. 合并需求获得用例

3. 细化用例描述

4. 调整用例模型



建立分析模型的步骤

1. 定义概念类

2. 确定类之间的关系

3. 为类添加职责:类的职责分解为类的属性和方法,属性封装数据,方法封装行为。

4. 建立交互图



图的对比

数据流图:强调系统内数据的流动,描述系统的功能需求,面向数据流。


流程图:面向过程。强调处理过程,各处理过程之间有严格的顺序时间关系,只能表示顺序执行的过程,不能描述有关的数据.



交互图


1. 顺序图序列图

顺序图通常能更精确的描述对象间特定交互过程的详细步骤,着重展现对象之间按时间顺序进行的消息交互,以及这些消息之间的时序关系,强调交互的消息顺序时序


2. 协作图通信图

协作图通常表示较高层次的概览性视图,通过对象之间的集合和连接来描述多个对象在一定场景下的交互和协作关系,强调接收和发送消息的对象的结构组织,着重展现对象之间的协作和通信方式


3. 定时图计时图

强调消息的实际时间。


4. 交互概览图



动态图


1. 活动图

描述用例和对象内部工作过程,用于捕获动作及动作的结果,是内部处理驱动的流程。可以将一个活动图中的活动进行分组,每个活动都明确属于一个泳道,每一组表示一个特定的对象,负责完成组内的活动。

强调活动间的顺序控制流,能够表示并发活动的情形。

适用于系统行为建模,关注活动的并发同步,侧重从行为的动作来描述。


活动图是状态图的一种特殊形式。


2. 状态图

描述一个对象在生命周期内响应事件所经历的状态序列

状态间的转移需要外部事件的触发且满足指定的条件

适合用于反应式系统建模,关注对象的状态变化,侧重从行为的结果来描述。


2

面向对象设计 OOD



分析模型:顶层架构图、用例与用例图、领域概念模型

设计模型:以包图表示的架构图、以交互图表示的用例实现图、完整精确的类图、描述复杂对象的状态图、描述流程化处理过程的活动图


在OOD中,类分为3种类型

1. 实体类

映射需求中的每个实体,保存需要存储在永久存储体中的信息。

2. 控制类

用于控制用例工作的类,对一个或几个用例所特有的控制行为进行建模。

3. 边界类

用于封装在用例内、外流动的信息或数据流,位于系统与外界的交界处。


3

面向对象编程 OOP



OOP达到了软件工程的3个主要目标:重用性、灵活性、扩展性。

OOP = 对象 + 类 + 继承 + 多态 + 消息

OOP的基本特点:封装、继承、多态

4

数据持久化


在面向对象开发方法中,对象只能存在于内存中。


对象持久化:把内存中的对象保存到数据库 或 可永久保存的存储设备中。


持久层:实现了数据处理层内部的业务逻辑和数据逻辑的解耦。


对象/关系映射ORM:将对象持久化到关系数据库中。