您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 信息系统分析与设计(第3版)邝孔武-王晓敏-第-7章-结构化系统设计
第7章结构化系统设计本章计划学时:8~10学时本章主要内容•系统设计的任务•总体设计–结构化设计的概念、基本原则–从数据流图导出结构图•详细设计–代码设计–输出设计–输入设计–人机对话设计–模块详细设计–数据库设计、网络设计•系统设计说明书转换从分析到设计现实领域的各种需求计算机领域的具体实现针对需求,进行计算机信息系统的物理模型设计7.1系统设计的任务•通俗地说,设计就是要回答“怎么做”•完成技术实现方案的制定,即信息系统的物理模型–一个逻辑模型,可以提出多个物理模型–根据物理模型进行实施,得到最终的物理系统设计系统之前,先看看评价信息系统的标准,这些标准对任何设计方法都适用:1.信息系统的功能:是否满足用户的需求2.系统的效率:响应时间、操作的方便性3.系统的可靠性:抗干扰能力、故障恢复4.系统的工作质量:准确性、使用效果5.系统的可变更性:修改和维护的难易程度6.系统的经济性:系统收益与支出比7.1.1设计标准信息系统的可变更性•变化是不变的真理。•统计表示:在信息系统的整个生命周期中,系统维护成本占总成本的80%左右。•因此,可变更性是衡量信息系统设计的重要指标。如何提高系统变更性•结构简单–系统各组成元素分工明确,易于理解–元素之间的关系清晰简洁•变动灵活–软件维护中的“水波效应”–使系统各组成元素内部的改变容易实现,改动对其他部分的影响尽量减少–提前考虑将来最易出现的扩展和变更•设计方法:结构化设计和面向对象设计7.1.2系统设计的内容一般划分为两部分:•总体设计–也称概要设计–明确软件的组成元素及其结构(structure)、体系结构(architecture)•详细设计–各项具体细节,设计硬件软件的各个方面结构化方法的总体设计主要包括:1.将系统划分成程序模块;2.决定每个模块的功能;3.决定模块的调用关系;4.决定模块的界面,即模块间信息的传递。简单地说,就是绘制模块结构图结构化系统总体设计面向对象系统总体设计面向对象方法的总体设计主要包括:–识别系统中的对象,设计类;–决定每个类的属性和操作(功能);–决定对象之间的协作关系;–将类划分为组件,决定组件的依赖关系。最重要的图是类图和协作图(UML模型)详细设计•包括–代码设计–输入设计–输出设计–人机交互设计(用户界面设计)–模块处理过程设计(模块详细设计)–数据库设计–网络设计7.2结构化设计的概念•结构化:自上至下,逐步分解求精•结构化设计:模块化模块化因为根据经验:–对于问题1(P1)和问题2(P2)–若:C(P1)C(P2)–则:E(P1)E(P2)–有规律:C(P1+P2)C(P1)+C(P2)–则:E(P1+P2)E(P1)+E(P2)–C表示复杂度,E表示需要的工作量模块化的基本思想•使用结构化设计方法一定程度上能够简化系统结构,使系统容易修改和理解。•具体做法:–把整个软件划分为部分,其中每一部分的功能简单明确,即程序模块(可以是子过程或函数)–划分模块的工作按层次进行,上层模块调用下层模块–每一个模块应尽可能独立–模块间的调用接口要阐明(模块名称、输入数据、输出数据)接口成本成本模块数量单元模块成本软件总成本模块数量和软件成本•粒度太大,单个模块复杂度升高、维护困难•粒度太小,管理与运行成本升高试想一下:每个经理管理协调多少个下级合适?7.2.1模块的概念•模块(Module)一词使用很广泛。通常对应于用一个名字就可以调用的一段程序语句(子程序或函数)•模块具有输入和输出、逻辑功能、运行程序、内部数据四种属性。计算工资模块的图形表示方法7.2.2模块结构图•结构图(StructuredChart)描述系统的模块结构及模块间的联系•结构图中的主要成分有:–模块:用长方形表示–调用:从一个模块指向另一模块的箭头表示前一个模块调用后一个模块。有循环调用和条件调用–数据:用带圆圈的小箭头表示从一个模块传递给另一模块的数据(有实义)–控制信息:带涂黑圆圈的小箭头表示一个模块传送给另一模块的控制信息主调模块被调模块被调模块主调模块被调模块被调模块循环调用条件调用1.结构图无严格的模块调用顺序,但一般习惯从左至右2.因为约定遵从从上向下的调用,调用关系也可以不使用箭头,而直接使用直线3.模块间传递的信息如果出现在数据字典中,则视为数据,否则为控制信息结构图的画法计算获得有效数据生成报表打印报表获得编辑数据核对数据打印表头打印表尾读入数据编辑数据显示无效数据打印一行有效数据EOF编辑数据EOF有效数据编辑数据有效数据结果编辑数据数据数据EOFEOF结果日期行行行总计一个完整的结构图模块设计的度量标准•为了衡量模块的相对独立性,提出了模块间的耦合(Coupling)与模块的内聚(Cohesion)两个标准–耦合:模块内部各元素之间的联系程度–内聚:模块和模块之间的联系程度•设计目标:–模块内的联系越紧越好–模块间的联系越少越好–为什么?7.2.3模块的耦合doubleCalculateAvg(){intn;doubletotal,average,value;scanf(“inputvalue:”,&value);whilevalue=0.0{n=n+1;total=total+value;scanf(“\ninputvalue:”,&value);}average=total/n;return(average);}影响耦合度的因素•如果使用模块A需要了解模块B,那么A和B是耦合的。影响模块间耦合程度有三方面的因素:–联系方式--模块间通过什么方式联系–来往信息的作用--模块间来往信息作什么用–数量--模块间来往信息的多少。混合控制数据用过程直接引用语句调用少多数量方式作用0离坐标原点越远,耦合程度越高模块联系方式•直接引用:一个模块直接存取另一个模块的某些信息,例如全程变量、FORTRAN的common量、C语言的extern量、共享的通信区等。也称为公共环境耦合(commonenvironmentcoupling)–降低这种耦合程度的办法是使数据局部化,即使用局部变量•过程语句调用:一个模块调用另一个模块,所有数据来往都以参数或返回值方式传递并使用来往信息的作用•模块间的来往信息可以作数据用,也可以作控制信息用A取平均成绩或最高成绩平均/最高B(a)控制耦合成绩取最高成绩取平均成绩A平均成绩最高成绩(b)数据耦合来往信息的数量•模块间传递的信息量越大,它们之间的耦合程度越高。•一个模块最好只了解它确实需要使用的数据,而完全不知道其他数据的存在(独立性好)耦合的类型•根据以上因素,对耦合分类如下:–数据耦合:采用子程序调用,调用模块将需要进行处理的数据传递给被调模块。数据耦合是不可避免的。–标记耦合:如果调用模块将整个数据记录传递给被调模块,而被调模块只使用了部分数据项,则称为标记耦合或特征耦合。–控制耦合:一个模块将控制信息传递给另一个模块,以控制被调模块的内部处理逻辑。(可以分解)–公共环境耦合:如果两个模块共享同一全局数据,称为公共耦合。–内容耦合:两个模块之间的内部属性有直接关联,也称病态耦合。(某些GOTO语句)减低耦合的设计原则结构化设计要求模块间的耦合程度尽可能小。•为此应:–用过程语句调用其他模块–模块间的参数作数据用–模块间的参数尽可能少7.2.4模块的内聚•模块的内聚反映模块内部联系的紧密程度。•一个模块只需要做好一件事情,不要过分关心其他任务。•高内聚性的好处是可以提高程序的可靠性。–有一个调查表明,50%的强内聚性子程序是没有错误的,而只有18%的弱内聚性子程序才是无错的,弱内聚性子程序的出错机会要比强内聚性出错机会高6倍,而修正成本则要高19倍。《代码大全》内聚的类型•模块的内聚可以分以下七类:1.偶然内聚(coincidentalcohesion)2.逻辑内聚(logicalcohesion)3.时间内聚(temporalcohesion)4.步骤内聚(proceduralcohesion)5.通信内聚(communicationalcohesion)6.顺序内聚(sequentialcohesion)7.功能内聚(functionalcohesion)当同一个子程序中的操作之间无任何联系时,为偶然内聚性,也叫作“无内聚性”。比如只是为了将程序中某几处凑巧相同的一些语句组合起来形成的一个模块:PQRS1、偶然内聚B=A;read(Cardfile);D=C;T将几个逻辑上相似的功能放在一个模块中准备算平均成绩算最高成绩返回Y取平均成绩?N比如常见的出错处理模块,工作模块发现错误后,调用错误处理模块,将错误号作为控制参数传入,然后出错处理模块根据不同的错误号执行相应的操作2、逻辑内聚将在有限时间单元内处理的成分组合为同一模块比如在程序初始化时所作的处理:m_Medirecno=psPerson.MedirecnotxtMedirecno=psPerson.MedirecnotxtTel=psPerson.TeltxtContact=psPerson.ContacttxtAddr=psPerson.AddrtxtMedirecno.Enabled=False•可视化程序设计中在窗口打开时初始化窗口中得控件内容,如列表框的项目、文本框或单选钮的缺省取值•还比如:C++的构造函数、析构函数3、时间内聚4、步骤内聚•当子程序中的操作是按某一特定过程结构进行的,就是步骤内聚。•例如:用户想按一定的顺序打印告,子程序设计成是用于按顺序打印销售收入、开支、雇员电话表的。•步骤内聚在时间内聚的基础上增加了次序的约束模块划分示例PREPPLANLOOPSTMRO(主模块)TYPDECID准备好的矩阵指示标记准备好的矩阵指示标记矩阵指示标记部分结果、标签等•模块PERP是一个初始化模块,属时间内聚。•模块PLANLOOP和TYPDECID都属于步骤内聚。前者的元素用于控制主循环,后者的元素负责主循环的整个判定执行过程绘制划分后的模块图当模块内的成分引用共同的数据,而不存在其他联系时,称为通信内聚修改库存购货单开发货单库存A、销售模块B、产生留退名单模块期末不及格统计累计不及格统计留退名单学籍表5、通信内聚模块中某个成分的输出是另一成分的输入。比如显示期末成绩通知:读入学号读取成绩取不及格科目取科目补考安排显示数据判断留退级6、顺序内聚6、顺序内聚•顺序内聚有较强的内聚性•是步骤内聚和通信内聚的结合•例如:一个模块用于计算高于平均分的人数,步骤是先循环累计总分,然后计算得到平均分,最后循环统计高于平均分的人数•有步骤的先后,而且前一个步骤的结果要用于后一步骤的运算中•但仍然不是最高的内聚类型7、功能内聚•一个模块包括并且仅仅包括为完成一个具体任务所需要的所有成分,称为功能内聚。•功能内聚性是最强也是最好的一种内聚–例如:打印职工名单,PrintStaffList()–例如:计算平均分,CalculateAvg()•仅用一个动宾词组能明确指出这个模块的所有功能。内聚的评分•耦合和内聚的概念是Stevens等人提出的,是测量一个模块化系统好坏的标志。•按他们的观点,给上述七种内聚评分如下:–功能内聚10分–顺序内聚9分–通信内聚7分–步骤内聚5分–时间内聚3分–逻辑内聚1分–偶然内聚0分•可以给一个软件的所有模块打分,最后计算平均分,作为软件结构质量评价的参考耦合和内聚的关系•二者就像连体兄弟,存在紧密相关的关系:–模块内的高内聚往往意味着模块间的松耦合–反之,低内聚一般会带来紧耦合7.2.5作用范围与控制范围•一个设计原则:对于任何一个判断,其作用范围应该是这个判断所在模块的控制范围的一个子集•该原则的目的:消除控制耦合,降低耦合度–想象一下,假设某个控制标志在系统的很多部分发挥作用,那么可能会产生这样一种情况:错误发作的位置离产生错误的源头很远,这给程序调试和维护带来极大困难。作用范围与控制范围•一个判断的作用范围是所有这样的模块的集合,这些模块内含有依赖于这个判断结果的处理。或称影响范围。•一个模块的控制范围是指它本身及其所
本文标题:信息系统分析与设计(第3版)邝孔武-王晓敏-第-7章-结构化系统设计
链接地址:https://www.777doc.com/doc-3979596 .html