软件设计的目标和任务

上传人:hs****ma 文档编号:591417378 上传时间:2024-09-17 格式:PPT 页数:119 大小:1.97MB
返回 下载 相关 举报
软件设计的目标和任务_第1页
第1页 / 共119页
软件设计的目标和任务_第2页
第2页 / 共119页
软件设计的目标和任务_第3页
第3页 / 共119页
软件设计的目标和任务_第4页
第4页 / 共119页
软件设计的目标和任务_第5页
第5页 / 共119页
点击查看更多>>
资源描述

《软件设计的目标和任务》由会员分享,可在线阅读,更多相关《软件设计的目标和任务(119页珍藏版)》请在金锄头文库上搜索。

1、软件设计的目标和任务软件需求:解决“做什么”软件设计:解决“怎么做”n软件设计的任务:以软件需求规格说明书为依据,进行数据设计系统结构设计过程设计2021/3/101软件设计的目标和任务n数据设计侧重于数据结构的定义n系统结构设计定义软件系统各主要成分之间的关系n过程设计则是把结构成分转换成软件的过程性描述。在编码步骤,根据这种过程性描述,生成源程序代码,然后通过测试最终得到完整有效的软件。n软件设计的重要性:是软件开发时期的第一个步,最终影响软件实现的成败和软件维护的难易程度。2021/3/102软件设计的两个阶段 从工程管理的角度来看,软件设计分两步完成。n总体设计:将软件需求转化为数据结

2、构和软件的系统结构。n详细设计:即过程设计。通过对结构表示进行细化,得到软件的详细的数据结构和算法。2021/3/103软件设计的两个阶段2021/3/104第 5 章 总体设计2021/3/105第5章 总体设计5.1 设计过程5.2 设计原理5.3 启发规则5.4 描绘软件结构的图形工具5.5 面向数据流的设计方法5.6 小结习题2021/3/106重点和难点重点:软件设计过程中应遵循的基本原理面向数据流设计方法难点:变换分析、事务分析法过程和应用2021/3/107总体设计的步骤5.1 设计过程设计过程5.1 设计过程设计过程n设想供选择的方案n选取合理的方案系统流程图组成系统的物理元素

3、清单成本/效益分析实现这个系统的进度计划n推荐最佳方案n功能分解n设计软件结构(模块化思想)2021/3/108总体设计的步骤n设计数据库n制定测试计划n书写文档系统说明用户手册测试计划详细的实现计划数据库设计结果n审查和复审5.1 设计过程设计过程2021/3/109设计原理n模块化n抽象n逐步求精n信息隐藏和局部化n模块独立5.2 设计原理设计原理2021/3/1010一. 模 块 化n模块:模块是由边界元素限定的相邻程序元素(例如,数据说明,可执行的语句)的序列,而且有一个总体标识符代表它。如:OO的对象、方法。n模块化思想:模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成

4、一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。n“分而治之”是模块化思想的依据:把复杂的问题分解为若干个易于处理的小问题。5.2 设计原理设计原理2021/3/1011一. 模 块 化令C(X):问题X的复杂程度,E(X):解决X问题所需的工作量n规律1:若两个问题P1,P2 C(P1) C(P2),则E(P1) E(P2)n规律2:某问题P可以分成P1,P2,PP1P2 则: C(P1+P2) C(P1)+C(P2) 所以: E(P1+P2) E(P1)+E(P2)5.2 设计原理设计原理2021/3/1012一. 模 块 化结论:分而治之,各个击破?将模块无

5、限分割下去?单个模块的开发成本小,几乎可忽略不计;模块之间接口的开发成本呢? 5.2 设计原理设计原理2021/3/1013一. 模 块 化模块数目为M时,软件开发成本最小模块数目与软件成本的关系5.2 设计原理设计原理2021/3/1014二. 抽 象n抽象:把一定事物、状态或过程中共性的方面集中和概括起来,暂时忽略它们之间的差异。n抽象的思想:处理复杂系统的惟一有效的方法是用层次的方式构造和分析它。n抽象层次:n软件设计中的两类抽象:过程抽象:功能 过程、函数数据抽象:数据对象定义、描述数据类型名最高抽象级别最高抽象级别面向问题的语言面向问题的语言较低抽象级别较低抽象级别面向面向问题和问题

6、和实现的语言实现的语言最低抽象级别最低抽象级别面向实现的语言面向实现的语言 5.2 设计原理设计原理2021/3/1015二. 抽 象 CAD图形软件包可以画各种直线和曲线,能完成所有几何图形的计算图形设计的结果存于图形文件中,图形文件可包含几何的、正文的和其它各种设计信息。抽象1总体结构层次 的抽象图形软件包软件任务图形用户界面创建 二维图形任务显示 图形任务管理 图形文件任务End 图形软件包例子:讨论一个在不同抽象级别上的软件设计所具有例子:讨论一个在不同抽象级别上的软件设计所具有 的形式。的形式。5.2 设计原理设计原理2021/3/1016二. 抽 象抽象2过程层次的抽象(仅以管理图

7、形文件任务为例)PROCEDURE drawing file management task IF OpenFile THEN input filename; open the file; display the file; ELSE IF SaveFile THEN input save filename; save the file; END IF END PROCEDURE.抽象3实现层次的抽象(程序设计语言描述)5.2 设计原理设计原理2021/3/1017二. 抽 象CAD软件中的数据抽象举例:STRUCT coordinate int x; int y ;CLASS Drawing

8、 /parent class PUBLIC : coordinate startpoint, endpoint; ;CLASS Line : PUBLIC Drawing ;CLASS Curve : PUBLIC Line ;CLASS StraightLine : PUBLIC Line ;Curve objCurve1; /objCurve1 is a instance of Curve StraightLine objSL2 ; /objSL2 is a instance of StraightLine5.2 设计原理设计原理2021/3/1018三. 逐 步 求 精n逐步求精: 为了

9、能集中精力解决主要问题而尽量推迟对问为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。题细节的考虑。n逐步求精的思想: 对一个事物的认识是一个从高层次抽象向低层对一个事物的认识是一个从高层次抽象向低层次抽象逐步转化和过渡的过程。次抽象逐步转化和过渡的过程。nMiller法则: 一个人在任何时候都只能把注意力集中在一个人在任何时候都只能把注意力集中在(7+2)个知识块上。)个知识块上。5.2 设计原理设计原理2021/3/1019求精实际上是细化过程 求精要求设计者细化原始陈述,随着每个后续求精(即细化)步骤的完成而提供越来越多的细节。抽象与求精是一对互补的概念 抽象使得设计者能够说明过程和

10、数据,同时却忽略低层细节。事实上,可以把抽象看作是一种通过忽略多余的细节同时强调有关的细节,而实现逐步求精的方法。求精则帮助设计者在设计过程中逐步揭示出低层细节。这两个概念都有助于设计者在设计演化过程中创造出完整的设计模型。三. 逐 步 求 精5.2 设计原理设计原理2021/3/1020四. 信息隐藏和局部化信息隐藏思想:模块应该设计得使其所含的信息(过程和 数据)对那些不需要这些信息的模块不可访问,模块之 间仅仅交换那些为完成系统功能所必需交换的信息。n隐藏:模块的实现细节,而不是所有信息。n优点:1. 模块的独立性更好 2. 支持模块的并行开发(设计和编码)支持模块的并行开发(设计和编码

11、) 3. 便于测试和维护,减少错误向外传播便于测试和维护,减少错误向外传播 4. 便于增加新的功能,新增加的模块和原有的便于增加新的功能,新增加的模块和原有的 模块关系不大模块关系不大 5. 在较高层次上进行软件开发,有助于提高软在较高层次上进行软件开发,有助于提高软 件质量和生产效率件质量和生产效率5.2 设计原理设计原理2021/3/1021四. 信息隐藏和局部化局部化:把一些关系密切的软件元素在物理上放得彼此靠近。例如:在模块中使用局部数据元素有助于信息隐藏5.2 设计原理设计原理2021/3/1022五. 模 块 独 立 模块独立性:每个模块只完成系统要求的独立的子功能,与其他模块的联

12、系最少且接口简单。模块独立的概念是模块化、抽象、信息隐藏和局部化三个基本原理的直接结果。模块独立重要的理由:有效的模块化的软件比较有效的模块化的软件比较容易开发容易开发独立的模块比较独立的模块比较容易测试和维护容易测试和维护衡量模块独立程度的标准:耦合、内聚5.2 设计原理设计原理2021/3/1023五. 模块独立1.耦合性n耦合:指模块之间联系的紧密程度耦合:指模块之间联系的紧密程度。模块之间联系越紧密,其耦合性越强,独立性就越差。n模块耦合度越低越好:1. 独立性;2. 减少错误传播。n模块的耦合性从低到高可分为以下几种类型:非直接耦合(no direct coupling): 二个模块

13、都不依赖对方而独立存在数据耦合(data coupling): 二个模块通过参数交换信息,而信息仅限于数据控制耦合 (control coupling): 二个模块通过参数交换信息,传递的信息中有控制信息5.2 设计原理设计原理2021/3/1024五. 模块独立1.耦合性标记耦合 / 特征耦合 (stamp coupling):二个模块通过传递数据结构加以联系(数据结构以参数形式进行交换),或都与一个数据结构有关当被调模块只使用数据结构中的一部分数据元素时,产生标记耦合.被调模块被调模块 可使用的数据多于它所需要的数据可使用的数据多于它所需要的数据, 从而导致对从而导致对数据的访问失去控制,

14、给非法操作提供了机会。数据的访问失去控制,给非法操作提供了机会。5.2 设计原理设计原理2021/3/1025五. 模块独立1.耦合性非直接耦合举例n两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。n这种耦合的模块独立性最强。5.2 设计原理设计原理2021/3/1026五. 模块独立1.耦合性数据耦合举例n 一模块调用另一模块时,被调用模块的输入、输出都是简单的数据(若干参数)。n属松散耦合开发票开发票计算水费计算水费单价,单价,数量数量金额金额5.2 设计原理设计原理2021/3/1027五. 模块独立1.耦合性标记/特征耦合举例n“住户情况”是一个数据结构,

15、图中模块都与之有关。n“计算水电费”和“计算水费”传递的是数据结构,它们之间是标记偶合。n“计算水费”和“计算电费”本无关,由于引用了此数据结构产生依赖关系,它们之间也是标记偶合。计算水电费计算水电费计算水费计算水费计算电费计算电费住户情况住户情况水费水费电费电费住户情况住户情况5.2 设计原理设计原理2021/3/1028五. 模块独立1.耦合性标记/特征耦合举例 把标记耦合修改为:数据耦合把标记耦合修改为:数据耦合/非直接耦合非直接耦合计算水电费计算水电费计算水费计算水费计算电费计算电费本月本月用水量用水量本月本月用电量用电量水费水费电费电费5.2 设计原理设计原理2021/3/1029五

16、. 模块独立1.耦合性控制耦合举例n控制耦合 二个模块通过参数交换信息,传递的信息中有控制信息去除控制耦合的方法:(1) 将被调用模块内的判定上移到调用模块中进行(2) 被调用模块分解成若干单一功能模块5.2 设计原理设计原理2021/3/1030五. 模块独立1.耦合性公共耦合(common coupling):二个模块通过公共数据环境相互作用全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件、物理设备如果两个模块共享的数据很多,都通过参数传递可能很不方便5.2 设计原理设计原理2021/3/1031五. 模块独立1.耦合性公共耦合举例公共数据耦合存在的问题:(公共数据区及全程变

17、量无保护措施)慎用公共数据区和全程变量!n软件可维护性差软件可维护性差n软件可靠性差软件可靠性差n软件可理解性降低软件可理解性降低n诊断错误困难诊断错误困难5.2 设计原理设计原理2021/3/1032内容耦合(content coupling):一个模块访问另一个模块的内部数据;一个模块不通过正常入口而转到另一个模块的内部;两个模块有一部分程序代码重叠(只可能出现在汇编程序中);一个模块有多个入口(这意味着一个模块有几种功能)。 五. 模块独立1.耦合性5.2 设计原理设计原理2021/3/1033五五. . 模块独立模块独立1.1.耦合性耦合性内容耦合举例内容耦合举例5.2 软件设计的概念

18、及原理软件设计的概念及原理最不好的耦合形式!一模块直接访问一模块直接访问一模块直接访问一模块直接访问另一模块的内部另一模块的内部另一模块的内部另一模块的内部信息信息信息信息 (程序代码程序代码程序代码程序代码或数据)或数据)或数据)或数据)AA ABB BAA ABB B模块代码重叠模块代码重叠模块代码重叠模块代码重叠(只可能在汇编中(只可能在汇编中(只可能在汇编中(只可能在汇编中出现)出现)出现)出现)Entry1Entry1Entry1 Entry2Entry2Entry2 多入口模块多入口模块多入口模块多入口模块:一个模块不通过正常入口而进入另一个模块内部, 如病毒:说明这个模块有多个功

19、能许多高级程序设计语言 已经设计成 不允许任何形式的内容耦合2021/3/1034五. 模块独立1.耦合性耦合性:弱强模块独立性:强弱123456弱耦合中耦合较强耦合强耦合非直接耦合:无信息交换数据耦合:简单数据以参数形式进行交换特征耦合:数据结构以参数形式进行交换;或共享数据结构控制耦合:参与交换的数据内包含控制信息公共耦合:一组模块使用同一个全局性数据结构/公共区内容耦合:一个模块可以直接访问另一个模块内部数据5.2 设计原理设计原理2021/3/1035五. 模块独立1.耦合性 例:试指出下述用C语言编写的函数声明 所代表的模块的耦合的类型。void fun0( ); void fun1

20、(int);void fun2(int*);typedef structDF; *DF fun4(int);void fun5()static x;fun6(x); int fun6(int x)return +x;内容耦合:内容耦合:fun6可以访可以访问问fun5的内的内部数据部数据公共耦合公共耦合无耦合无耦合数据耦合数据耦合标记耦合标记耦合5.2 设计原理设计原理2021/3/1036五. 模块独立1.耦合性n在软件设计中,提高模块的独立性,建立模块间尽可能松散的系统,是模块化设计的目标。为了降低模块间的耦合度,可以采取以下措施:(1) 在耦合方式上降低模块间接口的复杂性。(2) 在传递

21、信息类型时的设计原则: 尽量采用数据耦合,避免使用控制耦合,慎用或有控制地使用公共耦合,完全不用内容耦合。在实践中要根据实际情况综合考虑。5.2 设计原理设计原理2021/3/1037五. 模块独立2.内聚性n内聚性:模块内部各个元素彼此结合的紧密程度。 它是信息隐藏和局部化概念的自然扩展。n高内聚往往以意味着模块间的低耦合。内聚性低高 偶然内聚(偶然内聚(coincidental cohesion) 逻辑内聚(逻辑内聚(logical cohesion) 时间内聚(时间内聚(time cohesion) 过程内聚(过程内聚(procedural cohesion) 通信内聚(通信内聚(com

22、municational cohesion) 顺序内聚(顺序内聚(sequential cohesion) 功能内聚(功能内聚(functional cohesion)高内聚中内聚低内聚内聚性低高5.2 设计原理设计原理2021/3/1038五. 模块独立2.内聚性(1) 偶然内聚n偶然内聚一个模块内的各处理元素之间没有任何联系。n如一个模块内各个成分为完成一组功能而结合在一起,他们相互之间关系松散。模块模块模块模块MM中的三个中的三个中的三个中的三个语句没有任何联系语句没有任何联系语句没有任何联系语句没有任何联系缺点:缺点:可理解性差,可理解性差, 可修改性差可修改性差5.2 设计原理设计原

23、理2021/3/1039n逻辑内聚一个模块完成的任务在逻辑上属于相同或相似的一类。n如一个模块完成的诸任务逻辑上是相关的;如一个模块产生各种类型的全部输出。n缺点:增强了耦合程度(控制耦合) 不易修改,效率低五. 模块独立2.内聚性 (2) 逻辑内聚5.2 设计原理设计原理2021/3/1040五. 模块独立2.内聚性(3) 时间内聚n时间内聚 一个模块内所包含的诸任务必 须在同一时间段内执行。这些 功能只因素关联因时间在一起。 例如: 初始化系统模块初始化系统模块 系统结束模块系统结束模块 紧急故障处理模块紧急故障处理模块5.2 设计原理设计原理2021/3/1041五. 模块独立2.内聚性

24、(4) 过程内聚n过程内聚 模块内处理元素彼此相关且必须按特定的次序执行。n使用程序流程图作为工具设计软件时,常常通过研究流程图确定模块的划分,这样得到的往往是过程内聚的模块。读入读入成绩单成绩单审查审查成绩单成绩单统计统计成绩成绩打印打印成绩成绩读入并审查成读入并审查成读入并审查成读入并审查成绩单绩单绩单绩单统计并打印成统计并打印成统计并打印成统计并打印成绩单绩单绩单绩单5.2 设计原理设计原理2021/3/1042五. 模块独立2.内聚性(5) 通信内聚 通信内聚 模块内所有元素都使用相同的输入数据或者产 生相同的输出数据。例:产生职工工资报表并计算平均工资模块例:产生职工工资报表并计算平

25、均工资模块例:产生职工工资报表并计算平均工资模块例:产生职工工资报表并计算平均工资模块产生工资报表产生工资报表计算平均工资计算平均工资职工工职工工资记录资记录职工工资报表职工工资报表平均工资平均工资平均工资平均工资5.2 设计原理设计原理2021/3/1043五. 模块独立2.内聚性(6) 顺序内聚 (7) 功能内聚n顺序内聚一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一处理元素的输出数据就是下一处理元素的输入数据。n功能内聚模块内所有处理元素属于一个整体,完成一个单一的功能。 (最强的内聚!)5.2 设计原理设计原理2021/3/1044五. 模块独立2.内聚性内聚性:弱强模

26、块独立性:弱强1234567低内聚中内聚高内聚偶然内聚 0分:逻辑内聚 1分:合并处理、变换相同或相似的功能时间内聚 3分:将因时序相同或接近的操作合并过程内聚 5分:将存在因果关系的功能集成通信内聚 7分:因数据的共用而合并顺序内聚 9分:将存在因果关系的操作集成功能内聚 10分:将只完成一个明确功能的操作合并5.2 设计原理设计原理2021/3/1045五. 模块独立3.总结 耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚,低耦合,提高模块的独立性。 内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合。内聚和耦合都是进行模块化设计的有力工具,但是

27、实践表明内聚更重要,应该把更多注意力集中到提高模块的内聚程度上。5.2 设计原理设计原理2021/3/1046七条启发式规则1、模块的划分:高内聚,低耦合,保持相对独立性2、模块的大小: 模块规模应该适中3、形成的结构:深度、宽度、扇出和扇入都应适当 “顶层扇出较高,中间扇出较小,底层模块高扇入”4、模块的控制:模块的作用域应该在控制域之内5、模块的接口:简单、清晰、含义明确6、设计单入口单出口的模块7、模块功能应该可以预测5.3 启发规则启发规则2021/3/10471.改进软件结构提高模块独立性 分析初步设计结构,通过合并或分解以降低模块之间的耦合、提高模块的内聚。 例如,多个模块公有的一

28、个子功能可以独立成一个模块,由这些模块调用;有时可以通过分解或合并模块以减少控制信息的传递及对全程数据的引用,并且降低接口的复杂程度。5.3 启发规则启发规则2021/3/10481.改进软件结构提高模块独立性5.3 启发式规则启发式规则 软件结构图反映了整个系统的功能实现,控制层次体系, 往往用树状或网状结构的图形来表示。ABCDEFGHIABCDEABCD (a) 树状结构 (b) 简单网状结构 (c)复杂网状结构2021/3/10492.模块规模应该适中n模块规模过大,降低可理解程度;模块过小,模块开销大于有效操作,且系统的接口复杂。n过大模块 进一步分解(保证模块独立性) 过小模块 几

29、个合并(尤其只被一个模块调用时)n每个模块最好控制在60行语句以内。语句数超过30以后,模块可理解性迅速下降5.3 启发规则启发规则2021/3/1050软件设计的两个阶段2021/3/1051设计原理n模块化n抽象n逐步求精n信息隐藏和局部化n模块独立5.2 设计原理设计原理2021/3/1052五. 模块独立1.耦合性耦合性:弱强模块独立性:强弱123456弱耦合中耦合较强耦合强耦合非直接耦合:无信息交换数据耦合:简单数据以参数形式进行交换特征耦合:数据结构以参数形式进行交换;或共享数据结构控制耦合:参与交换的数据内包含控制信息公共耦合:一组模块使用同一个全局性数据结构/公共区内容耦合:一

30、个模块可以直接访问另一个模块内部数据5.2 设计原理设计原理2021/3/1053五. 模块独立2.内聚性内聚性:弱强模块独立性:弱强1234567低内聚中内聚高内聚偶然内聚 0分:逻辑内聚 1分:合并处理、变换相同或相似的功能时间内聚 3分:将因时序相同或接近的操作合并过程内聚 5分:将存在因果关系的功能集成通信内聚 7分:因数据的共用而合并顺序内聚 9分:将存在因果关系的操作集成功能内聚 10分:将只完成一个明确功能的操作合并5.2 设计原理设计原理2021/3/1054七条启发式规则1、模块的划分:高内聚,低耦合,保持相对独立性2、模块的大小: 模块规模应该适中3、形成的结构:深度、宽度

31、、扇出和扇入都应适当 “顶层扇出较高,中间扇出较小,底层模块高扇入”4、模块的控制:模块的作用域应该在控制域之内5、模块的接口:简单、清晰、含义明确6、设计单入口单出口的模块7、模块功能应该可以预测5.3 启发规则启发规则2021/3/10553.深度、宽度、扇入、扇出都应该适中5.3 启发规则启发规则主模块主模块ACBDEFIHGJ深深度度宽度宽度扇出扇出扇入扇入模模模模块块块块的的的的 层层层层数数数数(同一层最大模块数同一层最大模块数) )(一个模块直接调一个模块直接调用的模块数用的模块数)(调用一个给定模调用一个给定模调用一个给定模调用一个给定模 块的模块个数块的模块个数块的模块个数块

32、的模块个数)( )平均扇出:平均扇出:34个为宜个为宜越大越好但不违越大越好但不违背模块独立原理背模块独立原理2021/3/10563.深度、宽度、扇入、扇出都应该适中分解或合并模块以调整扇入、扇出数分解或合并模块以调整扇入、扇出数5.3 启发规则启发规则ABA1A2BABAB1B2减少扇入数减少扇出数2021/3/10574.模块的作用域应该在控制域之内作用域:受该模块内的一个判定影响的所有模块的集合控制域:模块本身及所有直接或间接从属于它的模块的集合A的控制域为:A, B, C, D, E, F5.3 启发规则启发规则2021/3/10584.模块的作用域应该在控制域之内最差,作用域不在控

33、制域内 控制路径过长WABCDGH EFIJ WBGHIJ “”表示判定条件,它可表示判定条件,它可影响另一个模块影响另一个模块中用到中用到的的 全局变量全局变量 或或静态变量静态变量 例1: 例2:2021/3/1059较好 最好WBG HIJW ACDFE4.模块的作用域应该在控制域之内例3: 例4:5.3 启发规则启发规则2021/3/10604.模块的作用域应该在控制域之内作用域不在控制域内的修改方法:1. 将判定点上移到足够高的位置 上移判定点A=A+D ABCEFABC DEF5.3 启发规则启发规则2021/3/10614.模块的作用域应该在控制域之内XAAX移动2. 将那些在作

34、用域内但不在控制域内的模块下移将那些在作用域内但不在控制域内的模块下移 到控制域内到控制域内。5.3 启发规则启发规则2021/3/10625.力争降低模块接口的复杂度目标:仔细设计模块接口,使得信息传递简单并且和模块的功能一致标记耦合标记耦合数据耦合数据耦合5.3 启发规则启发规则2021/3/10636.设计单入口单出口模块每个模块只有唯一入口和唯一出口每个模块只有唯一入口和唯一出口5.3 启发规则启发规则2021/3/10647.模块的功能应该可以预测同样的输入可以产生同样的输出带有内部“存储器”(如:静态变量)的模块,其输出可能取决于内部存储器的状态(当前值)即: 静态变量的当前值=

35、模块的功能不可预测。n如上例: 在另一个类的方法中 创建一个counter类的对象。这个方法的功能就不可预测但不应过分强调功能的可预见性而使模块失去灵活性(无法重用模块)5.3 启发规则启发规则2021/3/1065一. 层 次 图5.4 描绘软件结构的图形工具描绘软件结构的图形工具 层次图用来描绘软件的层次结构, 矩形框代表模块, 方框之间的连线表示调用关系。图图5.3 正正文文加加工工系系统统的的层层次次图图 2021/3/1066一. 层 次 图层次图 层次方框图 层次图: n模块方框之间的连线表示模块方框之间的连线表示 调用关系。调用关系。n用于设计阶段用于设计阶段 层次方框图: n模

36、块方框之间的连线表示模块方框之间的连线表示 组成关系。组成关系。n用于需求分析阶段,用于需求分析阶段, 第第3.7节节5.4 描绘软件结构的图形工具描绘软件结构的图形工具2021/3/1067二. HIPO 图(Hierarchy Input-Process-Output Diagram)nHIPO图 = 层次图(H图)+ IPO图(输入/处理/输出)除最顶层的方框外,所有的方框加编号(编号规则同数据流图中的编号)对层次图中的各个模块,采用IPO图的方式说明该模块的处理功能。每张IPO图内应标出该模块在H图中的编号。5.4 描绘软件结构的图形工具描绘软件结构的图形工具2021/3/1068二.

37、 HIPO 图(Hierarchy Input-Process-Output Diagram) 5.4 描绘软件结构的图形工具描绘软件结构的图形工具2021/3/1069三. 结 构 图n由Yourdon提出n结构图 层次图 调用信息1.方框:模块的名字或功能 2.箭头(或直线):模块的调用关系;通常用直线3.带注释的箭头:模块调用过程中来回传递的信息4.尾部是空心圆:传递的是数据5.尾部是实心圆:传递的是控制信息5.4 描绘软件结构的图形工具描绘软件结构的图形工具2021/3/1070图 结构图的例子5.4 描绘软件结构的图形工具描绘软件结构的图形工具2021/3/1071三三. 结结 构构

38、 图图另外的附加符号模块的选择调用或循环调用选择调用或循环调用每个传递的数每个传递的数据是否必需据是否必需?完成模块功能所完成模块功能所必须的数据是否必须的数据是否都传递到了?都传递到了?传输的数据是传输的数据是否只与单一的否只与单一的功能有关?是功能有关?是否目的明确?否目的明确?2021/3/1072三. 结 构 图结构图一般不入文档,仅用于检查设计的正确性结构图一般不入文档,仅用于检查设计的正确性和模块的独立性。和模块的独立性。若图上模块间的联系不容易解释,则应考虑设计若图上模块间的联系不容易解释,则应考虑设计上是否有问题上是否有问题入文档的通常为层次图。入文档的通常为层次图。再加上再加

39、上IPO图和数据字典,就可导出结构图图和数据字典,就可导出结构图5.4 描绘软件结构的图形工具描绘软件结构的图形工具2021/3/10735.5 面向数据流的设计方法面向数据流的设计方法 需求分析阶段:结构化分析SA(Structural Analysis)是面向数据流自顶向下逐步求精进行需求分析的方法。 设计阶段:结构化设计SD(Structured Design )是以需求分析阶段产生的数据流图为基础,按一定的步骤映射成软件结构,也称为面向数据流的设计方法。面向数据流的面向数据流的设计方法设计方法数据流图数据流图(DFDDFD)软件软件总体结构总体结构2021/3/1074一. 信息流的类

40、型1.变换流5.5 面向数据流的设计方法面向数据流的设计方法n信息流映射成软件结构n事实上所有信息流都可归结为变换流2021/3/1075一. 信息流的类型1.变换流5.5 面向数据流的设计方法面向数据流的设计方法输入输入信息信息物理物理输入输入格式格式检查检查加工加工显示显示正确正确信息信息结果结果物理物理输出输出数据数据变换中心变换中心逻辑逻辑输入输入逻辑逻辑输出输出输入流输入流输出流输出流核准后的 汇款单格式检查计算汇费打印 合格 汇款单数据汇款单2021/3/1076一.信息流的类型2.事务流5.5 面向数据流的设计方法面向数据流的设计方法n数据沿输入通路到达事务中心,该中心根据输入数

41、据的类型在若干个动作序列中选择一个来对该数据进行处理。具有这种特征的数据流称为事务流。n事务中心任务: 接收输入数据。 分析每个事务,确定类型。 根据事务类型选取一活动通路。事务中心事务中心T活动通路活动通路2021/3/1077面向数据流方面向数据流方法的设计过程法的设计过程2021/3/1078n变换分析的设计步骤1.1. 复查基本系统模型。2.2. 复查并精化数据流图3.3. 确定数据流图具有变换特性还是事务特性4.4. 确定输入流和输出流的边界,从而划分出变换中心5.5. 完成第一级分解6.6. 完成第二级分解7.7. 使用设计度量和启发式规则对第一次分割得到的软件结构进行精化二. 变

42、换分析5.5 面向数据流的设计方法面向数据流的设计方法2021/3/1079二. 变换分析5.5 面向数据流的设计方法面向数据流的设计方法1.1. 复查基本系统模型(指0层数据流图和第1层数据流图)n确保系统的输入数据和输出数据符合实际。2.2. 复查并精化数据流图n确保给出了正确的逻辑模型,而且每确保给出了正确的逻辑模型,而且每个处理都代表一个规模个处理都代表一个规模适中相对独立适中相对独立的子功能的子功能。2021/3/1080四. 实例分析实例15.5 面向数据流的设计方法面向数据流的设计方法汽车数字仪表板的设计主要功能:1. 通过模数转换实现传感器和微处理机接口;2. 在发光二级管面板

43、上显示数据;3. 指示每小时英里数mph、行驶的里程、每加仑 油行驶的英里数mpg;4.指示汽车正处于加速或减速状态;5.超速警告:车速超过55英里/小时,响警告铃声2021/3/1081图图5.11数数字字仪仪表表板板系系统统的的数数据据流流图图2021/3/10821.3. 确定数据流图具有变换特性还是事务特性2. 一般来说所有数据流图都可认为具有变换特性,但当具有明显的事务特性时采用事务分析。2021/3/1083二. 变换分析5.5 面向数据流的设计方法面向数据流的设计方法4.4. 确定输入流和输出流的边界,从而划分出变换中心2021/3/1084 具有边界的数据流图2021/3/10

44、855. 完成第一级分解:确定顶层模块和由顶层直接控制的模块,通常分为输入模块、变换模块和输出模块。方法:设计三个模块CI:输入控制模块CP:变换控制模块CO:输出控制模块二. 变换分析5.5 面向数据流的设计方法面向数据流的设计方法顶层模块的基本功能是控制控制,协调输输入模块、变换模块、入模块、变换模块、输出模块输出模块。MCPCICO变换变换部分部分输入输入部分部分输出输出部分部分2021/3/1086二. 变换分析5.5 面向数据流的设计方法面向数据流的设计方法图图5.14数字仪表板系统的第一级分解数字仪表板系统的第一级分解2021/3/1087二. 变换分析5.5 面向数据流的设计方法

45、面向数据流的设计方法n6. 完成第二级分解:将数据流图中的每个处理映射成软件结构中的一个适当模块。I:由边界向外回溯由边界向外回溯,将每个遇到 的处理映成相应的层模块。P:每个处理直接对应一个下层模块O:由边界向外推,方法与 I 类似ADCBMICBDA2021/3/1088 未精化的数字仪表板系统的软件结构5.5 面向数据流的设计方法面向数据流的设计方法数据转换数据转换控制控制驱动仪表板驱动仪表板接收传感器接收传感器信号信号数字仪表板数字仪表板控制控制计算计算gph读燃读燃料流料流转换成转换成rpm收集收集sps读旋转信号读旋转信号确确定定加加/ /减减速速计计算算mphmph计计算算mpg

46、mpg计计算算里里程程加加/ /减减速速显显示示显显示示mph显显示示mpg显显示示里里程程发发出出铃铃声声发光二极管显示发光二极管显示2021/3/1089二. 变换分析n模块的简要说明进出该模块的信息(接口描述);模块内部的信息;过程陈述,包括主要判定点及任务等;对约束和特殊特点的简短讨论。7、根据设计度量和启发式规则对第一次分割得到的软件结构进行精化。5.5 面向数据流的设计方法面向数据流的设计方法2021/3/1090图5.19精化后的数字精化后的数字仪表板系表板系统的的软件件结构构5.5 面向数据流的设计方法面向数据流的设计方法2021/3/1091二. 变换分析5.5 面向数据流的

47、设计方法面向数据流的设计方法 整个过程并不复杂,画好后根据实际情况对软件结构进行优化,也就是进行必要的合并或分解。以求设计出高内聚低耦合的模块组成的、具有良好特性的软件结构。2021/3/10922-5 北京某高校可用的电话号码有以下几类:校内电话号码由4位数字组成,第1位数字不是0;校外电话又分为本市电话和外地电话两类,拨校外电话需先拨0,若是本市电话则再接着拨8位数字(第1位不是0),若是外地电话则拨3位区码再拨8位电话号码(第1位不是0)。请用定义数据字典的方法,定义上述的电话号码。作业及解答(第2章)2021/3/10932-5 北京某高校可用的电话号码有以下几类:校内电话号码由4位数

48、字组成,第1位数字不是0;校外电话又分为本市电话和外地电话两类,拨校外电话需先拨0,若是本市电话则再接着拨8位数字(第1位不是0),若是外地电话则拨3位区码再拨8位电话号码(第1位不是0)。请用定义数据字典的方法,定义上述的电话号码。作业及解答(第2章)2021/3/1094n定义数据的方法 符 号 含 义 举 例 被定义为 与 x = ab.,. 或 .|. 或 x = a , b,x = a | b . 或 m.n 重复 x = a, x = 3a8(.) 可选 x = (a)“.” 基本数据元素 x = “a” . 连结符 x = 1.9作业及解答(第2章)2021/3/1095n电话号

49、码=校内电话号码|校外电话号码 /电话号码分为校内电话和校外电话两类n校内电话号码=非零数字+ 3 位数字 /校内电话号码由4位数字组成,第1位数字不是0n校外电话号码=本市号码|外地号码 /校外电话又分为本市电话和外地电话两类n本市号码=数字零+8位数字 /拨校外电话需先拨0,若是本市电话则再接着拨8位数字(第1位不是0)作业及解答(第2章)2021/3/1096n外地号码=数字零+3位数字+8位数字 /拨校外电话需先拨0,若是外地电话则拨3位区码再拨8位电话号码(第1位不是0)n非零数字=1|2|3|4|5|6|7|8|9n数字零0n3位数字3数字3 /3至3个数字n8位数字=非零数字+7

50、位数字n7位数字=7数字7n数字0|1|2|3|4|5|6|7|8|9作业及解答(第2章)2021/3/10973-3 银行计算机储蓄系统的工作过程大致如下:储户填写的存款单或取款单由业务员键入系统,如果是存款则系统记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等信息,并印出存单给储户;如果是取款而且存款时留有密码,则系统首先核对储户密码,若密码正确或存款时未留密码,则系统计算利息并印出利息清单给储户。 请用数据流图描绘本系统的功能,并用实体-联系图描绘系统中的数据对象。作业及解答(第3章)2021/3/1098作业及解答(第3章)2021/3

51、/10992021/3/10100作业及解答(第3章)2021/3/10101nER模型本问题中共有两类实体,分别是“储户”和“储蓄所”,在它们之间存在“存取款”关系。因为一位储户可以在多家储蓄所存取款,一家储蓄所拥有多位储户,所以“存取款”是多对多(M:N)关系。储户的属性主要有姓名、住址、电话号码和身份证号码,储蓄所的属性主要是名称、地址和电话号码,而数额、类型、到期日期、利率和密码则是关系类型存取款的属性。作业及解答(第3章)2021/3/10102作业及解答(第3章)2021/3/10103设计原理n模块化n抽象n逐步求精n信息隐藏和局部化n模块独立5.2 设计原理设计原理2021/3

52、/10104五. 模块独立1.耦合性耦合性:弱强模块独立性:强弱123456弱耦合中耦合较强耦合强耦合非直接耦合:无信息交换数据耦合:简单数据以参数形式进行交换特征耦合:数据结构以参数形式进行交换;或共享数据结构控制耦合:参与交换的数据内包含控制信息公共耦合:一组模块使用同一个全局性数据结构/公共区内容耦合:一个模块可以直接访问另一个模块内部数据5.2 设计原理设计原理2021/3/10105五. 模块独立1.耦合性n在软件设计中,提高模块的独立性,建立模块间尽可能松散的系统,是模块化设计的目标。为了降低模块间的耦合度,可以采取以下措施:(1) 在耦合方式上降低模块间接口的复杂性。(2) 在传

53、递信息类型时的设计原则: 尽量采用数据耦合,避免使用控制耦合,慎用或有控制地使用公共耦合,完全不用内容耦合。在实践中要根据实际情况综合考虑。5.2 设计原理设计原理2021/3/10106五. 模块独立2.内聚性内聚性:弱强模块独立性:弱强1234567低内聚中内聚高内聚偶然内聚 0分:逻辑内聚 1分:合并处理、变换相同或相似的功能时间内聚 3分:将因时序相同或接近的操作合并过程内聚 5分:将存在因果关系的功能集成通信内聚 7分:因数据的共用而合并顺序内聚 9分:将存在因果关系的操作集成功能内聚 10分:将只完成一个明确功能的操作合并5.2 设计原理设计原理2021/3/10107五. 模块独

54、立3.总结 耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚,低耦合,提高模块的独立性。 内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合。内聚和耦合都是进行模块化设计的有力工具,但是实践表明内聚更重要,应该把更多注意力集中到提高模块的内聚程度上。5.2 设计原理设计原理2021/3/10108七条启发式规则1、模块的划分:高内聚,低耦合,保持相对独立性2、模块的大小: 模块规模应该适中3、形成的结构:深度、宽度、扇出和扇入都应适当 “顶层扇出较高,中间扇出较小,底层模块高扇入”4、模块的控制:模块的作用域应该在控制域之内5、模块的接口:简单、清晰、

55、含义明确6、设计单入口单出口的模块7、模块功能应该可以预测5.3 启发规则启发规则2021/3/10109一. 层次图5.4 描绘软件结构的图形工具描绘软件结构的图形工具二. HIPO图三. 结构图2021/3/10110n变换分析的设计步骤1.1. 复查基本系统模型。2.2. 复查并精化数据流图3.3. 确定数据流图具有变换特性还是事务特性4.4. 确定输入流和输出流的边界,从而划分出变换中心5.5. 完成第一级分解6.6. 完成第二级分解7.7. 使用设计度量和启发式规则对第一次分割得到的软件结构进行精化二、变换分析5.5 面向数据流的设计方法面向数据流的设计方法2021/3/10111三

56、. 事务分析5.5 面向数据流的设计方法面向数据流的设计方法1、基本过程与变换分析类似,差别在于由数据流图到 软件结构的映射方法不同。2、事务型软件结构n一个顶层模块(总控模块M)n下一层包括2个分支: 接收分支:负责接收数据并根据设计要求的格式实现输入数据的交流(同变换分析)。 发送分支:包括一个调度模块,控制下层的所有的事务处理模块(对应数据流图上的事务种类数目)。功能:接收事务数据,根据事务类型调度相应处理模块。2021/3/10112三. 事务分析5.5 面向数据流的设计方法面向数据流的设计方法总总 控控ABCISRIRASBC2021/3/101132021/3/101142021/

57、3/10115 变换分析是软件结构设计的主要方法。一般,一个大型的软件系统是变换型结构和事务型结构的混合结构。所以,我们通常利用变换分析为主,事务分析为辅的方式进行软件结构的设计。三. 事务分析5.5 面向数据流的设计方法面向数据流的设计方法2021/3/101162021/3/10117三. 事务分析5.5 面向数据流的设计方法面向数据流的设计方法u没有明显的事务特征,按变换分析进行u机械性遵循映射规则,可能会得到一些不必要的控制模块,此时可将这些控制模块与下层模块合并;u如果一个控制模块功能太复杂,可以分解成两个或多个模块注意!注意!2021/3/10118 五 设计优化“一个不能工作的最佳设计的价值是值得怀疑的”n在有效的模块化的前提下使用最少量的模块;n在能够满足信息要求的前提下使用最简单的数据结构。n对时间起决定性作用的软件进行优化的方法。n“先使它能工作,然后再使它快起来”5.5 面向数据流的设计方法面向数据流的设计方法2021/3/10119

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号