1.结构化设计
传统软件工程方法学采用结构化设计技术(SD)。
从工程管理角度结构化设计分两步:
- 概要设计:将软件需求转化为数据结构和软件系统结构。
- 详细设计:过程设计,通过对结构细化,得到软件详细数据结构和算法。
1.1结构化设计与分析关系图

数据设计:数据模型及核心数据字典转变为数据结构。
体系结构设计:功能模型中数据流图转变成计算机模块框架。
接口设计:功能模型中数据流图转变成软件内部、软件与协作系统间、软件与用户间通信方式。
过程设计:行为模型及功能模型中的“处理规格说明”转换成软件构件过程描述。
2.模块化
模块(module)
“模块“又称”构件”一般指用一个名字调用的相邻程序元素序列。
模块化设计(modular design)
按适当的原则把软件划分为一个个较小的、相关而又相对独立的模块。
软件工程基本定理
设: C(x) 为复杂程度函数
E(x) 为决定解决问题x所需的工作量(时间)函数

3.抽象
抽出事物的本质特性,暂不考虑细节。
4.逐步求精
求精是指为了能集中精力解决主要问题,尽量推迟对细节问题的考虑,实际上是一个细化过程,与抽象是互补的概念。
抽象使得设计者能够说明过程和数据,同时却忽略底层细节;
求精帮助设计者在设计过程中揭示底层细节。
5.信息隐藏
每个模块的实现细节对于其他模块来说是隐藏的也就是说,模块中所包含的信息是不允许其他不需要这些信息的模块访问的。
每个客户只能通过接口来了解该模块,而所有的实现都隐蔽起来。

6.模块独立
具有独立功能且和其他模块没过多作用。
两条理由:
- 容易分工合作;
- 容易测试和维护,修改工作量较小,错误传播范围小,扩充功能容易。
两个定性度量标准:耦合和内聚。