版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章软件设计主要内容:▲软件设计的目标和任务▲软件设计基础▲模块的独立性▲结构化设计方法▲数据设计及文件设计▲过程设计讨论要点:(1)如何将分析模型转换为软件设计?(2)作为软件工程师在软件设计方面应使用哪些基本原则和概念?§5.1软件设计的目标和目的
软件需求:解决“做什么”软件设计:解决“怎么做”5.1.1软件设计的任务问题结构(软件需求)软件结构
从软件需求规格说明书出发,形成软件的具体设计方案。映射将分析模型转换为软件设计数据字典数据流图E-R图状态变迁图加工规约控制规约数据对描述象数据设计体系结构设计接口设计过程设计分析模型设计模型1.软件的总体结构主要回答的问题软件的组成部分软件的层次关系模块的内部处理逻辑模块之间的界面2.软件设计的问题
工具—如何描述软件的总体结构方法—用什么方法由问题结构导出软件结构评估准则—什么样的软件结构是“最/更优的”3.软件设计方法结构化设计方法(SD)面向数据结构的设计方法(JSD方法)面向对象的设计方法(OOD)4.软件设计分为两个阶段:(1)概要设计(总体设计)
确定软件的结构以及各组成成分(子系统或模块)之间的相互关系。(2)详细设计
确定模块内部的算法和数据结构,
产生描述各模块程序过程的详细文档。5.1.2软件设计的原则Davis提出的软件设计原则:Thedesignprocessshouldnotsufferfrom“tunnelvision.”Thedesignshouldbetraceabletotheanalysismodel.Thedesignshouldnotreinventthewheel.Thedesignshould“minimizetheintellectualdistance”betweenthesoftwareandtheproblematitexistsintherealworld.Thedesignshouldexhibituniformityandintegration.Thedesignshouldbestructuredtoaccommodatechange.Thedesignshouldbestructuredtodegradegentle,evenwhenaberrantdata,evens,oroperatingconditionsareencountered.Designisnotcoding,codingisnotdesign.Thedesignshouldbeassessedforqualityasitisbeingcreated,notafterthefact.Thedesignshouldbereviewedtominimizeconceptual(semantic)errors.§5.2软件设计的概念和原理1.软件结构2.软件过程3.模块化4.抽象5.信息隐蔽6.信息局部化5.2.1软件体系结构软件体系结构包括两部分:(1)过程构件(模块)的层次结构(2)数据构件控制结构(程序结构)控制结构是软件模块间关系的表示控制结构图示:1.控制结构的层次规则
只有一个顶层(0层)模块0层外任一模块都会在它的邻层存在一模块与它有关同层模块间不发生联系2.软件结构度量术语深度宽度扇出扇入(模块的层数)(同一层最大模块数)(一个模块直接调用的模块数)(调用一个给定模块的模块个数)5.2.2软件过程软件过程用以描述各模块的处理细节(算法的详细描述),包括对下层模块控制的操作细节。软件过程:
程序结构定义了控制层次,而不管处理和决策的顺序。
软件过程着重每个模块单个处理细节,过程必须提供处理的精确定义,包括事件的顺序,准确的决策点,循环操作,甚至还有数据组织/结构。软件过程表示是分层的,如右图所示。5.2.3模块化(Modularity)模块化是好的软件设计的一个基本准则;
高层模块从整体上把握问题,隐蔽细节
复杂问题较小问题
分解可减小解题所需的总的工作分解例:将问题(P1+P2)分解为P1,P2,设:函数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)
"各个击破"理论模块化和软件成本成本或工作量模块数量软件总成本集成成本成本/模块M最小成本区域5.2.4抽象(Abstraction)抽象原则应用举例WindowsNT一体化的I/O系统设计文件管理网络管理设备管理高速缓冲存储器OS对虚拟文件的字节流,虚拟文件可为任何设备和实体。抽象5.2.5信息隐蔽(InformationHiding)
模块所包含的信息,不允许其它不需要这些信息的模块访问,独立的模块间仅仅交换为完成系统功能而必须交换的信息。软件质量因素:
可维护性可靠性可理解性效率信息隐蔽的目的:
提高模块的独立性,减少修改或维护时的影响面。5.2.6信息局部化
把关系密切的软件元素物理地放得彼此靠近。优点:可维护性好可靠性好可理解性好§5.3模块的独立性5.3.1模块独立性的概念模块独立的含义:模块完成独立的功能符合信息隐蔽和信息局部化原则模块间关连和依赖程度尽量小模块独立的概念是模块化、抽象、信息隐蔽和局部化概念的直接结果。模块独立重要性:
1有效的模块化软件比较容易开发2模块容易测试和维护5.3.2模块独立性的度量
模块独立性取决于模块的内部和外部特征。SD方法提出的定性的度量标准:
模块之间的耦合性衡量不同模块彼此间互相依赖(连接)的紧密程度。模块自身的内聚性衡量一个模块内部各个元素彼此结合的紧密程度。
用三个封装级别表示的软件结构原始代码行0级程序模型(子程序或过程)1级2级类/对象结构
结构设计(或1级)标准,用以管理每一对封装级别的元素之间的相互关系内聚结构化设计0级结构体(代码行)1级结构体(程序)TO:FROM:0级结构体(代码行)1级结构体(程序)输出端耦合性内聚是指度量一个给定的程序内的多行代码的单一功能性,以确定是否达到该程序所要实现的目的。耦合性用来度量程序之间联系的次数和强度。上表的扩展:包括2级封装(所有的类)内聚结构化设计0级结构体(代码行)1级结构体(程序)TO:FROM:0级结构体(代码行)1级结构体(程序)输出端耦合性—2级结构体(类)——类的耦合2级结构体(类)类的内聚
类的内聚是模仿了一个程序的内聚。
类的耦合性是一种度量类之间联系的次数和强度的方法。1.模块独立性的度量之一:耦合性模块间相对独立性(相互依赖程度)的度量耦合性越高,模块独立性越弱无耦合-没有依赖关系松散耦合-有少量依赖关系紧密耦合-有很多依赖关系耦合强度依赖的因素:一模块对另一模块的引用一模块向另一模块传递的数据量一模块施加到另一模块的控制的数量模块间接口的复杂程度模块间耦合的类型
低
无直接耦合耦数据耦合合标记耦合性控制耦合外部耦合公共耦合
高内容耦合模块独立性弱(低耦合)强(中耦合)(较强耦合)(强耦合)(1)无直接耦合两个模块没有直接关系(模块1和模块2),模块独立性最强。模块1模块2模块3模块4(2)数据耦合一模块调用另一模块时,被调用模块的输入、输出都是简单的数据(若干参数)。属松散耦合。数据耦合举例开发票计算水费单价数量金额(3)标记耦合(特征耦合)如两个模块通过传递数据结构(不是简单数据,而是记录、数组等)加以联系,或都与一个数据结构有关系,则称这两个模块间存在标记偶合。标记耦合举例计算水电费计算水费计算电费住户情况水费电费住户情况“住户情况”是一个数据结构,图中模块都与此数据结构有关.“计算水费”和“计算电费”本无关,由于引用了此数据结构产生依赖关系,它们之间也是标记偶合.将标记耦合修改为数据耦合举例计算水电费计算水费计算电费本月用水量本月用电量水费电费(4)控制耦合一模块向下属模块传递的信息(开关量、标志等控制被调用模块决策的变量)控制了被调用模块的内部逻辑。控制耦合举例A计算平均分或最高分B平均/最高(控制信号)成绩读入分数输出结果计算平均分计算最高分平均/最高?B控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖去除模块间控制耦合的方法:(1)将被调用模块内的判定上移到调用模块中进行(2)被调用模块分解成若干单一功能模块改控制耦合为数据耦合举例A计算平均分B1平均成绩最高成绩计算最高分B2(5)外部耦合一组模块均与同一外部环境关联(例如,I/O模块与特定的设备、格式和通信协议相关联),它们之间便存在外部耦合。外部偶合必不可少,但这种模块数目应尽量少。(6)公共耦合(公共数据区耦合)一组模块引用同一个公用数据区(也称全局数据区、公共数据环境)。公共数据区指:
全局数据结构共享通讯区内存公共覆盖区等公共耦合举例A公共数据区CB模块A、B、C间存在错综复杂的联系(1)软件可理解性降低(2)诊断错误困难(3)软件可维护性差,(4)软件可靠性差(公共数据区及全程变量无保护措施)慎用公共数据区和全程变量!!!公共耦合存在的问题:(7)内容耦合最不好的耦合形式
!!!一模块直接访问另一模块的内部信息(程序代码或数据)ABAB模块代码重叠Entry1……Entry1……多入口模块模块化设计的原则和目标耦合是影响软件复杂程度和设计质量的重要因素目标:建立模块间耦合度尽可能松散的系统如何降低模块间耦合度:(1)尽量使用数据耦合少用控制耦合限制公共耦合的范围
坚决避免使用内容耦合(2)降低接口的复杂性2.模块独立性的度量之二:内聚性一个模块内部元素在功能上相互关联的强度设计目标:高内聚
(模块在软件过程中完成单一的任务)模块的内聚性类型
低偶然内聚
0分逻辑内聚
1分内时间内聚
3分聚过程内聚
5分性通信内聚
7分信息内聚9分高功能内聚10分模块独立性弱(功能分散)强(功能单一)低内聚模块举例
为工程分析包执行错误处理的模块,当计算的数据超出预定义的边界时调用该模块,它完成下列任务:
(1)根据初始计算的数据计算补充数据;(2)在用户的工作站上生成错误报告;(3)执行用户要求的跟踪计算;(4)更新数据库;(5)使选择后续处理的菜单有效。
虽然上述任务是松散相关的,但每一项都是独立的功能实体,最好作为独立的模块完成。(1)偶然内聚(巧合内聚)
模块内各部分间无联系ABCMMOVEOTORREADFILEFMOVESTOT模块M中的三个语句没有任何联系缺点:可理解性差,可修改性差例:(2)逻辑内聚把几种相关功能(逻辑上相似的功能)组合在一模块内,每次调用由传给模块的参数确定执行哪种功能。缺点:增强了耦合程度(控制耦合)不易修改,效率低逻辑内聚模块ABCEFGABCEFGA1B1C1EFG模块内部逻辑E、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 康复医学发展与临床应用
- 医院临床医生心理沟通礼仪
- 2026年海口经济学院高职单招职业适应性测试模拟试题带答案解析
- 2026年安徽绿海商务职业学院高职单招职业适应性考试模拟试题带答案解析
- 2026年广西机电职业技术学院高职单招职业适应性测试参考题库带答案解析
- 2026年漳州理工职业学院单招综合素质笔试模拟试题附答案详解
- 护理专业英语教学策略与效果评价
- 中医科诊疗技术与临床应用总结
- 2026年黑龙江民族职业学院单招综合素质笔试参考题库带答案解析
- 专科护理技能提升与标准化
- 原油储存建设项目可行性研究报告
- 辽宁卫视小品赵本山小品《相亲2》台词版
- 毕业生离校聚会安全应急预案
- 统编版2024-2025学年三年级上册语文期末情景检测试卷(含答案)
- 医疗机构卫生计生监督协管巡查记录
- JJF 2118-2024压力式六氟化硫气体密度控制器校验仪校准规范
- 代办退休授权委托书模板
- (正式版)JBT 9634-2024 汽轮机冷油器(管式)尺寸系列和技术规范
- (高清版)DZT 0309-2017 地质环境监测标志
- 地基验槽(挡土墙)
- 2014FSC悬架答辩报告-太原理工
评论
0/150
提交评论