《结构化设计概念和原理精选文档.ppt》由会员分享,可在线阅读,更多相关《结构化设计概念和原理精选文档.ppt(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、结构化设计概念和原理本讲稿第一页,共四十五页内容提要内容提要软件设计的重要性、过程及其基本原则软件设计的重要性、过程及其基本原则设计的相关概念设计的相关概念模块化设计模块化设计模块设计的启发规则模块设计的启发规则本讲稿第二页,共四十五页概述概述软件设计软件设计:应用各种技术和原理,对一个软件系统做出:应用各种技术和原理,对一个软件系统做出足够详细的决策,使之有可能在物理上得以实现的过程。足够详细的决策,使之有可能在物理上得以实现的过程。软件设计是一个迭代的过程软件设计是一个迭代的过程。设计目标设计目标:将:将需求分析的结果需求分析的结果(分析模型与需求分析(分析模型与需求分析规约)转化为实际规
2、约)转化为实际软件系统的一个模型或软件表达式软件系统的一个模型或软件表达式,即用于构造软件的,即用于构造软件的“蓝图蓝图”。最终产品最终产品:设计规约,包括描述体系结构、数据、:设计规约,包括描述体系结构、数据、过程和界面设计模型。过程和界面设计模型。评审评审:清晰性、正确性、完整性。:清晰性、正确性、完整性。软件设计与程序设计不同。软件设计与程序设计不同。本讲稿第三页,共四十五页开发阶段的信息流开发阶段的信息流本讲稿第四页,共四十五页翻译需求模型到软件设计翻译需求模型到软件设计需求分析模型需求分析模型设计模型设计模型数据对象描数据对象描述述处理规格说明处理规格说明控制规格说明控制规格说明E-
3、RDFDSTDDD过程设计过程设计接口设计接口设计体系结构设计体系结构设计数据设计数据设计本讲稿第五页,共四十五页翻译分析模型到软件设计翻译分析模型到软件设计数据设计数据设计将分析时创建的信息域模型变换为软件将分析时创建的信息域模型变换为软件所需的数据结构,所需的数据结构,侧重于数据结构的定义侧重于数据结构的定义。体系结构设计体系结构设计定义软件系统各定义软件系统各主要结构构件之间主要结构构件之间的关系。的关系。过程设计过程设计则是把则是把结构构件结构构件转换成转换成软件的过程性描述软件的过程性描述。在编码步骤,根据这种过程性描述,生成源程序在编码步骤,根据这种过程性描述,生成源程序代码,然后
4、通过测试最终得到完整有效的软件。代码,然后通过测试最终得到完整有效的软件。接口设计接口设计是建立软件内部的关系以及软件人机之间是建立软件内部的关系以及软件人机之间的交互机制。的交互机制。软件设计的重要性可以用软件设计的重要性可以用“质量质量”表达。表达。本讲稿第六页,共四十五页1.1.软件设计的重要性软件设计的重要性软件设计软件设计是后续开发步骤及软件维护工是后续开发步骤及软件维护工作的基础。如果没有设计,只能建立一作的基础。如果没有设计,只能建立一个个不稳定的系统结构不稳定的系统结构。本讲稿第七页,共四十五页设计和软件质量设计和软件质量指导性原则指导性原则n设计应该展示一种设计应该展示一种层
5、次性结构层次性结构。n设计应该设计应该模块化模块化。n设计应该包括设计应该包括数据数据、体系结构体系结构、接口接口和和模块模块(构件)的清楚的表示。(构件)的清楚的表示。n设计应有性质不同的可区分的数据结构和过设计应有性质不同的可区分的数据结构和过程。程。n设计应该具有设计应该具有独立功能独立功能特征的模块。特征的模块。n设计应该设计应该降低降低模块和外部环境之间接口模块和外部环境之间接口的的复复杂性杂性。n设计应该利用需求分析中获得的信息和可重设计应该利用需求分析中获得的信息和可重复的方法。复的方法。本讲稿第八页,共四十五页2.2.设计过程设计过程从项目管理的角度来看,软件设计分两从项目管理
6、的角度来看,软件设计分两步完成。步完成。n概要设计概要设计,将软件需求转化为数据结构和软件,将软件需求转化为数据结构和软件体系结构。体系结构。n详细设计详细设计,即过程设计。通过对体系结构表示,即过程设计。通过对体系结构表示进行细化,得到软件的详细的数据结构和算法。进行细化,得到软件的详细的数据结构和算法。本讲稿第九页,共四十五页总体设计总体设计从回答从回答“做什么做什么”到回答到回答“怎样做怎样做”划分出组成系统的物理元素划分出组成系统的物理元素程序、程序、文件、数据库、过程和文档等等文件、数据库、过程和文档等等每个元素还是每个元素还是黑盒子黑盒子-“-“全局高度,抽象层次全局高度,抽象层次
7、”本讲稿第十页,共四十五页3.3.设计基本原理设计基本原理1.模块化:模块化:Modularityn模块模块是数据说明、可执行语句等程序对象的集是数据说明、可执行语句等程序对象的集合,是单独命名的并且可以通过名字来访问,合,是单独命名的并且可以通过名字来访问,例如过程、函数、子程序、宏、例如过程、函数、子程序、宏、modula等。等。n软件被划分成独立命名和可独立访问的被称作软件被划分成独立命名和可独立访问的被称作模块的模块的构件构件,每个,每个构件构件完成一个子功能,它们完成一个子功能,它们集成到一起满足问题需求。集成到一起满足问题需求。easier to build,easier to c
8、hange,easier to fix.本讲稿第十一页,共四十五页模块化模块化模块化论据:模块化论据:C(x)C(x)定义为问题定义为问题x x的复杂性的复杂性E(x)E(x)定义为解决问题定义为解决问题x x所需要的工作量所需要的工作量对对p1p1和和p2p2两个问题,两个问题,若若 C(p1)C(p2)C(p1)C(p2),则,则 E(p1)E(p2)E(p1)E(p2)C(p1+p2)C(p1)+C(p2)C(p1+p2)C(p1)+C(p2)E(p1+p2)E(p1)+E(p2)E(p1+p2)E(p1)+E(p2)不要过度模块化!每个模块的简单性将被集成的不要过度模块化!每个模块的简
9、单性将被集成的复杂性所掩盖。复杂性所掩盖。本讲稿第十二页,共四十五页模块化模块化模块化和软件成本模块化和软件成本n如何确定地预测最小成本区?如何确定地预测最小成本区?成成本本成本成本/模块模块最小成本区最小成本区接口成本接口成本软件总成本软件总成本模块数目模块数目本讲稿第十三页,共四十五页模块化模块化如何确定模块的大小:如何确定模块的大小:n模块可分解性模块可分解性n模块可组装性模块可组装性n模块可理解性模块可理解性n模块的连续性模块的连续性n模块的可保护性模块的可保护性本讲稿第十四页,共四十五页设计基本原理设计基本原理2.抽象抽象 Abstraction:n忽略细节,分层理解问题,自顶向下层
10、层细化,包括对忽略细节,分层理解问题,自顶向下层层细化,包括对过过程程、数据数据和和控制控制的抽象。的抽象。n过程抽象过程抽象:一个命名的指令序列,具有特定和有限的:一个命名的指令序列,具有特定和有限的功能功能。n数据抽象数据抽象是命名的数据集合,描述一个是命名的数据集合,描述一个数据对象数据对象。n控制抽象控制抽象隐含了不必说明的内部细节的程序控制机制。隐含了不必说明的内部细节的程序控制机制。n是实现模块化的手段之一。是实现模块化的手段之一。本讲稿第十五页,共四十五页过程抽象过程抽象在这个抽象层次上,给出了在这个抽象层次上,给出了初步的过程初步的过程表示表示,所用的术语都已面向软件,而且,所
11、用的术语都已面向软件,而且模块化的工作已经开始显露。模块化的工作已经开始显露。逐步细化和模块化的概念与抽象紧密相逐步细化和模块化的概念与抽象紧密相连。连。本讲稿第十六页,共四十五页数据抽象数据抽象定义定义“绘图绘图 drawing”数据对象作为一种抽象数据类型数据对象作为一种抽象数据类型。nTYPE drawing IS STRUCTURE DEFINED number IS STRING LENGTH(12)geometry DEFINED notes IS STRING LENGTH(256)ENF drawing TYPE;nBlueprint IS INSTANCE OF drawin
12、g;nSchematic IS INSTANCE OF drawing;本讲稿第十七页,共四十五页设计基本原理设计基本原理3.求精求精Refinementn自顶向下的设计策略。自顶向下的设计策略。doorimplemented as a data structuremanufacturermodel numbertypeswing directioninsertslights type numberweightopening mechanismopenimplemented with a knowledge of the object that is associated with enter
13、details of enter algorithmwalk to door;reach for knob;Switch the knob;open door;walk through;close door.repeat until door opensturn knob clockwise;if knob doesnt turn,then take key out;find correct key;insert in lock;endifpull/push doormove out of way;end repeat本讲稿第十八页,共四十五页求精求精设计的设计的求精求精过程与需求分析的划分类
14、似,过程与需求分析的划分类似,只是考虑的细节层次不同。只是考虑的细节层次不同。求精求精实际是一个实际是一个详细描述详细描述的过程。的过程。抽象与抽象与求精求精是是互补互补的概念。的概念。本讲稿第十九页,共四十五页设计基本原理设计基本原理4.信息隐藏信息隐藏 information hiding n信息隐藏:在设计和确定模块时,使得一个信息隐藏:在设计和确定模块时,使得一个模块内包含的信息(过程和数据)对于模块内包含的信息(过程和数据)对于不需不需要这些信息的模块来说,是不可访问的要这些信息的模块来说,是不可访问的。n每个客户只能通过每个客户只能通过接口接口来了解该模块,而所来了解该模块,而所有
15、的实现都隐藏起来。有的实现都隐藏起来。n隐藏就是有效的模块化可以通过定义一组独隐藏就是有效的模块化可以通过定义一组独立模块来实现。立模块来实现。本讲稿第二十页,共四十五页信息隐藏信息隐藏modulemodulecontrolledcontrolledinterfaceinterface secretsecret algorithmalgorithm data structuredata structure details of external interfacedetails of external interface resource allocation policyresource a
16、llocation policyclientsclientsa specific design decision“信息隐藏信息隐藏”,更准确地描述应是,更准确地描述应是“细节隐藏细节隐藏”,因为隐藏的,因为隐藏的不是信不是信息息,而是实现的细节而是实现的细节。本讲稿第二十一页,共四十五页4 4、模块化设计、模块化设计模块独立性模块独立性n度量标准:度量标准:内聚内聚 cohesion 和和耦合耦合 couplingn内聚是一个内聚是一个模块内部模块内部的交互程度;耦合是的交互程度;耦合是模块模块之间之间交互的程度。交互的程度。n好处:更有利于开发、设计好处:更有利于开发、设计/编码修改的副作用
17、编码修改的副作用减小、模块的复用可能。减小、模块的复用可能。n功能独立性是良好设计的关键,设计又是软件功能独立性是良好设计的关键,设计又是软件质量的关键。质量的关键。本讲稿第二十二页,共四十五页耦合耦合(couple)是度量系统中模块之间的交互是度量系统中模块之间的交互程度。程度。Goal:模块之间尽可能独立模块之间尽可能独立耦合从低到高依次为:耦合从低到高依次为:非直接耦合非直接耦合(最好),(最好),数据耦合,标记数据耦合,标记耦合,控制耦合,外部耦合,公共耦合和内容耦合耦合,控制耦合,外部耦合,公共耦合和内容耦合(最差)(最差)。Great deal of dependenceIndep
18、endent Highly coupledLoosely coupledUncoupled 耦合耦合本讲稿第二十三页,共四十五页耦合耦合内容耦合内容耦合 content couplingn如果两个模块中的一个直接引用了另一个模如果两个模块中的一个直接引用了另一个模块的内容,则它们之间是内容耦合。块的内容,则它们之间是内容耦合。nOne module modifies another.ABCDA:goto C1C:C1:例例1 1:A A访问访问C C的内的内部数据或不通过正常入口部数据或不通过正常入口而转入而转入C C的内部。的内部。本讲稿第二十四页,共四十五页例例2 2:部分代码重叠:部分代
19、码重叠(常出现在汇编程序(常出现在汇编程序中)中)B B A A例例3 3:一个模块有多个入:一个模块有多个入口(功能)口(功能)A:A:entry 1:entry 1:entry 2:entry 2:耦合耦合本讲稿第二十五页,共四十五页公共耦合公共耦合 common coupling n如果两个模块都可以存取相同的全局数据,如果两个模块都可以存取相同的全局数据,则它们之间是公共耦合。则它们之间是公共耦合。na common data store.Global:V1 V2A:A1=V1+V2B:V1=B1Global:V1 V2A:V1+B:V2=B1+V1耦合耦合本讲稿第二十六页,共四十五页
20、公共耦合存在的问题:公共耦合存在的问题:n 公共部分的改动将影响所有调用它的模块;公共部分的改动将影响所有调用它的模块;n 公共部分的数据存取无法控制;公共部分的数据存取无法控制;n 复杂程度随耦合模块的个数增加而增加。复杂程度随耦合模块的个数增加而增加。解决方法解决方法:n通过使用信息隐藏来避免公共耦合。通过使用信息隐藏来避免公共耦合。耦合耦合本讲稿第二十七页,共四十五页控制耦合控制耦合 control coupling n如果两个模块中的一个模块给另一个模块传如果两个模块中的一个模块给另一个模块传递控制信息,则它们具有控制耦合。递控制信息,则它们具有控制耦合。nOne module pas
21、ses parameters to control the activity of another module.ABFlagF2F1FnFlag特点:特点:接口单一,接口单一,但仍然影响被控但仍然影响被控模块的内部逻辑。模块的内部逻辑。耦合耦合本讲稿第二十八页,共四十五页标记耦合标记耦合 stamp couplingn如果两个模块都要使用同一数据结构的一部分,如果两个模块都要使用同一数据结构的一部分,不是采用全局公共数据区共享,而是通过模块不是采用全局公共数据区共享,而是通过模块结构结构传递数据结构的一部分传递数据结构的一部分,则它们之间为标,则它们之间为标记耦合。记耦合。数据耦合数据耦合
22、data couplingn被调用模块的输入与输出是被调用模块的输入与输出是简单的参数简单的参数或者是或者是数据结构数据结构(该数据结构中的所有元素为被调用(该数据结构中的所有元素为被调用的模块使用),则它们之间为数据耦合。的模块使用),则它们之间为数据耦合。非直接耦合非直接耦合 no direct coupling n两个模块之间没有联系,则它们之间为非直接两个模块之间没有联系,则它们之间为非直接耦合。耦合。The most desirable.耦合耦合本讲稿第二十九页,共四十五页实现低耦合,采取下列措施:实现低耦合,采取下列措施:n耦合方式耦合方式w采用非直接耦合,不采用内容耦合。采用非直
23、接耦合,不采用内容耦合。n传递信息类型传递信息类型w尽量使用数据耦合,少采用控制耦合,外部耦合尽量使用数据耦合,少采用控制耦合,外部耦合和公共耦合限制使用。和公共耦合限制使用。n耦合数量耦合数量w模块间相互调用时,传递参数最好只有一个。模块间相互调用时,传递参数最好只有一个。原则:原则:尽量使用数据耦合,少用控制耦合,限制尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,完全不用内容耦合。公共耦合的范围,完全不用内容耦合。耦合耦合本讲稿第三十页,共四十五页内聚内聚内聚:内聚:cohesioncohesion.Goal:Goal:尽可能高内聚尽可能高内聚.内聚级别:内聚级别:偶然内聚偶然内聚
24、逻辑内聚逻辑内聚 时间内聚时间内聚 过程内聚过程内聚 通信内聚通信内聚 顺序内聚顺序内聚 功能内聚功能内聚最差最差最好最好本讲稿第三十一页,共四十五页低内聚低内聚偶偶然然内内聚聚(Coincidental Coincidental cohesion):cohesion):指指一一个个模模块块内内的各处理元素之间没有任何联系。的各处理元素之间没有任何联系。例:例:read disk file;read disk file;calculate current values;calculate current values;produce user output;produce user outpu
25、t;严严重重的的缺缺点点:产产品品的的可可维维护护性性退退化化;模模块块是是不不可可复复用用的的,增增加加软件成本。软件成本。解决途径:将模块分成更小的模块,每个小模块执行一个操作。解决途径:将模块分成更小的模块,每个小模块执行一个操作。本讲稿第三十二页,共四十五页低内聚低内聚逻辑内聚逻辑内聚(Logical cohesionLogical cohesion):逻辑上):逻辑上相关的功能或数据放在一个模块中。相关的功能或数据放在一个模块中。n问题:接口难于理解;完成多个操作的代码问题:接口难于理解;完成多个操作的代码互相纠缠在一起,导致严重的维护问题。互相纠缠在一起,导致严重的维护问题。A:R
26、ead inputsfrom diskfrom tapefrom keyboard本讲稿第三十三页,共四十五页低内聚低内聚时间内聚时间内聚(Temporal cohesion):(Temporal cohesion):如果一个模块包含的任如果一个模块包含的任务必须在同一段时间内执行。务必须在同一段时间内执行。n例如例如:系统的初始化系统的初始化 open old master file;open old master file;new master file,transaction file and new master file,transaction file and print file
27、;print file;initialize sales region table;initialize sales region table;read first transaction record and first read first transaction record and first old master old master file record;file record;n问题问题:不同的功能混在一个模块中,有时共用部分编码,:不同的功能混在一个模块中,有时共用部分编码,使局部功能的修改牵动全局。使局部功能的修改牵动全局。本讲稿第三十四页,共四十五页中内聚中内聚 过程内聚
28、过程内聚(Procedural cohesion):Functions are grouped together in a module to ensure a certain order of performance.n例子:例子:wRead part number from database and update repair record on maintenance file.enter datacheck datamanipulate data本讲稿第三十五页,共四十五页中内聚中内聚 通信内聚通信内聚(Communicational cohesionCommunicational c
29、ohesion):):All All the functions in a module operate on or the functions in a module operate on or produce the same data set.produce the same data set.例如:从数据库的操作例如:从数据库的操作 可能破坏独立性。可能破坏独立性。本讲稿第三十六页,共四十五页高内聚高内聚 顺序内聚顺序内聚(Sequential cohesion):一个处理元素的一个处理元素的输出数据作为下一个处理元素的输入数据。输出数据作为下一个处理元素的输入数据。功能内聚功能内聚(
30、Functional cohesion):模块内的所有模块内的所有处理元素属于一个整体,完成一个单一的功能。处理元素属于一个整体,完成一个单一的功能。原则:原则:在实际工作中,确定内聚的精确级别是不必要的,在实际工作中,确定内聚的精确级别是不必要的,重要的是力争高内聚和识别低内聚重要的是力争高内聚和识别低内聚,可以使得设计的软,可以使得设计的软件具有件具有较高的功能独立性较高的功能独立性。本讲稿第三十七页,共四十五页1.1.争取低耦合、高内聚(增加内聚争取低耦合、高内聚(增加内聚 减少耦合)减少耦合)2.2.模块规模适中:过大分解不充分不易理解;太小则开销模块规模适中:过大分解不充分不易理解;
31、太小则开销过大、接口复杂。注意分解后不应降低模块的独立性。过大、接口复杂。注意分解后不应降低模块的独立性。3.3.适当控制适当控制 深度深度 =分层的层数。过大表示分工过细。分层的层数。过大表示分工过细。宽度宽度 =同一层上模块数的最大值。过大表示系统复杂同一层上模块数的最大值。过大表示系统复杂度大。度大。启发性规则启发性规则本讲稿第三十八页,共四十五页控制层次控制层次McbalkedmfgihjnopqrWidth DepthFan-outFan-in本讲稿第三十九页,共四十五页 扇出扇出 =一个模块直接调用一个模块直接调用 控制的模块数。控制的模块数。3 3 fan-out fan-out
32、 9 9A AA A的扇出的扇出A AA A的扇入的扇入 扇入扇入=直接调用该模直接调用该模块的模块数块的模块数在不破坏独立性的前提下,在不破坏独立性的前提下,fan-infan-in 大的比较好。大的比较好。启发性规则启发性规则本讲稿第四十页,共四十五页尽可能减少高扇出结构,随着深度增大扇入尽可能减少高扇出结构,随着深度增大扇入。如果一个模块的扇出数过大,就意味着该模块过分复如果一个模块的扇出数过大,就意味着该模块过分复杂,需要协调和控制过多的下属模块。应当适当增加杂,需要协调和控制过多的下属模块。应当适当增加中间层次的控制模块。中间层次的控制模块。一般来说,顶层扇出高,中间扇出少,低层高扇
33、一般来说,顶层扇出高,中间扇出少,低层高扇入。入。启发性规则启发性规则本讲稿第四十一页,共四十五页 控制域控制域M MA AC CB BM M的控制域为的控制域为 M M,A A,B B,CC 作用域:作用域:M M中的一个判定所影响的模块。中的一个判定所影响的模块。l 作用域是指该模块中一个判断所影响的所有其它模块;作用域是指该模块中一个判断所影响的所有其它模块;l 控制域指该模块本身以及所有直接或间接从属于它的控制域指该模块本身以及所有直接或间接从属于它的模块。模块。4.4.模块的作用范围保持在该模块的控制范围内模块的作用范围保持在该模块的控制范围内启发性规则启发性规则本讲稿第四十二页,共
34、四十五页例:A:A:if if then then goto goto B1B1 B:B:B1:B1:作用域在控制域内作用域在控制域内A:A:if if then then goto goto M1M1 M:M:M1:goto C1M1:goto C1 作用域超出了控制域作用域超出了控制域 上例中上例中A A的作用超出了控制域。的作用超出了控制域。改进方法之一,可以把改进方法之一,可以把A A中的中的 if if 移到移到M M中;中;改进方法之二,可以把改进方法之二,可以把C C移到移到A A下面。下面。M MA AC CB B本讲稿第四十三页,共四十五页5 5、降低接口的复杂程度:模块接口
35、的复杂性是引、降低接口的复杂程度:模块接口的复杂性是引起软件错误的一个主要原因。接口设计应该使起软件错误的一个主要原因。接口设计应该使得信息传递简单并且与模块的功能一致。得信息传递简单并且与模块的功能一致。6 6、单出单入,避免内容耦合,易于理解和维护。、单出单入,避免内容耦合,易于理解和维护。7 7、模块功能可预测、模块功能可预测 相同输入必产生相同输出。相同输入必产生相同输出。反例:模块中使用全局变量或静态变量,则可能反例:模块中使用全局变量或静态变量,则可能导致不可预测。导致不可预测。启发性规则启发性规则本讲稿第四十四页,共四十五页小结小结软件设计的重要性软件设计的重要性设计过程设计过程设计的基本原理设计的基本原理n抽象、细化、模块化、体系结构、控制层次、抽象、细化、模块化、体系结构、控制层次、数据结构、软件过程、信息隐藏。数据结构、软件过程、信息隐藏。模块化设计模块化设计n内聚、耦合,启发规则。内聚、耦合,启发规则。本讲稿第四十五页,共四十五页