5.1 总体设计的过程
5.2 软件设计基本原理
5.3 设计准则
5.4 总体设计的图形描述工具
5.5 结构化设计方法退出第五章 总体设计
5.1 总体设计的过程
5.1.1 设计供选择的方案
5.1.2 推荐最佳实现方案退出
5.1.3 设计软件结构
5.1.4 数据库设计
5.1.5 制定测试计划
5.1.1 设计供选择的方案需求分析阶段得出的数据流图是总体设计的根本出发点 。
通常,选取的这些方案中至少应包括低成本,
中成本和高成本的三种方案类型 。
对每个合理方案要提供以下几方面资料:
( 1) 系统流程图;
( 2) 数据字典;
( 3) 成本/效益分析;
( 4) 实现这个系统的进度计划 。
5.1.2 推荐最佳方案分析员从合理方案中选择一个最佳方案向用户推荐,并为推荐的方案制定详细的实现计划。
对于分析员推荐的最佳方案,用户和有关专家应该认真审查。如果确认该方案确实符合用户的需要,并且在现有条件下完全能够实现,则应该提请使用部门负责人进一步审批。在使用部门负责人也接受了分析员所推荐的方案之后,方可进入总体设计过程的下一步工作,即结构设计阶段。
过程设计:确定每个模块的处理过程。
结构设计:确定系统由哪些模块组成,以及这些模块之间的相互关系。
5.1.3 设计软件结构对于大型系统的设计,通常分为两个阶段:结构设计和过程设计。
其中,结构设计是总体设计阶段的任务,而过程设计则是详细设计阶段的任务。
5.1.4 数据库设计数据库的应用越来越广泛,目前大多数的系统都要用到数据库技术。
数据库设计是一项专门的技术,包括模式设计、
子模式设计、完整性和安全性设计和优化处理等。
5.1.5 制定测试计划在软件开发的早期阶段提前考虑软件的测试计划是很有必要的 。 这样能促使软件设计人员在设计时注意到软件的测试问题,从而有利于提高软件的可测试性 。
总体设计阶段的文档
( 1)总体设计说明书(包括系统实现方案和软件模块结构);
( 2) 测试计划 ( 包括测试策略,测试方案,预测的测试结果,测试进度计划等 ) ;
( 3) 用户手册 ( 根据总体设计阶段的结果,编写的初步的用户操作手册 ) ;
( 4) 详细的实现计划;
( 5) 数据库设计结果 。
5,2 软件设计基本原理
5.2.1 模块化
5.2.2 抽象
5.2.3 信息隐蔽退出
5.2.4 模块独立性模块:又称构件,是能够单独命名并独立地完成一定功能的程序语句的集合 。 例如高级语言中的过程,函数,
子程序等都可作为模块 。
5.2.1 模块化模块化是软件的一个重要属性 。 模块化的特性提供了人们处理复杂的问题的一种方法,同时也使得软件能够被有效地管理 。
这种,分而治之,的思想提供了模块化的根据:把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了 。
根据前面的结论,我们可以得出下面的不等式:
E(P1+ P2)> E(P1)+ E(P2)
这个不等式表明:单独解决问题 P1和 P2所需的工作量之和,比把 P1和 P2合起来作为一个问题来解决时所需的工作量要少 。
有两个函数,C(x)表示问题 x的复杂程度; E(x)表示解决问题 x所需要的工作量 ( 时间 ) 。
对于两个问题 P1和 P2,如果,C(P1)> C(P2)
则,E(P1)> E(P2)
另一个有趣的特性是,C(P1+ P2)> C(P1)+ C(P2)
模块化和软件成本的关系
M
软件总成本成本或工作量最小成本区接口成本模块数目我们在考虑问题时,集中考虑和当前问题有关的方面,
而忽略和当前问题无关的方面,这就是抽象 。 或者说抽象就是抽出事物的本质特性而暂时不考虑它们的细节 。
5.2.2 抽象软件工程过程的每一步,都是对软件解法的抽象层次的一次细化 。 在可行性研究阶段,软件被看作是一个完整的系统部分;在需求分析期间,我们使用在问题环境中熟悉的术语来描述软件的解法;当我们由总体设计阶段转入详细设计阶段时,抽象的程度进一步减少;最后,
当源程序写出来时,也就达到了抽象的最低层 。
信息隐蔽原理认为:模块所包含的信息 ( 过程和数据 )
对于其他模块来说应该是隐蔽的 。 也就是说,模块应当被这样规定和设计,使得包含在模块中的信息 ( 过程或数据 ) 对于其它不需要这些信息的模块来说,是不能访问的,或者说是,不可见,的 。
5.2.3 信息隐蔽信息隐蔽对于软件的测试与维护都有很大的好处 。 因为对于软件的其它部分来说,绝大多数数据和过程都是隐蔽的,这样,在修改期间由于疏忽而引入的错误所造成的影响就可以局限在一个或几个模块内部,不至波及到软件的其他部分 。
模块的独立性是软件质量的关键:
( 1) 模块化程度较高的软件容易开发;
( 2) 模块化程度较高的软件也比较容易测试和维护 。
5.2.4 模块独立性模块的独立性的度量标准:耦合和内聚 。
1、耦合耦合:软件结构中各个模块之间相互关联程度的度量 。
常见的耦合:
( 1) 非直接耦合
( 2) 数据耦合
( 3) 标记耦合
( 4) 控制耦合
( 5) 公共耦合
( 6) 内容耦合设计原则:尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,避免使用内容耦合 。
2、内聚内聚:模块内部各个元素彼此结合的紧密程度的度量 。
常见的内聚:
( 1) 偶然内聚
( 2) 逻辑内聚
( 3) 时间内聚
( 4) 过程内聚
( 5) 通信内聚
( 6) 顺序内聚
( 7) 功能内聚
5,3 设计准则
1,尽力提高模块独立性
2,选择合适的模块规模
3,模块的深度,宽度,扇出和扇入应适当
4,模块的作用范围应该在控制范围之内
5,降低模块接口的复杂程度
6,设计单入口单出口的模块,避免,病态连接,
5,4 总体设计的图形描述工具
5.4.1 层次图
5.4.2 HIPO图
5.4.3 结构图退出
5.4.1 层次图正文加工系统输入 输出 编辑 加标题 存储 检索 编目录 格式化添加 删除 插入 修改 合并 列表正文加工系统的层次图
5.4.2 HIPO图带编号的层次图 (H图 )
正文加工系统输入
1,0
输出
2,0
编辑
3,0
加标题
4,0
存储
5,0
检索
6,0
编目录
7,0
格式化
8,0
添加
3,1
删除
3,2
插入
3,3
修改
3,4
合并
3,5
列表
3,6
5.4.3 结构图软件结构图的基本符号
A
B
(a ) 基本形式
A
CB D
(b) 顺序
A
B C
(c ) 选择
A
B
(d) 重复产生最佳解的结构图格式化的解解产生最佳解计算最佳解得到好输入编辑输入读输入原始输入 编辑结果原始输入输出结果显示结果结果格式化解 格式化的解好输入好输入解
5,5 结构化设计方法
5.5.1 数据流图的类型
5.5.2 设计步骤
5.5.3 变换设计退出
5.5.4 事务设计
5.5.5 设计的后处理
5.5.1 数据流图的类型
1、变换型数据流图输入变换输出
2、事务型数据流图事务中心活动通路
T
事务
5.5.2 设计步骤复查满意精化数据流图类型区分事务中心和数据接收通路映射成事务结构区分输入和输出分支映射成变换结构
“事务”,变换”
优化软件结构导出软件结构详细设计不满意
5.5.3 变换设计我们通过一个汽车数字仪表板的设计来介绍变换分析的过程 。 假设仪表板的功能如下:
( 1) 通过模/数 ( A/ D) 转换实现传感器和微处理机接口;
( 2) 在发光二极管 ( LCD) 面板上显示数据;
( 3) 指示每小时英里数 ( mph),行驶的里程,每加仑油行驶的英里数 ( mpg) 等等;
( 4) 指示加速或减速;
( 5) 超速警告:如果车速超过 55英里/小时,则发出超速警告铃声 。
在软件需求分析阶段,应该对上述每项性能和其它要求进行全面的分析,并建立起相应的文档资料,得出数据流图 。
具体的设计步骤如下:
1、复查基本系统模型
2、复查并精化数据流图
△ SPS
m ph
超速值计算里程产生加速 /减速显示读入旋转信号收集并求平均旋转信号信号数 / 秒
( S P S )
确定加速 /
减速 箭头指示下箭头水平线上箭头转换成转 / 分
( r pm )
计算
m ph 和超速值计算燃料消耗产生
m pg
显示读入并核实计算
gph
燃料流量传感器信号燃料流量
gph
m ph
m pg
m pg 显示产生里程显示英里显示发出警告铃声警告铃声产生
m ph
显示
m ph 显示
r pm
△ SPS
r pm
3、确定数据流图的类型这一步的任务是确定数据流图是变换型数据流图还是事务型数据流图 。
从上图中可以看出,数据沿着两条输入通路 ( 旋转信号和燃料流量传感器信号 ) 进入系统,然后沿着五条通路 ( 4个显示,一个警告铃声 ) 离开,没有明显的事务中心 ( 虽然变换,计算 mph与超速值,可以看作是一个事务中心 ) 。 因此,可以认为这个数据流图的类型是变换型数据流图 。
4、确定输入流和输出流的边界,从而孤立出变换中心
△ SPS
r pm
m pg 显示
gph
m pg
m ph
( S P S )
m ph
超速值计算里程读入旋转信号收集并求平均旋转信号信号数 / 秒确定加速 /
减速箭头指示产生加速 /减速显示 下箭头水平线上箭头转换成转 / 分
( r pm )
计算
m ph 和超速值计算燃料消耗产生
m pg
显示读入并核实计算
gph
燃料流量传感器信号燃料流量产生里程显示英里显示发出警告铃声警告铃声产生
m ph
显示
m ph 显示
△ SPS
r pm
5、进行“第一级分解”
C m
C tC a C e
第一级分解的方法第一级分解的结果数字仪表板控制数据转换控制接收传感器信号驱动仪表板输入控制 变换控制 输出控制
6、进行“第二级分解”
第二级分解的方法
B
A
D
C
C m
C a
C
B
D
A
第二级分解的结果:
接收传感器信号转换成 r p m 计算 gph
收集 s p s
读旋转信号读燃料流量接收传感器信号确定加速 / 减速计算 m p h 计算 m p g 计算里程未经精化的输入结构 未经精化的变换结构未经精化的输出结构驱动仪表板加速 / 减速显示显示 m pg 显示里程 发出警告铃声显示 m ph
发光二极管显示
7、使用设计度量和设计准则对第一次分割得到的软件结构进一步精化对于从前面的设计步骤得到的软件结构,还可以进行许多修改:
( 1) 输入结构中的模块,转换成 rpm”和,收集 sps”
可以合并;
( 2) 模块,确定加速/减速,可以放在模块,计算
mph”下面,以减少耦合;
( 3) 模块,加速/减速显示,可以相应地放在模块
,显示 mph”的下面 。
精化的数字仪表板系统的软件结构数字仪表板控制接收传感器信号数据转换控制驱动仪表板计算里程计算
m p g
计算
m p h
计算
gph
转换成
r p m
发出警报铃声显示里程显示
m p g
显示
m p h
读旋转信号读燃料流量确定加速 / 减速加速 / 减速显示发光二极管显示
5.5.4 事务设计事务分析的映射方法
A _C T L
调度调度接收通路
C 通路
B 通路总控
A 通路
B _C T L
调度
C _C T L
调度
5.5.5 设计的后处理在确定系统的软件结构以后,还必须做好下述工作:
·为每个模块开发一份功能说明;
·为每个模块提供一份接口说明;
·定义局部的和全程的数据结构;
·给出所有的设计限制或约束;
·进行总体设计评审;
·如果需要和可能的话,进行设计,优化,。