软件工程ch41软件设计概述_第1页
软件工程ch41软件设计概述_第2页
软件工程ch41软件设计概述_第3页
软件工程ch41软件设计概述_第4页
软件工程ch41软件设计概述_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、软件设计软件问题解决方案的逻辑表示;自顶向下、先结构后细节;循序渐进、不断精化; 更易评估、更易修改;需求与代码之间的“桥梁。需求模型设计人、财、物时间模型制约编程语言支撑平台实现代码技术制约确保实现工程师能在预期的时间和成本约束 条件下,以充分优化的方式完整地实现需求。3编码实现软件设计需求分析软件设计元素子系统类 由某种特定的元数据所组成的内聚的包; 描述了一些对象的行为规则,这些对象被称为该类的实例。 类的接口描述了如何通过方法与类及其实例互操作; 类的结构描述了一个实例中数据如何划分为多个属性。构件 可执行软件系统中一个可分离、可部署的部分。 构件的封装性比子系统更严格,它仅仅通过接口

2、对外提供服务,其内部实现细节对构件的使用者而言完全不可见; 构件的功能往往比子系统更为单纯; 构件的设计更专注于易复用性、易组装性。 完成一组逻辑上相互关联的系统功能的模块的集合; 其功能相对于其他软件模块的功能。 作为一个整体进行设计、构造和部署; 子系统与与系统其他部分的协作主要通过接口来完成; 子系统内部的模块及其协作应尽量被子系统接口所隐藏。软件设计模型精确定义各种设计模型中类的属性和操作的算法类设计模型从抽象的角度刻画组成目标软件系统的模块以及它们之间的逻辑关联和协作关系。体系结构模型说明组成构件的内部元素(子构件、类) 的属性、算法,及相互间的协作关系。构件 设计模型界面元素的组织

3、、布局、预期响应行为、呈现形 态、界面流转关系。用户界面模型软件设计模型子系统设计模型用例设计模型数据模型说明组成子系统的内部 元素(子子系统、构件、类)的属性、算法,及 相互间的协作关系。使用设计类及其对象描述一 个用例是如何实现和执行的。描述持久数据条目的内部结构及条目之间的逻辑关系。5设计模型的质量要素正确正确性一致可行充分性所有的设计元素已充分细化;实现在设计方案的实现过程中,勿需再面优化性对影响软件功能和质量的技术抉择或权衡。多种方案中找寻合理、充分优化的方式。简单性6以简单的方案解决复杂的问题;模块功能简明易懂,模块间的关系简单直观, 模型结构自然地反映待解软件问题的结构。选定的技

4、术平台和可用 约束条件下,采用预定的程序设计语言可以完整地实现该设计模型。设计元间没有逻辑完整正确实现所有的软件需求项第四讲-1 软件设计概述软件设计概念 软件设计原则软件设计的过程模型7软件设计的求解回答“如何做”;需要丰富设计经验; 兼具创造性和工程性。灵巧一些需求变化不可;对需求变化的适应能力;设计软件模块扩充机制;抉择 抉择灵巧柔韧简单高效集中模式分布模式成熟技术主流技术现实约束下最优方案 8 灵巧 求解基本策略:复用拿来拿去!不要再发明相同的车!有构件库无9创建新构件提取构件用构件建造新软件定义所需构件集合应用软件系统分解基本策略:分而治之软件系统解决原始问题复杂问题分解集成10复杂

5、问题分解后,每个问题能否用程序实现?所有程序最终能否集成为一个软件系统并有效解决原始的复杂问题?程序n子问题n程序2子问题2程序1子问题1基本策略:优化折衷鱼和熊掌二者不可得兼?假设鱼每千克10元,熊掌每千克一万元。有个倔脾气的人只有20元钱,非得要吃上一公斤美妙的“熊掌烧鱼”,怎么办?解决方案:化9元9角9分钱买999克鱼肉,花10元钱买1克熊掌肉,可做一道“熊掌戏鱼”菜。剩下的那一分钱还可建立基金。软件的优化是指优化软件的各个质量因素,如提高运行速度,提高对内存的利用率,使用户界面更加友好,使三维图形的真实感更强等等。优化工作的复杂之处是很多目标存在千丝万缕的关系,可谓数不清理还乱。当不能

6、够使所有的目标都得到优化时,就需要“折衷”策略。 软件中的折衷策略是指通过协调各个质量因素,实现整体质量的最优。11软件分析设计的思想原则用户需求远比技术重要;需求其实很少改变,改变的是对需求的理解; 接受变化;不要低估软件规模的需求;在软件设计中没有捷径可以走;任何设计模式、体系结构都有优缺点; 对设计质量的提高同样重要;工具知识,不能代替一切;理解完整的软件开发过程;常做验证,早做验证。12第四讲-1 软件设计概述软件设计概念 软件设计原则软件设计的过程模型13软件设计基本原则抽象与逐步求精模块化 信息隐藏关注点分离14模型怎么建请在30秒内说出尽可能多的筷子、勺子和盘子的相同点和不同点。

7、字面理解用途形状 结论: 每组相同点、不同点源自你的一个抽象角度 抽象角度的不同决定建模方向的不同 建模首先要决定的是抽象角度15择偶的标准描述过程化场景并不是最终目的,而是为了找出场景当中贡献于场景目标的那些事物,以及这些事物如何贡献于这个场景的。业务场景抽象角度/用例外貌长相场景1场景2场景3三天两头生病跑不动扛不动身材体质人品事业家庭骂大街贪小便宜场景1场景2 场景3学历素质修养势利眼16问题领域我要择偶抽象的层次17 抽象层次越高: 具体信息越少 概括能力越强 表达能力越丰富 越容易理解和处理知道太阳到系的距离有多远?000米,有概念吗?27000光年,是不是更容易理解些?抽象的层次抽

8、象层次越高:具体信息越少概括能力越强 表达能力越丰富越容易理解和处理自顶向下:适用于让人们从头开始认识一个事物自底向上:适用于在实践中改进和提高认识18抽象“抽象”是一个心理学概念 要求人们将注意力集中在某一层次上考虑问题; 暂时忽略那些低层次的细节。软件设计过程就是在不同抽象级别上考虑、处理问题的过程。最初,应在最高抽象级别上用面向问题域的语言描述 问题,概括问题解决方案的形式;然后,不断地具体化、逐渐引入的细节;最后,在最具体的级别上给出可供直接编程实现的问题解决方案,即软件的详细设计模型。19抽象与逐步求精体系结构级仅关心构件的职责和接口。(1)保存日志信息:(2)日志信息:(3)保存异

9、常信息: 信息:(4)异常20<<interface>> 日志管理服务接口+writeLog()+queryLog()+writeEvent()+queryEvent()日志管理抽象与逐步求精构件级考虑构件内部设计元素的职责,研究如何协作完成构件职责。1*121<<entity>> 异常-时间-位置-类别-描述<<interface>> DataService+openConnection()+closeConnection()+insert()+update()+delete()+query()<<contr

10、oller>> 日志管理器+saveLog()+getLog()+saveEvent()+getEvent()+buildSOLforSaveLog()+buildSOLforGetLog()+buildSOLforSaveEvent()+buildSOLforGetEvent()<<entity>> 日志-时间-动作执行者-动作描述抽象与逐步求精构件级考虑构件内部设计元素的职责,研究如何协作完成构件职责。DataServiceImpl日志管理器日志1.saveLog1.1 creat1.2buildSQLforSaveLogalt 数据库连接已建立1.3

11、insert数据库连接尚未建立1.4 openConnection1.5 insert1.6 closeConnection22抽象与逐步求精详细级进一步精化构件内部的设计元素(“日志管理器”类、“日志”类和“异常”类)的属性和操作定义在日志管理器类的构造函数中置dbConnection为NULL; 在析构函数中调用closeDBconnection1*23<<entity>> 异常-时间-位置-类别-描述<<entity>> 日志-时间-动作执行者-动作描述<<interface>> DataService+openCo

12、nnection()+closeConnection()+insert()+update()+delete()+query()<<controller>> 日志管理器-dbConnection+saveLog()+getLog()+saveEvent()+getEvent()-buildSOLforSaveLog()-buildSOLforGetLog()-buildSOLforSaveEvent()-buildSOLforGetEvent()-openDBconnection()-closeDBconnection()*1抽象与逐步求精详细级进一步精化构件内部的设计元

13、素(“日志管理器”类、“日志”类和“异常作定义”类)的属性和操DataServiceImpl日志管理器日志1.saveLog1.1 creat1.2 buildSQLforSaveLAlt dbConnection != NULL1.3 insertdbConnection = NULL1.4 openDBconnection1.4.1 openConnection1.5 insert1.6 closeDBconnection1.6.1 closeConnection24og模块化(Modularity)模块化(Modularity) 将一个复杂的大系统分解成若干个相对简单的较小部分,称为子系

14、统(Subsystem)。常见的模块层次25系统层次分解系统层次分解26系统层次分解深度:表示软件结构从顶层模块到最底层模块的层数。扇出为3顶层1层2层3层宽度:表示的总分布。B 扇出数:指一个模块直接下属的模块个数。 扇入数:指一个模块的直接上属模块个数。好的软件结构的形态准则: 顶部宽度小,中部宽 度大,底部宽度次之; 顶部有较高的扇出数, 底部有较高的扇入数。E深度 J扇入为2N4层扇入为3宽度软件结构示意图27MLKIH DGACF模块作用域和域作用域:该模块内一个判定影响的所有模块的集合域:这个模块本身以及所有直接或间接从属于它的模块的集合例如:下图中模块A的域为: A,B,C,D,

15、E,F等模块的集合.经验表明:在一个设计得好的系统中,所有受判定影响的模块应该都从属于做出判定的那个模块,最好局限于做出判定的那个模块本身及它的直属下级模块.28模块分解进行功能分解,把复杂的大的功能划分成简单的小的子功能,尽量降低每个模块的成本。尽量使每个模块间的接口不能太多,太多会使接口成本增加。兼顾二者可取得最佳的划分状态,确保软件总成本最低。29成本软件总成本最小成本区接口成本M1M2成本/模块模块数n1n2图6.2模块划分与软件成本划分30耦合(Coupling)耦合(Coupling) 耦合表示两个子系统(或类)之间的关联程度。 当一个子系统(或类)发生变化时对另一个子系统(或类)

16、的影响很小,则称它们是松散耦合的;反 之,如果变化的影响很大时,则称它们是紧密耦合的。作用混合块间的大小可从三个方面衡量 方式:块间句调用”。方式有“直接”或“用过程语 作用:块间传送的共用信息(参数)类型,可为“数据过程调用方式数据型”、“)。型”或“混合型”(数据/型少多数据直接调用31 数据:块间传送的共用信息的数量。耦合性的几种类型内容耦合(content coupling)一个模块直接另一模块的内部数据;一个模块不通过正常转到另一模块的内部;一个模块有多个;两个模块有部分代码重迭。A BB进入另一模块内部分代码重迭多重32AEntry1.Entry2.耦合性的几种类型公共耦合(Com

17、mon Coupling)若干模块一个公共的数据环境,则它们之间的耦合称为公共耦合。公共环境可为全局数据结构、共享的通信区、内存的公共覆盖区等。显然,公共数据区的变化,将影响所有公共耦合模块,严重影响模块的可靠性和可适应性,降低软件的可读性。公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种情况。松散公共耦合和紧密公共耦合。33耦合性的几种类型外部耦合(External Coupling)一组模块都同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。耦合(Control Coupling)一个模块传递给

18、另一模块的信息是用于该模模块的块内部逻辑的信号。显然,对被任何修改,都会影响模块。34BFlag.fnf2f1A耦合性的几种类型标记耦合 (Stamp Coupling) 一个模块传送给另一个模块的参数是一个复合的数据结构。例如,包含几个数据单项的。数据耦合(Data Coupling)一个模块传送给另一个模块的参数是一个单个的数据项或者单个数据项组成的数组。35耦合性的几种类型用电量用水量水费电费住户情况住户情况水费电费36计算电费计算水费计算水电费计算水费计算电费计算水电费耦合性的几种类型非直接耦合(Nondirect Coupling)两个模块之间没有直接关系,它们之间的完全是通过主模块

19、的和调用来实现的。非直接耦合的模块性最强。37如何降低模块间耦合度?(1) 如模块必须存在耦合,选择适当的耦合类型,原则: 尽量使用数据耦合 少用耦合 限制公共耦合的范围 坚决避免使用内容耦合(2) 降低模块间接口的复杂性38内聚(Cohesion)内聚性:是子系统内部的相关程度。高内聚:子系统中彼此相关的多个对象执行类似的任务; 低内聚:子系统内的多个对象彼此不相关时。高内聚的方法:做且仅做一件事,这会很容易理解与维护。举例:如果使用一个方法changeItem( ) 完成书目的删除等若干方法的功能,有什么问题吗?、增加、修改和高内聚的类:表示且仅表示一种类型的对象。举例:在大学系统中使用P

20、rofessor 而不用Employee,为什么?39内聚的几种类型偶然型(Coincidental Cohesion) 又称为巧合型,为了节约空间,将毫无关系(或者联系不多)的各成分放在一个模块中。这样的模块显然不易理解,不易修改。模块T中的三条语句毫无关系,A、B、C、D都不在文件CARD FILE 中。模块P、Q、R分别与三条语句有关。偶然型模块40MOVE A TO B READ CARD FILE MOVE C TO DRQP内聚的几种类型逻辑型(Logical Cohesion)将几个逻辑上相似的功能放在一个模块中,调用时由调用模块传递的参数确定执行的功能。由于要进行控制参数的传递

21、,必然要影响模块的内聚性。由调用模块传递的参数,经过判定后,才能确定是进行读还是进行写操作。被调用模块逻辑型模块41判定读写一个个记记录录调用模块内聚的几种类型时间型(Temporal Cohesion)将需要同时执行的成分放在一个模块中,因为模块中的各功能与时间有关,又称为经典内聚。例如,初始化模块,中止模块等这类模块内部结构较简单,一般较少判定,因此比逻辑内聚强,但是由于将多个功能放在一起,给修改和维护造成。42内聚的几种类型过程型(Procedural Cohesion)使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部

22、分、计算部分分成三个模块,这三个模块都是过程内聚模块。43统计并打印成绩读入并成绩单打印成绩统计成绩成绩单读入成绩单内聚的几种类型通信型(Communicational Cohesion)模块中的成分输出数据。共同的输入数据,或者产生相同的通信型模块比时间型模块的内聚性强,因为模块中包含了许多的功能,但却相同数据。通信模块一般可以通过数据流图来定义。(a)(b)通信型模块(c)44C修改打印B存入打印A打印报告1打印报告2打印报告2内聚的几种类型顺序型(Sequential Cohesion)模块中某个成分的输出是另一成分的输入。由于这类模块无论数据还是执行顺序,模块中的一部分依赖于另外一部分

23、,因此具有较好的内聚性,也称为信息内聚。例:编辑功能的输入是读入功能的输出;例:打印功能的输入是累加功能的输出。45B结果累加打印A数据读入编辑内聚的几种类型功能型(Sequential Cohesion)一个模块包括而且仅包括完成某一具体功能所必须的所有成分。或者说,模块的所有成分都是为完成该功能而协同工作、紧密、不可分割的。例如仅完成以下功能的模块为功能模块:求平方根求解一元二次方程计算利息判素数A求一元二次方程B求平方根求解方程的功能模块46复用(Reuse )复用(Reuse )对于建立软件系统而言,所谓复用就是利用某些已开发的、对建立新系统有用的软件元素来生成新的软件系统。复用的好处

24、在于提高生产效率,提高软件质量, 系统的可维护性。复用策略软件工具包强调在类级别的代码复用,如类库;构架强调构件级的设计复用,如CORBA、EJB、DCOM 等;模式通过为对象协作提供思想和范例来强调方法的复用,这些思想和范例是目前所知的好的开发实践,它产生可理解的和规模的解决方案。47信息隐藏原则模块所含信息(过程和数据)对于不需要这些信息的模块不可;模块之间仅交换那些为完成系统功能必须交换的信息;有助于强化模块性,消除模块之间不必要的依赖关系。子系统类95598一口对外投诉、报修、封装、接口48组件关注点分离职责划分关注点是指问题求解者概念、任务或目标的某个部分或侧面的聚焦;好的软件结构理

25、应使不同关注点恰当地相互分离;开发者能在适当的时间 分别处理不同的关注点;软件系统可看成由许多技术基础部分领域通用部分结构特定应用部分通用关注点的实现而一个关注点变化;影细节响对应其他关注点的模块。49子系统构件(模块)类关注点分离职责划分每项必须由软件实现的职责划分职责一个关注点;需求规定的每项功能,设计由一系列职责的“协作链条”完成。每项职责应有强内聚性;承担这些职责的设计元间应该具有松耦合性;新的功能需求只要 构造新的“协作链条”, 原有的职责及其设计元素有可能被复用。50技术基础部分领域通用部分结构特定应用部分通用细节子系统构件(模块)类关注点分离结构细节可以通过分离“结构型”和“细节

26、性”关注点来推进软件设计工作;大中型软件项目中,“眉毛胡子一把抓”的做法难 以导出高质量的设计模型。先聚焦于结构型关注点, 然后考虑细节性关注点; 不排除在软件设计的某个时间段,先聚焦于个别高风险的、重要的细节性关注点,然后再考虑结构型关注点。51职责划分技术基础部分领域通用部分结构特定应用部分通用细节子系统构件(模块)类关注点分离职责划分通用通用与分离;稳定与易变分离;既便于前者的复用,又便于后者的修改。技术基础部分领域通用部分结构特定应用部分通用细节52子系统构件(模块)类关注点分离功能/非业务功能功能维度绩效非业务功能维度安全数据持操作日53培训福利薪酬久志招聘第四讲-1 软件设计概述软件设计概念软件设计原则 软件设计的过程模型54软件设计过程设计需求规格策划体系结构设计人机交互设计详细设计设计整合与验证总结55 需要经历多次迭代才能获得最终可用的设计模型。 明确本次迭代的目标及认可准则; 确定本次迭代的抽象级别(即, 关注哪些设计问题,忽

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论