软件工程笔记——总体设计

启发规则

  1. 改进软件结构提高模块独立性
    • 降低耦合提高内聚
    • 模块功能的完善化(执行规定功能,出错处理,体现任务完成的状态)
    • 消除重复功能
  2. 模块规模应该适中
    • 过大的模块可理解性差
    • 过大的模块一般还可分解,分解模块不应降低模块的独立性
    • 过小的模块开销大于有效操作,模块数目过多使系统接口复杂
  3. 深度、宽度、扇出、扇入都应当适中
    • 深度:软件结构中控制的层数,往往能粗略地标志一个系统的大小和复杂程度
    • 宽度:软件结构内同一层次上的模块总数的最大值,一般来说,宽度约大系统越复杂
    • 扇出:一个模块直接控制(调用)的模块数目,扇出过大意味着模块过于复杂,需要控制和协调过多的下级模块;扇出过小(例:总是1)也不好。一个设计得好的典型系统的平均扇出通常是3或4(上限通常是5~9)
    • 扇入:表明有多少个上级模块直接调用它
    • 应避免"扁平"的结构
    • 应追求"椭圆"的结构
  4. 模块的作用域应该在控制域之内
    • 作用域:受该模块内一个判定影响的所有模块的集合
    • 控制域:这个模块本身以及所有直接或间接从属于它的模块的集合
    • 一个设计好的系统中,所有受判定影响的模块应该都从属于做出判定的那个模块,最好局限于做出判定的那个模块本身及它的直属下级模块
    • 将作用范围移动到控制范围的方法:将判定所在模块合并到父模块中,使判定处于较高层次;将受判定影响的模块下移到控制范围内;将判定上移到层次中较高的位置
  5. 力争降低模块接口的复杂程度(接口过于复杂会导致错误发生,应使信息传递简单并且和模块的功能一致);
  6. 设计单入口单出口的模块(避免出现内容耦合);
  7. 模块功能应该可以预测,避免对模块施加过多限制(只要输入的数据相同就产生同样的输出,这个模块的功能就是可以预测的–黑盒子);

描绘软件结构的图形工具

层次图:描绘软件的层次结构
矩形框代表模块,连线代表调用关系,层次图适用于自顶向下设计软件的过程中使用。
HIPO图:IBM发明,层次图+输入/处理/输出
增加可追踪性,每个方框加编号(最顶层不加);对应每个方框应该有一张IPO图描绘模块的处理过程;每张IPO图应该标出所代表的模块的编号
结构图:主要内容是模块和模块间的调用关系
不能再分解的底层模块为原子模块
完全因子分解的系统:一个软件系统的全部实际加工都由原子模块来完成,而其他所有非原子模块仅仅执行控制或协调功能。
完全因子分解的系统是理想化的,实际设计中都是尽量向这个目标靠拢。
系统结构图中的4种类型的模块:

  • 传入模块:从下属模块取得数据,经过某些处理,再将其传给上级模块。它传送的数据流叫做逻辑输入数据流。
  • 传出模块:从上级模块获得数据,进行某些处理,再将其传给下属模块。它传送的数据流叫做逻辑输出数据流。
  • 变换模块:它从上级模块取得数据,进行特定的处理,转换成其它形式,再传送回上级模块。它加工的数据流叫做变换数据流。
  • 协调模块:对所有下属模块进行协调和管理的模块。

面向数据流的设计方法

结构化设计方法——基于数据流的设计方法
面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法。
信息流可以分为变换流事务流
面向数据流的设计方法的基本过程

  • 研究、分析和审查数据流图;
  • 根据数据流图决定问题的类型;
  • 由数据流图推导出系统的初始结构图;
  • 根据启发规则对结构进行细化;
  • 修改和补充数据字典;
  • 制定测试计划。
    变换流:信息延输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。当数据流图具有这些特征时,这种信息流就叫做变换流。
    变换型数据处理问题的工作过程:取得数据 → \rightarrow 变换数据 → \rightarrow 给出数据
    变换型系统结构图由输入,变换中心,输出三部分组成。
    事务流:数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。这类信息被称为事务流,而该处理T称为事务中心,它接受输入数据,分析每个事务以确定它的类型并根据事务类型选取一条活动通路。
    变换分析:把具有变换流特点的数据流图按预先确定的模式映射成软件结构的一系列步骤的总称。
  1. 复查基本系统模型
  2. 复查并精化数据流图
  3. 确定数据流图具有变换特性还是事务特性
  4. 确定输入流和输出流的边界,从而孤立出变换中心
  5. 完成"第一级分解"
  6. 完成"第二级分解"
  7. 使用设计度量和启发式规则对第一次分割得到的软件结构进一步精化

上述7个步骤的目的是:开发出软件的整体表示。
这种整体表示的意义在于:

  • 一旦确定了软件结构就可以把它作为一个整体来复查,从而能够评价和精化软件结构;
  • 在这个时期进行修改只需要很少的附加工作,但却能够对软件的质量特别是软件的可维护性产生深远的影响
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值