1、典型的总体设计步骤:
①确定最佳方案
②功能分解
③体系结构设计
④模块设计
⑤数据结构与数据库设计
⑥用户界面设计
⑦设计完成设计文档
⑧评审
总体设计的目的:概括地回答系统应该如何实现这个问题。

2、设计原理:
①模块化:模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。但是不能无限制地分割软件,这是因为虽然分割软件让开发单个模块的成本下降了,但是模块之间接口的设计成本又增加了,所以应该在一定范围内分割软件
②抽象:抽出事务的本质特性而暂时不考虑实现细节。软件工程过程的每一步都是对软件解法的抽象层次的一次精化。在可行性研究阶段,软件作为系统的一个完整部件;在需求分析期间,软件解法是使用在问题环境内熟悉的方式描述的;当由总体设计向详细设计过渡时,抽象的程度也就随之减少了;最后,当源程序写出来以后,也就达到了抽象的最低层
③逐步求精:逐步求精定义为为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。抽象与求精是一对互补的概念。
④信息隐藏:信息隐藏是指应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的
⑤局部化:是指把一些关系密切的软件元素物理地放得彼此靠近
⑥模块独立:模块的独立程度可以由两个定性标准度量,这两个标准分别称为内聚(模块内部数据的紧密程度)和耦合(模块之间相互连接紧密程度)。往往模块之间耦合性高,则模块内部的内聚性就低;模块之间耦合性低,则模块内部的内聚性就高。在把软件系统划分为模块时,要尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。

3、耦合性
耦合性是指软件结构中模块相互连接的紧密程度,是模块间相互连接性的度量。耦合强度的大小是由模块间的接口的复杂程度决定的。具体从三个方面衡量:方式、作用、数量。模块分解的目标是让模块间的联系尽可能少,可以通过模块用过程语句调用其他模块、传送数据型参数、让共用信息尽可能少等方式来实现。
耦合共有七种类型,这七种类型的耦合性依次降低:
①内容耦合:一个模块直接访问另一个模块的内部数据,或一个模块不通过正常入口转到另一个模块的内部,或一个模块有多个入口,或两个模块有代码重叠。高级语言中是不允许出现这种现象的
②公共耦合:若干模块访问一个公共的数据环境,公共耦合有两种情况,松散公共耦合(模块同时只能对公共数据环境进行读或写的一种操作,是一种低耦合方式)和紧密公共耦合(若干模块对公共数据环境同时读或写,是一种强耦合方式)。其中紧密公共耦合严重影响模块的可靠性和可适应性。一般来说,仅当模块间共享的数据很多,且通过参数的传递很不方便时,才使用公共耦合。
③外部耦合:一组模块都访问同一全局简单变量(而不是同一全局数据结构 ),而且不是通过参数表传递该全局变量的信息。
④控制耦合:一个模块传递给另一模块的信息是用于控制该模块内部逻辑的控制信号。显然,对被控制模块的任何修改,都会影响控制模块。
⑤标记耦合:一个模块传送给另一个模块的参数是一个复合的数据结构。标记耦合会使某些本来无关的模块产生相互依赖性,同时由于某些模块包含了不需要的数据,也给纠错带来了麻烦。
⑥数据耦合:一个模块传送给另一个模块的参数是一个单个的数据项或者单个数据项组成的数组。模块间传递的是简单的数据值,相当于高级语言中的值传递。
⑦非直接耦合:两个模块间没有直接的关系,它们分别从属于不同模块的控制与调用,它们之间不传递任何信息。这种耦合程度最弱, 模块的独立性最高。

4、内聚性
内聚性表示一个模块内部各个元素(数据、处理)之间联系的紧密程度。它是信息隐蔽和局部化概念的自然扩展,是从功能的角度来度量模块间的联系。显然,块内联系愈紧,即内聚性愈高,模块独立性愈好。
块内联系的类型分为七种,内聚性依次增高:
①偶然内聚:又称为巧合型,为了节约空间,将毫无关系(或者联系不多)的各元素放在一个模块中。模块元素关系松散,显然不易理解、不易修改。
②逻辑内聚:将几个逻辑上相似的功能放在一个模块中,使用时由调用模块传递的参数确定执行的功能。由于要传递控制参数,所以影响了模块的内聚性。
③时间内聚:又称为经典内聚。是把需要同时执行的成分放在一个模块中。比如初始化、中止操作这一类内部结构比较简单的模块。由于判定较少,因此比 逻辑内聚高,但是由于内含多个功能,修改和维护困难。
④过程内聚:一个模块内的处理元素是相关的,而且必须以特定的次序执行。一个模块内有多个功能成分。
⑤通信内聚:模块中的成分引用共同的输入数据,或者产生相同的输出数据,则称为是通信内聚。
⑥顺序内聚:一个模块内的处理元素都密切相关于同一功能,模块中某个成分的输出是另一成分的输入。由于这类模块是按数据执行顺序,模块的一部分依赖于另外一部分,因此具有较好的内聚性。顺序内聚模块可能含有多个功能,也可能只含有不完整的部分功能。当模块含有多个功能时,如果修改某一功能,就要找出模块中这个功能的全部部分,修改时还要注意对其他功能的影响;如果模块只含有不完整的部分功能,修改时需要找出与完整功能有关的若干个相邻模块,还需要了解这些模块都做些什么事情。
⑦功能内聚:一个模块包括而且仅包括完成某一具体功能所必须的所有成分。或者说,模块的所有成分都是为完成该功能而协同工作、紧密联系、不可分割的。

5、启发规则
①改进软件结构提高模块独立性
②模块规模应该适中
③深度、宽度、扇出和扇入都应适当
④模块的作用域应该在控制域之内(其中作用域是指受该模块内一个判定影响的所有模块的集合,控制域是指模块本身以及所有直接或间接从属于它的模块的集合。具体方法为将做判定的点上移或者将在作用域但不在控制域中的模块移到控制域中)
⑤力争降低模块接口的复杂程度
⑥设计单入口单出口的模块
⑦模块功能应该可以预测

6、描绘软件结构的图形工具
①层次图与HIPO图
层次图用来描绘软件的层次结构。它与数据结构的层次方框图相同,但是表现的内容却完全不同。层次图很适于在自顶向下设计软件的过程中使用。HIPO图在层次图的基础上,在除了顶层之外的方框之外的每一个方框都加了编号。

②结构图
结构图中一个方框代表一个模块,框内注明模块的名字或主要功能; 方框之间的箭头(或直线)表示模块的调用关系。尾部是空心圆表示传递的是数据,实心圆表示传递的是控制信息。选择调用在分支处补上一个菱形,循环调用则是在分支处用回旋箭头表示。

7、分布式系统结构主要包括:多处理器体系结构客户/服务器体系结构

软件工程导论 05章总体设计相关推荐

  1. 软件工程导论 1-13章 重点定义及解释

    软件工程导论 第一章 概述 第二章 可行性研究 第三章 需求分析 第五章 总体设计 第六章 详细设计 第七章 实现 第八章 维护 第九章 面向对象方法学引论 第十章 面向对象分析 第十一章 面向对象设 ...

  2. 软件工程-第五章-总体设计

    软件工程-第五章-总体设计 5. 总体设计 5.1 设计过程 5.2 设计原理 5.2.1 模块化 5.2.2 抽象 5.2.3 逐步求精 5.2.4 信息隐藏和局部化 5.2.5 模块独立 5.3 ...

  3. 软件工程第五章——总体设计

    总体设计的基本目的就是回答"概括地说,系统应该如何实现"这个问题,因此,总体设计又称为概要设计或初步设计. 总体设计阶段的另一项重要任务是设计软件的结构,也就是要确定系统中每个程序 ...

  4. 软件工程导论 01章软件工程学概述

    1.软件是程序.数据以及各种相关文档的集合. 程序是对计算任务的处理规则的描述,数据是对计算任务的处理对象的描述,文档则是有关计算机程序功能.设计.编制与使用的文字图形资料. 软件等于程序加数据加相关 ...

  5. 软件工程--第五章-- 总体设计

    文章目录 设计原理 模块化 ==模块独立性 (最重要的特性)== 抽象 逐步求精 启发式规则 图形工具 面向数据流的设计方法 概要设计说明书 系统的总体设计=概要设计/初步设计 这个阶段任务:划分出组 ...

  6. 软件工程导论 00章数据流图与数据字典

    1.数据流图的概念 数据流图用于描述信息流和数据从输入移动到输出过程中所经受的变换 2.数据流图的绘制: ①基本图形符号 ②数据流之间的关系 ③几个特定名词 a. 数据流 是数据在系统内传播的路径,由 ...

  7. 软件工程导论 09章面向对象方法学

    1.面向对象方法学的出发点和基本原则,是尽可能摸清人类习惯的思维方式,让开发方法和过程尽可能接近人类认知世界的方法与过程. 面向对象方法=对象+类+继承+消息实现通信 2.面向对象方法的要点: ①面向 ...

  8. 软件工程导论 08章软件维护

    1.软件维护是指在软件已经交付使用后,为了改正错误或者满足新的需求而修改软件的过程. 2.软件维护分为四类 ①改正性维护(修改诊断隐藏的错误) ②适应性维护(适应环境变化而修改软件) ③完整性维护(扩 ...

  9. 软件工程导论 07章软件测试

    1.软件测试的目标 尽可能多地发现并排除软件中潜藏的错误,最终给用户一个高中质量的软件系统. 2.软件测试的定义 为了发现程序中的错误而执行程序的过程 3..软件测试的原则 ①所有测试都应追溯到需求 ...

最新文章

  1. gcvt字符串转换函数应用实例
  2. PMP每日三题(2022年3月8日)
  3. 重温Javascript(四)-函数
  4. ActiveMQ_Windows版本的安装部署
  5. Python 深度学习库 Keras 发布官方中文文档,这里有你需要了解的一切
  6. SQL--查询无记录,显示默认一条记录
  7. Python堆叠式神经网络模型实践【Stacking策略+Keras框架】,GUI可视化应用
  8. Postgresql使用技巧
  9. linux 两块硬盘合并成一块
  10. nova7可以升级成鸿蒙20系统,华为nova7升级到EMUI11,8大功能提升,带来更新体验...
  11. 暑假java培训班,分享面经!
  12. 核磁共振成像读片指南(二)
  13. 解决:el-table组件中设置show-overflow-tooltip属性,数据过多时闪烁不显示不能复制问题。
  14. spark shuffle 内幕彻底解密
  15. AT8236控制代码
  16. 计算机二级msoffice裸考,如何拯救计算机二级office裸考,附计算机二级题库
  17. windows字体转移至linux,由 Windows 向 Linux 迁移字体 和 Linux 等宽字体
  18. [Java]代码实现图像转换成文本
  19. 服务器对接虚拟主机,服务器对接虚拟主机
  20. windows无法访问指定设备路径或文件怎么回事(系统找不到指定路径解决方法)

热门文章

  1. 剑指offer系列48---左旋转字符串
  2. SQL Server 锁
  3. DataList绑定xml数据,并实现删除和修改
  4. 当CodeSmith不在时……
  5. Windows Server 2008 R2 Tomcat 开机自启动
  6. idea使用activiti插件
  7. 第一个Polymer应用 - (2)创建你自己的元素
  8. 《编程导论(Java)·9.3.1回调·3》回调的实现
  9. LeetCode:二进制求和【67】
  10. js 文件引用传递参数