【文档说明】软件工程结构化设计概念和原理课件.pptx,共(32)页,139.418 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-45027.html
以下为本文档部分文字说明:
软件工程结构化设计概念和原理课件翻译分析模型到软件设计•数据设计将分析时创建的信息域模型变换为软件所需的数据结构,侧重于数据结构的定义。•体系结构设计定义软件系统各主要结构构件之间的关系。•过程设计则是把结构构件转换成软件的过程性描述。在编码步骤,根
据这种过程性描述,生成源程序代码,然后通过测试最终得到完整有效的软件。•接口设计是建立软件内部的关系以及软件人-机之间的交互机制。1.设计过程•从项目管理的角度来看,软件设计分两步完成。–概要设计,将软件需求转化为数据结构和软件体系结构。–
详细设计,即过程设计。通过对体系结构表示进行细化,得到软件的详细的数据结构和算法。概要设计•从回答“做什么”到回答“怎样做”•划分出组成系统的物理元素——程序、文件、数据库、过程和文档等等•每个元素还是黑盒子•--
-“全局高度,抽象层次”•体系结构设计体系结构设计文学中有科学,音乐中有数学,漫画中有现代数学的拓扑学。漫画家可以“几笔”就把一个人画出来,不管怎么美化或丑化,就是活像。为什么?因为那“几笔”不是别的,而是拓
扑学中的特征不变量,这是事物最本质的东西。——杨叔子(1)体系结构是对复杂事物的一种抽象。(2)体系结构在一定的时间内保持稳定。体系结构设计2.设计基本原理•1.模块化:Modularity–模块是数据说明、可执行语句等程序对象的集合,是单独命名的并且可以通过
名字来访问,例如过程、函数、子程序、宏、modula等。–软件被划分成独立命名和可独立访问的被称作模块的构件,每个构件完成一个子功能,它们集成到一起满足问题需求。easiertobuild,easiertochange,easiertofix...模块化模块化
论据:•C(x)定义为问题x的复杂性•E(x)定义为解决问题x所需要的工作量•对p1和p2两个问题,若C(p1)>C(p2),则E(p1)>E(p2)•C(p1+p2)>C(p1)+C(p2)•E(p1+p2)>E(p1)+E(p2)•不要过度模块化!每个模块的简单性将被集成的复杂性所掩盖。模块化
•模块化和软件本–如何确定地预测最小成本区?成本/模块最小成本区接口成本软件总成本成本模块数目设计基本原理•2.抽象Abstraction:–忽略细节,分层理解问题,自顶向下层层细化,包括对过程、数据和控
制的抽象。–过程抽象:一个命名的指令序列,具有特定和有限的功能。–数据抽象是命名的数据集合,描述一个数据对象。–控制抽象隐含了不必说明的内部细节的程序控制机制。–是实现模块化的手段之一。设计基本原理•3.求精Refine
ment–自顶向下的设计策略。doorimplementedasadatastructuremanufacturermodelnumbertypeswingdirectioninsertslightstypenumberweightopeningmechanismopenimplem
entedwitha"knowledge"oftheobjectthatisassociatedwithenterdetailsofenteralgorithmwalktodoor;reachforknob;Switchtheknob;opendoor;walkthrough;closedoor
.repeatuntildooropensturnknobclockwise;ifknobdoesn'tturn,thentakekeyout;findcorrectkey;insertinlock;endifpull/pushdoormoveoutofway;endre
peat设计基本原理•4.信息隐藏informationhiding–信息隐藏:在设计和确定模块时,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不可访问的。–每个客户只能通过接口来了解该
模块,而所有的实现都隐藏起来。信息隐藏modulecontrolledinterface"secret"•algorithm•datastructure•detailsofexternalinterface•resourceallocatio
npolicyclientsaspecificdesigndecision“信息隐藏”,更准确地描述应是“细节隐藏”,因为隐藏的不是信息,而是实现的细节。3、模块化设计•模块独立性–度量标准:内聚cohesion和耦合coupling–内聚是一个模块内部的交互程度;耦合是模块之间交互的程度。
–功能独立性是良好设计的关键,设计又是软件质量的关键。耦合耦合(couple)是度量系统中模块之间的交互程度。Goal:模块之间尽可能独立耦合从低到高依次为:非直接耦合(最好),数据耦合,标记耦合,控制耦合,外部耦合,公共
耦合和内容耦合(最差)。GreatdealofdependenceIndependentHighlycoupledLooselycoupledUncoupled耦合•内容耦合contentcoupl
ing–如果两个模块中的一个直接引用了另一个模块的内容,则它们之间是内容耦合。–Onemodulemodifiesanother.……ABCDA:……………………gotoC1……………………C:……………………C1:…………例
1:A访问C的内部数据或不通过正常入口而转入C的内部。耦合例2:部分代码重叠(常出现在汇编程序中)BA例3:一个模块有多个入口(功能)A:………………………………entry1:………………………………entry2:………………………………耦合•公共耦合commoncoupling–如
果两个模块都可以存取相同的全局数据,则它们之间是公共耦合。–acommondatastore.Global:V1V2A:……………………A1=V1+V2……………………B:……………………V1=B1……………………Global:V1V2A:……………………V1++……………………B:………………
……V2=B1+V1……………………耦合•公共耦合存在的问题:–公共部分的改动将影响所有调用它的模块;–公共部分的数据存取无法控制;–复杂程度随耦合模块的个数增加而增加。•解决方法:–通过使用信息隐藏来避免公共耦合。耦合•控制耦合controlcoupling–如果两个模块中的一个模块
给另一个模块传递控制信息,则它们具有控制耦合。–Onemodulepassesparameterstocontroltheactivityofanothermodule.ABFlagF2F1Fn…………Flag特点:接口单一,但
仍然影响被控模块的内部逻辑。耦合•标记耦合stampcoupling–如果两个模块都要使用同一数据结构的一部分,不是采用全局公共数据区共享,而是通过模块结构传递数据结构的一部分,则它们之间为标记耦合。•数据耦合datacoup
ling–被调用模块的输入与输出是简单的参数或者是数据结构(该数据结构中的所有元素为被调用的模块使用),则它们之间为数据耦合。•非直接耦合nodirectcoupling–两个模块之间没有联系,则它们之间为非直接
耦合。耦合•实现低耦合,采取下列措施:–耦合方式•采用非直接耦合,不采用内容耦合。–传递信息类型•尽量使用数据耦合,少采用控制耦合,外部耦合和公共耦合限制使用。–耦合数量•模块间相互调用时,传递参数最好只有一个。•原则:尽量使用数据耦合,少用控制耦合
,限制公共耦合的范围,完全不用内容耦合。内聚•内聚:cohesion.•Goal:尽可能高内聚.•内聚级别:偶然内聚逻辑内聚时间内聚过程内聚通信内聚顺序内聚功能内聚最差最好低内聚偶然内聚(Coincidentalcohesion):指一个模块内的各处理元素之间没有任何联
系。例:readdiskfile;calculatecurrentvalues;produceuseroutput;…严重的缺点:产品的可维护性退化;模块是不可复用的,增加软件成本。解决途径:将模块分成更小的模块,每个小模块执行一个操作。低
内聚逻辑内聚(Logicalcohesion):逻辑上相关的功能或数据放在一个模块中。–问题:接口难于理解;完成多个操作的代码互相纠缠在一起,导致严重的维护问题。A:Readinputsfromdiskfromtapefromke
yboard低内聚时间内聚(Temporalcohesion):如果一个模块包含的任务必须在同一段时间内执行。–例如:系统的初始化openoldmasterfile;newmasterfile,transactionfileand
printfile;initializesalesregiontable;readfirsttransactionrecordandfirstoldmasterfilerecord;–问题:不同的功能混在一个模块中,有时共用部分编码,使局部功能的修改
牵动全局。中内聚过程内聚(Proceduralcohesion):Functionsaregroupedtogetherinamoduletoensureacertainorderofperformance.–例子:•Readpartnumberfromd
atabaseandupdaterepairrecordonmaintenancefile.enterdatacheckdatamanipulatedata中内聚通信内聚(Communicationalcohesion):Allthefu
nctionsinamoduleoperateonorproducethesamedataset.例如:从数据库的操作——可能破坏独立性。高内聚顺序内聚(Sequentialcohesion):一个处理元素的输出数据作为下一个处理元素的输入数据。功能内聚(Func
tionalcohesion):模块内的所有处理元素属于一个整体,完成一个单一的功能。原则:在实际工作中,确定内聚的精确级别是不必要的,重要的是力争高内聚和识别低内聚,可以使得设计的软件具有较高的功能独立性。封闭——开放如果一个模块可以作为一个独立体被其它程序
引用,则称模块具有封闭性。如果一个模块可以被扩充,则称模块具有开放性。可复用性——可扩充性小结•软件设计的重要性•设计过程•设计的基本原理–抽象、细化、模块化、体系结构、控制层次、数据结构、软件过程、信息
隐藏。•模块化设计–内聚、耦合,启发规则。