1、第 5 章 总体设计5.1 设计过程1. 设想供选择的方案2. 选取合理的方案3. 推荐最佳方案4. 功能分解5. 设计软件结构6. 设计数据库7. 制定测试计划8. 书写文档9. 审查和复审5.2 设计原理5.2.1 模块化图 5.1 模块化和软件成本软件工程导论( 第五版)25.2.2 抽象5.2.3 逐步求精5.2.4 信息隐藏和局部化5.2.5 模块独立1. 耦合2. 内聚5.3 启发规则1. 改进软件结构提高模块独立性2. 模块规模应该适中3. 深度、宽度、扇出和扇入都应适当4. 模块的作用域应该在控制域之内图 5.2 模块的作用域和控制域5. 力争降低模块接口的复杂程度6. 设计单
2、入口单出口的模块7. 模块功能应该可以预测软件工程导论( 第五版) 35.4 描绘软件结构的图形工具5.4.1层次图和 HIPO 图图 5.3 正文加工系统的层次图图 5.4 带编号的层次图(H 图)软件工程导论( 第五版)45.4.2结构图图 5.5 结构图的例子产生最佳解的一般结构图 5.6 判定为真时调用 A,为假时调用 B图 5.7 模块 M 循环调用模块 A、 B、C5.5 面向数据流的设计方法5.5.1 概念1. 变换流2. 事务流软件工程导论( 第五版) 5图 5.8 变换流图 5.9 事务流3. 设计过程软件工程导论( 第五版)6图 5.10 面向数据流方法的设计过程5.5.2
3、变换分析1. 例子2. 设计步骤软件工程导论( 第五版) 7图 5.11 数字仪表板系统的数据流图软件工程导论( 第五版)8图 5.12 具有边界的数据流图图 5.13 第一级分解的方法软件工程导论( 第五版) 9图 5.14 数字仪表板系统的第一级分解图 5.15 第二级分解的方法图 5.16 未经精化的输入结构软件工程导论( 第五版)10图 5.17 未经精化的变换结构图 5.18 未经精化的输出结构图 5.19 精化后的数字仪表板系统的软件结构软件工程导论( 第五版) 115.5.3 事务分析图 5.20 事务分析的映射方法5.5.4设计优化5.6 小结习题 51. 为每种类型的模块耦合
4、举一个具体例子。2. 为每种类型的模块内聚举一个具体例子。3. 用面向数据流的方法设计下列系统的软件结构。(1) 储蓄系统(参见习题 2 第 2 题)。(2) 机票预订系统(参见习题 2 第 3 题)。(3) 患者监护系统(参见习题 2 第 4 题)。4. 美国某大学共有 200 名教师,校方与教师工会刚刚签订一项协议。按照协议,所有年工资超过26 000(含26 000)的教师工资将保持不变,年工资少于26 000 的教师将增加工资,所增加的工资数按下述方法计算:给每个由此教师所赡养的人(包括教师本人) 每年补助100,此外,教师有一年工龄每年再多补助50,但是,增加后的年工资总额不能多于2
5、6 000。软件工程导论( 第五版)12教师的工资档案储存在行政办公室的磁带上,档案中有目前的年工资、赡养的人数、雇用日期等信息。需要写一个程序计算并印出每名教师的原有工资和调整后的新工资。要求:(1) 画出此系统的数据流图。(2) 写出需求说明。(3) 设计上述的工资调整程序( 要求用 HIPO 图描绘设计结果),设计时分别采用下述两种算法,并比较这两种算法的优缺点:(a) 搜索工资档案数据,找出年工资少于26 000 的人,计算新工资,校核是否超过26 000,储存新工资,印出新旧工资对照表;(b) 把工资档案数据按工资从最低到最高的次序排序,当工资数额超过26 000 时即停止排序,计算
6、新工资,校核是否超过限额,储存新工资,印出结果。(4) 所画出的数据流图适用于哪种算法?5. 下面将给出两个人玩的扑克牌游戏的一种玩法,试设计一个模拟程序,它的基本功能是:(1) 发两手牌(利用随机数产生器)。(2) 确定赢者和赢牌的类型。(3) 模拟 N 次游戏,计算每种类型牌赢或平局的概率。要求用 HIPO 图描绘设计结果并且画出高层控制流程图。扑克牌游戏规则如下:(1) 有两个人玩,分别称为 A 和 B。(2) 一副扑克牌有 52 张牌,4 种花色(方块、梅花、红桃和黑桃),每种花色的牌的点数按升序排列有 2,3,4,10,J,Q,K ,A 等 13 种。(3) 给每个人发 3 张牌,牌面向上( 即,亮牌),赢者立即可以确定。(4) 最高等级的一手牌称为同花,即 3 张牌均为同一种花色,最大的同花牌是同一种花色的Q、K、A。(5) 第二等级的牌称为顺子,即点数连续的 3 张牌,最大的顺子是花色不同的 Q、K、A。(6) 第三等级的牌是同点,即点数相同的 3 张牌,最大的同点是 A、A、A。(7) 第四等级的牌是对子,即 3 张牌中有两张点数相同,最大的对子是 A、A、K。(8) 第五等级的牌是杂牌,即除去上列 4 等之外的任何一手牌,最大的杂牌是不同花色的A、K、J。(9) 若两人的牌类型不同,则等级高者胜;若等级相同,则点数高者胜;若点数也相同,则为平局。