软件需求的3个不同层次
需求工程的活动主要被划分为5个阶段
需求开发
1. 需求获取
2. 需求分析
3. 需求定义:需求规格说明书,严格定义 or 原型方法
4. 需求确认与验证:需求评审 + 需求测试
需求管理
1. 变更控制
2. 版本控制
3. 需求跟踪
4. 需求状态跟踪
需求获取的基本步骤
需求获取方法
需求管理的主要活动
变更控制过程
变更策略
需求跟踪
1. 正向跟踪:检查《需求规格说明书》中的每个需求是否都能在后继工作成功中找到对应点。
2. 逆向跟踪:检查设计文档、代码、测试用例等工作成功是否都能在《需求规格说明书》中找到出处。
需求跟踪矩阵:保存了需求与后继工作成果的对应关系。
1
结构化分析 SA
分析的步骤
分析的结果
数据流图DFD
功能建模、过程建模。
核心:数据流
目的:描述系统的功能需求
DFD的4种基本元素
1. 数据流:描述数据的流向。
2. 加工:表示对数据进行的加工/处理和转换。
3. 数据存储:表示用数据库形式存储的数据。
4. 外部实体:描述系统数据的提供者、或数据的使用者。
DFD的建模过程
数据流图DFD的作用
1. 从数据传递和加工的角度,利用图形符号,通过逐层细分,描述系统内各个部件的功能、数据在各功能模块之间传递的情况,是需求分析的手段。
2. 描述系统的功能需求,为系统建立功能模型,是结构化分析方法中理解和表达用户需求的重要工具。
3. DFD概括描述了系统的内部逻辑过程,是需求分析结果的表达工具。
4. DFD作为一个存档的文字材料,是进一步修改和充实开发计划的依据。
5. DFD的顶层图定义了系统与外部实体间的界限和接口,清晰界定出系统的范围。
数据流图DFD中的常见错误
错误1:黑洞 --- 加工只有输入,没输出。
错误2:奇迹 --- 加工只有输出,没有输入。
错误3:灰洞 --- 加工的输入不足以产生输出,两者不对称。
错误4:加工没有编号。
错误5:数据的流向没有经过加工。数据流的流向必须经过加工。
错误6:数据流没有方向箭头。
错误7:数据流没有名称。
数据字典DD
数据字典:是系统中使用的所有数据元素定义的集合,目的是对DFD中出现的所有元素都加以定义和详细说明,使得每个图形元素的名字都有一个确切的解释。
数据字典的组成
数据字典的作用
2
结构化设计 SD
SD是面向数据流的设计方法,以SRS和SA阶段所产生的数据流图和数据字典等文档为基础,是一个自顶向下、逐步求精、模块化的过程。
SD方法的基本思想是将软件设计成由相对独立且具有单一功能的模块组成的结构。
概要设计:主要任务是确定软件系统的结构,对系统进行模块划分,确定每个模块的功能、接口、模块之间的调用关系,形成系统结构图SC。
详细设计:主要任务是为每个模块设计实现的细节,每个模块的实现算法、所需的局部数据结构。
信息隐藏与抽象:采用封装技术,将模块的实现细节隐藏起来。
模块化:功能--做什么,逻辑--怎么做,状态--使用的环境和条件。
模块的外部特性:模块名、参数表、影响。
模块的内部特性:完成其功能的代码、仅供模块内部使用的数据。
系统结构图SC:模块结构图,反映了系统的总体结构,各模块之间的层次结构。
详细设计的基本步骤
详细设计的工具
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:将对象持久化到关系数据库中。