1、第6章 详细设计,6.1 结构程序设计 6.2 人机界面设计 6.3 过程设计的工具 6.4 程序复杂程度的定量度量,2,详细设计阶段的根本目标,子目标1:确定应该怎样具体地实现所要求的系统。要求逻辑上正确地实现每个模块的功能。子目标2:使得将来编写出的程序易理解、易测试、易修改和易维护。,3,详细设计阶段的任务,详细设计阶段的任务是设计出程序的详细规格说明,而不是具体地编写程序。在编码阶段才是写出实际的代码。,4,详细设计的任务主要有如下五点。,(1)确定每个模块的具体算法。(2) 确定每个模块的内部数据结构及数据库的物理结构。(3) 确定模块接口的具体细节。(4) 为每个模块设计一组测试用
2、例。(5) 编写文档,参加复审。,详细设计阶段的结果决定了最终的程序代码的质量。结构程序设计技术:是实现质量要求的基本保证,是详细设计的逻辑基础。结构程序设计定义: 一个程序的代码块仅仅通过顺序、选择和循环这三种基本的控制结构进行连接;并且每个代码块只有一个入口和一个出口。,6.1 结构程序设计,“结构程序设计是尽可能少用GO TO语句。因为程序的质量与程序中所包含的GO TO语句的数量成反比”。Bohm和Jacopini已证明:只用三种基本的控制结构(顺序,选择,循环)就能实现任何单入口单出口的程序。从而实现结构程序设计。,结构程序设计质量保证,7,顺序结构,选择结构一,T,T,F,F,选择
3、结构二,结构程序设计三种基本的控制结构,一个菱形判断框有两个出口,而一个选择结构只有一个出口。不要将菱形框的出口和选择结构的出口混淆。),8,循环结构的图示:,当型(While型)循环结构,直到型(Until型)循环,9,三种基本结构的共同特点:(1)只有一个入口; (2)只有一个出口; (3)结构内的每一部分都有机会被执行到; (4)结构内不存在“死循环”(无终止的循环)。,10,结构程序设计的特点:,由三种基本结构顺序组成的,可以解决任何复杂的问题。程序内不存在无规律的转向,只在基本结构内才允许存在分支和向前或向后的跳转。,11,课堂练习1,右图给出的程序流程图代表一个非结构化的程序,请问
4、: (1) 为什么说它是非结构化的? (2) 设计一个等价的结构化程序。 (3) 在(2)题的设计中你使用附加的标志变量flag了吗?若没用,请再设计一个使用flag的程序;若用了,再设计一个不用flag的程序。,结束,12,(1)图示的程序的循环控制结构有两个出口,显然不符合狭义的结构程序的定义,因此是非结构化的程序。,结束,13,(2)使用附加的标志变量flag,程序流程图,14,(3)不使用附加的标志变量flag,程序流程图,人机界面设计是接口设计的一个重要组成部分。近来年,人机界面在系统中占的比例越来越大,有的系统中甚至占总设计量的一半以上。人机界面的设计质量,直接影响用户对软件产品的
5、评价。,6.2 人机界面设计,16,系统响应时间:从用户完成某个控制动作到软件给出预期的响应之间的这段时间。2. 用户帮助设施: 集成和附加两类。3. 出错信息处理: 如何办, 用户心理。4. 命令交互: 用户可以从菜单中选择软件功能,也可以通过键盘命令序列调用软件功能。,6.2.1 设计问题,17,用户界面设计是一个迭代的过程。过程一般如下:1.通常先创建设计用户界面模型2.实现该设计模型的原型3.由用户试用和评估原型4.根据用户意见进行修改,6.2.2 设计过程,1、一般交互指南一致性:为人机界面中的菜单选择、命令输入、数据显示及众多其他功能,使用一致的格式。 确认:在执行有较大破坏性的动
6、作之前要求用户确认。 UNDO:允许用户取消绝大数操作。 易记:应该尽量减少记忆量。 层次:按功能对动作分类,并据此设计屏幕布局。 多媒体:应向用户提供视觉和听觉的反馈,以建立双向通信。,6.2.3 人机界面设计指南,1)、可使用性 使用简单 用户界面中所用术语的标准化和一致性 具有HELP功能 快速的系统响应和低的系统成本2)、灵活性 提供不同的系统响应信息(多媒体)。 提供根据用户需求制定和修改界面。3)、界面的复杂性与可靠性复杂性界面规模及组织应该愈简单愈好。只显示与当前工作内容相关的信息。使用窗口分隔不同类型的信息。 可靠性用户界面应该能够保证用户正确、可靠地使用系统,及程序、数据的安
7、全。产生有意义的出错信息。,2、信息显示界面设计,数据输入界面,是系统的重要组成部分。主要从输入速度和减少出错率考虑。,1)尽量减少输入工作量对相同内容输入设置默认值自动填入列表选择或点击选择,2)保持信息显示和数据输入之间的一致性(大小、颜色和位置)。,3)交互应该是灵活的,允许鼠标输入和键盘输入。4)使在当前动作语境中不起作用的命令不起作用。,3、数据输入界面设计,21,复习与回顾,(1) 经典的结构化程序设计有什么特点?采用三种基本的控制结构;单入口,单出口 (2)根据你使用和开发软件的经验,谈谈如何尽量减少用户的输入工作量?1)对相同内容输入设置默认值2)自动填入3)列表选择或点击选择
8、 (3)你认为应如何减少界面的复杂度?1)显示与当前工作内容相关的信息。2)使用窗口分隔不同类型的信息。3),22,新课导入,请问: 详细设计阶段的根本目标是什么?引入:算法设计的工具,6.3 过程设计的工具 (1)过程设计是设计模块的详细步骤(算法),是详细设计阶段应完成的主要工作。 (2)过程设计的工具描述程序处理过程的工具。,描述工具,详细设计阶段的描述工具,24,美国国家标准化协会ANSI(American National Standard Institute)规定了一些常用的流程图符号:,25,例:用流程图表示:打印50名学生中成绩在80分以上者的学号和成绩。,26,程序流程图的优
9、缺点:,主要优点:对控制流程的描绘很简明直观、易于理解,便于初学者掌握。主要缺点: 本质上不是逐步求精的好工具。-改进:PAD图 用箭头代表控制流,描述程序时可以随意跳转。-改进:N-S图 不易表示数据结构。-改进:PAD图 嵌套的条件选择表示不清。-判定树、判定表,为了避免流程图在描述程序时的随意跳转,提出了N-S图代替流程图。N-S图由而且仅由顺序、选择、循环三种基本结构组成。,6.3.2 NS图,图6.4 NS图,28,例:用N-S图表示:打印50名学生中成绩在80分以上者的学号和成绩。,N-S图,29,盒图(N-S图)特点,1)形象直观,可读性强; 2)限制了随意的控制转移; 3)特定
10、的控制结构的作用域明确; 4)很容易确定局部和全程数据; 5)很容易表现嵌套和模块的层次结构。其缺点是:修改算法比较困难。,6.3.3 PAD图,PAD (Problem Analysis Diagram)是问题分析图。PAD图除了自上而下外,还有从左向右的展开,是使用二维树型结构图表示程序的控制流。,31,PAD图基本符号,顺序结构,选择结构,Case型多分支结构,While型循环,Until 型循环,定义,32,使用PAD图提供的定义功能逐步求精的例子,33,例:用PAD图表示:打印50名学生中成绩在80分以上者的学号和成绩。,PAD图,34,PAD图的特点,1)能展现算法的层次结构; 2
11、)表示形式直观易懂; 3)既可用于表示程序逻辑,又可用于描述数据结构; 4)支持自顶向下,逐步求精的过程。,35,6.3.4 判定表,当算法中包含多重嵌套的条件选择时,用程序流程图、盒图、PAD图等都不易清楚地描述,然而,判定表能够清晰地表示复杂的条件组合与应做的动作之间的对应关系。,36,判定表举例行李托运费的算法,假设某航空公司规定:乘客可以免费托运不超过30kg的行李。当行李重量超过30kg时,对头等舱的国内乘客超重部分每公斤收费4元,对其他舱的国内乘客超重部分每公斤收费6元,对外国乘客超重部分每公斤收费比国内乘客多一倍,对残疾乘客超重部分每公斤收费比正常乘客少一半。用判定表可以清楚地表
12、示与上述每种组合相对应的计算行李费的算法。,37,一张判定表由4部分组成:,左上部列出所有条件,左下部是所有可能做的动作,右上部表示各种条件组合的一个矩阵,右下部是和每种条件组合相对应的动作。,判定表右半部的每一列实质上是一条规则,规定了与特定的条件组合相对应的动作。,38,以“检查发货单”为例:,39,判定表的优缺点,优点:判定表能够简洁而无歧义地描述处理规则。可以对判定表进行校验或化简。缺点:并不适于作为一种通用的设计工具,直观性不够。,40,判定树是用来表达加工逻辑的一种工具。比判定表更直观,是一种常用的系统分析和设计工具。,6.3.5 判定树,41,图6.7用判定树表示计算行李费的算法
13、,数据元素的同一个值往往要写多次,画判定树的次序对叶子结点有较大影响。,42,检 查 发 货 单,金额$500,金额$500,欠款60天,不发出批准书,欠款60天,发出批准书、发货单,欠款60天,发出批准书、发货单及赊欠报告,欠款60天,发出批准书、发货单,以“检查发货单”为例:,43,判定树的优缺点,优点:比判定表更直观。 缺点:(1)不够简洁,数据元素重复多次地写。(2)画判定树时分枝的次序对简洁程序有影响。,44,PDL: 是一种非形式化、比较灵活的混杂语言。也称为伪码。用于描述模块内部过程的具体算法,以便在开发人员之间比较精确的进行交流。 例子,6.3.6 PDL(Program De
14、sign Language)程序设计语言,45,商店业务处理系统中“检查发货单”的伪码,if 发货单金额超过$500 thenif 欠款超过了60天 then在偿还欠款前不予批准else (欠款未超期)发批准书、发货单 else (发货单金额未超过$500)if 欠款超过60天 then发批准书、发货单及赊欠报告else (欠款未超期)发批准书、发货单,使用一种语言(通常是自然语言)的词汇,同时却使用另一种语言(某种结构化语言)的语法。,46,PDL用正文形式表示数据和处理过程的设计工具,其外层语法是确定的,而内层语法则不确定。(1)PDL具有严格的关键字外部语法,用于定义控制结构和数据结构。
15、外层语法描述控制结构它用类似于一般程序设计语言控制结构的关键字:如 : IF-THEN-ELSE DO WHILE REPEAT- UNTILDO CASE 等表示。有时还用关键字反排,表示控制结构结束:DO - OD IF - FI(2)PDL表示实际操作和条件的内部语法通常又是灵活自由的,可以适应各种工程项目的需要。,PDL的特点,47,PDL的优缺点,优点: 可以作为注释直接插入到源程序中。有利于PDL和源程序保持一致性。 PDL编写方便。 可以由自动处理程序将PDL生成程序代码。缺点:(1)不如图形工具形象直观。(2)描述复杂的条件组合与动作间的对应关系时,不如判定表清晰简单。,48,
16、思考题,详细设计的算法与概要设计中的模块有什么关系?,49,第五章:总体设计通常采用结构图或HIPO图来描述软件的层次结构。 第六章:详细设计可采用程序流程图、N-S图、PAD图或PDL语言等手段进行描述,描述第五章结构图或HIPO图中模块的算法。,50,51,6.4 程序复杂程度的定量度量,用途: 可估算出软件中错误的数量以及软件开发需要用的工作量。比较两个不同的设计或两个不同算法的优劣。作为模块规模的精确限度。,53,6.4.1 McCabe方法,基本步骤:(1)将程序流程图或PDL等简化为流图。(2)基于流图计算环形复杂度,以定量度量程序的复杂程度。,54,McCabe的流图,定义:仅仅
17、描绘程序的控制流程 基本符号:圆:代表一条或多条语句箭头线:边区域:由边和圆围成的面积 基本原则:合并原则:顺序处理框和菱形判定框、顺序处理框序列可以映射成流图中的一个结点。分解原则:复合条件分解为若干个简单条件,每个简单条件对应流图中一个结点。,55,程序流程图,翻译,顺序处理框和菱形判定框 映射成一个结点,一条边必须终止于一个结点,即使该结点并不代表任何语句,流图,一个菱形判定框映射成流图中的一个结点,在流图中,用圆表示结点 一个圆表示一条或多条语句 边代表控制流 Ri表示区域(由边和点围成的面积),顺序处理框序列,56,PDL,翻译,流图,57, IF a OR bthen proced
18、ure xelse procedure y ENDIF ,复合条件的PDL映射成的流图,把复合条件分解为若干个简单条件,每个简单条件对应流图中一个结点。,58,2. 计算环形复杂度的方法,McCabe方法基于流图中程序控制流的复杂程度定量度量程序的复杂程度,称为程序的环形复杂度。(1)流图中的环形复杂度V(G)=区域数。(2)流图G的环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。(3)流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目。,示例,示例,示例,59,3. 环形复杂度的用途,对测试难度的一种定量度量,能对软件最终的可靠性给出某种预测。环形复杂度
19、高的程序往往是最困难、最容易出问题的程序。实践表明,模块规模以V(G)10为宜。,60,C EXAMPLE LOOP:DO WHILE X0A=B+1IF A10 THEN X=AELSE Y=ZEND IF IF Y5THEN PRINT X,YELSE IF Y=2THEN GOTO LOOPELSE C=3END IF END IF,P142:8 画出下列伪码程序的流图,计算它的环形复杂度。你觉得这个程序的逻辑有什么问题吗?,G=H+R END DO IF F0THEN PRINT GELSE PRINT K END IF STOP,课堂讨论及解答,1 2 3 4 5 6 7 8 9 1
20、0 11 12 131,14 15 16 17 18 19 20,61,方法1: V(G)边数E结点数n2=18-14+2=6方法2:V(G) =判断结点 1=5 16方法3:V(G) =流图中的区域数=6=环形复杂度。,R1,R2,R3,R4,R5,R6,程序的逻辑有什么问题,62,小结,详细设计阶段的任务是在总体设计的基础上确定怎样具体地实现所要求的目标系统,并使得将来编写的软件易理解、易测试、易修改和易维护。结构化方法的详细设计要求为每一个模块设计相应的算法和模块内的数据结构。详细设计工具可以给出程序处理过程的描述,可分为图形、表格和语言3类,3类工具各有所长。程序复杂程度的定量度量程序
21、的逻辑复杂程度。,63,课后作业如下(P140-P143) 4 5 9,64,图中没有一条从入口到出口的路径通过A框。,不正确的结构表示:,返回,65,不正确的结构表示:,流程内的死循环,返回,66,三条规则,(1)为每对有对应关系的数据单元,按照它们在数据结构图中的层次在程序结构图的相应层次画一个处理框。(2)根据输入数据结构中剩余的每个数据单元所处的层次,在程序结构图的相应层次分别为它们画上对应的处理框 。(3)根据输出数据结构中剩余的每个数据单元所处的层次,在程序结构图的相应层次分别为它们画上对应的处理框。,67,流图,方法1: 从流图可以知: 区域数=4 所以环形复杂度=4,68,流图,方法2:从流图可以知: 边数E=11,结点数N=9, V(G)=E-N+2=4,69,流图,方法3:从流图可以知: 流图中判定结点的数目P=3,V(G)=P+1=4,70,课堂练习1,6-3 画出下列伪码程序的程序流程图和盒图: STARTIF p THENWHILE q DOfEND DOELSE BLOCKgnEND BLOCKEND IF STOP,程序流程图,盒图,结束,