软件工程——结构化设计

一、结构化软件设计的任务

在结构化设计方法中,概要设计阶段将软件需求转化为数据结构和软件的系统结构。概要设计阶段要完成体系结构设计、数据设计及接口设计。详细设计阶段要完成过程设计。

软件工程——结构化设计_第1张图片

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

软件工程——结构化设计_第2张图片

结构化设计方法的实施要点:

        (1) 研究、分析和审查数据流图。

        (2) 根据数据流图决定问题的类型:变换型和事务型。针对两种不同的类型分别进行分析处理。

        (3) 由数据流图推导出系统的初始结构图。

        (4) 利用一些启发式原则来改进系统的初始结构图,直到得到符合要求的结构图为止。 

        (5) 根据分析模型中的实体关系图和数据字典进行数据设计,包括数据库设计或数据文件的设

      (6) 在上面设计的基础上,并依据分析模型中的加工规格说明、状态转换图进行过程设计

        (7) 制定测试计划 

三、模块结构表示——结构图

结构图(structure chart,SC)是精确表达模块结构的图形表示工具

(1) 模块的调用关系和接口:在结构图中,两个模块之间用单向箭头连接。箭头从调用模块指向被调用模块,表示调用模块调用了被调用模块。但其中隐含了一层意思,就是被调用模块执行完成之后,控制由返回到调用模块。

(2) 模块间的信息传递:当一个模块调用另一个模块时,调用模块把数据或控制信息传送给被调用模块,以使被调用模块能够运行。

软件工程——结构化设计_第3张图片

 (3)两个辅助模块(条件调用和反复调用)

        当模块A有条件地调用另一个模块B时,在模块A的箭头尾部标以一个菱形符号;当一个模块A反复地调用模块C和模块D时,在调用箭头尾部则标以一个弧形符号

软件工程——结构化设计_第4张图片

 (4)结构图的形态特征

模块间的连线:模块之间的调用箭头也可用没有箭头方向的直线表示,在用直线表示时,用模块所处的位置表示它们之间的调用关系,位于上方的模块调用位于下方的模块。

结构图的深度:在多层次的结构图中,模块结构的层次数称为结构图的深度。

结构图的宽度:结构图中同一层模块的最大模块数称为结构图的宽度。

模块的扇入扇出:扇出表示一个模块直接调用(或控制)的下属模块的数目。扇入则定义为调用(或控制)一个给定模块的调用模块的数目。多扇出意味着需要控制和协调许多下属模块。而多扇入的模块通常时公用模块。

四、体系结构设计

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

软件工程——结构化设计_第5张图片

4.2 典型的数据流类型和系统结构

        典型的数据流类型有变换型数据流和事务型数据流,数据流的类型不同,得到的系统结构也不同。 通常,一个系统中的所有数据流都可以认为是变换流,但是,当遇到有明显事务特性的数据流时,建议采用事务型映射方法进行设计。

4.2.1变换型数据流

变换型数据处理问题的工作过程大致分为3步,即取得数据、变换数据和给出数据

变换型系统的结构图相应于取得数据、变换数据、给出数据、系统的结构图由输入、中心变换和输出3部分组成

软件工程——结构化设计_第6张图片

 4.2.2事务型数据流

通常接受一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元,然后给出结果。 完成选择分派任务的部分称为事务处理中心,或分派部件。

软件工程——结构化设计_第7张图片

4.3映射方法

4.3.1变换型映射方法

变换分析方法:

        (1) 重画数据流图。在需求分析阶段得到的数据流图侧重于描述系统如何加工数据,而重画数据流图的出发点是描述系统中的数据是如何流动的。

        (2)在数据流图上区分系统的逻辑输入、逻辑输出和中心变换部分。  

        (3) 进行一级分解,设计系统模块结构的顶层和第一层。自顶向下设计的关键是找出系统树形结构图的根或顶层模块。 首先设计一个主模块,并用程序的名字为它命名,然后将它画在与中心变换相对应的位置上。 第1层设计:为每个逻辑输入设计一个输入模块,它的功能是为主模块提供数据;为每个逻辑输出设计一个输出模块,它的功能是将主模块提供的数据输出;为中心变换设计一个变换模块,它的功能是将逻辑输入转换成逻辑输出

        (4) 进行二级分解,设计中、下层模块。 这一步工作是自顶向下,逐层细化,为每一个输入模块、输出模块、变换模块设计它们的从属模块。 设计下层模块的顺序是任意的。但一般是先设计输入模块的下层模块。

软件工程——结构化设计_第8张图片

 4.3.2事务型映射方法

        在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处理,这些处理能够完成该作业要求的功能。这种数据流就叫做事物。

事务分析也是从分析数据流图开始,自顶向下,逐步分解,建立系统的结构图。

事务分析方法:

        (1) 识别事务源。利用数据流图和数据词典,从问题定义和需求分析的结果中,找出各种需要处理的事务。

        (2) 规定适当的事务型结构。在确定了该数据流图具有事务型特征之后,根据模块划分理论,建立适当的事务型结构。

        (3) 识别各种事务和它们定义的操作。

        (4) 注意利用公用模块。

        (5) 建立事务处理模块。对每一事务,或对联系密切的一组事务,建立一个事务处理模块。

        (6) 对事务处理模块规定它们全部的下层操作模块。

        (7) 对操作模块规定它们的全部细节模块。    

大型的软件系统通常是变换型结构和事务型结构的混合结构,所以,我们通常利用以变换分析为主,事务分析为辅的方式进行软件结构设计。

五、接口设计

接口设计的依据是数据流图中的自动化系统边界。

接口设计主要包括3个方面:模块或软件构件间的接口设计;软件与其他软硬件系统之间的接口设计;软件与人(用户)之间的交互设计。人机交互(用户)界面是人机交互的主要方式。

5.1用户界面应具备的特性  

可使用性:包括使用简单、界面一致、拥有HELP帮助功能、快速的系统响应和低的系统成本、具有容错能力等。

灵活性:考虑到用户的特点、能力和知识水平,应当使用户接口满足不同用户的要求。

可靠性:用户界面的可靠性是指无故障使用的间隔时间。用户界面应能保证用户正确、可靠地使用系统,保证有关程序和数据的安全性。

人机交互的设计有若干准则

 (1) 一致性。采用一致的术语、一致的步骤和一致的活动。

(2) 操作步骤少。使击键或点击鼠标的次数减到最少,甚至要减少做某些事所需的下拉菜单的距离。

(3) 不要“哑播放”。

(4) 提供Undo功能。

(5) 减少人脑的记忆负担。不应该要求人从一个窗口中记住某些信息,然后在另一个窗口中使用。

(6) 提高学习效率。为高级特性提供联机帮助,以便用户在需要时容易找到。

六、数据设计

文件设计   以下几种情况适合于选择文件存储。

(1) 数据量较大的非结构化数据,如多媒体信息。

(2) 数据量大,信息松散,如历史记录、档案文件等。

(3) 非关系层次化数据,如系统配置文件。

(4) 对数据的存取速度要求极高的情况。

(5) 临时存放的数据。

七、数据库设计

根据数据库的组织,可以将数据库分为网状数据库、层次数据库、关系数据库、面向对象数据库、文档数据库、多维数据库等。 关系数据库最成熟,应用也最广泛,一般情况下,大多数设计者都会选择关系数据库。 在结构化设计方法中,很容易将结构化分析阶段建立的实体—关系模型映射到关系数据库中。

八、过程设计

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

 表达过程规格说明的工具称为过程描述工具,可以将过程描述工具分为以下3类。

(1) 图形工具:把过程的细节用图形方式描述出来,如程序流程图、N-S图、PAD图、决策树等。

(2) 表格工具:用一张表来表达过程的细节。这张表列出了各种可能的操作及其相应的条件,即描述了输入、处理和输出信息,如决策表。

(3) 语言工具:用某种类高级语言(称为伪代码)来描述过程的细节,如很多数据结构教材中使用类Pascal、类C语言来描述算法。

8.1 结构化程序设计

概念:如果一个程序的代码块仅仅通过顺序、选择和循环这三种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。

结构程序设计的主要原则

(1)使用语言中的顺序、选择、重复等有限的基本控制结构表示程序逻辑。

(2)选用的控制结构只准许有一个入口和一个出口。

(3)程序语句组成容易识别的块(Block),每块只有一个入口和一个出口。

(4)复杂结构应该用基本控制结构进行组合嵌套来实现。

(5)语言中没有的控制结构,可用一段等价的程序段模拟, 但要求该程序段在整个系统中应前后一致

(6) 严格控制GOTO语句,仅在下列情形才可使用: 用非结构化的程序设计语言去实现结构化的构造。

(7) 在程序设计过程中,尽量采用自顶向下(Top-Down)、逐步细化(Stepwise  Refinement)的原则,由粗到细,一步步展开。

8.2程序流程图

程序流程图也称为程序框图,是软件开发者最熟悉的算法表达工具

8.2.1程序流程图的基本控制结构

(1) 顺序型:几个连续的加工步骤依次排列构成。

(2) 选择型:由某个逻辑判断式的取值决定选择两个加工中的一个。

(3) 先判定(while)型循环:在循环控制条件成立时,重复执行特定的加工。

(4) 后判定(until)型循环:重复执行某些特定的加工,直至控制条件成立。

(5) 多情况(case)型选择:列举多种加工情况,根据控制变量的取值,选择执行其一。

软件工程——结构化设计_第9张图片

 8.2.2程序流程图的标准符号:

循环的界限设有一对特殊的符号。循环开始符是削去上面两个直角的矩形,循环结束符是削去下面两个直角的矩形

软件工程——结构化设计_第10张图片

 8.3 N-S图(盒图)

Nassi和Shneiderman 提出了一种符合结构化程序设计原则的图形描述工具,叫做盒图 (box-diagram),也叫做N-S图

在N-S图中,为了表示5种基本控制结构,规定了5种图形构件。

8.3.1 N-S图的基本控制结构

软件工程——结构化设计_第11张图片

 8.3.2N-S图的扩展表示

软件工程——结构化设计_第12张图片

 8.4PAD图

PAD(problem analysis diagram)是日本日立公司提出,由程序流程图演化来的,用结构化程序设计思想表现程序逻辑结构的图形工具

8.4.1PAD图的基本控制结构

软件工程——结构化设计_第13张图片

8.4.2 PAD的扩充控制结构

软件工程——结构化设计_第14张图片

8.4.3 PAD的优点

        使用PAD符号所设计出来的程序必然是结构化程序。 PAD图描绘程序结构清晰,图中竖线的总条数就是程序的层次数。 用PAD图表现程序逻辑易读、易懂、易记。 容易将PAD图自动转换为高级语言源程序。 PAD图既可以表示程序逻辑,也可用于描绘数据结构。 PAD图的符号支持自顶向下、逐步求精方法的使用。

8.5伪代码

伪代码是一种介于自然语言和形式化语言之间的半形式化语言,是一种用于描述功能模块的算法设计和加工细节的语言,也称为程序设计语言(Program Design Language,PDL)

伪代码的基本控制结构

        简单陈述句结构:避免复合语句。

        判定结构:IF_THEN_ELSE或CASE_OF结构。

        重复结构:WHILE_DO或REPEAT_UNTIL结构

你可能感兴趣的:(软件工程,软件工程)