软件工程基础图式(第四章 系统设计 部分)
学习目标
1)软件设计过程
2)软件设计的概念和原则
3)设计技术
4)面向过程的系统设计
5)面向对象的系统设计
系统设计目标:将需求分析转化为软件内部结构,是连接用户需求和软件技术的桥梁
软件需求:解决做什么——“需求规格说明书”
软件设计:解决怎么做——“设计规格说明书”
1、设计工程活动
1)软件架构设计(顶层设计)
描述软件的顶层架构和组织,划分不同的组件
2)软件详细设计
详细描述各组件以便能够编码实现 (算法和数据结构)
注意:
—软件设计主要为分解设计:将软件映射为各组件
—可以包括系列模式设计
2、好的设计的三个特点
(1)包含所有明确要求(要实现什么,不要实现什么)满足客户所期望的所有隐含要求
(2)编码测试、维护人员可读可理解
(3)完整视图(概要图)
3、设计指导原则
1)模块化
2)含数据、体系结构、接口、组件
3)可重复使用
4)正确清楚
4、设计质量属性
1)功能性
2)易用性
3)可靠性
4)性能
5)可设计性
- 扩展性
- 适应性
- 可维护性
数据流图对应:接口设计、软件结构设计
5、设计相关概念
1)抽象
(1)含义:忽略具体的信息将不同事物看成相同事物的过程
(2)软件开发中的丑行:参数化、规范化
(3)规范化抽象
—数据抽象:描述数据对象的冠名数据集合
—过程抽象:具有明确和有限功能的指令序列
2)体系结构
体系结构设计可以使用大量的一种或多种模型来表达
3)设计模式
(1)含义:在给定上下文环境中一类共同问题的共同解决方案
(2)微观结构:实体模式、结构模式、行为模式
4)模块性
(1)含义:软件被划分为命名和功能相对独立的多个组件(通常称为模块),通过这些组件的集成来满足问题的需求。
(2)软件的模块性:程序可被智能管理的单一属性
(3)模块化降低软件复杂性
(4)模块的基本属性
5)信息隐藏
(1)模块化基本问题:如何分解软件系统以达最佳的模块划分
(2)信息隐藏原则:模块应该具有彼此相互隐藏的特性
即:在设计和确定模块时,使得一个模块内包含的信息(过程或数据),不允许其它不需要这些信息的模块访问,独立的模块间仅仅交换为完成系统功能而必须交换的信息。
6)功能独立
(1)含义:每个模块只解决了需求中特定的子功能,并从程序结构的其他部分看该模块具有简单的接口
(2)好处:
1》易于开发:功能被划分,接口被简化
2》易于维护(和测试):次生影响有限,错误传递减少,模块重用
(3)定性衡量标准
1》内聚性(块内联系):模块的功能相对强度
1>内聚性有六种类型:偶然内聚 、逻辑内聚、时间内聚、通信内聚、顺序内聚、功能内聚。
2>偶然内聚指一个模块内的各处理元素之间没有任何联系。这是内聚程度最 差 的内聚。
3>逻辑内聚指模拟内执行几个逻辑上相似的功能,通过参数确定该模块完成一个功能。
4>时间内聚为把需要同时执行的动作组合在一起。
2》耦合性(块间联系):模块之间的相互依赖程度
1>无直接耦合(低耦合):两个模块没有直接关系,模块独立性最强。
2>耦合性分类
①数据耦合(低耦合):属松散耦合,通过数据参数交换信息。
②控制耦合(中耦合):模块之间传递的是控制信息(如开关、标志、名字等),控制被调用模块的内部逻辑。
③特征耦合(低耦合):两个模块通过传递数据结构加以联系,或都与一个数据结构有关系
④公共环境耦合(较强耦合):一组模块引用同一个公用数据区(也称全局数据区、公共数据环境)。
公共数据区:
-
-
-
-
- 全局数据结构
- 共享通讯区
- 内存公共覆盖区等
-
-
-
⑤内容耦合(最强):有下列情况之一的。是最不好的耦合形式!
3》模块独立性强 = 高内聚低耦合!!!
7)细化
(1)含义:逐步求精的过程
(2)与抽象的关系
1》抽象使设计师确定过程和数据,但不局限于底层细节
2》细化有助于设计者在设计过程中揭示底层细节
8)重构
(1)含义:不改变组件功能和行为条件下,简化组件设计(或代码)的一种重组技术
(2)方法:检查现有设计的冗余情况、未使用的设计元素、无效或不必要的算法、较差的构建方式或不恰当的数据结构,或任何其他可更改并导致更好设计的错误。
6、设计模型
1)数据设计
相关概念:
数据建模:数据字典、E-R图、类图
数据结构
数据库:按照数据结构来组织、存储和管理数据的仓库
数据仓库
2)体系结构设计
1》含义和内容
- 系统需要执行的函数功能组件集(如数据库、计算模块)。
- 组件之间通信、协同和合作的连接器
- 组件集成构成系统的约束
- 设计人员通过分析其组成部分的已知特性理解系统整体特性的语义模型分析
2》风格和模式简要分类
1>数据中心架构
2>数据流体系架构
3>调用和返回架构
4>面向对象架构:系统组件封装数据和处理该数据的操作。组件之间的通信和协作通过消息传递实现
5>层次架构
3》两个基本问题
1、控制结构
在架构内部如何实现管理控制?是否有不同的控制架构存在?
2、数据传递
组件之间如何进行数据传递?数据流是否连续,或者传递给系统的数据对象是否零散?
3)界面设计
4)部署设计
7、设计实例——在线招聘系统
1)体系结构
2)模块设计
3)模块之间的关系图
4)表关系图
8、小结
设计是软件工程技术核心
数据结构、体系结构、接口和软件组件的过程细节在设计中逐步细化、开发、评审和记录
模块化(包括程序和数据)和抽象概念能够使设计人员简化和重用软件组件
细化提供了详细表示各顺序功能层的机制
程序和数据结构有助于建立软件架构的整体视图,而过程提供了算法实现必要的细节
信息隐藏和功能独立为实现有效模块化提供了启发