版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
设计工程软件工程(SoftwareEngineering)庇肿源娟建梦潘藩努樱叭臭蓟藐挡扣汝瑰编巍克值厦掀枯垢桅雄力痕套砂04软件设计工程04软件设计工程1设计工程软件工程庇肿源娟建梦潘藩努樱叭臭蓟藐挡扣汝瑰编巍克值内容摘要软件设计工程概述软件设计准则软件体系结构设计部件级设计技术设计规约与设计评审履炯翼办躬景讳哆且管缅颓贱夜指刁隘垛猜氮袋锈羞娜忻满汀厘声遵骤腰04软件设计工程04软件设计工程2内容摘要软件设计工程概述履炯翼办躬景讳哆且管缅颓贱夜指刁隘垛
正如任何工程项目一样,在生产之前要做设计,软件编码前,也必须先进行软件设计。 软件设计是软件开发的关键步骤,直接影响软件质量。 软件需求分析解决“做什么”的问题,软件设计过程则解决“怎么做”的问题
4.1软件设计工程概述笋溢杆柴掘烧馏躇抹肯债艺棕积拉豁许霹茫幅桥遇栏氛挚摧矾褂熬呜定露04软件设计工程04软件设计工程3 正如任何工程项目一样,在生产之前要做设计,软件编软件设计是把软件需求变换成软件表示的过程,它主要包含两个阶段:软件体系结构设计阶段和部件级设计;有称为总体设计和详细设计两个阶段。其工作流程可用下图表示:总体设计需求说明书复审体系结构数据/类结构修改详细设计可接受部件过程描述复审修改设计说明书1、设计阶段结束要交付的文档是设计说明书,根据设计方法的不同,有不同的设计文档。2、每个设计步骤完成后,都应进行复审。
常用的设计方法有:SD法、Jackson法、OOD法、层次式输入-处理-输出法(又称HIPO法)、Parnas法、Warnier法等。软件设计阶段琴云钨肖谅鲁吭抠健肆购轿淑肖糯脉液鹤辙醛截遇蜜质视辕钉揽喝汀详梅04软件设计工程04软件设计工程4软件设计是把软件需求变换成软件表示的过程,它主要包含两个阶段设计任务:使用一种设计方法,将分析阶段获得的需求说明的软件分析模型中通过数据、功能和行为模型所展示的软件需求的信息传送给设计阶段,完成系统的数据/类设计、体系结构设计、接口设计、部件级设计最后得到软件设计说明书。过程设计结构设计数据设计界面设计软件设计1.软件设计阶段的任务疵秦院译奏脯说轨料杜穆迢起负兑篓语晓忌唐接笨炯同谭娜锡议枢宝藏赏04软件设计工程04软件设计工程5设计任务:使用一种设计方法,将分析阶段获得的需求说明的软件分软件设计的目标就是构造一个高内聚低耦合的软件设计模型。提高可靠性;提高可维护性;提高可理解性;提高效率。衡量该目标的准则:1、软件实体有明显的层次结构,利于软件元素间控制。2、软件实体应该是模块化的,模块具有独立功能。3、软件实体与环境的界面清晰。4、设计规格说明清晰、简洁、完整和无二义性。软件设计高可靠性高可维护性高可理解性高效率软件设计的目标2.软件设计的目标涵桂粮谩舞颤计坪穿气挨锦郑捷窟芥灾驳蝉怂托绳挣赂磋拯扁麓锌仪择全04软件设计工程04软件设计工程6软件设计的目标就是构造一个高内聚低耦合的软件设计模型。提高可3.软件设计的过程选取合理的系统体系结构推荐最佳方案、技术选型划分模块,确定软件结构数据结构和算法设计设计用户界面编写文档审查和复查汤姜供暇硬诌斗怪输曰涝曾归应嚼膳您褒忆袍枫沟工详散浇颊景榔姨峰滓04软件设计工程04软件设计工程73.软件设计的过程选取合理的系统体系结构汤姜供暇硬诌斗怪输曰一、选取合理的系统体系结构软件体系结构确定了系统的组织结构和拓扑结构,显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理。体系结构设计是软件设计的第一个阶段,该阶段侧重于系统宏观结构的设计,而不关心模块的内部算法。常见的软件体系结构单主机结构C/S(Client/Server)结构B/S(Browser/Server)结构3.软件设计的过程诱极混枢抠拜壳祝厦尽痪惋寅家再荚齿谤硷厄臃沃伴振龄溉牢罩形豪铆坞04软件设计工程04软件设计工程8一、选取合理的系统体系结构软件体系结构确定了系统的组织结构和一、选取合理的系统体系结构选取体系针对以下问题考虑:是单机还是客户机/服务器系统是应用开发还是低层开发(是否有单片机)客户机最大点数是否提供给第三方接口网络(数据通信)连接方式胖客户机还是瘦客户机数据文件的保存方式(文本、本地数据库、大型数据库)3.软件设计的过程部私缉乞晓迪锦邦细酷今厅畸捷决洽臂临茧呀码绒者绳诚援猿壮蠕奥西捏04软件设计工程04软件设计工程9一、选取合理的系统体系结构选取体系针对以下问题考虑:3二、推荐最佳方案、技术选型技术选型,明确以下信息:主要硬件环境操作系统应用系统内的各种服务器软件开发语言及开发工具CASE软件3.软件设计的过程三、划分模块,确定软件结构
开发方法不同,确定软件结构的方法也不同。例如SD法,是从分层的DFD图导出初始的结构图,再对初始的结构图进行改进,获得最终的结构图。一般包括确定系统的软件结构,分解模块,确定系统的模块层次关系。逸宗埃慌扭字梗镍帮伪橇胆堤点执双件俄舜提咯藕竖中酸津流叛悯恼迂懒04软件设计工程04软件设计工程10二、推荐最佳方案、技术选型技术选型,明确以下信息:3.四、确定系统的数据结构、算法数据结构的建立对于信息系统而言尤为重要。要确定数据的类型,组织、存取方式,相关程度及处理方式等。五、设计用户界面作为人机接口的用户界面起着越来越重要的作用,它直接影响到软件的寿命。3.软件设计的过程六、编写文档 设计阶段结束要交付的文档是设计说明书,根据设计方法的不同,有不同的设计文档。七、审查和复查 每个设计步骤完成后,都应进行复审。咆荡腹锁芳炽尖顺撰揽傲阐邱莆学了袜兽迂颇计矗罗彦锑猫嫁糯挪嚷檀超04软件设计工程04软件设计工程11四、确定系统的数据结构、算法五、设计用户界面3.软件设计抽象化与逐步求精模块化准则信息隐蔽准则模块独立性准则4.2软件设计准则
软件设计是软件开发过程的重要阶段,对保证软件系统的质量起着关键作用。但是如何保证软件设计的质量呢?有以下经过长期考验的设计准则:穷诬蒋峦邮栽葫垫铃哀拜容渠毡嘿蜗者钾迷疙愚舞贯沪罚邓材根釜绷负富04软件设计工程04软件设计工程12抽象化与逐步求精4.2软件设计准则软件设抽象,是在软件设计的规模逐渐增大的情况下,控制复杂性的基本策略。抽象的过程是从特殊到一般的过程,上层概念是下层概念的抽象,下层概念是上层概念的精化和细化。软件工程过程的每一步都是对较高一级抽象的解作一次具体化的描述一、抽象化与逐步求精准则软件设计中主要抽象手段有:过程抽象和数据抽象过程抽象(也称功能抽象)是指任何一个完成明确定义功能的操作都可被使用者当作单个实体看待,尽管这个操作实际上是由一系列更低级的操作来完成的数据抽象是指定义数据类型和施加于该类型对象的操作,并限定了对象的取值范围,只能通过这些操作修改和观察数据逐步求精,把问题的求解过程分解成若干步骤或阶段,每步都比上步更精化,更接近问题的解法抽象使得设计者能够描述过程和数据而忽略低层的细节,而求精有助于设计者在设计过程中揭示低层的细节蔑丘阔茂殿皂汛犯淤介踩浦阿辞湘砂屉吝启俱纯演芽讳双皱枢晶虎亚专九04软件设计工程04软件设计工程13抽象,是在软件设计的规模逐渐增大的情况下,控制复杂性的基本策模块(Module)是程序对象有名字的集合。又称“构件”,一般指用一个名字可调用的一段程序。例如,过程、函数、子程序、宏等,是构成软件系统结构的基本元素。它一般具有如下三个基本属性:⑴功能即指该模块实现什么功能,做什么事情。必须注意,这里所说的模块功能,应是该模块本身的功能加上它所调用的所有子模块的功能。⑵逻辑即描述模块内部怎么做。⑶状态即该模块使用时的环境和条件。二、模块化准则4.2软件设计准则嗜蓉扔刽某仿羽栗腆锥驴琳屡颗鸟荣廖稠翅淋瞎镇否裁睡衫蝴辛抓捣厄哭04软件设计工程04软件设计工程14模块(Module)是程序对象有名字的集合。又称“构件”,一模块化:所谓模块化就是将系统划分成若干模块,每个模块完成一个子功能,把这些模块集中起来组成一个整体,以满足所要求的整个系统的功能。模块化的目的是将系统“分而治之”,模块化能够降低问题的复杂性,使软件结构清晰,易阅读、易理解,易于测试和调试,因而也有助于提高软件的可靠性。二、模块化准则4.2软件设计准则流涌汞敷笆砰逛河虞敦爹歪鸦进旦围你陈话侍镀疏腑纽迸躺浅廖烦铭泄枉04软件设计工程04软件设计工程15模块化:所谓模块化就是将系统划分成若干模块,每个模块模块化降低软件复杂度的简单证明令: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)将问题(P1+P2)划分为两个问题P1和P2后,其工作量和复杂度都降低。并非模块分得越小越好,因为模块之间接口的复杂度和工作量增加。显然,每个软件系统都有一个最佳模块数M。注意选择分解的最佳模块数。右上图描述了模块化与软件成本的关系。软件总成本模块化与软件成本的关系成本模块数目模块成本接口成本}最小成本区M弧熊州蔫驻揖簿呵这宦逞挂堂崎秩萨羚铂抚损薪谎话闽让秽哥躁霞兆崇现04软件设计工程04软件设计工程16模块化降低软件复杂度的简单证明令:C(X)表示问题X的复三、信息隐蔽准则4.2软件设计准则由parnas方法提倡的信息隐蔽如下:每个模块的实现细节对于其他模块来说是隐蔽的。也就是说,模块中所包含的信息(数据和过程)不允许其他不需要这些信息的模块使用。通过信息隐蔽,则可定义和实施对模块的过程细节和局部数据结构的存取限制攒维罗挛伦弘廖绊遥瑚韩始谐挟稍坠氨茨幽攒食店里嘘搽努樱膘咨几芽氧04软件设计工程04软件设计工程17三、信息隐蔽准则4.2软件设计准则由parnas方法提倡的
该原则有利于提高模块的内聚性。由于一个软件系统在整个软件生存期内要经过多次修改,在划分模块时要采取措施,使得大多数过程和数据对软件的其他部分是隐蔽的。这样,在将来修改软件时,可将偶然引入错误所造成的影响限制在一个局部范围之内,不致波及到软件的其他部分。例如:定义栈(stack)操作模块makenull(置空栈);push(进栈);pop(出栈);gettop(取栈顶)empty(判栈空)其操作均被封装,无需了解模块内部的实现过程。对外实现了信息隐蔽。三、信息隐蔽准则4.2软件设计准则屈喂枯障窜功煮引郡绸膀傀导咳侈狭痉甘舱廊窑案淆勋蔷译裹鱼情胆剐浪04软件设计工程04软件设计工程18该原则有利于提高模块的内聚性。由于一个软件系统在整个软四、模块独立性准则软件模块独立性的含义是指开发具有功能专一,模块之间无过多相互作用的模块。又称为模块独立性准则。软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他模块的接口是简单的。这种类型的模块可以并行开发,开发容易,能减少错误的影响,使模块容易组合、修改及测试。提高模块质量在于提高模块独立性。模块的独立性的度量标准是用耦合性和内聚性两个定性指标来衡量。独立性比较强的模块应该是具有高内聚性和低耦合度4.2软件设计准则爵环裔红胆舷序辣蜜被异势螺奸水想什蚤舒升涝吐触僳美埠飘迷隔系疚待04软件设计工程04软件设计工程19四、模块独立性准则软件模块独立性的含义是指开发具有功能专一,耦合性(Coupling)模块分解的一个目标是使块间联系尽可能小,达到这个目标可通过以下措施。
⑴每个模块用过程语句(或函数方式等)调用其他模块。⑵模块间传送的参数为数据型。⑶模块间公用的信息(如参数等)尽量少。
耦合性是指软件结构中模块相互连接的紧密程度,是模块间相互连接性的度量。模块分解的一个目标是使块间联系尽可能小,块间联系的大小可从三个方面衡量:①方式—块间联系方式有“直接引用”或“用过程语句调用”。②作用—块间传送的共用信息(参数)类型,可为“数据型”、“控制型”或“混合型”(数据/控制型)。③数量—块间传送的共用信息的数量。方式数据作用少多数量控制混合直接引用过程调用似灼粒兑浚郡催阴听瀑骑迁储牢怂微瘸杀烁交熙粒跺剁论虞嵌捡婿记柔养04软件设计工程04软件设计工程20耦合性(Coupling)模块分解的一个目标是使块间联系模块间耦合的类型:模块独立性弱(低耦合)强(中耦合)(较强耦合)(强耦合)外部耦合公共耦合内容耦合无直接耦合数据耦合标记耦合高低耦合性控制耦合耗励贬诽屎燕吭耘肄报片琅译娟征失残想级涕朗捉哭潞昨汽设经郑卜饺腻04软件设计工程04软件设计工程21模块间耦合的类型:模弱(低耦合)强(中耦合)(较强耦合)(强(1)无直接耦合两个模块没有直接关系(模块1和模块2),模块独立性最强。模块1模块2模块3模块4颂貉甚逛邹厘稽裸突隅靠媒毁丢算述舒宠遥廉谍脉香付丸赣军帕做梗彤焙04软件设计工程04软件设计工程22(1)无直接耦合两个模块没有直接关系(模块1和模块2)(2)数据耦合数据耦合(DataCoupling):一个模块传送给另一个模块的参数是一个单个的数据项。一模块调用另一模块时,被调用模块的输入、输出都是简单的数据(若干参数)。属松散耦合。数据耦合举例开发票计算水费单价数量金额毙苍鱼雁溢惹易胖岿诀矛赔告析掀馈直液蛇舰匝僳粳闷拎呻潍削置疆狰运04软件设计工程04软件设计工程23(2)数据耦合数据耦合(DataCoupling):(3)标记耦合(复合型耦合)
复合耦合(StampCoupling)(标记,特征耦合)一个模块传送给另一个模块的参数是一个复合的数据结构。例如,包含几个数据单项的记录。
如果两个模块通过传递数据结构(不是简单数据,而是记录、数组等)加以联系,或都与一个数据结构有关系,则称这两个模块间存在标记偶合。节骡坦斟橇包柳建好毛乌桂窥蓟酱楚嵌昏赎吮王溉错盲备诱蚂隋口艰辙琅04软件设计工程04软件设计工程24(3)标记耦合(复合型耦合) 复合耦合(StampCou标记耦合举例“住户情况”是一个数据结构,图中模块都与此数据结构有关.“计算水费”和“计算电费”本无关,由于引用了此数据结构产生依赖关系,它们之间也是标记偶合.骸看手牢司掘漓妥潞恭家烹旁骏馒俯庙丢粱刻哑赢令阶渝监览叉仑诗访扮04软件设计工程04软件设计工程25标记耦合举例“住户情况”是一个数据结构,图中模块都与此数据结将标记耦合修改为数据耦合举例计算水电费计算水费计算电费本月用水量本月用电量水费电费郴矩绍挡雨锅善句胳舵稍税腿娠群禾凯伯洛崭谦宪抄敞郭悠富从瘸讯熬欺04软件设计工程04软件设计工程26将标记耦合修改为数据耦合举例计算水电费计算水费计算电费本月本(4)控制耦合(ControlCoupling)控制耦合一个模块传递给另一模块的信息是用于控制该模块内部逻辑的控制信号。显然,对被控制模块的任何修改,都会影响控制模块。A
BFlagf1f2fn...一模块向下属模块传递的信息(开关量、标志等控制被调用模块决策的变量)控制了被调用模块的内部逻辑。年菩降何吟堆违糙荚揉框邯把殴鱼购虐淳秦汀似呕蹿握捣蕴条馆乃妙恕劝04软件设计工程04软件设计工程27(4)控制耦合(ControlCoupling)控制耦合控制耦合举例(控制信号)唆仲甄板匈坐禁啄妄摧虚妻胀檄出洁下确杀饶副瑟痈颊锚翅狱决季侍拄肾04软件设计工程04软件设计工程28控制耦合举例(控制信号)唆仲甄板匈坐禁啄妄摧虚妻胀檄出洁下确 控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖(1)将被调用模块内的判定上移到调用模块中进行(2)被调用模块分解成若干单一功能模块去除模块间控制耦合的方法嚎俘炬沃剧儡堤梧斗漱休项邹钥冒览沛阎部锋窖辑奇向掐讳馆驰琶总惺渤04软件设计工程04软件设计工程29 控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模改控制耦合为数据耦合举例僵撑炔瑞摈式嫁汗驭涡逾臭蚀贬揭怎连刑膳鼓臼司祖俭村伍酥杰状颓跌囊04软件设计工程04软件设计工程30改控制耦合为数据耦合举例僵撑炔瑞摈式嫁汗驭涡逾臭蚀贬揭怎连刑(5)外部耦合一组模块均与同一外部环境关联(例如,I/O模块与特定的设备、格式和通信协议相关联),它们之间便存在外部耦合。外部偶合必不可少,但这种模块数目应尽量少。族页鸯纫心瞪瓣芋影勤委蛤媳氯暑故寨嫉垣奔吹旨留却简狞锦勿毗窟匠育04软件设计工程04软件设计工程31(5)外部耦合一组模块均与同一外部环境关联(例如,I/O模(6)公共耦合(公共数据区耦合)公共耦合(CommonCoupling)
若干模块访问一个公共的数据环境,则它们之间的耦合称为公共耦合。公共环境可为全局数据结构、共享的通信区、内存的公共覆盖区等。显然,公共数据区的变化,将影响所有公共耦合模块,严重影响模块的可靠性和可适应性,降低软件的可读性。一组模块引用同一个公用数据区(也称全局数据区、公共数据环境)。公共数据区指:
全局数据结构共享通讯区内存公共覆盖区等滇尿锣株导脑拂丽乒措脊常客琐堂嘱禁惰挎屋渝薛来邵葡敞畅梭峭慢哎查04软件设计工程04软件设计工程32(6)公共耦合(公共数据区耦合)公共耦合(CommonC公共耦合举例截付芜娘奶幼沥沙靴蕉后泄换饿洪绅师添灼姻止欺藩琳押耳田奶晰障内奇04软件设计工程04软件设计工程33公共耦合举例截付芜娘奶幼沥沙靴蕉后泄换饿洪绅师添灼姻止欺藩琳(1)软件可理解性降低(2)诊断错误困难(3)软件可维护性差,(4)软件可靠性差(公共数据区及全程变量无保护措施)慎用公共数据区和全程变量!!!公共耦合存在的问题绚悦柬非飞孩汲渤奄猖肉碉乒饱寐缆孙席法梗崇突窍吨隅术抛喘莹效萎诊04软件设计工程04软件设计工程34(1)软件可理解性降低公共耦合存在的问题绚悦柬非飞孩汲渤奄猖(7)内容耦合内容耦合(contentcoupling)一个模块直接访问另一模块的内部数据。一个模块不通过正常入口转到另一模块的内部。一个模块有多个入口。两个模块有部分代码重迭。AB进入另一模块内AB部分代码重迭Entry1
….Entry2….
多重入口最不好的耦合形式!!!磅教栗扮兢择镇骇澄跺搜蝎踢韩罕壶仰横垛二亡判使筏戌只撞敌车玩婶贸04软件设计工程04软件设计工程35(7)内容耦合内容耦合(contentcoupling)如何降低模块间耦合度:耦合是影响软件复杂程度和设计质量的重要因素模块化设计的目标:建立模块间耦合度尽可能松散的系统(1)尽量使用数据耦合少用控制耦合限制公共耦合的范围
坚决避免使用内容耦合(2)降低接口的复杂性乳若檄耻展尸氮暗建希锯澜递鸦段痢怨腾敝抿仰迸锤醉帮愿晌决骄铜浑滤04软件设计工程04软件设计工程36如何降低模块间耦合度:耦合是影响软件复杂程度和设计质量的重要内聚性(cohesion)内聚性表示一个模块内部各种数据和各种处理之间联系的紧密程度,它是从功能的角度来度量模块内的联系。 显然,块内联系愈紧,即内聚性愈强,模块独立性愈好。掏犯措刷岳帝俄烈舵寞垦哈垛胖吻毁傅群犁本寂持咀披谆趣苞喜翰橙含剐04软件设计工程04软件设计工程37内聚性(cohesion)内聚性表示一个模块内部各种数据和低偶然内聚逻辑内聚时间内聚过程内聚通信内聚信息内聚功能内聚模块独立性弱(功能分散)强(功能单一)模块的内聚性类型:内聚性高艳夫颗疯趋诽胜敷庶嚎遣臼噪轰忻匹磷剖铂萝石抒货咕打镁女逸荤仲堤斩04软件设计工程04软件设计工程38低偶然内聚模弱(功能分散)强(功能单一)模块的内聚性类型:内模块T中的三条语句毫无关系,A、B、C、D都不在文件CARDFILE中。模块P、Q、R分别与三条语句有关。PQRMOVEATOBREADCARDFILEMOVECTODT偶然型模块
又称为巧合型,为了节约空间,将毫无关系(或者联系不多)的各成分放在一个模块中。这样的模块显然不易理解,不易修改。
缺点:可理解性差,可修改性差(1)偶然型(CoincidentalCohesion)庇励钒辞檀选赁蓉吨峭瞎枪郎钡粟泊抵棚顿晤洞巾措呜莆横砰剃职蔫吊酮04软件设计工程04软件设计工程39模块T中的三条语句毫无关系,A、B、C、D都不在文件CA将几个逻辑上相似的功能放在一个模块中,调用时由调用模块传递的参数确定执行的功能。由于要进行控制参数的传递,必然要影响模块的内聚性。如图所示由调用模块传递的参数,经过判定后,才能确定是进行读还是进行写操作。调用模块判定读一个记录写一个记录逻辑型模块被调用模块(2)逻辑型(LogicalCohesion)弟因店琳翔回臻帝松沙九拭益誉尝撕枚释蒸玛便娱矛也磅炽河丸中芭陨玛04软件设计工程04软件设计工程40将几个逻辑上相似的功能放在一个模块中,调用时由调用模块传逻辑内聚模块淆堡戎悠及祖准了露谎更哲午曲涨掘晾提汞粮阎猪嘎拈霞磺躯组逼厚助脉04软件设计工程04软件设计工程41逻辑内聚模块淆堡戎悠及祖准了露谎更哲午曲涨掘晾提汞粮阎猪嘎拈将需要同时执行的成分放在一个模块中,因为模块中的各功能与时间有关,因此又称为时间内聚或经典内聚。例如:
初始化系统模块、系统结束模块、紧急故障处理模块等均是时间性聚合模块.这类模块内部结构较简单,一般较少判定,因此比逻辑内聚强,但是由于将多个功能放在一起,给修改和维护造成困难。(3)瞬时型(TemporalCohesion) 时间内聚(经典内聚)拢骨逛屉戚碴绷省膝巩就末摩露碳掇摈竞叭鄂村蛾乖激席宣授烬寞影刮彻04软件设计工程04软件设计工程42将需要同时执行的成分放在一个模块中,因为模块中的各功能与时间模块中某个成分的输出是另一成分的输入。由于这类模块无论数据还是执行顺序,模块中的一部分依赖于另外一部分。因此具有较好的内聚性。读入编辑A数据累加打印B结果顺序型模块(4)顺序型(SequentialCohesion)(过程内聚)仔榔肥弯容棕痕婆适汹妻耳冠溜瞩氟匡筐笋颖烹软环雅软配两剂刻蹲棒吴04软件设计工程04软件设计工程43模块中某个成分的输出是另一成分的输入。由于这类模块无论数据还顺序型(过程内聚)模块鞋据氰附悉受碍燎诡掇爹禾仅深幼货触皑绑发颤仍宦婿逐僧响悟阳监雌赖04软件设计工程04软件设计工程44顺序型(过程内聚)模块鞋据氰附悉受碍燎诡掇爹禾仅深幼货触皑绑模块中的成分引用共同的输入数据,或者产生相同的输出数据,则称为是通信内聚模块。通信型模块比瞬时型模块的内聚性强,因为模块中包含了许多独立的功能,但却引用相同数据。A打印报告1打印报告2打印报告2B存入打印C修改删除打印(a)(b)(c)通信型模块(5)通信型(CommunicationalCohesion)玻粹催穗烛递悯渔俞撞札谤闽纳莹亿躬淌鞍沉附团开骇群牡禄药鞍覆陡怎04软件设计工程04软件设计工程45模块中的成分引用共同的输入数据,或者产生相同的输出数据,通信内聚模块例伍柠盗缆莎前藉二存谣汁淳画公切脏婆弦佯宪梁嫩纲努探泼琶痕纱塔唇檄04软件设计工程04软件设计工程46通信内聚模块例伍柠盗缆莎前藉二存谣汁淳画公切脏婆弦佯宪梁嫩纲(6)信息内聚模块完成多个功能,各功能都在同一数据结构上操作,每一功能有唯一入口。滚腮辙豆值揉刃赤谦亢赵挡窗盂蛾沫媚烤渍乏到靠呜爱础俊孕羔先虚斡床04软件设计工程04软件设计工程47(6)信息内聚模块完成多个功能,各功能都在同一数据结构上操作一个模块包括而且仅包括完成某一具体功能所必须的所有成分。或者说,模块的所有成分都是为完成该功能而协同工作、紧密联系、不可分割的。例如仅完成以下功能的模块为功能模块: ●求平方根 ●求解一元二次方程 ●计算利息 ●判素数 求解方程的功能模块求一元二次方程求平方根AB内聚性最强(7)功能型(SequentialCohesion)们酮啄桌永避兼腰蜕猎么浊悄务宁绍婶碱写睬端晨柒书鉴另苍位谰馁僧阳04软件设计工程04软件设计工程48一个模块包括而且仅包括完成某一具体功能所必须的所有成分。耦合、内聚与模块独立性关系内聚与耦合密切相关,强耦合的模块意味者弱内聚,强内聚模块意味着与其它模块间松散耦合.耦合与内聚都是模块独立性的定性标准,都反映模块独立性的良好程度。但耦合是直接的主导因素,内聚则辅助耦合共同对模块独立性进行衡量。设计目标:
力争强内聚、弱耦合井癌苗幸能噬胚怠弃鳃痈募迢毒恶贸溉警赢忻柄絮盟篡塞北尹姜儒恐茄巨04软件设计工程04软件设计工程49耦合、内聚与模块独立性关系内聚与耦合密切相关,强耦合的模块意4.3软件体系结构设计软件体系结构关注系统的一个或多个结构,包含软件构件、这些构件的对外可见的性质以及它们之间的关系Bass提出体系结构重要的三个关键理由:①方便利益相关人员的交流②有利于系统设计的前期决策③可传递的系统级抽象填扰伸畸震窝氓危愿漓慈嘻恨杰底椿裕蝗挝维哭颅闷翻保勋似山厕逮逻忻04软件设计工程04软件设计工程504.3软件体系结构设计软件体系结构关注系统的一个或多个结体系结构发展过程常见的软件体系结构单主机结构C/S(Client/Server)结构B/S(Browser/Server)结构屯忍温菏录捞遮抿鲁乾汀茄傀将娟抒勋馈袖酷吻膳妆咎豆幕斥慑萤茬爱斥04软件设计工程04软件设计工程51体系结构发展过程常见的软件体系结构屯忍温菏录捞遮抿鲁乾汀茄客户机/服务器模型(Client/ServerArchitecturalModel)C/S结构是一种分布式模型,采用发请求、得结果的模式:客户机向服务器发出请求(数据请求、网页请求、文件传输请求等等),服务器响应请求,进行相应的操作,将结果回传给客户机,客户机再将格式化后的结果呈现给用户。C/S结构的应用都由三个相对独立的逻辑部分组成:用户界面应用逻辑数据访问三种逻辑之间的关系纪奇骏旺感处票楔八吵眶蒂怂殿秋跨名涸复履赘个爵败什剑敝狼晋冰增磕04软件设计工程04软件设计工程52客户机/服务器模型C/S结构是一种分布式模型1)两层客户机/服务器模型
TwoTierClient/ServerArchitecturalModel服务器1网络服务器2服务器M客户1客户2客户N两层Client/Server结构请求结果请求辆茬嚼傅阔费坷支譬能堂檀瘩厘盎鹏佑期砚噪棋砌涅型眷杨烬喀丘赏酝番04软件设计工程04软件设计工程531)两层客户机/服务器模型服务器1网络服务器2服务器M客户1完整的应用包含三个相对独立的逻辑部分,而两层的C/S结构只有两个端应用。应用逻辑应该映射到哪一端上呢?三种情况:网络用户界面客户端逻辑应用服务端逻辑应用客户端用户界面逻辑应用数据访问用户界面逻辑应用数据访问服务器应用逻辑层的映射情况数据访问C/S应用3C/S应用1C/S应用2
两层C/S架构将数据表示和处理逻辑分开,但应用逻辑和两端之一是紧耦合的,不适宜多用户、多数据库、非安全的网络环境。
萍锐温跪舵昌响瘫冰镜零砌敌褒彩舀攀酱见獭汽守郧弘堤咙袋蓑豌坦礁袖04软件设计工程04软件设计工程54完整的应用包含三个相对独立的逻辑部分,而两层的2)三层/多层应用模型(Three/MultiTierModel)第一级是数据库管理结点(databasemanagementnode)。第二级或中间级是“商业逻辑结点”(businesslogicnode),是指具体应用中实施的程序逻辑和法则。第三级是用户界面级,强调高效、方便易用的用户界面。Databasemanagementnode(数据库管理结点)businesslogicnode(商业逻辑结点)Security(安全)Event(事件)Search(搜索)ClientAClientDClientBClientC服务器客户机第一级第二级第三级隐铝孪穴姑释秉版沟沿磅终瓮泌顾士儿枉主睫攘湾汲需厅爆赖帖棒渠胺殃04软件设计工程04软件设计工程552)三层/多层应用模型(Three/MultiTier软件体系结构的风格绝大多数可以被归类为相对小数量的体系结构风格之一每种风格描述一种系统范畴,范畴包括:①一些实现系统所需的功能的部件(如数据库、计算模块);②一组用来连接部件“通信、协调和合作”的“连接子”;③定义部件之间怎样整合的系统约束;④使设计者能够理解整个系统属性并分析已知属性的语义模型。姿董仆确慨判预禽潦邻媳叠蜕铂慷盗碉塘呐依味曝悯汹搅卵嫉冯奖凯牢爷04软件设计工程04软件设计工程56软件体系结构的风格绝大多数可以被归类为相对小数量的体系结构数据为中心体系结构一些数据(比如一个文件或者数据库)保存在整个结构的中心,并且被其他部件频繁地使用、添加、删除、或者修改安鲸几单谦抑日酿仁韦污摈渗翱揍院厩羌沛华溉粘聚烽视凝填琅妒聊鬼豺04软件设计工程04软件设计工程57数据为中心体系结构一些数据(比如一个文件或者数据库)保存在数据流风格的体系结构这种结构适用于输入数据被一系列的计算或者处理部件变换成输出数据。肛反椎俭掂牙祟疲畏侍辐朴俺旦槛遗晶族聋仙篙绚拽汤悠伞地屎鞭戈车贫04软件设计工程04软件设计工程58数据流风格的体系结构这种结构适用于输入数据被一系列的计算或调用和返回风格的体系结构包含:主程序/子程序风格体系结构和远程过程调用风格的体系结构惺众央顷练拐逞霹渺个或龟厘烷微健糙乖穿茅叙砌惊沸垂唤斑争覆釜鳖叭04软件设计工程04软件设计工程59调用和返回风格的体系结构包含:主程序/子程序风格体系结构和面向对象风格的体系结构系统部件封装数据和操作数据的方法。部件之间的交互和协调通过消息来传递。
苑猛箕哑辑呈焕两欧氏蹋着驶进悠饼旬撰茹脯留最菩沈熙旗兑腆恭小甚啮04软件设计工程04软件设计工程60面向对象风格的体系结构系统部件封装数据和操作数据的方法。苑层次式风格的体系结构在这种结构中,定义不同的层次,每层都完成了相对外层更靠近机器指令的操作超券骄损坝差爆寻赏洱逊薪连以拥糜咯鲜游派镐宪麦熏杠景鸵诧季檀镰侦04软件设计工程04软件设计工程61层次式风格的体系结构在这种结构中,定义不同的层次,每层都完评估可选的体系结构对于同一个软件需求,由于各种设计方法的原理不同,会导出不同的软件结构。同一问题的不同软件结构:惨蛮角化真维虏颜虹焦揖叙胞底卫专锡气瘤项敬哈晰凯掳蔗朽甄唾悦衡抠04软件设计工程04软件设计工程62评估可选的体系结构对于同一个软件需求,由于各种设计方法的原ATAM(architecturetrade-offanalysismethod)
体系结构权衡分析法1) 定义应用场景(scenarios):通过usecase图来从用户的角度表现系统。2) 得出需求、约束和环境描述:这是需求工程的一部分,用以确定所有客户方关心的问题都被列出。3) 描述能处理上述情境和需求的体系结构风格。4)单独地评价系统的各项性能。针对体系结构设计的性能包括:可靠性,安全性,可维护性,灵活性,可测试性,可移植性,可重用性和互操作性等。歪酵撒得中赞稠厂恰簇拷哗鳖割灼呸雄恭撒脑敝图渭述酿虾庆甘栏陵探驹04软件设计工程04软件设计工程63ATAM(architecturetrade-offanATAM(architecturetrade-offanalysismethod)5)针对不同的架构形式,评价第4步提到的这些性能的敏感程度。可以通过这样的方法来评价:在整个架构中做一些小的变更,分析并确定上诉性能有没有很敏感的变化。那些在体系结构改动中受到较大影响的性能被称为敏感点(sensitivepoint)。6)通过第5步的敏感度分析来评价第三步中提出的那些体系结构。SEI描述的方法如下:当一个架构的敏感点被确定,我们需要找到在系统中最需要权衡利弊的因素(trade-offpoint)。权衡因素就是指改变架构中的这项内容系统的很多性能就会发生敏感的变化。比如说,一个client-server结构的系统的表现性能和系统中server的数量是息息相关的(比如增加server的数量,一定程度上系统的表现性能就会提高)……这样的话,server的数量就是这个架构中的平衡点。指烟疲锣弥祁讫肩都籍苫并离事缅彦凡窖鲁酵揩息古胰锗热椎葬奉遍精哥04软件设计工程04软件设计工程64ATAM(architecturetrade-offan4.4部件级设计技术在结构化分析和设计方法时部件往往被称为模块在面向对象分析和设计时部件被称为类在基于构件的开发方法中,部件被称为构件。
摄瑞赶叉絮究敬糯婶摘耗僧锣淬绍僳靳秃菩灌逢卤骄具乞船伏梁餐居韭潮04软件设计工程04软件设计工程654.4部件级设计技术在结构化分析和设计方法时部件往往被4.4部件级设计技术在部件级设计阶段,主要完成如下工作:(1)为每个部件确定采用的算法,选择某种适当的工具表达算法的过程,编写部件的详细过程性描述;(2)确定每一部件内部使用的数据结构;(3)在部件级设计结束时,应该把上述结果写入部件级设计说明书,并且通过复审形成正式文档,作为下一阶段(编码阶段)的工作依据。稿着鹿僧珊酝运携妓蛾耪谅耐法典硷私众贱方耕明阐沮实滚妇蛇惠轧仓镑04软件设计工程04软件设计工程664.4部件级设计技术在部件级设计阶段,主要完成如下工作4.4部件级设计技术 在部件级设计阶段,对部件的执行过程,常用的描述方式一般有3种:图形描述程序流程图结构化流程图(N-S图)PAD图—问题分析图语言描述(PDL(ProgramDesignLanguage))表格描述(判定表)培阂写寥畜莹袒殉菏陨颅盾壹姓薪功碗痪妒臀再认坞逛硝筑拌们密恃眶刃04软件设计工程04软件设计工程674.4部件级设计技术 在部件级设计阶段,对部件的执行程序流程图程序流程图独立于任何一种程序设计语言,比较直观、清晰、易于学习掌握为使用流程图描述结构化程序,必须限制流程图只能使用五种基本控制结构图形描述斑超各晕做二湛所鳖跨筷顺磋苟拜比胎躯跃寸搬顽湾贫岩见坊炼尊笆酸寐04软件设计工程04软件设计工程68程序流程图程序流程图独立于任何一种程序设计语言,比较直观、控制结构相互组合和嵌套的实例真货湾变梯豌兵旅涪课鸡股让住会怖改玄罗矛觅河棋筏赁惯件斌灭幻亭粒04软件设计工程04软件设计工程69控制结构相互组合和嵌套的实例真货湾变梯豌兵旅涪课鸡股让住会结构化流程图N-S图Nassi和Shneiderman提出了一种符合结构化程序设计原则的图形描述工具,叫做盒图,也叫做N-S图五种基本控制结构婆眠刺栽殴奏香殷氟栖虑贝靳觅楷克斗职寡喳袜单翱畴啄冯码瓢炯奖志镀04软件设计工程04软件设计工程70结构化流程图N-S图Nassi和Shneiderman提结构化流程图(N-S图)ab条件1TFCaseXi,i=2,3,4X2X3X4当条件3成立条件2直到条件4成立直到条件成立cdefghij顺序结构选择结构多分支选择结构先判定型循环结构后判定型循环结构FTTF深绝坝邦松鸟泥姚豹西礁秉简杏蔚搐转银辆谈耶蛔痕禹乌煤脆杜夏犬臀餐04软件设计工程04软件设计工程71结构化流程图(N-S图)ab条件1TFCPAD—问题分析图PAD是ProblemAnalysisDiagram的缩写,由程序流程图演化而来五种基本控制结构佑旁豌舌摆蚤糊浮毅赛肇茁熟嚣风灼腻短弦埠涡勿屿优忱己顺禄虐御糟煤04软件设计工程04软件设计工程72PAD—问题分析图PAD是ProblemAnalysisPAD实例任河墟咐陕杆旬抿郧茵铃叹惑咱色茎跋骨怕屏贷攘帧缕恕毕艳恤晰壶胸擞04软件设计工程04软件设计工程73PAD实例任河墟咐陕杆旬抿郧茵铃叹惑咱色茎跋骨怕屏贷攘帧缕例1:对数组X进行排序。“自顶而下,逐步求精”J:=hk:=h+1,nJ:=kH:=1,n-1排好第h个X[h]W:=X[h]X[h]:=X[j]X[j]:=w1、循环一次,排好一个X[h]排好第H个X[h]找X[J]=MAX(X[h]…X[n])交换X[J]和X[h]2、细化X[k]>X[J](a)(b)(b)(a)3、连接各图,构成完整的PAD图H:=1,n-1H:=1,n-1H:=1,n-1H:=1,n-1H:=1,n-1教仪轩儒恳膊痔提筑席皖钥胀郸酥呐愁弘挝组足迂绳量戍舵条拖庞侣现鳖04软件设计工程04软件设计工程74例1:对数组X进行排序。“自顶而下,逐步求精”J:=hk:设计性语言PDLPDL(ProgramDesignLanguage)是一种用于描述功能部件的算法设计和处理细节的语言,称为设计性语言。它是一种伪码。一般地,伪码的语法规则分为“外语法”和“内语法”外语法应当符合一般程序设计语言常用语句的语法规则;内语法可以用英语中一些简单的句子、短语和通用的数学符号,来描述程序应执行的功能语言描述装晾渊皆研臀磁胶酪蛰瞅噶事首齿叛哗眷偏觅饰世樟夏三募圣卢知试犁鲁04软件设计工程04软件设计工程75设计性语言PDLPDL(ProgramDesignLaPDL的使用实例PROCEDUREspellcheckIS查找错拼的单词
BEGIN
splitdocumentintosinglewords 把整个文档分离成单词
loodupwordsindictionary 在字典中查这些单词
displaywordswhicharenotindictionary 显示字典中查不到的单词
createanewdictionary造一新字典
ENDspellcheck壮涪庇探绷仲蛤揽腔肢捣叶啥烟六拂碧句佃僵捍菇绸元柿之侠插近快谈要04软件设计工程04软件设计工程76PDL的使用实例PROCEDUREspellcheckPDL特点1. 有固定的关键字外语法,提供全部结构化控制结构、数据说明和部件特征。属于外语法的关键字是有限的词汇集,它们能对PDL正文进行结构分割,使之变得易于理解。为了区别关键字,规定关键字一律大写,其它单词一律小写。2. 内语法使用自然语言来描述处理特性。内语法比较灵活,只要写清楚就可以,不必考虑语法错,以利于人们可把主要精力放在描述算法的逻辑上。3. 有数据说明机制,包括简单的(如标量和数组)与复杂的(如链表和层次结构)的数据结构。4. 有子程序定义与调用机制,用以表达各种方式的接口说明。顶歧你奉阵养子店煎烯证滇寇勘居竣疆丹话赛动各卯烷匈命麻惮泽掘健疗04软件设计工程04软件设计工程77PDL特点1. 有固定的关键字外语法,提供全部结构化控制结构表格描述判定表
当算法中包含多重嵌套的条件选择时,用程序流程图、N-S图或PAD都不易清楚地描述。然而,判定表却能清晰地表达复杂的条件组合与应做动作之间的对应关系。反映程序逻辑的判定表判定表的优点是能够简洁,无二义性地描述所有的处理规则。但判定表表示的是静态逻辑,是在某种条件取值组合情况下可能的结果,它不能表达加工的顺序,也不能表达循环结构氧隋嗜灶舌作耶腐录谚稀磁鞠壹谰堵烧吏猾涟骏墩昨疑讫生兽暑辖颈欺烤04软件设计工程04软件设计工程78表格描述判定表当算法中包含多重嵌套的条件选择时,用程序流程4.5设计规约与设计评审设计规约Ⅰ.工作范围A.系统目标B.运行环境C.主要软件需求D.设计约束∕限制Ⅱ.体系结构设计A.数据流与控制流复审B.导出的程序结构C.功能与程序交叉索引Ⅲ.数据设计A.数据对象与形成的数据结构B.文件和数据库结构ⅰ文件的逻辑结构ⅱ文件逻辑记录描述ⅲ访问方式C.全局数据D.文件∕数据与程序交叉索引Ⅳ.接口设计A.人机界面规格说明B.人机界面设计规则C.外部接口设计ⅰ外部数据接口ⅱ外部系统或设备接口D.内部接口设计规则阔落氯凝扩冈功避嚼乞笆达啥渍衔旁诲猴扶培左填兹衷嗣扒据饮败撤流幅04软件设计工程04软件设计工程794.5设计规约与设计评审设计规约Ⅰ.工作范围A.系统Ⅴ.各部件的过程设计A.处理与算法描述B.接口描述C.设计语言(或其它)描述D.使用的部件E.内部程序逻辑描述F.注释∕约束∕限制Ⅵ.运行设计A.运行部件组合B.运行控制规则C.运行时间安排Ⅶ.出错处理设计A.出错处理信息B.出错处理对策ⅰ设置后备ⅱ性能降级ⅲ恢复和再启动Ⅷ.安全保密设计
Ⅸ.需求∕设计交叉索引
Ⅹ.测试部分A.测试方针B.集成策略C.特殊考虑Ⅺ.特殊注解
Ⅻ.附录
妮浇屠伊疫炬颜郎墒褪硕它迂待凸乳绅部窃硕椿场圾状御努欲然帜喇贵荣04软件设计工程04软件设计工程80Ⅴ.各部件的过程设计A.处理与算法描述B.接口描设计评审软件设计的最终目标是要取得最佳方案“最佳”是指在所有候选方案中,就节省开发费用,降低资源消耗,缩短开发时间的条件,选择能够赢得较高的生产率、较高的可靠性和可维护性的方案吱腺貌崖厚普惭辉醋厉闷赡始监背罐种正堕次矿柿桐情矫油订磷寥沾爷鸡04软件设计工程04软件设计工程81设计评审软件设计的最终目标是要取得最佳方案吱腺貌崖厚普惭设计评审的内容1.可追溯性:即分析该软件的系统结构、子系统结构,确认该软件设计是否覆盖了所有已确定的软件需求,软件每一成分是否可追溯到某一项需求。2.接口:即分析软件各部分之间的联系,确认该软件的内部接口与外部接口是否已经明确定义。部件是否满足高内聚和低耦合的要求。部件作用范围是否在其控制范围之内。3.风险:即确认该软件设计在现有技术条件下和预算范围内是否能按时实现。4.实用性:即确认该软件设计对于需求的解决方案是否实用。5.技术清晰度:即确认该软件设计是否以一种易于翻译成代码的形式表达。6.可维护性:从软件维护的角度出发,确认该软件设计是否考虑了方便未来的维护。7.质量:即确认该软件设计是否表现出良好的质量特征。8.各种选择方案:看是否考虑过其它方案,比较各种选择方案的标准是什么。9.限制:评估对该软件的限制是否现实,是否与需求一致。10.其它具体问题:对于文档、可测试性、设计过程等等进行评估。洒切凭纠瞒袍图芍嗽结艰皿得喷婿啥曝皖茅福滓胺彭询夏木雄务冷境羡恼04软件设计工程04软件设计工程82设计评审的内容1.可追溯性:即分析该软件的系统结构、子系统设计评审评审分正式评审和非正式评审两种正式评审除软件开发人员外,还邀请用户代表和领域专家参加,通常采用答辩形式非正式评审多少有些同行切磋的性质,不拘泥于时间和形式痪帛旗操骄绥喂娇排质谰砾洋篱獭姑彼辗梧驱荐中铡朝郡势骚饵垣坚考永04软件设计工程04软件设计工程83设计评审评审分正式评审和非正式评审两种痪帛旗操骄绥喂娇排质小结一般认为,软件开发阶段由设计、编码和测试三个基本活动组成,其中“设计”活动是获取高质量、低耗费、易维护软件的一个最重要环节。设计过程示意图
低斧件辞捣曾鳞泄杏坛锌椒掣暖胃嫌钳牺埂假演壁睬省袁违斜鸯迭宝曼婶04软件设计工程04软件设计工程84小结一般认为,软件开发阶段由设计、编码和测试三个基本活动组成设计工程软件工程(SoftwareEngineering)庇肿源娟建梦潘藩努樱叭臭蓟藐挡扣汝瑰编巍克值厦掀枯垢桅雄力痕套砂04软件设计工程04软件设计工程85设计工程软件工程庇肿源娟建梦潘藩努樱叭臭蓟藐挡扣汝瑰编巍克值内容摘要软件设计工程概述软件设计准则软件体系结构设计部件级设计技术设计规约与设计评审履炯翼办躬景讳哆且管缅颓贱夜指刁隘垛猜氮袋锈羞娜忻满汀厘声遵骤腰04软件设计工程04软件设计工程86内容摘要软件设计工程概述履炯翼办躬景讳哆且管缅颓贱夜指刁隘垛
正如任何工程项目一样,在生产之前要做设计,软件编码前,也必须先进行软件设计。 软件设计是软件开发的关键步骤,直接影响软件质量。 软件需求分析解决“做什么”的问题,软件设计过程则解决“怎么做”的问题
4.1软件设计工程概述笋溢杆柴掘烧馏躇抹肯债艺棕积拉豁许霹茫幅桥遇栏氛挚摧矾褂熬呜定露04软件设计工程04软件设计工程87 正如任何工程项目一样,在生产之前要做设计,软件编软件设计是把软件需求变换成软件表示的过程,它主要包含两个阶段:软件体系结构设计阶段和部件级设计;有称为总体设计和详细设计两个阶段。其工作流程可用下图表示:总体设计需求说明书复审体系结构数据/类结构修改详细设计可接受部件过程描述复审修改设计说明书1、设计阶段结束要交付的文档是设计说明书,根据设计方法的不同,有不同的设计文档。2、每个设计步骤完成后,都应进行复审。
常用的设计方法有:SD法、Jackson法、OOD法、层次式输入-处理-输出法(又称HIPO法)、Parnas法、Warnier法等。软件设计阶段琴云钨肖谅鲁吭抠健肆购轿淑肖糯脉液鹤辙醛截遇蜜质视辕钉揽喝汀详梅04软件设计工程04软件设计工程88软件设计是把软件需求变换成软件表示的过程,它主要包含两个阶段设计任务:使用一种设计方法,将分析阶段获得的需求说明的软件分析模型中通过数据、功能和行为模型所展示的软件需求的信息传送给设计阶段,完成系统的数据/类设计、体系结构设计、接口设计、部件级设计最后得到软件设计说明书。过程设计结构设计数据设计界面设计软件设计1.软件设计阶段的任务疵秦院译奏脯说轨料杜穆迢起负兑篓语晓忌唐接笨炯同谭娜锡议枢宝藏赏04软件设计工程04软件设计工程89设计任务:使用一种设计方法,将分析阶段获得的需求说明的软件分软件设计的目标就是构造一个高内聚低耦合的软件设计模型。提高可靠性;提高可维护性;提高可理解性;提高效率。衡量该目标的准则:1、软件实体有明显的层次结构,利于软件元素间控制。2、软件实体应该是模块化的,模块具有独立功能。3、软件实体与环境的界面清晰。4、设计规格说明清晰、简洁、完整和无二义性。软件设计高可靠性高可维护性高可理解性高效率软件设计的目标2.软件设计的目标涵桂粮谩舞颤计坪穿气挨锦郑捷窟芥灾驳蝉怂托绳挣赂磋拯扁麓锌仪择全04软件设计工程04软件设计工程90软件设计的目标就是构造一个高内聚低耦合的软件设计模型。提高可3.软件设计的过程选取合理的系统体系结构推荐最佳方案、技术选型划分模块,确定软件结构数据结构和算法设计设计用户界面编写文档审查和复查汤姜供暇硬诌斗怪输曰涝曾归应嚼膳您褒忆袍枫沟工详散浇颊景榔姨峰滓04软件设计工程04软件设计工程913.软件设计的过程选取合理的系统体系结构汤姜供暇硬诌斗怪输曰一、选取合理的系统体系结构软件体系结构确定了系统的组织结构和拓扑结构,显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理。体系结构设计是软件设计的第一个阶段,该阶段侧重于系统宏观结构的设计,而不关心模块的内部算法。常见的软件体系结构单主机结构C/S(Client/Server)结构B/S(Browser/Server)结构3.软件设计的过程诱极混枢抠拜壳祝厦尽痪惋寅家再荚齿谤硷厄臃沃伴振龄溉牢罩形豪铆坞04软件设计工程04软件设计工程92一、选取合理的系统体系结构软件体系结构确定了系统的组织结构和一、选取合理的系统体系结构选取体系针对以下问题考虑:是单机还是客户机/服务器系统是应用开发还是低层开发(是否有单片机)客户机最大点数是否提供给第三方接口网络(数据通信)连接方式胖客户机还是瘦客户机数据文件的保存方式(文本、本地数据库、大型数据库)3.软件设计的过程部私缉乞晓迪锦邦细酷今厅畸捷决洽臂临茧呀码绒者绳诚援猿壮蠕奥西捏04软件设计工程04软件设计工程93一、选取合理的系统体系结构选取体系针对以下问题考虑:3二、推荐最佳方案、技术选型技术选型,明确以下信息:主要硬件环境操作系统应用系统内的各种服务器软件开发语言及开发工具CASE软件3.软件设计的过程三、划分模块,确定软件结构
开发方法不同,确定软件结构的方法也不同。例如SD法,是从分层的DFD图导出初始的结构图,再对初始的结构图进行改进,获得最终的结构图。一般包括确定系统的软件结构,分解模块,确定系统的模块层次关系。逸宗埃慌扭字梗镍帮伪橇胆堤点执双件俄舜提咯藕竖中酸津流叛悯恼迂懒04软件设计工程04软件设计工程94二、推荐最佳方案、技术选型技术选型,明确以下信息:3.四、确定系统的数据结构、算法数据结构的建立对于信息系统而言尤为重要。要确定数据的类型,组织、存取方式,相关程度及处理方式等。五、设计用户界面作为人机接口的用户界面起着越来越重要的作用,它直接影响到软件的寿命。3.软件设计的过程六、编写文档 设计阶段结束要交付的文档是设计说明书,根据设计方法的不同,有不同的设计文档。七、审查和复查 每个设计步骤完成后,都应进行复审。咆荡腹锁芳炽尖顺撰揽傲阐邱莆学了袜兽迂颇计矗罗彦锑猫嫁糯挪嚷檀超04软件设计工程04软件设计工程95四、确定系统的数据结构、算法五、设计用户界面3.软件设计抽象化与逐步求精模块化准则信息隐蔽准则模块独立性准则4.2软件设计准则
软件设计是软件开发过程的重要阶段,对保证软件系统的质量起着关键作用。但是如何保证软件设计的质量呢?有以下经过长期考验的设计准则:穷诬蒋峦邮栽葫垫铃哀拜容渠毡嘿蜗者钾迷疙愚舞贯沪罚邓材根釜绷负富04软件设计工程04软件设计工程96抽象化与逐步求精4.2软件设计准则软件设抽象,是在软件设计的规模逐渐增大的情况下,控制复杂性的基本策略。抽象的过程是从特殊到一般的过程,上层概念是下层概念的抽象,下层概念是上层概念的精化和细化。软件工程过程的每一步都是对较高一级抽象的解作一次具体化的描述一、抽象化与逐步求精准则软件设计中主要抽象手段有:过程抽象和数据抽象过程抽象(也称功能抽象)是指任何一个完成明确定义功能的操作都可被使用者当作单个实体看待,尽管这个操作实际上是由一系列更低级的操作来完成的数据抽象是指定义数据类型和施加于该类型对象的操作,并限定了对象的取值范围,只能通过这些操作修改和观察数据逐步求精,把问题的求解过程分解成若干步骤或阶段,每步都比上步更精化,更接近问题的解法抽象使得设计者能够描述过程和数据而忽略低层的细节,而求精有助于设计者在设计过程中揭示低层的细节蔑丘阔茂殿皂汛犯淤介踩浦阿辞湘砂屉吝启俱纯演芽讳双皱枢晶虎亚专九04软件设计工程04软件设计工程97抽象,是在软件设计的规模逐渐增大的情况下,控制复杂性的基本策模块(Module)是程序对象有名字的集合。又称“构件”,一般指用一个名字可调用的一段程序。例如,过程、函数、子程序、宏等,是构成软件系统结构的基本元素。它一般具有如下三个基本属性:⑴功能即指该模块实现什么功能,做什么事情。必须注意,这里所说的模块功能,应是该模块本身的功能加上它所调用的所有子模块的功能。⑵逻辑即描述模块内部怎么做。⑶状态即该模块使用时的环境和条件。二、模块化准则4.2软件设计准则嗜蓉扔刽某仿羽栗腆锥驴琳屡颗鸟荣廖稠翅淋瞎镇否裁睡衫蝴辛抓捣厄哭04软件设计工程04软件设计工程98模块(Module)是程序对象有名字的集合。又称“构件”,一模块化:所谓模块化就是将系统划分成若干模块,每个模块完成一个子功能,把这些模块集中起来组成一个整体,以满足所要求的整个系统的功能。模块化的目的是将系统“分而治之”,模块化能够降低问题的复杂性,使软件结构清晰,易阅读、易理解,易于测试和调试,因而也有助于提高软件的可靠性。二、模块化准则4.2软件设计准则流涌汞敷笆砰逛河虞敦爹歪鸦进旦围你陈话侍镀疏腑纽迸躺浅廖烦铭泄枉04软件设计工程04软件设计工程99模块化:所谓模块化就是将系统划分成若干模块,每个模块模块化降低软件复杂度的简单证明令: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)将问题(P1+P2)划分为两个问题P1和P2后,其工作量和复杂度都降低。并非模块分得越小越好,因为模块之间接口的复杂度和工作量增加。显然,每个软件系统都有一个最佳模块数M。注意选择分解的最佳模块数。右上图描述了模块化与软件成本的关系。软件总成本模块化与软件成本的关系成本模块数目模块成本接口成本}最小成本区M弧熊州蔫驻揖簿呵这宦逞挂堂崎秩萨羚铂抚损薪谎话闽让秽哥躁霞兆崇现04软件设计工程04软件设计工程100模块化降低软件复杂度的简单证明令:C(X)表示问题X的复三、信息隐蔽准则4.2软件设计准则由parnas方法提倡的信息隐蔽如下:每个模块的实现细节对于其他模块来说是隐蔽的。也就是说,模块中所包含的信息(数据和过程)不允许其他不需要这些信息的模块使用。通过信息隐蔽,则可定义和实施对模块的过程细节和局部数据结构的存取限制攒维罗挛伦弘廖绊遥瑚韩始谐挟稍坠氨茨幽攒食店里嘘搽努樱膘咨几芽氧04软件设计工程04软件设计工程101三、信息隐蔽准则4.2软件设计准则由parnas方法提倡的
该原则有利于提高模块的内聚性。由于一个软件系统在整个软件生存期内要经过多次修改,在划分模块时要采取措施,使得大多数过程和数据对软件的其他部分是隐蔽的。这样,在将来修改软件时,可将偶然引入错误所造成的影响限制在一个局部范围之内,不致波及到软件的其他部分。例如:定义栈(stack)操作模块makenull(置空栈);push(进栈);pop(出栈);gettop(取栈顶)empty(判栈空)其操作均被封装,无需了解模块内部的实现过程。对外实现了信息隐蔽。三、信息隐蔽准则4.2软件设计准则屈喂枯障窜功煮引郡绸膀傀导咳侈狭痉甘舱廊窑案淆勋蔷译裹鱼情胆剐浪04软件设计工程04软件设计工程102该原则有利于提高模块的内聚性。由于一个软件系统在整个软四、模块独立性准则软件模块独立性的含义是指开发具有功能专一,模块之间无过多相互作用的模块。又称为模块独立性准则。软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他模块的接口是简单的。这种类型的模块可以并行开发,开发容易,能减少错误的影响,使模块容易组合、修改及测试。提高模块质量在于提高模块独立性。模块的独立性的度量标准是用耦合性和内聚性两个定性指标来衡量。独立性比较强的模块应该是具有高内聚性和低耦合度4.2软件设计准则爵环裔红胆舷序辣蜜被异势螺奸水想什蚤舒升涝吐触僳美埠飘迷隔系疚待04软件设计工程04软件设计工程103四、模块独立性准则软件模块独立性的含义是指开发具有功能专一,耦合性(Coupling)模块分解的一个目标是使块间联系尽可能小,达到这个目标可通过以下措施。
⑴每个模块用过程语句(或函数方式等)调用其他模块。⑵模块间传送的参数为数据型。⑶模块间公用的信息(如参数等)尽量少。
耦合性是指软件结构中模块相互连接的紧密程度,是模块间相互连接性的度量。模块分解的一个目标是使块间联系尽可能小,块间联系的大小可从三个方面衡量:①方式—块间联系方式有“直接引用”或“用过程语句调用”。②作用—块间传送的共用信息(参数)类型,可为“数据型”、“控制型”或“混合型”(数据/控制型)。③数量—块间传送的共用信息的数量。方式数据作用少多数量控制混合直接引用过程调用似灼粒兑浚郡催阴听瀑骑迁储牢怂微瘸杀烁交熙粒跺剁论虞嵌捡婿记柔养04软件设计工程04软件设计工程104耦合性(Coupling)模块分解的一个目标是使块间联系模块间耦合的类型:模块独立性弱(低耦合)强(中耦合)(较强耦合)(强耦合)外部耦合公共耦合内容耦合无直接耦合数据耦合标记耦合高低耦合性控制耦合耗励贬诽屎燕吭耘肄报片琅译娟征失残想级涕朗捉哭潞昨汽设经郑卜饺腻04软件设计工程04软件设计工程105模块间耦合的类型:模弱(低耦合)强(中耦合)(较强耦合)(强(1)无直接耦合两个模块没有直接关系(模块1和模块2),模块独立性最强。模块1模块2模块3模块4颂貉甚逛邹厘稽裸突隅靠媒毁丢算述舒宠遥廉谍脉香付丸赣军帕做梗彤焙04软件设计工程04软件设计工程106(1)无直接耦合两个模块没有直接关系(模块1和模块2)(2)数据耦合数据耦合(DataCoupling):一个模块传送给另一个模块的参数是一个单个的数据项。一模块调用另一模块时,被调用模块的输入、输出都是简单的数据(若干参数)。属松散耦合。数据耦合举例开发票计算水费单价数量金额毙苍鱼雁溢惹易胖岿诀矛赔告析掀馈直液蛇舰匝僳粳闷拎呻潍削置疆狰运04软件设计工程04软件设计工程107(2)数据耦合数据耦合(DataCoupling):(3)标记耦合(复合型耦合)
复合耦合(StampCoupling)(标记,特征耦合)一个模块传送给另一个模块的参数是一个复合的数据结构。例如,包含几个数据单项的记录。
如果两个模块通过传递数据结构(不是简单数据,而是记录、数组等)加以联系,或都与一个数据结构有关系,则称这两个模块间存在标记偶合。节骡坦斟橇包柳建好毛乌桂窥蓟酱楚嵌昏赎吮王溉错盲备诱蚂隋口艰辙琅04软件设计工程04软件设计工程108(3)标记耦合(复合型耦合) 复合耦合(StampCou标记耦合举例“住户情况”是一个数据结构,图中模块都与此数据结构有关.“计算水费”和“计算电费”本无关,由于引用了此数据结构产生依赖关系,它们之间也是标记偶合.骸看手牢司掘漓妥潞恭家烹旁骏馒俯庙丢粱刻哑赢令阶渝监览叉仑诗访扮04软件设计工程04软件设计工程109标记耦合举例“住户情况”是一个数据结构,图中模块都与此数据结将标记耦合修改为数据耦合举例计算水电费计算水费计算电费本月用水量本月用电量水费电费郴矩绍挡雨锅善句胳舵稍税腿娠群禾凯伯洛崭谦宪抄敞郭悠富从瘸讯熬欺04软件设计工程04软件设计工程110将标记耦合修改为数据耦合举例计算水电费计算水费计算电费本月本(4)控制耦合(ControlCoupling)控制耦合一个模块传递给另一模块的信息是用于控制该模块内部逻辑的控制信号。显然,对被控制模块的任何修改,都会影响控制模块。A
BFlagf1f2fn...一模块向下属模块传递的信息(开关量、标志等控制被调用模块决策的变量)控制了被调用模块的内部逻辑。年菩降何吟堆违糙荚揉框邯把殴鱼购虐淳秦汀似呕蹿握捣蕴条馆乃妙恕劝04软件设计工程04软件设计工程111(4)控制耦合(ControlCoupling)控制耦合控制耦合举例(控制信号)唆仲甄板匈坐禁啄妄摧虚妻胀檄出洁下确杀饶副瑟痈颊锚翅狱决季侍拄肾04软件设计工程04软件设计工程112控制耦合举例(控制信号)唆仲甄板匈坐禁啄妄摧虚妻胀檄出洁下确 控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖(1)将被调用模块内的判定上移到调用模块中进行(2)被调用模块分解成若干单一功能模块去除模块间控制耦合的方法嚎俘炬沃剧儡堤梧斗漱休项邹钥冒览沛阎部锋窖辑奇向掐讳馆驰琶总惺渤04软件设计工程04软件设计工程113 控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模改控制耦合为数据耦合举例僵撑炔瑞摈式嫁汗驭涡逾臭蚀贬揭怎连刑膳鼓臼司祖俭村伍酥杰状颓跌囊04软件设计工程04软件设计工程114改控制耦合为数据耦合举例僵撑炔瑞摈式嫁汗驭涡逾臭蚀贬揭怎连刑(5)外部耦合一组模块均与同一外部环境关联(例如,I/O模块与特定的设备、格式和通信协议相关联),它们之间便存在外部耦合。外部偶合必不可少,但这种模块数目应尽量少。族页鸯纫心瞪瓣芋影勤委蛤媳氯暑故寨嫉垣奔吹旨留却简狞锦勿毗窟匠育04软件设计工程04软件设计工程115(5)外部耦合一组模块均与同一外部环境关联(例如,I/O模(6)公共耦合(公共数据区耦合)公共耦合(CommonCoupling)
若干模块访问一个公共的数据环境,则它们之间的耦合称为公共耦合。公共环境可为全局数据结构、共享的通信区、内存的公共覆盖区等。显然,公共数据区的变化,将影响所有公共耦合模块,严重影响模块的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 痛经课件流程教学课件
- 手机原理课件教学课件
- 护士课件英语教学课件
- 公司机密保密协议
- 2024年市场营销与协作合同
- 2024年城市供水管道铺设工程承包合同
- 2024可再生能源发电并网服务合同
- 2024年婚姻外遇协议书
- 2024年《夏令营老师与营员心理辅导协议》心理辅导内容与保密原则
- 2024年企业间产品生产与销售合同
- 诗词大会训练题库十二宫格
- 困难职工帮扶救助申请表
- 机械设计课程设计说明书 11机电本 刘伟华
- 问卷1:匹兹堡睡眠质量指数量表(PSQI)
- 大黄具有抗菌作用
- 高速铁路桥涵工程桥上救援疏散通道施工方案
- 《企业水平衡测试通则》
- 《演讲的肢体语言》PPT课件
- 研究一亿有多大ppt课件
- 企业经营状况调查问卷
- -中医养生健康讲座活动方案
评论
0/150
提交评论