总体设计
来源:互联网 发布:linux 查看挂起进程 编辑:程序博客网 时间:2024/04/29 22:35
任务及过程:
一,任务
在需求阶段搞清楚了“做什么”的问题之后,在设计阶段,要把“做什么”的逻辑模型变换为“怎么做”的物理模型。
(主要任务:根据用户需求分析阶段得到的目标系统的物理模型确定一个特合理的软件系统的体系结构。)
二,过程
主要由系统设计和结构设计两个阶段组成。
1,设想供选择的方案
2,选取合理的方案
3,推荐最佳方案
4,功能分解
5,设计软件结构
6,数据库的设计
7,制定测试计划
8,书写文档
9,审查和复审
原理:
一,软件结构和过程
二,模块设计
模块化:
模块化是指解决一个复杂问题时自顶向下逐层把系统划分成若干模块的过程,有多种属性,分别反映其内部特性。
模块是数据说明、可执行语句等程序对象的集合,包含四种属性:
1,输入/输出。一个模块的输入/输出都是指同一个调用者。
2,逻辑功能。它是指模块能够做什么事,表达了模块把输入转换成输出的功能,可以是单纯的输入/输出功能。
3,运行程序。它是指模块如何用程序实现其逻辑功能。
4,内部数据。它是指属于模块自己的数据。
抽象:
抽象<——>具体。抽象是一种思维方式,这种方法在认识事物时,忽略事物的细节,通过事物本质的共同特性来认识事物。例如,把男人、女人、老人、小孩的共同本质特性抽出来之后,形成一个概念“人”,这个概念就是抽象的结果。
软件工程过程的每一步,都是对软件解法的抽象层次的一次细化。
在可行性研究阶段被看做是一个完整的系统部分;
在需求分析期间,用在问题环境中的熟悉的术语来描述软件的解法;
由总体设计阶段转入详细设计阶段时,抽象的程度进一步减少;
最后,当源程序写出时,也就达到了抽象的最底层。
信息隐蔽:
是指在设计和确定模块时,使得一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说是不能访问的或者说是“不可见”的。在软件设计中,模块的划分也要采取措施使它实现信息隐蔽。
模块独立性:
是指软件系统中的每个模块只涉及软件要求的具体子功能,而和软件系统中其他的模块接口是简单的。
模块的独立程度可由两个定性标准度量:耦合和内聚。
耦合:是对一个软件结构内各个模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度、调用模块的方式以及通过接口的信息。
在软件设计中应该尽可能采用松散耦合的系统。
模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性。
7种耦合类型:
非直接耦合
数据耦合
控制耦合
公共环境耦合
内容耦合
标记耦合
外部耦合
7种耦合类型的关系:
内聚:是标志一个模块内各个元素彼此结合的紧凑程度,其处理动作的组合程度,它是信息隐蔽和局部化概念的自然扩展。
内聚和耦合式密切相关的,模块内的高内聚往往意味着模块间的松耦合。
内聚和耦合都是进行模块化设计的有力工具,但是实践表明内聚更重要,应该把更多注意力集中到提高模块的内聚程度上。
7种内聚类型:
偶然内聚
逻辑内聚
时间内聚
过程内聚
通信内聚
信息内聚
功能内聚
7种内聚的关系:
三,结构设计
软件结构也可以描述为管道和过滤器式的、面向对象的、隐式请求的、层次化的、过程控制式等形式。
了解各种软件结构的风格特征,有助于读者确定对于一个给定的系统使用哪一种风格才是最适合的。
1,管道和过滤器
2,面向对象
3,隐式请求
4,层次化
5,过程控制
设计准则
总体设计设计即使过程又是模型。设计过程是一系列迭代的步骤,他们使设计者能够描述要构造的软件系统的特性。
拿设计房屋做例:先设计房子的整体构造——例如:卧室、厨房、客厅、厨房等的位置、面积;再细化布局——例如:添置床,沙发等家具;贴墙纸等工作。提供构造每个细节的指南。
同样,软件设计模型提供了软件元素的组织框架图。但是设计不是随意的、盲目的,它是要遵循一些基本准则的。
1,多样化设计
2,设计对于分析模型应该是可跟踪的
3,设计不应该从头做起
4,软件设计应该尽可能缩短软件和现实世界的距离
5,设计应该表现出一致性和规范性
6,设计的易修改性
7,容错性设计
8,设计的粒度要适当
9,在设计时就要开始评估软件质量
10,复审设计,减少设计引入的错误
总体设计的常用方法和工具
一,面向数据流的设计方法
1,交换流
2,事物流
3,变换分析
4,事务分析
5,软件模块结构的改进
二,面向对象结构的分析设计方法
- 总体设计
- 总体设计
- 总体设计
- 总体设计
- 聊天室应用程序 总体设计
- Engine总体设计思路
- 总体设计是建模
- 总体设计说明书
- 总体设计说明书
- Upop总体设计
- 软件工程 -- 总体设计
- 软件工程--总体设计
- 软件工程 之 总体设计
- dtplayer总体设计
- 游戏总体框架设计
- ViewPager设计总体思路
- 软件工程系列-总体设计
- rtems总体设计思路
- php JSON数组含中文,入库及读取
- sql distinct
- 一个程序员三十而立前的迷茫
- 张孝祥java.concurrent线程并发学习笔记 - 传统线程回顾
- 玩OpenNI的必不可少的工具是微软的Kinect或者华硕的Xtion
- 总体设计
- Beam搜素算法
- Android4.0源码在Eclipse调试
- sql distinct
- 最新网络流行伤感日志:如果我哭了,谁会心疼?
- redis2.4与2.6 性能比较
- [android]activity中每个方法用处
- 30岁前成功的12条黄金法则
- 使用ActivityGroup时,在Activity中显示对话框出现的问题