SE04第4章结构化设计.ppt
《SE04第4章结构化设计.ppt》由会员分享,可在线阅读,更多相关《SE04第4章结构化设计.ppt(175页珍藏版)》请在三一办公上搜索。
1、1/174,第4章 结构化设计(Structured Design,SD),4.1 结构化设计与结构化分析的关系4.2 软件设计的概念和原理4.3 模块独立4.4 启发规则4.5 表示软件结构的图形工具4.6*面向数据流的设计方法(概要设计)4.7 人机界面设计4.8*过程设计(详细设计)4.9*过程设计的工具4.10 面向数据结构的设计方法(详细设计),2/174,软件设计是后续开发步骤及软件维护工作的基础。没有设计,只能建立一个不稳定的系统结构。,软件设计的意义,3/174,软件设计的任务,4/174,软件设计的任务(技术角度),根据用信息域表示的软件需求,以及功能和性能需求,进行数据设计
2、结构设计(体系结构设计、系统结构设计)接口设计(界面设计)过程设计(过程处理设计),5/174,数据设计:将分析阶段创建的信息域模型转变成实现软件所需要的数据结构。系统结构设计:定义软件系统各主要成份之间的关系(计算机程序的模块框架)。接口设计:描述软件内部、软件与协作系统之间以及软件与使用者之间的通信方式。过程设计:把程序体系结构中的结构元素转换成软件构件的过程性描述。在编码阶段根据这种过程性描述,生成源程序代码。,软件设计的任务(技术角度),6/174,软件设计任务(管理角度),从工程管理的角度来看,软件设计分两步完成:概要设计:通过分析软件规格说明,对软件进行适当的功能分解,将软件划分为
3、模块,并设计出完成预定功能的模块结构。详细设计(即过程设计):详细地设计每个模块,确定完成每个模块功能所需要的数据结构和算法。,7/174,4.1结构化设计与结构化分析的关系,分析模型中的每一个成份都提供了建立设计模型所需的信息。软件设计的信息流如图4.1所示。根据用数据、功能和行为模型表示的软件需求,采用某种设计方法进行数据设计、体系结构设计、接口设计和过程设计。,8/174,图4.1 将分析模型转变成软件设计,9/174,4.2 软件设计的概念和原理,模块化抽象化自顶向下,逐步细化信息隐蔽,10/174,4.2.1 模块化,模块(Module)(组件):由边界元素()限定的相邻的程序元素的
4、序列,有一个总体标识符来代表它。例如:过程、函数、子程序、宏模块一般具有如下三个基本属性:功能:描述该模块实现什么功能逻辑:描述模块内部怎么做状态:该模块使用时的环境和条件,11/174,模块化的基本概念,模块化:将整个程序划分成若干独立命名且可独立访问的模块,每个模块完成一个子功能。这些模块集成起来构成一个整体,可以完成指定的功能、满足用户的需求。能够把一个大而复杂的软件系统划分成易于理解的比较单纯的模块结构。,12/174,模块大小、模块数目与费用的关系,13/174,4.2.2 抽象,抽象:抽出事物的本质特性(共性)而暂不考虑其细节(差异)进行模块设计时,可有不同的抽象层次。最高抽象层次
5、:可以使用问题所处环境的语言概括地描述问题的解法。较低抽象层次:更过程化的方法。最低抽象层次:以直接实现的方式叙述问题的解法。,14/174,例:开发一个CAD软件时的三种抽象层次,抽象层次.用问题所处环境的术语来描述这个软件:该软件包括一个计算机绘图界面,向绘图员显示图形,以及一个数字化仪界面,用以代替绘图板和丁字尺。所有直线、折线、矩形、圆及曲线的描画、所有的几何计算、所有的剖面图和辅助视图都可以用这个CAD软件实现。,15/174,任务需求的描述。CAD SOFTWARE TASKS user interaction task;2-D drawing creation task;grap
6、hics display task;drawing file management task;end.在这个抽象层次上,未给出“怎样做”的信息,不能直接实现。,抽象层次.,16/174,程序过程表示。以2-D 绘图生成任务为例:PROCEDURE:2-D drawing creation REPEAT UNTIL(drawing creation task terminates)DO WHILE(digitizer interaction occurs)digitizer interface task;DETERMINE drawing request CASE;line:line drawi
7、ng task;rectangle:rectangle drawing task;circle:circle drawing task;,抽象层次.,17/174,4.2.3 逐步求精,定义:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。基本思想:将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,最后确立整个体系结构。,18/174,4.2.4 信息隐藏,问题:为了得到最好的一组模块,应该怎样分解软件?信息隐藏原理:应该这样设计和确定模块,使得一个模块内包含的信息(数据和过程)对于不需要这些信息的模块来说是不能访问的。(细节隐
8、藏)给测试和维护带来的好处,19/174,模块独立性:指软件系统中每个模块只涉及软件要求的具体的子功能,和软件系统中其它模块的接口是简单的。例如,若一个模块只具有单一的功能且与其它模块之间没有过多的相互作用,则称此模块具有模块独立性 一般采用两个准则度量模块独立性。即模块间耦合和模块内聚,4.3 模块独立,20/174,耦合:一个软件结构内不同模块之间互连程度的度量。内聚:一个模块内各个元素彼此结合的紧密程度(模块功能强度)的度量。模块独立性比较强的模块应是高内聚低耦合的模块。,模块独立性度量准则,21/174,4.3.1模块间的耦合,22/174,非直接耦合(Nondirective Cou
9、pling),如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,就是非直接耦合。这种耦合的模块独立性最强。,23/174,数据耦合(Data Coupling)如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据(不是控制参数、公共数据结构或外部变量)则称这种耦合为数据耦合。标记耦合(Stamp Coupling)如果一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。,24/174,A,B,C,D,X,传递数据,传递数据结构,AB为非直接耦合AC为数据耦合AD为标记耦合,25/174,控制耦合(Control
10、Coupling),如果传递的信息中有控制信息,如开关、标志、名字等(尽管有时这种控制信息以数据的形式出现),称为控制耦合。,26/174,外部耦合(External Coupling)一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,称为外部耦合。公共耦合(Common Coupling)当两个或多个模块通过一个公共数据环境,相互作用时,它们之间的耦合称为公共耦合。公共环境可以是全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件和物理设备等。,27/174,Example of common coupling,28/174,松散的公共耦
11、合,紧密的公共耦合,公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种情况:松散公共耦合和紧密公共耦合。,29/174,内容耦合(Content Coupling),如果发生下列情形之一,两个模块间就发生了内容耦合一个模块访问另一个模块的内部数据;一个模块不通过正常入口而转到另一模块的内部;两个模块有一部分程序代码重叠(只可能出现在汇编程序中);一个模块有多个入口(意味着一个模块有几种功能)。,30/174,进入另一模块内部,多入口模块,模块代码重叠,内容耦合,31/174,示例1:,下面的程序段出现了哪种类型的耦合?public class Em
12、ailer public void sendEmail(Employee e,String text),32/174,示例2:,下面的程序段出现了哪种类型的耦合?public routineX(String command)if(command.equals(“driwCircle”)drawCircle();else drawRectangle();,33/174,示例3:,下面的程序段出现了哪种类型的耦合?public class Line private point start,end;public point getStart()return start public point ge
13、tEnd()return end public class Arch private Line baseline;void slant(int)point theEnd=baseline.getEnd;theEnd.setLocation(theEnd.getX,newY);,34/174,耦合是影响软件复杂程度的一个重要因素应该采取下述设计原则 尽量使用数据耦合,少用控制耦合和标记耦合,限制公共耦合的范围,完全不用内容耦合,35/174,c,4.3.2 内聚,36/174,功能内聚(Functional Cohesion),一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模
14、块中所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。功能内聚是最高程度的内聚。例如,计算工资、打印月报表等。由于这类模块的功能明确、模块间的耦合简单,所以便于维护。,37/174,顺序内聚,如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行(通常一个处理元素的输出数据作为下一个处理元素的输入数据),则称为顺序内聚。顺序内聚是次高程度的内聚。例如,“录入和汇总”模块、“统计和打印”模块都是顺序内聚模块。顺序内聚的模块中有可能包含几个功能,因而会给维护带来不便。,38/174,信息内聚(Informational Cohesion),这种模块完成多个功能,各个功能
15、都在同一数据结构上操作,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该执行哪一个功能。由于这个模块的所有功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚的模块。(例),39/174,40/174,信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的隐蔽。即把某个数据结构、资源或设备隐蔽在一个模块内,不为别的模块所知晓。,41/174,通信内聚(Communication Cohesion),如果一个模块内所有元素都使用同一个输入数据和(或)产生同一个的输出数据,则称之为通信内聚。通常,通信内聚模块是通过数据流图来定义的。例如报表打印模块,各成分都从若干共同的
16、数据来源接收数据,然后转换、汇总并打印出各种报表。,42/174,读文件,打印检验结果,计算A,计算B,合并,新文件,文件,加工记录模块,通信内聚,43/174,过程内聚(Procedural Cohesion),如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚。使用流程图作为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。,44/174,时间内聚,如果一个模块包含的任务必须在同一段时间内执行,则称为时间内聚。时间内聚属于低内聚。例如,模块完成各种初始化工作,4
17、5/174,逻辑内聚(Logical Cohesion),这种模块把几种 相关的功能组合 在一起,每次被 调用时,由传送 给模块的判定参 数来确定该模块 应执行哪一种功 能。,46/174,例如,把系统中与“输出”有关的操作抽取出来组成一个模块,包括将数据在屏幕上显示、从打印机上打印、拷贝到磁盘上等,则该模块就是逻辑内聚的。,47/174,偶然内聚(Coincidental Cohesion),当模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为偶然内聚模块,它是内聚程度最低的模块。有时在写完一个程序之后,发现一组语句在两处或多处出现,于是把这些语句作为一个模块以节省内
18、存,48/174,ASTORE rec()to NREAD X FileADD 1 to z,BSTORE rec()to NREAD X FileADD 1 to z,M STORE rec()to N READ X File ADD 1 to z,A,B,49/174,Examples of Cohesion,50/174,4.4 启发式规则,软件工程师们在开发计算机软件的长期实践中积累了丰富的经验,总结这些经验得出了一些启发规则。这些启发规则虽然不像基本原理那样普遍适用,但是在许多场合仍然能给软件工程师有益的启示,往往能帮助找到改进软件设计提高软件质量的途径,有助于实现有效的模块化。,5
19、1/174,几条常用的启发规则,改进软件结构提高模块独立性模块规模应该适中深度、宽度、扇入、扇出适中模块的作用域应该在控制域之内降低模块接口的复杂程度设计单入口单出口的模块模块功能应该可以预测,52/174,4.4.1改进软件结构提高模块独立性,审查分析软件的结构,通过模块分解或合并,力求降低耦合提高内聚多个模块公有的一个子功能可以独立成一个模块,由这些模块调用。有时通过模块分解或合并以减少控制信息的传递及对全程数据的引用,并降低接口的复杂度。,53/174,4.4.2 模块规模应适中,模块的大小,可以用模块中所含语句的数量的多少来衡量。把模块的大小限制在一定的范围之内。通常规定其语句行数在6
20、0左右,保持在一页纸之内。,54/174,过大的模块往往是由于分解不充分,但是进一步分解必须符合问题结构,一般说来,分解后不应该降低模块独立性过小的模块开销大于有效操作,而且模块数目过多将使系统接口复杂。因此过小的模块有时不值得单独存在,特别是只有一个模块调用它时,通常可以把它合并到上级模块中去而不必单独存在。,55/174,4.4.3深度、宽度、扇入、扇出应适当(程序的系统结构图),56/174,如果一个模块的扇出数过大,就意味着该模块过分复杂,需要协调和控制过多的下属模块。应当适当增加中间层次的控制模块。,57/174,设计较好的软件结构顶层扇出比较高中层扇出比较少底层扇入到公共的实用模块
21、中去(底层模块有高扇入),58/174,4.4.4模块的作用域应在控制域之内,59/174,模块的作用域应在控制域之内,模块的控制域:模块本身及其所有从属模块的集合。(例:A-A,B,C,D,E,F)模块的作用域:受该模块内一个判定影响的所有模块的集合。如果一个判定的作用域包含在这个判定所在模块的控制域之内,则这种结构是简单的(例:A-B);否则,它的结构是不简单的(例:A-G)。解决办法?,60/174,模块A的某些处理决定于B2中判定的结果B2返回B的一个标记flag,表示判定的结果,再送给Y,最后送到Aflag不是数据,而是控制信息,因而造成模块间的控制耦合,61/174,4.4.5 模
22、块功能应可预测,设计功能可预测的模块,但要避免模块功能过分局限功能可预测的模块:不论内部处理细节如何,对相同的输入数据,总能产生同样的结果如果模块内部蕴藏有一些特殊的鲜为人知的功能时,这个模块就可能是不可预测的。这种模块既难于理解又难于测试和维护,62/174,4.5 表示软件结构的图形工具,软件结构包括程序的模块结构数据的结构软件的体系结构通过一个划分过程来完成该划分过程从需求分析确立的目标系统的模型出发,对整个问题进行分割,使其每个部分用一个或几个软件成份加以解决,整个问题便得以解决。,63/174,待解问题与软件解决方案的对应划分,64/174,总体设计,设计阶段的任务解决怎么做的问题总
23、体设计的任务将系统的功能分配到软件结构,形成模块结构图,65/174,总体设计的表示形式,层次图通过模块之间的关系图表示软件的总体结构HIPO图(IBM)层次图+输入/处理/输出图结构图描述能力更强,能够区分各种具体的调用情形,66/174,4.5.1 层次图和HIPO图,层次图(Hierarchy图):描绘软件层次结构的图形工具矩形框:代表模块连线:代表调用关系(位于上方的矩形框所代表的模块调用位于下方的矩形框所代表的模块)在自顶向下逐步求精设计软件的过程中,使用H图很方便加编号的H图(具有可跟踪性),67/174,例:正文加工系统的层次图,68/174,例:加编号的正文加工系统的层次图,6
24、9/174,HIPO(层次图加输入/处理/输出)图,IPO图:与H图中的每个方框相对应,描绘这个方框所代表模块的处理过程IPO图基本形式:左边的框列出有关的输入数据中间的框列出主要的处理(其次序暗示执行顺序)右边的框列出产生的输出箭头:指出数据通信的情况,70/174,例:HIPO图,71/174,改进的IPO图(IPO表),72/174,4.5.2 结构图,Yourdon(Computer Hall of Fame)提出的结构图是进行软件结构设计的一个有力工具。结构图:描绘软件结构的图形工具矩形框:代表模块,框内注明模块名字或主要功能连线:代表调用关系(位于上方的矩形框所代表的模块调用位于下
25、方的矩形框所代表的模块)带注释的箭头:表示模块调用过程中来回传递的信息;尾部为空心圆传递数据;尾部为实心圆传递控制信息,73/174,程序结构,程序结构:表明程序各个部件(模块)的组织情况,是软件的过程表示。,74/174,例:产生最佳解的一般结构,75/174,结构图的附加符号,76/174,层次图和结构图并不严格表示模块的调用次序。层次图和结构图并不指明什么时候调用下层模块。通常上层模块中除了调用下层模块的语句之外还有其他语句,究竟是先执行调用下层模块的语句还是先执行其他语句,在图中丝毫没有指明。事实上,层次图和结构图只表明一个模块调用哪些模块,至于模块内还有没有其他成分则完全没有表示。,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SE04 结构 设计
链接地址:https://www.31ppt.com/p-6518700.html