第5章 软件详细设计 本章内容结构 本章引言 学习目标 教学内容 本章小结 思考和练习 课堂讨论 2019年4月26日
本章引言 详细设计是软件设计的第二阶段,在此之前的总体设计阶段,已将系统划分为多个模块,并将它们按照一定的原则组装起来,同时确定了每个模块的功能及模块与模块之间的外部接口。这一阶段的工作,就是要对系统中的每个模块给出足够详细的过程性描述,故也称“过程设计”。 本章将讲述详细设计的目的和任务、结构化程序设计、详细设计工具以及人机界面设计方法。 2019年4月26日
本章引言 总体设计是软件结构的建立过程,它将软件系统分解成许多个模块,并决定每个模块的外部特征,即功能和界面(输入和输出)。 详细设计是对总体设计的细节进行完善,给出软件结构中每个模块的内部特征(数据结构、算法和接口)的描述。从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。
学习目标 理解详细设计的目的和任务 熟练掌握结构化程序设计相关概念和技术 理解和掌握多种详细设计工具的用法 理解和掌握人机界面设计的问题、原则和过程 掌握详细设计说明书主要内容及撰写方法 2019年4月26日
教学内容 5.1 详细设计的目的和任务 5.2 结构化程序设计 5.3 详细设计工具 5.4 人机界面设计 5.5 详细设计说明书 5.1 详细设计的目的和任务 5.2 结构化程序设计 5.3 详细设计工具 5.4 人机界面设计 5.5 详细设计说明书 5.6 本章小结和习题 2019年4月26日
5.1 详细设计的目的和任务 详细设计的根本目的:确定应该怎样具体实现所要求的系统。经过这个阶段的设计工作,应该得出对目标系统的精确描述,具体的就是为软件结构图中每一个模块确定采用的算法和块内数据结构,用某种选定的详细设计工具更清晰地描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序. 结构化程序设计是实现上述目标的关键技术,因此是详细设计的逻辑基础。 2019年4月26日
5.1 详细设计的目的和任务 详细设计的任务: 确定每个模块所采用的算法; 确定每个模块所使用的数据结构; 确定每个模块的接口细节; 5.1 详细设计的目的和任务 详细设计的任务: 确定每个模块所采用的算法; 确定每个模块所使用的数据结构; 确定每个模块的接口细节; 为每个模块设计出一组测试用例。
5.2 结构化程序设计(SP) 结构化程序设计的概念是1965年为了从高级语言中取消GO TO语句而提出的。 结构化程序设计经典定义: “如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。” 更全面的定义:“结构程序设计是尽可能少用GO TO语句的程序设计方法。最好仅在检测出错误时才使用GO TO语句,而且应该总是使用前向GO TO语句。”
5.2 结构化程序设计(续) 结构化程序一般具有如下四个特征: 1.一个入口; 2.一个出口; 3.程序中无死语句; 4.程序中无死循环. 5.2 结构化程序设计(续) 结构化程序一般具有如下四个特征: 1.一个入口; 2.一个出口; 3.程序中无死语句; 4.程序中无死循环. 任何程序逻辑都可用顺序、选择和循环等三种基本结构,以及选择和循环二种扩充结构来表示。
5.3 详细设计工具 描述每个模块执行过程的工具叫详细设计工具,可以分为图形、表格和语言三类。 5.3 详细设计工具 描述每个模块执行过程的工具叫详细设计工具,可以分为图形、表格和语言三类。 图形工具:包括传统的程序流程图、盒图和问题分析图(PAD)等; 表格工具:包括判定表、判定树等。 语言工具:过程设计语言(PDL)等; 不论是哪类工具,对它们的基本要求都是能提供对设计准确,无歧义的描述,也就是应该能指明控制流程、处理功能、数据组织以及其它方面的实现细节,从而在编码阶段能把对设计的描述直接翻译成程序代码。 2019年4月26日
5.3 详细设计工具 5.3.1 程序流程图 5.3.2 盒图(N-S图) 5.3.3 问题分析图(PAD图) 5.3 详细设计工具 5.3.1 程序流程图 5.3.2 盒图(N-S图) 5.3.3 问题分析图(PAD图) 5.3.4 过程设计语言(PDL) 2019年4月26日
5.3.1 程序流程图 程序流程图又称为程序框图,它是一种最古老、应用最广泛、且最有争议的描述详细设计的工具。 5.3.1 程序流程图 程序流程图又称为程序框图,它是一种最古老、应用最广泛、且最有争议的描述详细设计的工具。 它易学、表达算法直观。缺点是不够规范,特别是使用箭头使质量受到很大影响,因此必须加以限制,使其成为规范的详细设计工具。 为了能够用程序流程图描述结构化的程序,一般地,限制只允许使用三种基本结构。 结构化程序设计的基本控制结构是: 2019年4月26日
(2)选择型 (1)顺序型 (3)先判断型循环 DO-WHILE 3种基本的控制结构
(4)后判断型循环 DO-UNTIL (5)多种情况选择型 (CASE型) 其他常用的控制结构
5.3.1 程序流程图 程序流程图的优点: 表达直观、结构清晰、易于理解、易于修改。 程序流程图的缺点: 5.3.1 程序流程图 程序流程图的优点: 表达直观、结构清晰、易于理解、易于修改。 程序流程图的缺点: (1)本质上不是逐步求精的好工具,它诱使程序员过早考虑控制流程,而不去考虑程序的整体结构; (2)用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制,容易造成非结构化的程序结构; (3)不易表示数据结构和层次结构。 2019年4月26日
示例
5.3.2 盒图(N-S图) N-S图是为克服流程图在描述程序逻辑时的随意性等缺点,1973年, 由Nassi和Shneiderman提出来的,体现了结构化设计的精神。是目前过程设计中广泛使用的一种图形。 N-S图仅含有5种基本成分,它们分别表示SP方法的几种标准控制结构。 下图给出了结构化控制结构的盒图表示,也给出了调用子程序的盒图表示方法。
(a)顺序; (b)IF-THEN-ELSE分支; ©CASE型多分支; (d)循环; (e)调用子程序 图 盒图的基本符号 (a)顺序; (b)IF-THEN-ELSE分支; ©CASE型多分支; (d)循环; (e)调用子程序
5.3.2 盒图(N-S图 续) 在N-S图中,每个“处理步骤”是用一个盒子表示的,所谓“处理步骤”可以是语句或语句序列。需要时,盒子中还可以嵌套另一个盒子,嵌套深度一般没有限制,只要整张图在一页纸上能容纳得下,由于只能从上边进入盒子然后从下边走出,除此之外没有其他的入口和出口,所以,NS图限制了随意的控制转移,保证了程序的良好结构。
N-S图的嵌套定义形式
5.3.2 盒图(N-S图 续) 用N-S图作为详细设计的描述手段时,常需用两个盒子:数据盒和模块盒,前者描述有关的数据,包括全程数据、局部数据和模块界面上的参数等,后者描述执行过程。
5.3.2 盒图(N-S图 续)
5.3.2 盒图(N-S图 续)
5.3.2 盒图(N-S图 续) N-S图有下述特点: (1) 功能域(即,一个特定控制结构的作用域)明确,可以从盒图上一眼就看出来。 (2) 不可能任意转移控制。 (3) 很容易确定局部和全程数据的作用域。 (4) 很容易表现嵌套关系,也可以表示模块的层次结构。
5.3.2 盒图(N-S图 续) N-S图的优点: 首先,它强制设计人员按SP方法进行思考并描述他的设计方案,这就有效地保证了设计的质量,从而也保证了程序的质量; 第二,N-S图形象直观,功能域明确,结构层次清晰。为编程、复查、选择测试用例、维护都带来了方便; 第三,N-S图简单、易学易用,可用于软件教育和其他方面。
5.3.2 盒图(N-S图 续) N-S图的缺点: 随着程序内嵌套的层数的增多时,内层方框越来越小,这样不仅会增加画图的难度,还会影响图形的清晰度。 手工修改也比较麻烦,这是有些人不用它的主要原因
5.3.3 问题分析图(PAD图) PAD是问题分析图(problem analysis diagram)的英文缩写,由日立公司中央研究所在1973年研究开发的。 它使用二维树形结构图来描述程序的逻辑,将这种图翻译成程序代码比较容易。是一种十分有前途的表达方法。 PAD支持SP方法,它仅具有顺序、选择、循环三类基本成分,其中选择和循环又有几种形式. 下图是PAD图的基本符号。 2019年4月26日
P1 P1 P2 P1 条件C P2 P2 Pn 顺序 选择 Case 型多分支选择 WHILE C P UNTIL C P 当型循环 直到型循环 def 定义 语句标号 PAD图的基本符号
(2)使用def符号细化处理框P2 (1)初始的PAD图 使用PAD图提供的定义功能来逐步求精的例子 P6 UNTIL C2 P7 P1 C
for i := n1 to n2 step n3 do 在PAD中有相应的循环控制结构 对应于增量型循环结构 for i := n1 to n2 step n3 do 在PAD中有相应的循环控制结构
PAD描述的示例
5.3.3 问题分析图(PAD图) PAD图的主要优点: 使用PAD符号设计的程序必然是结构化的程序. 既可以表示程序逻辑,也可以描绘数据结构. 支持自顶向下,逐步求精方法的使用.
5.3.3 问题分析图(PAD图) 例如:将数组A(1)到A(10)从大到小进行选择法排序的算法描述如下PAD图所示。
5.3.3 问题分析图(PAD图) 例如:将数组A(1)到A(10)从大到小进行选择法排序的算法描述如下PAD图所示。
5.3.4 过程设计语言(PDL) 过程设计语言(PDL)也称为伪码, PDL是一种用于描述功能模块的算法设计和加工细节的语言。 伪码的语法规则分为“外语法”和“内语法”。 2019年4月26日
5.3.4 过程设计语言(PDL) PDL语法是开放式的,其外层语法是确定的,而内层语法则故意不确定。外层语法描述控制结构和数据结构,它用类似于一般编程语言控制结构的关键字(如 IF—THEN —ELSE、WHILE—DO、REPEAT—UNTIL等)表示,所以是确定的,而内层语法可使用自然语言的词汇描述具体操作。
5.3.4 过程设计语言(PDL) 例如,在PDL 描述 if X is not negative then return(square root of X as a real number); else return(square root of -X as an imaginary number); 中,外层语法 IF—THEN —ELSE是确定的, 内层操作“square root of X”是不确定的。
5.3.4 过程设计语言(PDL) PDL特点: (1) 关键字的固定语法,它提供了结构化控制结构、数据说明和模块化的特点。 (2) 自然语言的自由语法,它描述处理特点。 (3) 数据说明的手段。 (4) 模块定义和调用的技术,应该提供各种接口描述模式。
5.3.4 过程设计语言(PDL) PDL优点: (1) 可以作为注释直接插在源程序中间。这样做能促使维护人员在修改程序代码的同时也相应地修改PDL注释,因此有助于保持文档和程序的一致性,提高了文档的质量。 (2) 可以使用普通的正文编辑程序或文字处理系统,很方便地完成PDL的书写和编辑工作。 (3)同自然语言(英语)很接近,易于理解。 (4)由于是语言形式,所以易于被计算机处理。 (5)由于同程序是同结构的,从中自动产生程序亦较容易。
5.3.4 过程设计语言(PDL) PDL的缺点: 不如图形工具形象直观; 描述复杂的条件组合与动作间的对应关系时,不如判定表清晰简单。 总之,支持SP方法的各种描述手段(结构化流程图、N-S图、PAD图、PDL等)各有优缺点,总的说来,PDL是比较令人满意的,所以在英语国家中最为流行。
5.4 人机界面设计 5.4.1 人机界面设计问题 5.4.2 人机界面设计原则 5.4.3 人机界面设计过程 5.4 人机界面设计 没有“正确”或“错误”的人机界面,只有“好的”或“不好的”人机界面。 人机界面设计是否成功将直接影响着软件系统的质量。 5.4.1 人机界面设计问题 5.4.2 人机界面设计原则 5.4.3 人机界面设计过程 2019年4月26日
5.4.1 人机界面设计问题 在设计人机界面的过程中,需考虑下面4个问题: 系统响应时间 用户帮助设施 出错信息处理 命令交互 2019年4月26日
5.4.1 人机界面设计问题 1. 系统响应时间 系统响应时间指从用户完成某个控制动作(例如,按回车键或点击鼠标),到软件给出预期的响应(输出信息或做动作)之间的这段时间。 系统响应时间有两个重要属性:长度和易变性。如果系统响应时间过长,用户就会感到紧张和沮丧。但是,当用户工作速度是由人机界面决定的时候,系统响应时间过短也不好,这会迫使用户加快操作节奏,从而可能会犯错误。
5.4.1 人机界面设计问题 易变性指系统响应时间相对于平均响应时间的偏差,这是系统响应时间的比较重要的属性。响应时间易变性低有助于用户建立起稳定的工作节奏。例如,稳定在1秒的响应时间比从0.1秒到2.5秒变化的响应时间要好。 2. 用户帮助设施 几乎交互式系统的每个用户都需要帮助,大多数现代软件都提供联机帮助设施,这使得用户无须离开用户界面就能解决自己的问题。
5.4.1 人机界面设计问题 常见的帮助设施:集成的和附加的两类。 集成的帮助设施从一开始就设计在软件里面,通常,它对用户工作内容是敏感的,因此用户可以从与刚刚完成的操作有关的主题中选择一个请求帮助。显然,这可以缩短用户获得帮助的时间,增加界面的友好性。 附加的帮助设施是在系统建成后再添加到软件中的,在多数情况下它实际上是一种查询能力有限的联机用户手册。 人们普遍认为,集成的帮助设施优于附加的帮助设施。具体设计帮助设施时,必须解决下述的一系列问题。
5.4.1 人机界面设计问题 (1) 在用户与系统交互期间,是否在任何时候都能获得关于系统任何功能的帮助信息?有两种选择:提供部分功能的帮助信息和提供全部功能的帮助信息。 (2) 用户怎样请求帮助?有3种选择:帮助菜单,特殊功能键和HELP命令。 (3) 怎样显示帮助信息?有3种选择:在独立的窗口中,指出参考某个文档(不理想)和在屏幕固定位置显示简短提示。 (4) 用户怎样返回到正常的交互方式中?有两种选择:屏幕上的返回按钮和功能键。 (5) 怎样组织帮助信息?有3种选择:平面结构,信息的层次结构和超文本结构。
5.4.1 人机界面设计问题 3. 出错信息处理 出错信息和警告信息,是出现问题时交互式系统给出的“坏消息”。出错信息设计得不好,将向用户提供无用的甚至误导的信息,反而会加重用户的挫折感。 一般说来,交互式系统给出的出错信息或警告信息,应该具有下述属性。 (1) 信息应该用用户可以理解的术语描述问题。 (2) 信息应该提供有助于从错误中恢复的建设性意见。
5.4.1 人机界面设计问题 (3) 信息应该指出错误可能导致哪些负面后果(例如,破坏数据文件),以便用户检查是否出现了这些问题,并在确实出现问题时及时解决。 (4) 信息应该伴随着听觉上或视觉上的提示,例如,在显示信息时同时发出警告铃声,或者信息用闪烁方式显示,或者信息用明显表示出错的颜色显示。 (5) 信息不能带有指责色彩,也即,不能责怪用户。 当确实出现了问题的时候,有效的出错信息能提高交互式系统的质量,减轻用户的挫折感。
5.4.1 人机界面设计问题 4. 命令交互 命令行曾经是用户和系统软件交互的最常用的方式,并且也曾经广泛地用于各种应用软件中。现在,面向窗口的、点击和拾取方式的界面已经减少了用户对命令行的依赖. 但是,许多高级用户仍然偏爱面向命令行的交互方式。在多数情况下,用户既可以从菜单中选择软件功能,也可以通过键盘命令序列调用软件功能。
5.4.1 人机界面设计问题 在提供命令交互方式时,必须考虑下列设计问题。 (1) 是否每个菜单选项都有对应的命令? (2) 采用何种命令形式?有3种选择:控制序列(例如,Ctrl+P),功能键和键入命令。 (3) 学习和记忆命令的难度有多大?忘记了命令怎么办? (4) 用户是否可以定制或缩写命令? 在越来越多的应用软件中,人机界面设计者都提供了“命令宏机制”,利用这种机制用户可以用自己定义的名字代表一个常用的命令序列。需要使用这个命令序列时,用户无须依次键入每个命令,只需输入命令宏的名字就可以顺序执行它所代表的全部命令。在理想的情况下,所有应用软件都有一致的命令使用方法。
5.4.2 人机界面设计原则 屏幕界面设计的原则可归为四点: 界面简洁、控件摆放规范、颜色统一、符合用户习惯。 T.Mandel提出三条用户界面设计的重要准则,称之为“黄金”指导准则: 让用户驾驭软件,而不是软件驾驭用户。 尽可能减少用户的记忆负担。 保持界面的一致性。 2019年4月26日
5.4.3 人机界面设计过程 用户界面设计是一个迭代的过程,通常先创建设计模型,再用原型实现这个设计模型,并由用户试用和评估,然后根据用户意见进行修改。 目前,有各种用于界面设计和原型开发的软件工具。这些工具被称为用户界面工具箱或用户界面开发系统,它们为简化窗口、菜单、设备交互、出错信息、命令及交互环境的许多其他元素的创建,提供了各种例程或对象。这些工具所提供的功能,既可以用基于语言的方式也可以用基于图形的方式来实现。 2019年4月26日
5.4.3 人机界面设计过程 人机界面设计基本过程可以分为以下步骤: 建立任务的目标和意图; 目标和意图明确后,建立界面需求规格模型; 以界面需求模型为依据创建用户界面原型; 用户试用并评估该界面原型; 设计者根据用户的意见修改设计并实现下一原型; 不断进行下去,直到用户感到满意为止。 在上述步骤中,以界面原型创建进行界面设计迭代。 2019年4月26日
5.5 详细设计说明书的主要内容 详细设计说明书主要包括以下内容: 1.引言:编写目的、项目背景、定义、参考资料; 5.5 详细设计说明书的主要内容 详细设计说明书主要包括以下内容: 1.引言:编写目的、项目背景、定义、参考资料; 2.程序描述(所有模块给出以下说明):功能、性能、输出和输入项目、算法、程序逻辑、接口、存储分配、限制条件、测试要点等。 2019年4月26日
本章小结 详细设计阶段的任务是确定如何实现所要求的目标系统,将总体设计阶段得到的模块算法用详细设计工具:程序流程图、N-S图、PAD图和PDL语言描述出来,即设计出程序的“蓝图”。从而在下一编码阶段直接翻译成用某种程序设计语言书写的程序。结构化程序设计技术是软件详细设计的基础,任何一个程序都可以用程序、选择、循环三种结构来设计和实现,结构化程序设计具有可理解性和可维护性。 人机界面设计质量直接影响用户对软件产品的接受程度,因此, 必须对人机界面设计给予足够重视。在人机界面的设计过程中必须充分重视并认真处理好系统响应时间、用户帮助实施、出错信息处理和命令交互四个设计问题。 2019年4月26日
思考和练习 5.1 软件详细设计的基本任务是什么?有哪几种描述方法? 5.2 结构化程序设计的基本要点是什么? 5.3 使用流程图、PAD图、N-S图和PDL语言描述下列程序的算法: (1)在数据A(1)—A(10)式中求最小数和次小数。 (2)输入三个正整数作为边长,判断由这三条边构成的三角形是直角、等腰或一般三角形。 5.4 任选一种排序(从大到小)算法,分别用流程图、N-S图和PPL语言描述其详细过程。 2019年4月26日
思考和练习(续) 5.5画出下列程序的PAD图 (接前面) S2; ELSE y2; ENDIF; UNTIL L; REPEAT IF x>O THEN x1 ELSE x2 ENDIF; S1; IF y>O THEN y1 IF z> O THEN z1 ELSE z2 (接前面) S2; ELSE y2; ENDIF; UNTIL L; 5.6 程序流程图、N-S图、PAD图和PDL语言的特点各是什么?你认为这四种详细设计工具哪一种最好?为什么? 2019年4月26日
课堂讨论 根据前面选择的软件开发项目,根据本章内容尝试采用多种详细设计工具完成相关的详细设计; Question? 2019年4月26日