设计过程
总体设计阶段主要由系统设计和结构设计两阶段 组成
设计原理
-
模块化
- 模块化就是把程序划分成独立 命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求
-
抽象化(Abstraction)
- 软件工程过程的每一步都是对软件解法的抽象层次的一次精化
-
自动化(Automation)
-
逐步求精
- 通过逐步分解对功能的宏观陈述而开发出层次结构,直至最终得出用程序设计语言表达的程序
-
信息隐藏与局部化
- 使一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的
-
模块独立
内聚与耦合
耦合关系
- 数据耦合:两个模块彼此间通过参数交换信息,低耦合,尽量使用,
main(){sum(x,y)}
- 控制耦合 :传递的信息中有控制信息,中等耦合,少用
- 标记,特征耦合 :当把整个数据结构作为参数传递,只需要使用其中一部分数据元素时,就出现了特征耦合,少用
- 外部耦合:一组模块都访问同一环境联接(访问同一I/O)
- 公共环境耦合 :当两个或多个模块通过一个公共数据环境(全局数据结构,内存共享区)相互作用,送取data,介于数据耦合与控制耦合之间,限制范围(一读一写)
- 内容耦合:模块访问另一个模块的内部数据,或模块有多个入口 ,最高程度耦合,应该坚决避免使用内容耦合
root.m2.m1input = this.value;
内聚
启发规则
- 改进软件结构提高模块独立性
- 模块规模应该适中
- 深度、宽度、扇出和扇入都应适当
- 深度:软件结构中控制的层数
- 宽度:软件结构内同一个层次上的模块总数的最大值
- 扇出:一个模块直接控制(调用)的模块数目
- 扇入:一个模块被多少个上级模块直接调用的数目
- 模块的作用域应该在控制域之内
- 作用域:受该模块内一个判定影响的所有模块的集合。
- 控制域:模块本身以及所有直接或间接从属于它的模块的集合。
- 力争降低模块接口的复杂程度
- 设计单入口单出口的模块
- 模块功能应该可以预测
描绘软件结构的图形工具
层次图
层次图用来描绘软件的层次结构。与数据结构的层次方框图相同,但是表现的内容却完全不同。层次图很适于在自顶向下设计软件的过程中使用。
HIPO图
为了能使HIPO图具有可追踪性,在H图(层次图)里除了最顶层的方框之外,每个方框都加了编号
Yourdon图
一个方框代表一个模块,框内注明模块的名字或主要功能; 方框之间的箭头(或直线)表示模块的调用关系。尾部是空心圆表示传递的是数据,实心圆表示传递的是控制信息
☆面向数据流的设计方法
用形式化的方法由数据流图映射出软件结构
面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法。信息流有下述两种类型
- 变换流,一条变换链,输入流+变换流+输出流
- 事务流,先确定事务类型,多条事务处理链,事务中心+活动通路
变换分析
-
一级分解
-
二级分解