【软件工程】软件工程系统设计——结构化设计

halo~我是bay_Tong桐小白
本文内容是桐小白个人对所学知识进行的总结和分享,知识点会不定期进行编辑更新和完善,了解最近更新内容可参看更新日志,欢迎各位大神留言、指点

【更新日志】

最近更新:

  • 暂无编辑记录,持续更新中……

结构化设计概述

结构化设计主要内容

在这里插入图片描述

  • 体系结构设计:结构化设计方法中,体系结构设计定义软件模块及其之间的关系,通常也称为模块设计
  • 接口设计:包括外部接口设计和内部接口设计
    外部接口设计:一句分析模型中顶层数据流图,完成包括用户界面、目标系统与其它硬件设备、软件系统的外部接口的设计
    内部接口设计:系统内部各种元素之间的接口
  • 数据设计:根据需求阶段所建立的实体-关系图(E-R图)来确定软件涉及的文件系统的结构及数据库的表结构
  • 过程设计:确定软件各个组成部分内的算法及内部数据结构,并选定某种表达形式来描述各种算法

结构化设计与结构化分析的关系

软件设计必须依据对软件的需求来进行,结构化分析的结果为结构画设计提供了最基本的输入信息
在这里插入图片描述
在这里插入图片描述
结构化设计方法的实施要点:

  • 首先研究、分析、审查数据流图,弄清数据流加工过程
  • 根据数据流图决定问题的类型。数据处理问题通常有两种类型,即变换型和事务型,针对不同的类型进行分析处理
  • 由数据流图推导出系统的初始结构图
  • 利用一些启发式原则来改进系统的初始结构图
  • 根据分析模型中的E-R图(数据模型)和数据字典进行数据设计,包括数据库设计或数据文件的设计
  • 在上面设计的基础上,依据分析模型中的加工规格说明(功能模型)、状态转换图及控制规格说明(行为模型)进行过程设计
  • 制定测试计划

结构化设计基础

概要设计的主要任务是把需求分析得到的结果转换为软件结构和数据结构,完成对应设计

模块与模块结构

模块: 一个软件系统通常由很多模块组成,结构化程序设计中的函数和子程序都可称为模块,它是程序语句按逻辑关系建立起来的组合体

原子模块: 对于大的模块,一般还可以继续分解或划分为功能独立的较小的模块。不能再分解的模块为原子模块

完全因子分解的系统: 全部实际加工都由原子模块来完成,而其他所有非原子模块仅仅执行控制或协调功能。完全因子分解的系统被认为是最好的系统,但实际上这只是力图达到的目标

一般地模块可以按照在软件系统中的功能划分为4种类型:

  • 传入模块:传入模块的功能是取得数据或输入数据,经过某些处理,再将其传送给其他模块。它传送的数据流A叫做逻辑输入数据流
  • 传出模块:传出模块的功能是取得输出数据,在输出之前可能进行某些处理,数据可能被输出到系统的外部,也可能会输出到其他模块做进一步的处理,但最终的目标是输出到系统的外部。它传送的数据流D叫做逻辑输出数据流
  • 变换模块:也叫加工模块,它从上级调用模块取得数据,进行特定的处理,转换成其他形式,再将加工结果返回给调用模块。它加工的数据流叫做变换数据流,如将B变换为C
  • 协调模块:协调模块本身一般不对数据进行加工,其主要功能是通过调用、协调和管理其他模块来完成特定的功能,如结构化程序设计种的主程序

在这里插入图片描述

模块结构: 表明了程序各个部件(模块)的组织情况,通常为树状结构或网状结构
在这里插入图片描述
树状结构中,位于最上层的根部是顶层模块,是程序的主模块,与其联系的有若干下属模块,可以看出模块间的层次关系,上层模块可调用下层模块,同一层模块之间不互相调用

网状结构中任意两个模块间都可以有调用关系,不存在层次从属关系

结构图

定义: 结构图(SC)是精确表达模块结构的图形表示工具,可以清楚地反映出软件模块之间的层次调用关系和联系,不仅严格定义了各个模块的名字、功能和接口,还集中反映了设计思想

模块的调用关系和接口: 结构图中,两个模块间用单向箭头联结,箭头从调用模块指向被调用模块,有些结构图中模块间的调用关系将箭头简单地画为连线,只要调用与被调用模块的上下位置保持就是允许的

模块间的信息传递: 调用模块把数据或控制信息传送给被调用模块,以使被调用模块能够运行,被调用模块在执行过程中又把它产生的数据或控制信息回送给调用模块

带数据流的结构图: 为了表示在模块之间传递的数据或控制信息,在联结模块的箭头旁给出短箭头,并用尾端带有空心圆的短箭头表示数据信息,用尾端带有实心圆的短箭头表示控制信息,通常短箭头附近应注有信息的名字
在这里插入图片描述
(有的结构图对这两种信息不加以区别,一律用注有信息名的短箭头表示)

条件调用和循环调用 : 当模块A有条件地调用另一个模块B时,在模块A的箭头尾部标以一个菱形符号;当一个模块A反复地调用模块C和模块D时,在调用箭头尾部则标以一个弧形符号(条件调用与循环调用所依赖的控制条件通常无须注明)
在这里插入图片描述
结构图的形态特征: 上级模块调用下级模块,它们之间存在主从关系
在这里插入图片描述

  • 模块间的调用连线若使用没有箭头的直线表示,则模块所处的位置表示它们之间的调用关系,上层的模块调用下层的模块
  • 结构图的深度:一定意义上反映了程序结构的规模和复杂程度,如上结构图深度为5
  • 结构图的宽度:结构图中同一层模块的最大模块数称为结构图的宽度
  • 模块的扇入和扇出:扇入定义为调用(或控制)一个给定模块的调用模块数目;扇出表示一个模块直接调用(或控制)的下属模块的数目。多扇入的模块通常欸公用模块;多扇出意味着要控制和协调许多下属模块

体系结构设计

结构化设计方法中,体系结构设计定义软件模块及其之间的关系,通常也称为模块设计

基于数据流方法的设计过程

定义: 基于数据流的设计方法可以很方便地将数据流图表示的数据流映射成软件结构,是一种结构化的软件体系结构设计方法,也称为结构化设计(SD)方法

主要步骤:

  • 复查并精化数据流图,对需求分析阶段得出的数据流图认真复查,并在必要时进行精化
  • 确定数据流图中数据流的类型,典型数据流类型有变换型数据流和事务型数据流,数据流类型决定的映射的方法
  • 导出初始的软件结构图,根据数据流类型应用变换型映射方法或事务型映射方法得到初始的软件结构图
  • 逐级分解,对软件结构图进行逐级分解,一般需要进行一级分解和二级分解
  • 精化软件结构,使用设计度量和启发式规则对得到的软件结构进一步精化
  • 导出接口描述和全局数据结构

基于数据流方法的设计过程:
在这里插入图片描述
典型的数据流类型: 变换型数据流和事务型数据流

  • 变换流:信息在“流”经系统时整个数据流呈现了以输入、变换、输出的顺序方式,沿一定路径前行的特征
  • 事务流:当数据流经过一个具有“事务中心”特征的数据处理时,它可以根据事务类型从多条路径的数据流中选择一条活动通路。

通常,一个系统中的所有数据流都可以认为是变换流,但当遇到有明显事务特性的数据流时,建议采用事务型映射方法进行设计。因此设计人员应当根据数据流图的主要问题类型选择一个面向全局的,设计整个软件范围的问题处理类型,而对于局部范围内是变换型还是事务型,可具体研究,区别对待

变换型问题设计(变换型数据流与变换型系统结构图、映射方法)

变换型数据流与变换型系统结构图

变换型数据处理问题的过程大致分为三步:取得数据、变换数据、给出数据,其中变换数据是数据处理过程的核心工作,取得数据是为变换而做的准备工作,给出数据则是对变换后的数据进行后处理工作
在这里插入图片描述
对应于取得数据、变换数据、给出数据,系统的结构图由输入、中心变换和输出三部分组成
在这里插入图片描述
由上图可知

  • 顶层模块(①)首先得到控制,沿着结构图的左支依次调用其下属模块,直至底层读入数据A
  • 对A进行预加工(②),转换成B向上回送
  • 进行对B进行加工(③),转换成逻辑输入C回送给主模块
  • 主模块得到数据C之后,控制中心变换模块(④),将C加工成D
  • 调用传出模块输出D时,由传出模块调用后处理模块⑤,将D加工成适于输出的形式E,最后输出结果E

变换型映射方法: 一系列设计步骤的总称,经过这些步骤,将具有变换流特点的数据流图按预先确定的模式映射成软件结构

变换分析方法主要步骤:

(1)确定DFD中的变换中心、 逻辑输入和逻辑输出

介于逻辑输入和逻辑输出之间的加工就是变换中心,即主加工。若一下不能确定,则要从物理输入端开始,沿着数据流方向向系统中心寻找,直到有这样的数据流,它不能再被看作是系统的输入则它的前一个数据流就是系统的逻辑输入。同理,从物理输出端开始,逆数据流方向向中间移动,可以确定系统的逻辑输出
在这里插入图片描述
也有的系统仅有输入部分和输出部分,没有中心变换部分

(2)进行一层分解,设计软件结构的顶层和第一层(变换结构)

变换中心确定以后,就相当于决定了主模块的位置, 这就是软件结构的顶层。主模块确定之后,根据DFD图设计软件结构的第一层,第一层至少要有输入、输出和变换三种功能的模块

以第1步中的数据流图为例,进行一层分解,即

  • 为每个逻辑输入设计一个输入模块,其功能为向顶层模块提供相应的数据,如图中的f3;
  • 为每个逻辑输出设计一个输出模块,其功能为输出顶层模块的信息,如图中的f7,f8;
  • 同时,为变换中心设计一个变换模块,它的功能是将逻辑输入进行变换加工,然后逻辑输出,将f3变换成f7和f8

在这里插入图片描述
(3)进行二级分解,设计中、下层模块

对第一层的输入、变换及输出模块自顶向下、逐层细化,分别设计它们的从属模块

输入模块的功能是向它的调用模块提供数据, 所以必须要有数据来源。这样输入模块应由接收数据和转换模块所需的信息两部分组成。每个输入模块可以设计成两个下属模块:一个接收,一个转换。用类似的方法一直分解下去,直到物理输入端
在这里插入图片描述
输出模块的功能是将它的调用模块产生的结果送出,这样输出模块应由转换模块和输出数据所需的信息两部分组成。每个输出模块可以设计成两个下属模块:一个转换, 一个发送, 一直到物理输出端
在这里插入图片描述

中心变换模块的下层模块没有通用的方法,按照模块独立性的原则来组织其结构,一般对DFD中每个基本加工建立一个功能模块
在这里插入图片描述
(4)设计的优化

  • 输入部分的求精:对每个物理输入设置专门模块,以体现系统的外部接口;其他输入模块并非真正输入,当它与转换数据的模块都很简单时,可将它们合并成一个模块
  • 输出部分的求精:为每个物理输出设置专门模块,同时注意把相同或类似的物理输出模块合并在一起,以减低耦合度
  • 变换部分的求精:根据设计准则,对模块进行合并或调整

在这里插入图片描述
在这里插入图片描述

事务型问题设计(事务型数据流与事务型系统结构图、映射方法)

事务型数据流与事务型系统结构图

事务型通常是接受一项事务,根据事务处理的特定和性质,选择分派一个适当的处理单元,然后给出结果。完成选择分派任务的部分叫作事务处理中心(或分派部件)
在这里插入图片描述

在事务型系统结构图中,事务中心模块按所接受的事务类型,选择某一个事务处理模块执行,各个事务处理模块是并列的,依赖于一定的选择条件,分别完成不同的事物处理工作,每个事务处理模块可能要调用若干个操作模块,而操作模块又可能调用若干个细节操作模块。

由于不同的事务处理模块可能有共同的操作,所以某些事物处理模块可能共享一些操作模块;同样,不同的操作模块可以有相同的细节,所以某些操作模块又可以共享一些细节模块
在这里插入图片描述
事务型系统的结构图可以有多种不同的形式(有多操作层或无操作层)。上图的简化形式是叭分析作业和调度都归入事务中心模块
在这里插入图片描述
事务型系统结构图在数据处理中经常遇到,但更多的是变换型与事务型系统结构图的结合

事务型映射方法: 在很多软件应用中,存在某种作业流,它可以引发一个或多个处理,这些处理能够完成该作业要求的功能,这种数据流就叫做事务。与变换分析一样,十五分析也是从分析数据流图开始,自顶向下,逐步分解

事务分析方法主要步骤:

  • 识别事务源
  • 规定适当的事务型结构
  • 识别各种事务和它们定义的操作
  • 注意利用公用模块
  • 建立事务处理模块
  • 对事务处理模块规定它们全部的下层操作模块
  • 对操作模块规定它们的全部细节模块

【持续更新中……】

H图、IPO图、HIPO图与结构图的关系

H图: 不带数据流,用直线进行联系的结构图。也称层次图
HIPO图: 层次图+输入/处理/输出图的缩写,即H图基础上除最顶层模块,其余模块均需进行编号,且各自可配有一张IPO图表,以进行信息的详细说明
IPO图: 输入/处理/输出图的简称,它是美国IBM公司提出的一种图形工具,能够方便地描绘输入数据、处理数据和输出数据的关系

可参照此篇站外文章《层次图和HIPO图—描绘软件结构的图形工具》

接口设计

依据: 数据流图中的自动化系统边界,即软件系统边界之外的是手工处理部分,系统边界之内的是系统处理部分。数据流可以在系统内部、系统外部或穿过系统边界,穿过系统边界的数据流代表了系统的输入和输出

也即系统的接口设计是由穿过边界的数据流定义的

主要方面: 模块或软件构件间的接口设计、软件与其他软硬件系统之间的接口设计、软件与人(用户)之间的交互设计

其中人机交互是很重要的一方面,而人机交互(用户)界面是人机交互的主要方式。人机交互设计需主要考虑以下几个方面的问题

用户界面应具备的特性:

  • 可使用性:包括使用简单、界面一致、拥有帮助功能、快速的系统响应和低的系统成本、具有容错能力等
  • 灵活性:考虑到用户的特点、能力和知识水平,应当使用户接口满足不同用户的要求
  • 可靠性:用户界面的可靠性是指无故障使用的间隔时间。用户界面应能保证用户正确、可靠地使用系统,保证有关程序和数据的安全性

用户类型:

  • 外行型:以前从未使用过计算机系统的用户
  • 初学型:尽管对新的系统不熟悉,但对计算机还有一些使用经验的用户
  • 熟练型:对一个系统有相当多的经验,能够熟练操作的用户
  • 专家型:这一类用户了解系统内部的构造,有关于系统工作机制的专业知识,具有维护和修改基本系统的能力。专家型需要为他们提供能够修改和扩充系统能力的复杂界面

界面设计类型:

  • 使用的难易程度:对没有经验的用户而言
  • 学习的难易程度:学习该界面的命令和功能的难度
  • 操作速度:完成一个指定操作时在操作步骤、击键和反应时间等方面效率有多高
  • 复杂程度:该界面提供了什么功能、能否用新的方式组合这些功能以增强界面的功能
  • 控制:交互时是由计算机还是由人发起和控制对话
  • 开发的难易程度:界面设计的难度、开发工作量有多大

设计详细的交互: 人机交互的设计有若干准则,包括以下内容

  • 一致性。采用一致的术语、一致的步骤和一致的活动
  • 操作步骤少。使击键或点击鼠标的次数减到最少,甚至要减少做某些事所需的下拉菜单的距离
  • 不要“哑播放”。每当用户要等待系统完成一个动作时,要给出一些反馈信息,说明工作正在进展及取得了多少进展
  • 用户的操作错误很难免,对于基本的操作应提供恢复功能,或至少是部分恢复
  • 减少人脑的记忆负担。不应该要求人从一个窗口中记住某些信息,然后在另一个窗口中使用
  • 提高学习效率。为高级特性提供联机帮助,以便用户在需要时容易找到

数据设计

数据是软件系统中的重要组成部分,设计阶段必须对要存储的数据及其结构进行设计。由于关系数据库已经相当成熟,应用开发中大多数都会选择关系数据库,在数据存储和管理方面可以省去很大的开发工作量

这一部分主要涉及数据库原理相关知识,这里暂时不做详细阐述

过程设计

概要设计的任务完成后,就进入详细设计阶段,即过程设计阶段,这个阶段要决定各个木块的实现算法,并使用过程描述工具精确地描述这些算法

专用的描述工具可以分为以下几类:

  • 图形工具——把过程的细节用图形方式描述出来。如程序流程图、N-S图、PAD图、决策树等
  • 表格工具——用一张表来表达过程的细节,这张表列出了各种可能的操作及其相应的条件,即描述了输入、处理和输出信息。如判定表
  • 语言工具——用某种类高级语言(伪代码)来描述过程的细节

【持续更新中……】

持续更新中……
我是桐小白,一个摸爬滚打的计算机小白

猜你喜欢

转载自blog.csdn.net/bay_Tong/article/details/111832128