文章目录

  • 第四章 软件结构设计
    • 4.1 概述
      • 4.1.1 软件设计的过程
      • 4.1.2 软件结构设计的目标
      • 4.1.3 软件结构设计的任务
      • 4.1.4 软件结构设计的方法
    • 4.2 结构化设计的概念和原理
      • 4.2.1抽象和细化
      • 4.2.2 自顶向下,逐步求精
      • 4.2.3 信息隐藏和局部化
      • 4.2.4 模块化
      • 4.2.5 模块独立性
    • 4.3 结构设计的原则
    • 4.4 结构设计的图形工具
      • 4.4.1 层次图和HIPO图
      • 4.4.2 结构图
    • 4.5 面向数据流的设计方法
      • 4.5.1 数据流图的类型
      • 4.5.2 结构设计过程
      • 4.5.3 变换分析
      • 4.5.4 事务分析
      • 4.5.5 软件结构的优化

第四章 软件结构设计

软件设计从概念上分为结构设计和详细设计两个阶段。

结构设计又称总体设计,主要任务是制订系统实施方案和设计规范并合理确定软件系统的整体模块结构及接口关系。

详细设计又称模块设计,主要任务是详细规定每个模块功能的具体实现算法。

4.1 概述

软件设计的主要过程:将软件需求阶段产生的系统模型转化为软件设计模型。
概念:软件结构设计就是确定软件系统中每个过程是由哪些模块组成的,以及这些模块之间的关系

4.1.1 软件设计的过程

(1)从工程管理角度划分:
①总体设计:即概要设计,将软件需求转化为数据结构和软件的系统结构;确定系统接口、全局数据结构和数据库模式。
②详细设计:即过程设计,通过对结构表示进行细化,得到软件的详细的数据结构和算法;并用适当方式表示算法和数据结构的细节。

2)从技术角度划分:
①数据设计:将信息域分析模型变换成软件实现所需要的数据结构。
②体系结构设计:体系结构设计定义了软件的整体结构。
③接口设计:接口设计描述了软件内部、软件和写作系统之间以及软件同人之间如何通信。
④部件级设计:部件级设计将软件体系结构的结构性元素变换为对软件部件的过程性描述。

4.1.2 软件结构设计的目标

目标:综合采用各种技术手段,将系统需求转换为数据结构、模块结构(或对象/类结构)的表达形式,并实现系统的性能、安全性、可靠性要求,取得最佳方案。

结构设计的结果通常用模块结构图表达:

4.1.3 软件结构设计的任务

系统应该如何实现

(1)最佳的方案设计
(2)制订设计规范、标准及约定原则
(3)软件结构设计
       内容:
       ①采用某种设计方法,按照模块结构的原则,通过分解细化将一个复杂的系统划分为若干模块,逐步、逐层的设计软件的模块层次结构。
       ②确定每个模块功能,建立与已确定的软件需求的对应关系。
       ③确定模块之间的层次调用关系,模块之间的接口,评价模块结构的质量。
(4)数据结构及数据库设计
(5)网络系统设计
(6)系统安全性设计
(7)系统性能、可靠性设计
(8)设计文档编写
(9)评审

4.1.4 软件结构设计的方法

(1)结构化设计方法
与结构化分析方法相配合的设计方法

内容:根据系统的数据流进行设计,称为面向数据流的设计或者过程驱动的设计,遵循自顶向下的系统化分解的思想,应用一组转换规则讲软件的数据流图逐步转换为功能相对独立、执行相互协调、数据相互交换的一组模块的层次结构,并综合质量评价因素进行结构优化。

(2)数据结构驱动的设计方法
根据系统的数据结构进行设计,称为面向数据结构的设计或者数据驱动设计。
内容:首先用表达工具描述数据结构的格式,然后应用一组规则将数据结构格式转换为程序的控制结构格式,最后在细化定义。

(3)面向对象的设计方法
与面向对象分析方法相匹配的设计方法。

内容:依据面向对象分析建立的对象/类的分析模型,进一步分解和改进这个对象的层次模型,再通过确定对象的构造以及对象之间的动态关系,最后实现对象中提供的方法的过程设计。

4.2 结构化设计的概念和原理

结构化设计的核心思想:如何应用抽象的原则,将系统功能逐层分解为层次化的模块结构。。

4.2.1抽象和细化

(1)抽象手段
① 过程抽象
② 数据抽象

(2)细化
在原始说明的基础上进行详细说明,随着不断细化给出更多的细节。

4.2.2 自顶向下,逐步求精
4.2.3 信息隐藏和局部化
4.2.4 模块化

(1)模块
概念:指具有相对独立性的,由数据说明、执行语句等程序对象构成的集合。模块可以被单独命名,而且可通过名字来访问,例如,过程、函数、子程序、宏等都可以作为模块。

属性:
① 接口:指模块的输入与输出
② 功能:指模块实现什么功能
③ 逻辑:描述内部如何实现要求的功能及所需的数据,即描述模块内部该怎么做。
④ 状态:指该模块的运行环境和条件,即模块的调用与被调用关系。

(2)模块化
概念:按照规定原则,把软件划分成若干个模块,每个模块完成一个子功能,把这些模块集中起来组成一个整体,可以完成指定的功能,实现问题的求解,实际上是系统分解和抽象的过程。

4.2.5 模块独立性

(1)耦合
概念:指模块间互相连接的紧密程度的度量。

划分:
①非直接耦合
②数据耦合
③标记耦合
④控制耦合
⑤外部耦合
⑥公共耦合
⑦内容耦合

(2)内聚
内聚性:是对一个模块内部各个组成元素之间相互结合的紧密程度的度量指标。

划分:
①功能内聚
②顺序内聚
③通信内聚
④过程内聚
⑤时间内聚
⑥逻辑内聚
⑦偶然内聚

4.3 结构设计的原则

(1)降低模块的耦合性,提高模块的内聚性
(2)模块规模应该适中
(3)选择适当的深度、宽度、扇出和扇入
(4)模块的作用域应处于其控制域范围之内
(5)尽量降低模块的接口复杂度
(6)设计单入口单出口的模块
(7)模块功能应该可以预测

4.4 结构设计的图形工具

4.4.1 层次图和HIPO图

4.4.2 结构图

4.5 面向数据流的设计方法

4.5.1 数据流图的类型

(1)变换型数据流图
(2)事务型数据流图

4.5.2 结构设计过程

(1)分析并进一步精化系统的数据流图
(2)确定数据流的结构特征
(3)采用变换型设计方法或者事务型设计方法将数据流图逐步地转换为系统的模块结构
(4)根据模块独立性原则和设计质量评价标准,进一步精化模块结构。

4.5.3 变换分析

由变换型数据流图映射为软件结构的过程,称为变换分析。

步骤:
(1)确定输入、输出、变换的加工集合
(2)完成第一级分解,确定系统顶层模块
(3)继续下层分解

4.5.4 事务分析

由变换型数据流图映射为软件结构的过程,称为变换分析。

步骤:
(1)确定输入、事物变换、输出路径的集合
(2)完成第一层分解,确定系统顶层模块
(3)继续下层分解

4.5.5 软件结构的优化

软件工程总结笔记——软件结构设计(四)相关推荐

  1. 软件工程学习笔记《四》需求分析

    文章目录 软件工程学习笔记<目录> 需求工程师 当代的需求工程师需要具备的能力 当代的需求工程师需要努力的方向 当代的需求工程师需要注意的错误 需求的定义 需求目标 需求分析的实质 需求分 ...

  2. 【软件工程基础复习整理】第五章概要设计(3) 面向数据流图的软件结构设计

    面向数据流图的软件结构设计 是一种结构化的设计方法 研究.分析和神擦好数据流图,确保数据流图符合实际,必要时细化数据流图 确定数据流图的类型,即变换型的数据流或事物型的数据流 (变换型把数据变成另一种 ...

  3. 《面向对象软件工程》笔记(一)

    <面向对象软件工程>笔记第一章 软件和软件工程 1.软件的一种分类:定制软件Custom Software.通用软件Generic Software.嵌入式软件Embeded Softwa ...

  4. 软件工程考研笔记整理(三小时速成)(3)

    大家好,跟着软工考研软姐!学习软工无死角! 第四章 形式化说明技术 1按照形式化的程度划分: 1.非形式化:自然语言描述 2.半形式化:数据流图或实体-联系图 3.形式化:基于数学技术描述 2形式化方 ...

  5. 软件工程导论笔记(同步更新)(已结束更新)

    软件工程导论笔记 1.1软件危机 1.2软件工程 1.4软件过程 1.4.1瀑布模型 1.4.2快速原型模型 1.4.3增量模型 1.4.4螺旋模型 1.4.5喷泉模型 1.4.6Rational统一 ...

  6. microsoft store更新不动_App Store顶尖笔记软件大更新!快来看看有何不同!(文末有福利)...

    经过此次更新,goodnotes5 的界面变得更为直观,同时美观性上也有所提升.相比于老版本中只能通过左上角的"文档"进入/检索文件夹,新版本提供了与电脑界面相近的视图. 左图:老 ...

  7. 软件工程学习笔记《目录》

    软件工程学习笔记<目录> 软件工程学习笔记<一>什么是软件工程 软件工程学习笔记<二>代码规范 软件工程学习笔记<三>代码优化和性能测试 软件工程学习笔 ...

  8. 软件工程学习笔记《一》什么是软件工程

    文章目录 软件工程学习笔记目录 软件工程过程 软件工程方法 软件质量 软件质量如何评价 软件的质量模型 ISO9126模型 易用性: 效率 可维护性 可移植性 为什么内存缓冲区是2048或4096 软 ...

  9. 《大话软件工程—需求分析与软件设计》,给出了分析与设计过程中需要的理论、方法、工具和标准

    □ 做好一款软件从哪里开始呢?→ 客户需求的调研: □ 一款软件的价值高低由哪个环节决定呢?→ 软件的分析与设计: □ 软件顺利完成开发靠什么?→ 高效的项目管理: □ 软件开发的主要角色?→ 客户. ...

  10. Kinect开发学习笔记之(四)提取颜色数据并用OpenCV显示

    Kinect开发学习笔记之(四)提取颜色数据并用OpenCV显示 zouxy09@qq.com http://blog.csdn.net/zouxy09 我的Kinect开发平台是: Win7 x86 ...

最新文章

  1. 如何改变一个地图的Zoom单位
  2. 每日一皮:经历过的Bug修复过程...
  3. 深度学习如何入门?怎么入门机器/深度学习?
  4. awx文件解析_Android so(ELF)文件解析
  5. lucene7.5的数据结构
  6. 「第二篇」全国一等奖,经验帖。
  7. android 中Dialog对话框及自定义Dialog的方法
  8. 『设计模式』职责链模式(Chain of Responsibility) 可怜的加薪、请假之路
  9. 嵌入式Linux驱动学习之路(十五)按键驱动-定时器防抖
  10. Touch 方法属性 映射工具
  11. 努比亚红魔3开启预约:鲁大师跑分破47万
  12. 明略数据是谁?为何能拿下腾讯在行业AI的高额投资
  13. linux mint关于web开发的相关环境配置
  14. 2018年区块链将如何发展?
  15. 利用“Java同包同名类执行顺序”取消Java 网站应用程序Licence验证
  16. 学习中的一些牢骚。字符串栈/堆的址标准写法。
  17. I.MX6 CAAM
  18. MySQL5.7官网参考手册路径
  19. 百度招聘实习生:网页搜索部_语法研究实习工程师(七种语
  20. 电线带电时先接零线还是火线

热门文章

  1. pc端ui图片尺寸_PC端网页尺寸设计一
  2. AI笔记: 数学基础之齐次与非齐次线性方程组解的结构定理
  3. 苹果计算机磁盘格式,Mac怎么将ntfs格式的磁盘格式化
  4. 转:请对照这二十四条逻辑谬误自行打脸
  5. 向量空间相关概念总结-基
  6. [数值计算-11]:多元函数求最小值 - 偏导数与梯度下降法Python法代码示例
  7. 理解直推式学习和归纳式学习
  8. 台式计算机用什么网卡,台式机没有网卡怎么办
  9. 比较实型变量d是否为0为什么不能用d==0来表示
  10. JavaSE基础笔记——JOptionPane编写员工管理系统;GUI使用;写一个超级数组