1、1,软件设计,2,学习内容,软件概要设计(总体设计) 基本任务 软件设计的基本原理 软件结构图形工具 结构化设计方法 软件详细设计(过程设计) 详细设计的基本任务 详细设计方法 软件详细设计表示法:图形、表格、语言 程序复杂度的定量度量,3,概要设计的基本任务,软件系统设计把DFD中的处理分组,从各种可能的分组情况中选择一个作为最佳方案,该过程即为系统设计。,数据结构及数据库设计 数据库设计包括:概念设计、逻辑设计、物理设计,软件结构设计 1. 从系统设计方案所对应的DFD导出系统模块结构,并将功能需求分配给各模块。 2.确定每个模块的功能及模块间的调用关系。 3.确定模块之间的接口,即模块之
2、间传递的信息。 4.评价模块结构的质量。,4,5,概要设计的基本任务,编写概要设计文档1.概要设计说明书2 .数据库设计说明书3.用户手册:对需求分析、交互设计阶段所编写、修改的用户手册进行补充。4.修订测试计划:对测试策略、方法和步骤提出明确要求。,评审:对是否完整地实现了需求中规定的功能、性能等要求,设计方案的可行性、关键的处理及内外部接口定义正确性、有效性以及各部分之间的一致性等,进行评审。,6,软件设计的基本原理,模块化 模块化是解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。它是软件解决复杂问题所具备的手段,不但可以降低问题复杂性,还可以减少开发工作量从而降低开发成本,
3、提供软件生产率。,7,模块化的理论根据,设函数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),8,模块化的理论根据,9,模块的概念,在软件的体系结构中,模块是可组合、分解和更换的单元,具有以下几种基本属性: 接口:指模块的输入输出。 功能:模块实现的功能。 逻辑:内部如何实现及所需数据。 状态:模块的运行环境,调用与被调用关系。逻辑属性反映内部特性,其它属性反映模块的外
4、部特性。,10,软件设计的基本原理,抽象: 是认识复杂现象过程中使用的思维工具。 软件结构顶层模块控制系统主要功能并影响全局,底层模块完成具体的处理。 在进行软件设计时,抽象与逐步求精、模块化密切相关,可提高软件的可理解性。,11,软件设计的基本原理,信息隐蔽 是指在设计和确定模块时,使得一个模块内包含的信息(过程和数据),对于不需要这些信息的其他模块来说,是不可访问的。它为软件系统的修改、测试及以后的维护都带来好处。,12,模块独立性,模块的独立性:指每个模块只完成系统要求的独立的子功能,并且与其它模块的联系量最少且接口简单。 包括两个度量准则 耦合性:指软件系统结构中各模块间相互联系紧密程
5、度的一种度量。模块间耦合高低取决于接口的复杂性、调用的方式及传递的信息。 内聚性:指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。,13,耦合性,无直接耦合:两个模块间没有直接的关系,不传递任何信息。,内容耦合:一个模块直接使用另一模块的内部数据,或通过非正常入口而转入另一个模块内部。,公共耦合:指通过一个公共数据环境相互作用的那些模块间的耦合。,控制耦合:两个模块间传递控制信息。被调用函数通过控制信息有选择地执行块内某一功能。,标记耦合:两个模块间传递的是数据结构。,数据耦合:两个模块间有调用关系,传递简单的数据值。,14,耦合性举例,2 数据耦合,5 公共耦合,4
6、控制耦合,15,耦合性,应采用原则:尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,完全不用内容耦合。,16,内聚性,偶然内聚:指一个模块内的各处理元素之间没有任何联系。 逻辑内聚:指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。例如把编辑各种输入数据的功能放在一个模块中。 时间内聚:把需要同时执行的动作组合在一起形成的模块。例如程序设计中的初始化模块 。 通信内聚:指模块内所有处理元素都在同一个数据结构上操作,或指各处理使用相同的输入数据或者产生相同的输出数据。 顺序内聚:指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素的输出是后一功能元素的输
7、入。 功能内聚:指模块内所有元素共同完成一个功能,缺一不可。,17,内聚性举例,顺序内聚,通信内聚,18,软件结构图形工具,软件结构图 软件结构设计优化准则 表示软件结构的HIPO图(Hierarchy Plus Input/Processing/Output),19,软件结构图(Structure Chart),模块:用方框表示,名字体现该模块的功能。 模块间的控制关系:统率、从属; 模块间的信息传递: 两个附加符号:模块选择调用或循环调用。 注意事项:模块唯一、从上到下调用、调用次序不严格。,20,结构图的形态特征,深度、宽度、扇入、扇出。,T,D,M,A,B,C,扇入,扇出,深 度,宽度
8、,21,软件结构图举例,22,软件结构图注意事项,(1)同一名字的模块在结构图中仅能出现一次。 (2)调用关系只能从上到下。 (3)不严格表示模块的调用次序,习惯上从左到右,有时为了减少连线的交叉,适当地调整同一层模块的左右位置,以保证结构图的清晰。 (4)结构图并不指明什么时候调用下层模块,只表明一个模块调用哪些模块,至于模块内还有没有其他成分则完全没有表示。,23,软件结构设计优化准则(1),模块独立性准则:尽量高内聚,低耦合,保持相对独立性。,A,B,C,D,24,软件结构设计优化准则(2),控制范围与作用范围之间的准则:,一个模块的作用范围应在其控制范围之内,且条件判定所在的模块应与受
9、其影响的模块在层次上尽量靠近。,25,软件结构设计优化准则(3),软件结构的形态特征准则:软件结构的深度、宽度、扇入、扇出应适当。较好的软件结构:顶层扇出多,中层扇出比较少,底层高扇入。 模块的大小准则:最好在50150条语句左右,便于理解。 模块的结构准则:接口要简单、清晰及含义明确,便于理解,易于实现、测试与维护。,26,表示软件结构的HIPO图,订货处理1.0,销售管理系统,进货处理2.0,销售统计3.0,读库存记录1.2,输入并检验订单1.1,缺货处理4.0,确定能否供货1.3,可供货处理1.3.1,缺货货单留底1.3.2,H图:,每个矩形框代表一个模块,连线表示“调用”而非“组成”。
10、 所谓HIPO,即对每个模块附一张IPO图。每个IPO图中应明确标出对应模块的编号。,27,表示软件结构的HIPO图,IPO表 系统:_ 作者: _ 模块:_ 日期: _ 编号: 1.3,被调用:,调用:,输入,输出:,处理:,局部数据元素,文件名:,全局变量:,注释:,销售管理系统,确定能否订货,订货处理,可供货模块 缺货订单留底,订单订货量X 货物库存量Y,供货标志,库存文件,IF YX THEN 可供货处理ELSE 缺货订单留底 ENDIF,IPO图:,28,结构化设计是以结构化分析产生的数据流图为基础,按一定的步骤映射成软件结构。,数据流的类型:变换型数据流图、事务型数据流图。,结构化
11、设计,29,变换型数据流图,由输入、变换和输出三部分组成。,30,事务型数据流图,数据沿着输入通路到达一个加工T。T将输入数据分解成一串发散的数据流,形成许多的活动路径,并根据输入数据的类型在若干动作序列中选出一个来执行。,31,变换分析设计,确定输入流和输出流的边界,从而孤立出变换中心,(1)检查“输入流”的边界 从输入的数据源开始,沿着每一个由数据源传入的数据流的移动方向进行跟踪分析,逐个分析它所经过的处理逻辑功能。如果仅是传入的数据流作形式上的转换,逻辑上没有进行实际的数据处理功能,则这些处理逻辑属于系统的“输入处理部分”。顺着传入的数据流的移动方向,一直跟踪到它被真正地处理为止。,32
12、,变换分析设计,(2)检查“输出流”的边界 从输出结果的地方开始,逆着每一个传递出去的数据流,由外向里反方向跟踪,逐个分析它的处理逻辑功能,一直反方向跟踪到它被真正地产生出来为止。,(3)得到变换中心 根据前两步的分析结果,画出一个闭环界线,在界线以内的就是变换中心。,33,变换分析设计,2. 设计软件结构的顶层和第一层变换结构,34,变换分析设计,(1)顶层主模块Cm是抽象出来的,以系统的名字命名,协调控制下属模块,完成系统各项功能。,(2)第一层: 为每一个逻辑输入设计一个输入模块 功能:为主模块提供数据输入 为每一个逻辑输出设计一个输出模块 功能:为主模块提供数据输出 为中心变换设计一个
13、变换模块 功能:将逻辑输入转换成逻辑输出,35,变换分析设计,(1)输入模块的下属模块设计 为每个输入模块设计两个下层模块 一个用于接收数据 另一个用于将这些数据转换为所要求的数据 重复直到物理输入为止,设计中、下层模块 自顶向下,逐层分解,36,变换分析设计,(2)输出模块的下属模块设计 为每个输出模块设计两个下层模块 一个将调用模块提供的数据转换为所需的数据形式。 另一个用于发送数据 重复直到物理输出为止,(3)变换模块的下属模块设计 按照模块独立性的原则来组织其结构,一般每个基本加工设计一个功能模块。,37,变换分析设计,初始结构图,38,变换分析设计,4. 设计的优化根据设计准则,(1
14、)输入部分的求精 对每个物理输入设置专门模块,以体现系统的外部接口;其他输入模块并非真正输入,当它与转换数据的模块都很简单时,可将它们合并成一个模块。,39,(2)输出部分的求精 为每个物理输出设置专门模块,同时注意把相同或类似的物理输出模块合并在一起,以减低耦合度。,40,(3)变换部分的求精:根据设计准则,对模块进行合并和调整。 软件结构的求精,具有很大的经验性。,追求“高内聚,低耦合”方法: 设计有独立功能的模块 模块间传递数据型的参数 模块间共享信息尽量少,41,42,事务分析设计,事务分析的设计步骤和变换分析的设计步骤大部分相同或类似,主要差别仅在由数据流程图到软件结构的映射方法不同
15、。由事务流映射成的软件结构包括一个接收分支和一个发送分支。,映射出接收分支结构的方法和变换分析映射出输入结构的方法相似,即从事务中心的边界开始,把沿着接收流通路的处理逻辑映射成模块。,发送分支的结构包含一个调度模块,它控制下层的所有活动模块;然后把数据流程图中的每一个活动流通路映射成与它的特征相对应的结构。,43,总控,调度,A_CTL,B_CTL,C_CTL,接收通路,C通路,B通路,A通路,事务分析的映射方法,44,45,综合数据流图的映射,确定DFD整体上的类型:除明显有事务类型的,都可认为是变换型。事务型用于高层DFD变换有平行处理的优点。 把与全局特性不同的局部区域孤立出来,确定类型
16、。 按整体与局部的DFD特性,设计软件结构。,46,混合型的结构设计,47,分层DFD映射:销售管理系统,48,分层DFD映射,主图:,子图:,思考题:,f1,f2,f1,g1,g2,49,精化数据流图,DFD类型,区分事务中心和数据接收通路,区分输入和输出分支,映射成事务结构,映射成变换结构,运用模块设计规则,精化软件结构,描述模块功能、接口和全局数据结构,复查,详细设计,映射顶层和第一层,事务,变换,设计中下层模块结构,结构化设计过程,50,详细设计的基本任务,算法设计 数据结构设计 数据库物理设计 其他设计:代码设计、输入/输出设计、界面设计 编写详细设计说明书: 评审,51,详细设计说
17、明书,引言:包括编写目的、背景、定义、参考资料 程序系统的组织结构。 程序1(标识符)设计说明,包括功能、性能、输入、输出、算法、流程逻辑、接口。 程序2(标识符)设计说明 程序N(标识符)设计说明,52,详细设计方法结构化程序设计,采用自顶向下,逐步求精的程序设计方法。 使用三种基本控制结构构造程序:顺序、选择、循环。单入口,单出口的共同特点。 主程序员的组织形式:一个主程序员、一个后备程序员和一个程序管理员三人为核心,再加上一些专家、其他技术人员组成小组。,详细设计结果基本上决定了最终程序代码的质量。 不仅要逻辑正确,性能满足,还要简明易懂。,53,软件详细设计表示法,常用三种工具:图形、
18、表格和语言。 程序流程图(PFC) PAD图 盒图(N-S图) 过程设计语言,54,PFC:三种基本控制结构,F,DO-UNTIL,DO-WHILE,55,程序流程图,程序流程图,又称程序框图,是描述程序逻辑结构的工具。它使用的符号与系统流程图的符号很多相同,但是,箭头符号代表控制流而不是数据流。优点是直观清晰、易于使用。缺点是:,易造成非结构化的程序结构,编码时不加限制的使用GOTO语句,导致基本控制块多入多出口,与软件设计的原则相违背。 程序流程图本质上不是逐步求精的好工具,诱使过早考虑程序的控制流程,而不去考虑程序的全局结构。 程序流程图不易表示数据结构。,56,PAD图,问题分析图(P
19、roblem Analysis Diagram),sort,i=1,j= i+ 1,max=A (i),A(i) =max , i= i+ 1,清晰地反映了程序的层次结构。 支持逐步求精的设计方法。 易读易写,使用方便。 支持结构化的程序设计原理。 可自动生成程序。,57,盒图(N-S图),优点:所有的程序结构均用方框来表示,程序结构清晰。只能表达结构化的程序逻辑,遵守结构化程序设计的规定。缺点:当程序内嵌套的层数增多时,内层的方框将越来越小,从而增加绘图的难度,并使图形的清晰性受影响。,58,过程设计语言,过程设计语言(Process Design Language)是一种用于描述模块算法设
20、计和处理细节的语言。分内外两层语言。外层具有严格的关键字语法,内层表示实际操作和条件的自然语言,语法自由。程序结构有:顺序结构、选择结构、重复结构、出口结构、扩充结构(模块定义、模块调用、数据定义、输入/输出)等。,与结构化语言区别:作用不同,抽象层次不同,读者也不同。,59,过程设计语言,PROCEDURE 模块名()清屏;显示系统用户界面;PUT(“请输入用户口令:”);GET(password);IF password系统口令提示告警信息;退出运行;ENDIF显示本系统主菜单;WHILE(true)接收用户选择ABC; IF ABC=“退出”Break;ENDIF调用相应下层模块完成用户
21、选择功能;ENDWHILE;清屏;RETURNEND,60,程序复杂程度的定量度量,MaCabe方法 程序复杂性取决于控制的复杂性 以图论为工具,画程序图,计算环形复杂度 环形复杂度为10是模块规模的合理上限,Halstead方法 用运算符N1和操作数N2的总数衡量复杂程度;程序长度NN1N2 详细设计后估计:n1和n2; 预测程序长度:Hn1*log2n1+ n2*log2n2 N 预测错误数:EN log2(n1n2)/3000 8,61,概要设计案例分析,62,以故障分析模块中的导纳矩阵形成为例,有两种不同的模块结构方法。具体选用哪种结构,应根据应用电网的特点与软件的效率要求决定。,63,详细设计案例分析,程序流程图(visio工具) 策略:自顶向下,逐步求精的分解,64,总结,熟练掌握:模块的独立性:耦合性、内聚性;软件结构设计优化准则。 掌握:结构化设计方法;详细设计的程序流程图、PAD图、盒图和 PDL语言。,