学习笔记之再学《软件工程概论》(二) 软件设计之概要设计与详细设计

1,058 阅读10分钟

养成好习惯,先设计后编码,规避绝大多数问题

软件设计

名词释义

概要设计:

将需求转化为数据结构和软件的系统结构

详细设计:

即过程设计,通过对系统结构进行细化,得到软件的详细数据结构和算法

设计维度

  • 数据设计: 将实体关系图中描述的对象和关系,以及数据字典中描述的详细数据内容转化为数据结构的定义
  • 体系结构设计: 划分软件系统模块及模块之间的关系
  • 接口设计: 根据数据流图中定义软件内部各成分之间、软件与其他协同系统之间及软件与用户之间的交互机制
  • 过程设计: 即详细设计,把结构成分转换成软件的过程性描述

如: 前端组件接收到的参数参数(数据设计),父子组件设计(体系结构设计),父子组件通信设计(接口设计),具体实现(过程设计)

概要设计

原则:模块化;抽象;自顶向下,逐步细化;信息隐蔽独立(核心)

模块独立性

准则: 模块间的耦合和模块的内聚

模块耦合

耦合松散,可测试性和可维护性会提高。

范式:尽量数据耦合,少用控制耦合,限制公共耦合,完全不用内容耦合

  • 非直接耦合: 即偶然耦合,通过主模块的控制和调用来实现的。如: Vue component
  • 数据耦合: 一个模块访问另一个模块时,彼此之间通过参数交换数据信息。
  • 标记耦合: 一组模块通过参数传递记录信息,这组模块共享了该记录。如: 子组件直接对传入的对象属性进行操作
  • 控制耦合: 一个模块通过传送控制信息来控制另一个模块的功能。如: 自定义组件渲染
  • 外部耦合: 一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息。如: 在模块A中,修改B中引用到的变量值a
  • 公共耦合: 一组模块访问同一个公共数据环境,如: 使用状态管理,往状态里传入数据和接收状态里的数据
  • 内容耦合: 有四个场景。一个模块直接(或通过不正常入口)访问另一模块内部数据;两个模块有一部分代码重叠;一个模块有多个入口。

模块内聚

  • 偶然内聚
  • 逻辑内聚
  • 时间内聚
  • 通信内聚
  • 信息内聚
  • 功能内聚

概要设计说明书

主要内容包括:

  1. 引言: 编写说明书的目的、背景,定义所用到的术语和缩略语,以及列出文档中所引用的参考资料等
  2. 概要设计: 用于说明软件的需求规格、运行环境要求、处理流程及软件体系结构等
  3. 运行设计: 用于说明软件的运行模块组合、运行控制方式及运行时间等
  4. 模块设计: 用于说明软件中各模块的功能、性能及接口等
  5. 数据设计: 用于说明软件系统所涉及的数据对象及数据结构的设计
  6. 出错处理设计: 用于说明软件系统可能出现的各种错误及可采取的处理措施

体系结构工具

结构图

又称SC图(Structure Chart),反映程序中各模块之间的调用关系和联系

形态特征:

  • 扇入: 表明多少个上级模块直接调用它。越大越好
  • 扇出: 表明一个模块直接控制(调用)的模块数目。扇出过大意味着模块过分复杂,需要控制和协调过多的下级模块;扇出过小意味着结构图的深度增加,增大了模块接口的复杂性,而且增加了调用和返回的时间,降低了工作效率。好的设计平均扇出通常是3或4
  • 深度: 层数越多,程序越复杂,程序的可理解性也随之下降。
  • 宽度: 表示同一层次模块总书的最大值
基本符号

用于标识模块,方框内标明模块名称

用于描述模块间调用关系

表示信息传递,空心表示传递的信息是数据,实心表示传递的是控制信息,箭头上标明信息名称

菱形表示模块A选择调用模块B或模块C

圆弧表示模块A循环调用模块B和模块C

层次图加输入/处理/输出图

又称HIPO(Hierarchy Plus Input/Processing/Output)图。

H图

层次图(Hierarchy Chart)表明各功能模块隶属关系。

IPO图

IPO图表明模块的数据输入、数据加工和数据输出之间的关系。

概要设计的启发式规则

  • 提高模块独立性: 高内聚低耦合
  • 模块大小要适中: 模块中的语句大概50~150行之间
  • 模块应具有高扇入和适当的扇出: 顶层扇出大,中层扇出小,底层扇入大,呈瓮形结构
  • 软件结构中的深度和宽度不宜过大: 深度和宽度之间要做平衡和折衷
  • 模块的作用域应处于控制欲之内: 最佳结构是父级模块控制下一级子模块
  • 尽量降低模块的接口复杂度: 减少接口传送的信息个数以及确保实参和形参的一致性和对应性
  • 设计单入口、单出口的模块
  • 模块功能应该可以预测: 相同的输入对应的输出一致

面向数据流的设计方法

结构化设计(SD)是基于数据流的设计方法,它是基于模块化、自顶向下、逐步细化等结构化程序设计技术的一种软件体系结构设计方法

SD方法实施步骤

  1. 研究、分析和审查数据流图。从软件的需求规格说明中弄清数据流的加功过程,对于发现的问题及时解决。
  2. 根据数据流图确定数据处理的类型。典型的数据流有两种类型:变换流和事务流,针对两种不同类型分别进行分析处理。
  3. 由数据流图推导出系统的初始结构图。
  4. 利用启发式规则改进系统初始化结构图,直到得到符合要求的结构图为止。
  5. 修订和补充数据字典

数据流

变换流

信息沿数据通路,先通过物理输入,由系统变换为逻辑输入,然后通过变换中心处理,再将信息的逻辑输出变换为物理输出。具有这种特性的信息称为变换流。

变换型系统结构图由输入、中心变换和输出三部分组成

事务流

信息沿数据通路到达一个处理中心(事务中心),根据信息类型决定从若干动作序列中选择一个来执行,这样的信息流称为事务流。

事务型软件结构图由事务中心和高层模块组成

详细设计

过程设计工具

程序流程图

是一种描述程序的控制结构流程和指令执行情况的有向图

程序流程图中的符号:

五种基本控制结构
  • 顺序型: 由几个连续的加工处理步骤依次排列构成

  • 选择型: 根据逻辑条件中判断表达式的取值来选择执行哪个加工处理步骤

  • 先判定型循环: 当循环控制条件成立时,重复执行特定的加工步骤

  • 后判定型循环: 重复执行特定的加工处理步骤,直到循环控制条件成立时停止

  • 多情况选择型: 列出多种加工情况,程序根据控制变量的取值,选择执行其一

盒图

又称N-S图(Nassi-Shneiderman),一种结构化程序设计的图形工具

问题分析图

又称PAD图(Problem Analysis Diagram, PAD)

其他

  • 判定表: 表格
  • 判定树: 树型
  • PDL预研: 是一种用于描述功能模块的算法设计和加工细节语言,称为过程设计语言,是一种伪代码

数据库设计

步骤

  1. 数据需求分析

进行数据库设计必须准确了解用户数据需求。需求分析是软件设计的基础,也是数据库设计的基础。需求分析是否充分、准确,决定了在其基础上构建的数据库的质量与效率。

  1. 概念结构设计

将需求分析得到的用户需求进行综合、归纳与抽象,形成信息结构即为概念模型,这一过程就是概念结构设计。描述概念模型的有力工具是ER图,其反映的是数据库实体概念、属性及联系

概念结构设计要求:

  • 能真实、充分反映现实世界,包括事物和事物之间的联系,能满足用户对数据处理要求
  • 易于理解
  • 易于修改
  • 易于向关系型、网状型、层次型等各种数据模型转换

概念结构设计的方法:

  • 自顶向下法: 先定义全局概念结构的框架,向下逐步细化
  • 自底向上法: 先定义各局部的概念结构,把他们集合起来得到全局概念结构
  • 逐步扩张法: 先定义核心概念结构,然后向外扩充,以滚雪球的方式逐步生产其他概念结构,直至形成总体概念结构
  • 混合策略: 自顶向下和自底向上的结合,自顶向下设计一个全局概念结构的框架,以它为骨架集成自底向上设计的各局部概念结构
  1. 逻辑结构设计

将ER图转换为选用DBMS产品(数据库管理系统)支持的数据模型相符合的逻辑结构。如:将多对多关系转化为数据库自持的一多或多一关系

  1. 物理结构设计
  • 确定所有数据库文件的名称、字段、类型和宽度
  • 确定所有数据库文件需要建立的索引
  1. 数据库的实施

将数据库的逻辑设计和物理设计用数据定义语言描述出来

  • 建立数据库结构
  • 数据载入
  • 应用程序的编写和调试
  • 数据库系统的试运行

接口设计

系统的接口是由穿越系统边界的数据流定义的。穿过系统便捷的数据流代表了系统的输入和输出

接口类型

主要包括三个方面:

  • 系统内模块之间的接口(内部接口)
  • 目标系统与其他软硬件之间的接口(外部接口)
  • 系统与用户之间的接口(人机交互界面)

应用程序编程接口

又称API(Application Programming Interface),是软件系统不同组成部分衔接的约定。

详细设计说明书

一、 引言
  1. 编写的目的: 编写详细设计说明书的目的,指明预期读者
  2. 背景: 项目相关信息,包括项目名称、提出者、开发者以及最终用户等
  3. 定义: 列出专业术语和外语缩写词的名称
  4. 参考资料: 相关参考资料的标题、作者等
二、系统的结构

描述每个模块及子程序的名称、标识符、功能及他们的层次结构与调用关系

三、程序n(标识符)设计说明
  1. 程序描述: 描述设计目的及程序特点
  2. 功能
  3. 性能
  4. 输入项
  5. 输出项
  6. 算法
  7. 流程逻辑: 以图表的形式描述程序的流程逻辑
  8. 接口
  9. 存储分配: 存储文件的存储方式及分配情况
  10. 注释设计
  11. 限制条件: 在运行环境种受到的限制
  12. 测试计划
  13. 尚未解决的问题