4-5.结构化设计笔记

系统分析–“做什么”
系统设计–“怎样做”
系统设计的输入信息来自系统分析的结果。

结构化设计准则

  1. 软件系统由层次化结构的模块组成
  2. 模块是单入口单出口
  3. 构造和连接模块的基本准则是模块独立
  4. 用图来描述软件系统的结构,而且是软件结构和问题结构尽量一致

结构化设计的任务

结构化设计的划分:概要设计和详细设计。

概要设计主要完成的任务:

  1. 方案设计–挑选最佳实现方案,制定详细实现计划
  2. 软件体系结构设计–确定程序是有哪些模块组成的,以及这些模块之间的关系。以分析阶段的数据流图为主要依据。

详细设计主要完成的任务:

  1. 过程设计–设计软件体系结构中包含的每个模块的实现算法。以分析阶段画出的IPO图为基础。
  2. 数据设计–设计软件所需要的数据结构,以分析阶段ER图中定义的数据之间的关系以及数据字典中给出的数据详细定义为基础材料。
  3. 接口设计–模块之间、软件与协作系统之间以及软件和使用者之间的交互方式。分析阶段的数据流图提供了接口设计需要的的基本信息。

结构化设计原理(准则)

  1. 模块化和模块独立
  2. 抽象
  3. 逐步求精
  4. 信息隐藏
  5. 局部化

度量模块独立性的标准:内聚和耦合

内聚:
高内聚–功能内聚和顺序内聚
中内聚–通信内聚和过程内聚
低内聚–偶然内聚、逻辑内聚、时间内聚(不使用)
内聚性排序:功能>顺序>通信>过程>事件>逻辑>偶然

偶然内聚:模块完成的任务之间只有松散的联系
逻辑内聚:模块完成的任务在逻辑上属于相同或者相似的一类(例如,一个模块产生各种类型的全部输出)
时间内聚:一个模块完成的工作必须在同一时间内完成
过程内聚:模块内处理元素是相关的,而且必须以特定次序执行
通信内聚:模块中所有元素使用同一个输入数据或者产生同一个输出数据
顺序内聚:一个模块内的处理元素和同一个功能密切相关,而且必须顺序执行
功能内聚:一个模块内的处理元素属于一个整体,完成一个单一的功能。功能内聚是最高程度的内聚

耦合:
数据耦合、控制耦合、特征耦合、公共环境耦合、内容耦合(从低到高)
尽量使用数据耦合、少用控制耦合和特征耦合、限制公共环境耦合的范围、完全不用内容耦合

数据耦合:两个模块之间通过参数交换信息,而且只交换数据。
控制耦合:传递的信息中含有控制信息,即使控制信息以数据的形式出现。
特征耦合:将整个数据结构作为参数传递,而被调用的模块只需要使用其中一部分数据元素。–可能导致数据访问漏洞
公共环境耦合:模块之间通过公共数据环境相互作用。–复杂程度随着模块的增加而增加,而且要分情况讨论。
1. 一个模块写数据,一个模块读数据,这种耦合比较松散,是数据耦合的一种形式。
2. 两个模块都既读又写,是比较紧密的耦合,介于数据耦合和控制耦合之间。
内容耦合:下列情况之一
1. 一个模块访问另一个模块的内部数据
2. 一个模块不通过正常入口而转到另一个模块的内部
3. 两个模块由一部分代码重叠(汇编特有)
4. 一个模块有多个入口(意味着一个模块有几种功能)

7个启发规则:

  1. 提高模块独立性
  2. 模块规模适中
  3. 深度宽度扇出扇入适当
  4. 模块的作用域应该在控制域以内*1
  5. 降低接口复杂度
  6. 设计单入口和单出口的模块
  7. 模块功能应该可以预测

*1:作用域指收模块内一个判定影响的所有模块的集合,控制域是指这个模块本身以及所有直接或者间接从属于这个模块的集合。

概要设计部分

结构设计常用途径:自顶向下逐步求精。如果有了详细的数据流图,可以使用面向数据流的设计方法

描绘软件结构的图形工具

层次图和HIPO图–层次图用来描绘软件的层次结构。HIPO图是层次图+IPO图的意思。层次图中的每个框框有一张IPO图描绘这个框框代表的处理过程。
结构图–和层次图类似,用来描述软件结构。

面向数据流的设计方法

信息流映射成软件结构的概要设计方法。信息流有两种类型:变换流、事务流。

设计过程如下

  1. 复查基本系统模型
  2. 复查并精化数据流图
  3. 确定数据流图具有变换特性还是事务特性
  4. 确定输入流和输出流的边界,孤立出变换中心(变换分析)
  5. 完成第一级分解:以边界为依据,数据流图分割映射成输入、变换和输出三个模块。
  6. 完成第二级分解:对第一次分解进行细化。
  7. 用设计度量和启发规则对以上初步分割得到的软件结构进行进一步精化

事务分析:
事务流映射成的软件结构包括一个接收分支和一个发送分支,发送分支包含一个调度模块,所有发送通路中的处理都作为它的子模块。

两种分析应用于同一个数据流图的不同部分。

详细设计部分

包括数据设计、接口设计(包括人机界面设计)和过程设计(主要)

界面设计

面对的四个主要问题:系统响应时间、用户帮助设施、出错信息处理和命令交互。

过程设计和结构程序设计

过程设计在数据设计、体系结构和接口设计完成之后进行。是详细设计阶段主要应该完成的任务。
结构程序设计:尽可能少用GO TO语句的程序设计方法。(广义)只通过顺序、选择、循环三种控制结构进行连接,而且每个代码块只有一个入口和一个出口的程序设计方法。(狭义)
经典的结构程序设计:只允许顺序、IF-THEN-ELSE、DO-WHILE
扩展的结构程序设计:还允许使用DO-CASE 和 DO-UNTIL
修正的结构程序设计:还允许使用LEAVE 或 BREAK

工具

  1. 程序流程图(程序框图)
  2. 盒图
  3. PAD图(问题分析图)
  4. 判定表
  5. 判定树
  6. PDL过程设计语言(伪码)

面向数据结构设计方法

根据数据结构设计程序处理过程的办法。Jackson方法和Warnier方法。
Jackson图类似层次方框图,可以用来描绘数据结构和程序结构,是Jackson方法的基础。

Jackson方法步骤

  1. 分析并确定输入和输出数据的逻辑结构,用Jackson图描绘。
  2. 找出输入数据结构和输出数据结构中有对应关系的数据单元,所谓有对应关系是指有直接的因果关系,在程序中可以同时处理的数据单元。
  3. 用下述三条规则从描绘数据结构的Jackson图导出描绘程序结构的Jackson图-
    1. 为每对由对应关系的数据单元,按照它们在数据结构图中的层次在程序结构的相应层次画一个处理框。
    2. 根据输入数据结构中每个剩余数据单元所处的层次,在程序结构图的相应层次画上对应的处理框。
    3. 根据输出数据结构中每个剩余数据单元所处的层次,在程序结构图的相应层次画上对应的处理框。
    4. 列出所有的操作条件(分支或者循环)并且把它们分配到程序结构图的适当位置。
    5. 用伪代码表示程序。

程序复杂度度量

McCabe方法
流图:简化的程序框图,指标数控制流,不表现对数据的具体操作。
环形复杂度:三种算法

  1. 图中的区域数
  2. V(G)=E-N+2 其中E是流图中边数,N是节点数
  3. V(G)=P+1 其中P是程序中判断的数目,多分枝判断(CASE等)的判断数目相当于可能的分支数-1

Halstead方法
用运算符和操作数的总数预测程序长度。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值