1、软件工程软件工程第六章第六章 详细设计详细设计l6.1 结构程序设计结构程序设计 l6.2 人机界面设计人机界面设计 l6.3 过程设计的工具过程设计的工具 l6.4 面向数据结构的设计方法面向数据结构的设计方法 l6.5 程序复杂程度的定量度量程序复杂程度的定量度量l6.6 小结小结1、详细设计介绍、详细设计介绍l详细设计的根本目标是:详细设计的根本目标是:l确定应该怎样具体地实现所要求的系统。确定应该怎样具体地实现所要求的系统。l经过这个阶段的设计工作,应该得出对目标系统经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直的精确描述,从而在编码阶段可以把这个
2、描述直接翻译成用某种程序设计语言书写的程序。接翻译成用某种程序设计语言书写的程序。详细设计基本任务详细设计基本任务l主要确定每个模块具体执行过程,有:主要确定每个模块具体执行过程,有:l为每个模块进行详细的算法设计。为每个模块进行详细的算法设计。l为模块内的数据结构进行设计。为模块内的数据结构进行设计。l对数据库进行物理设计。对数据库进行物理设计。l其他设计,如:代码设计、输入输出格式设计、其他设计,如:代码设计、输入输出格式设计、人机对话设计。人机对话设计。l编写详细设计说明书。编写详细设计说明书。l评审评审6.1 结构程序设计(结构程序设计(SP)l一、什么是结构化程序?一、什么是结构化程
3、序?l最早由最早由 E.W.Di jkstra 在在 60 年代中期提出。年代中期提出。l经典定义:如果一个程序的代码块仅仅通过经典定义:如果一个程序的代码块仅仅通过顺序、顺序、选择和循环选择和循环这这 3 种基本控制结构进行连接,而且种基本控制结构进行连接,而且每个代码块只有每个代码块只有一个入口和一个出口一个入口和一个出口,则称这个,则称这个程序是结构化的。程序是结构化的。l比较全面的定义:结构程序设计是尽可能少用比较全面的定义:结构程序设计是尽可能少用 GOTO 语句的程序设计方法,最好仅仅在检测出语句的程序设计方法,最好仅仅在检测出错误时才使用错误时才使用 GOTO 语句,而且应该总是
4、使用语句,而且应该总是使用前向的前向的 GOTO 语句。语句。二、结构化程序设计二、结构化程序设计(S P)主要原则主要原则l(1)使用语言中的顺序、选择、重复等有限的基本控制使用语言中的顺序、选择、重复等有限的基本控制结构表示程序逻辑。结构表示程序逻辑。l(2)选用的控制结构只准许有一个入口和一个出口。选用的控制结构只准许有一个入口和一个出口。l(3)复杂结构应该用基本控制结构进行组合嵌套来实现。复杂结构应该用基本控制结构进行组合嵌套来实现。l(4)严格控制严格控制 GOTO 语句,仅在下列情形才可使用:语句,仅在下列情形才可使用:用一个非结构化的程序设计语言去实现一个结构化的构造。在某种可
5、以改善而不是损害程序可读性的情况下。l三、五种基本的结构化控制结构(程序流程图表三、五种基本的结构化控制结构(程序流程图表示示)6.2 入机界面设计入机界面设计l人机界面通常也称为用户界面人机界面通常也称为用户界面l用户界面友好性用户界面友好性属软件性特性,独立于所有具体属软件性特性,独立于所有具体功能功能l用户界面是否友好很大程度由人的主观因素决定。用户界面是否友好很大程度由人的主观因素决定。l问:请说说你心目中友好的界面是怎样的?问:请说说你心目中友好的界面是怎样的?l用户界面应具备的特性用户界面应具备的特性l可使用性可使用性如:使用简单、界面中所用术语应该标准化,并保持一致性;拥有 He
6、 lp 功能;较快的系统响应速度和较低的系统开销;具有容错能力。l灵活性灵活性能满足不同用户的要求;可以制定和修改界面方式;能提供各类的系统响应信息,如反馈、提示、帮助、报错等;与其他软件系统应有标准的界面。l复杂性复杂性在完成预定功能的前提下,用户界面越简单越好。l可靠性可靠性用户界面能保证用户正确、可靠地使用系统,保证有关程序和数据的安全性。6.2.1 设计问题设计问题l在设计人机界面过程中,几乎总会遇到以下在设计人机界面过程中,几乎总会遇到以下 4 个个问题:问题:l 系统响应时间系统响应时间 l 用户帮助信息用户帮助信息 l 出错信息处理出错信息处理 l 命令交互命令交互l 系统响应时
7、间系统响应时间l系统响应时间指从用户完成某个控制动作到软件系统响应时间指从用户完成某个控制动作到软件给出预期的响应之间的这段时间给出预期的响应之间的这段时间。有两个重要属。有两个重要属性:性:l长度:响应时间的长短;长度:响应时间的长短;l易变性:响应时间相对于平均响应时间的偏差。易变性:响应时间相对于平均响应时间的偏差。l 用户帮助信息用户帮助信息l具体设计帮助信息时,应该解决以下问题:具体设计帮助信息时,应该解决以下问题:l在用户与系统交互期间,是否在任何时候都能获得关于系在用户与系统交互期间,是否在任何时候都能获得关于系统任何功能的帮助信息?(全部或部分)统任何功能的帮助信息?(全部或部
8、分)l用户怎样请求帮助?(帮助菜单、功能键、用户怎样请求帮助?(帮助菜单、功能键、Help 命令)命令)l怎样显示帮助信息?(独立窗口、某个参考文档、屏幕固怎样显示帮助信息?(独立窗口、某个参考文档、屏幕固定位置显示简短提示)定位置显示简短提示)l用户怎样返回正常的交互方式?(返回按钮、功能键)用户怎样返回正常的交互方式?(返回按钮、功能键)l怎样组织帮助信息怎样组织帮助信息?(通过关键字访问、层次结构、超文(通过关键字访问、层次结构、超文本结构)本结构)出错信息处理出错信息处理l出错信息或警告信息应具有的属性:出错信息或警告信息应具有的属性:l是用户可以理解的术语是用户可以理解的术语l应该提
9、高有助于从错误中恢复的建设性意见应该提高有助于从错误中恢复的建设性意见l信息应该指出错误可能导致哪些负面后果(如破信息应该指出错误可能导致哪些负面后果(如破坏数据文件)等坏数据文件)等l信息应该伴随视觉听觉上的提示,如警告声等信息应该伴随视觉听觉上的提示,如警告声等l信息不能带有指责色彩信息不能带有指责色彩 命令交互命令交互l多数情况,用户应该既可以从多数情况,用户应该既可以从菜单菜单中选择命令,中选择命令,也可以通过也可以通过键盘键盘输入命令。输入命令。l提供命令交互应考虑的问题提供命令交互应考虑的问题:l是否每个菜单选项都有对应的命令?是否每个菜单选项都有对应的命令?l采用何种命令形式?(
10、控制序列,如采用何种命令形式?(控制序列,如 ctrl ;功能键;键入命令);功能键;键入命令)l学习和记忆命令的难度多大?忘了怎么办?学习和记忆命令的难度多大?忘了怎么办?l用户是否可以定制或缩写命令?用户是否可以定制或缩写命令?6.2.3 设计过程设计过程l用户界面设计是一个迭代的过程,包括以下步骤:用户界面设计是一个迭代的过程,包括以下步骤:6.2.3 人机界面设计指南人机界面设计指南l界面分类界面分类l一、一般交互界面一、一般交互界面l二、信息显示界面二、信息显示界面l三、数据输入界面三、数据输入界面一、一般交互界面一、一般交互界面l1、基本设计指南、基本设计指南l保持一致性;保持一致
11、性;l提供有意义的反馈和帮助信息;提供有意义的反馈和帮助信息;l执行较大破坏性动作之前要求用户确认;执行较大破坏性动作之前要求用户确认;l允许犯错误,允许中断或撤销绝大多数操作;允许犯错误,允许中断或撤销绝大多数操作;l 减少两次操作之间必须记忆的信息量;减少两次操作之间必须记忆的信息量;l按功能对动作分类,并据此设计屏幕布局按功能对动作分类,并据此设计屏幕布局l用简单动词或短语作为命令名用简单动词或短语作为命令名2、交互界面的基本类型、交互界面的基本类型l菜单界面菜单界面l 对话对话 l 其他其他l菜单界面菜单界面l按显示形象分类:按显示形象分类:l正文菜单、图标菜单、正文图标混合菜单。正文
12、菜单、图标菜单、正文图标混合菜单。l按屏幕位置和操作风格分类按屏幕位置和操作风格分类l固定、浮动、下拉式、嵌入式固定、浮动、下拉式、嵌入式l 对话框对话框l对话形式对话形式l必须回答式、无需回答式、警告式必须回答式、无需回答式、警告式l对话实现方式对话实现方式l标准对话、定做式对话标准对话、定做式对话l其他其他l图像图像l窗口窗口l二、信息显示界面二、信息显示界面 l1、界面显示的基本元素、界面显示的基本元素 l 数据数据l 字符字符l 图形图形l 报告报告2、基本设计指南、基本设计指南l可用多种不同方式显示信息。如用图形表示数据可用多种不同方式显示信息。如用图形表示数据l只显示与当前工作内容
13、有关的信息只显示与当前工作内容有关的信息l使用一致的标记、缩写和可预知的颜色。使用一致的标记、缩写和可预知的颜色。l使用使用窗口分隔窗口分隔不同类型的信息不同类型的信息l使用使用模拟方式模拟方式表示信息。表示信息。界面举例网上红心大战界面举例网上红心大战三、数据输入界面三、数据输入界面l1、基本设计指南、基本设计指南l尽量减少用户输入的动作尽量减少用户输入的动作l保持信息显示和数据输入的一致性保持信息显示和数据输入的一致性l允许用户自定义输人,如键盘输入或鼠标输入允许用户自定义输人,如键盘输入或鼠标输入l当前动作语境中,不适用的命令不起作用。当前动作语境中,不适用的命令不起作用。l让用户控制交
14、互流,如用户能跳过不必要的动作让用户控制交互流,如用户能跳过不必要的动作l消除冗余的输入消除冗余的输入界面举例界面举例MSN界面举例界面举例6.3 过程设计的工具过程设计的工具l(1)图形工具)图形工具l程序流程图程序流程图(FC)l盒图(盒图(NS)l问题分析图问题分析图(PAD)l(2)表格工具)表格工具l判定表判定表l判定树判定树 l(3)语言工具语言工具l过程设计语言(过程设计语言(PDL)6.3.1 程序流程图(程序流程图(FC)l又称程序框图。以图形方式说明系统中的控制流,是历史又称程序框图。以图形方式说明系统中的控制流,是历史最悠久、使用最广泛的一种描述程序逻辑结构的工具。最悠久
15、、使用最广泛的一种描述程序逻辑结构的工具。l优点:直观清晰、易于使用,是普遍采用的工具。优点:直观清晰、易于使用,是普遍采用的工具。l缺点:缺点:l反映的是最后的结果,不易反映逐步求精的过程反映的是最后的结果,不易反映逐步求精的过程l可以随心所欲地画控制流程线的流向,容易造成非结构化可以随心所欲地画控制流程线的流向,容易造成非结构化的程序结构。的程序结构。l不易表示数据结构。不易表示数据结构。程序流程图的标准符号程序流程图的标准符号使用流程图,使用流程图,使用流程图,使用流程图,描述并打印描述并打印描述并打印描述并打印N N的的的的阶乘,如图所阶乘,如图所阶乘,如图所阶乘,如图所示示示示l请针
16、对下面的语句段请针对下面的语句段l if(A(B|C)l x=1;lelse x=0;l画流程图画流程图6.3.2 盒图(盒图(N-S 图)图)l出于要有一种不允许违背结构程序设计精神的图形工具出于要有一种不允许违背结构程序设计精神的图形工具的考虑,的考虑,Nassi 和和 Shneiderman 提出用盒图代替传统提出用盒图代替传统的流程图,简称为的流程图,简称为 N 一一 S 图。图。l优点:优点:l只能描述结构化程序所允许的标准结构。只能描述结构化程序所允许的标准结构。l程序结构用方框表示,清晰可见。程序结构用方框表示,清晰可见。l缺点:缺点:l当程序内嵌套层数增多时,内层方块越画越小,
17、增加了当程序内嵌套层数增多时,内层方块越画越小,增加了画图的困难,并使图形的清晰性受到影响。画图的困难,并使图形的清晰性受到影响。五种基本控制结构在盒图中的表示五种基本控制结构在盒图中的表示N 一一 S 图的嵌套定义形式图的嵌套定义形式盒图例盒图例1l日立公司发明。用二维树形结构的图来表示程序的控制日立公司发明。用二维树形结构的图来表示程序的控制流,控制流程流,控制流程自上而下,从左往右自上而下,从左往右地执行。地执行。l优点:优点:l程序结构清晰,结构化程度高。程序结构清晰,结构化程度高。l支持自顶向下,逐步求精的设计方法。支持自顶向下,逐步求精的设计方法。l既可以表示程序逻辑,也可以描绘数
18、据结构。既可以表示程序逻辑,也可以描绘数据结构。l用用PA D图表现程序逻辑,易读易写,使用方便。图表现程序逻辑,易读易写,使用方便。l容易转换成高级语言源程序,也可用软件工具实现自动容易转换成高级语言源程序,也可用软件工具实现自动转换。转换。6.3.3 问题分析图(问题分析图(PAD)五种基本控制结构在五种基本控制结构在PAD 图中的表示图中的表示PAD 描述的示例描述的示例6.3.4 判定表判定表l判定表能够清晰地表示复杂的条件组合与应做的判定表能够清晰地表示复杂的条件组合与应做的动作之间的对应关系。动作之间的对应关系。l如果数据流处理时需要依赖多个逻辑条件的取值,如果数据流处理时需要依赖
19、多个逻辑条件的取值,用判定表来描述比较合适。用判定表来描述比较合适。l一、判定表组成一、判定表组成l条件部分给出所有的条件部分给出所有的两分支判断的列表;两分支判断的列表;l动作部分给出相应的处理;动作部分给出相应的处理;例例 1:检查发货单判定表:检查发货单判定表二、判定表的应用二、判定表的应用l使用判断表进行数据处理说明使用判断表进行数据处理说明6.3.6 过程设计语言过程设计语言(process Design Language,PDL)l也称伪码(也称伪码(pseudo code),是一种介于自然,是一种介于自然语言和形式化语言之间的语言,用于描述功能模语言和形式化语言之间的语言,用于描
20、述功能模块的块的算法设计算法设计和和处理细节处理细节的语言。的语言。l特点:易编写,易理解,容易转换成源程序。特点:易编写,易理解,容易转换成源程序。l例:商店业务处理系统中例:商店业务处理系统中“检查发货单检查发货单”l IF 发货单金额超过发货单金额超过 500 THEN l lF 欠款超过了欠款超过了 60 天天 THEN l 在偿还欠款前不予批准在偿还欠款前不予批准 l ELSE(欠款未超期)(欠款未超期)l 发批准书,发货单发批准书,发货单 l END IF lELSE (发货单金额未超过(发货单金额未超过 500)l IF 欠款超过欠款超过 60 天天 THEN l 发批准书,发货
21、单及赊欠报告发批准书,发货单及赊欠报告 l ELSE(欠款未超期)(欠款未超期)l 发批准书,发货单发批准书,发货单 l END IF lEND IFPDL 的特性的特性l1)正文正文用严格的程序语言的基本用严格的程序语言的基本控制结构控制结构分割,称为分割,称为“外语法外语法”,如,如 If Then E lse、While DO、Repeat Until、Case of。l2)操作操作用自然语言表示,描述处理特点,称为用自然语言表示,描述处理特点,称为“内语法内语法”。l 3)具有数据说明机制,包括简单的(如纯量和数组)具有数据说明机制,包括简单的(如纯量和数组)与复杂的(如链表或层次的数
22、据结构)数据说明。与复杂的(如链表或层次的数据结构)数据说明。l 4)具有模块定义和调用机制,因此开发人员应根据系)具有模块定义和调用机制,因此开发人员应根据系统编程所用的语种,说明统编程所用的语种,说明PDL 表示的有关程序结构。表示的有关程序结构。例:数据字典中,使用例:数据字典中,使用 PDL 进行数据处进行数据处理的说明理的说明l处理名:核实订票处理处理名:核实订票处理l编号:编号:3.2 l激活条件:收到取订票信息激活条件:收到取订票信息l处理逻辑处理逻辑:1、读订票旅客信息文件、读订票旅客信息文件l 2、搜索此文件中是否有与输入信息中姓名及身份证号相、搜索此文件中是否有与输入信息中
23、姓名及身份证号相符的项目符的项目 l IF 有有 l THEN 判断余项是否与文件中信息相符判断余项是否与文件中信息相符l IF 是是 THEN 输出已订票信息输出已订票信息 l ELSE 输出未订票信息输出未订票信息 l ENDIFl ELSE 输出未订票信息输出未订票信息 l END I Fl执行频率:实时执行频率:实时PDL 优点优点l提供的机制比图形全面,为保证详细设计与编码提供的机制比图形全面,为保证详细设计与编码的质量创造了有利条件。的质量创造了有利条件。l可作为注释嵌入在源程序中一起作为程序的文档,可作为注释嵌入在源程序中一起作为程序的文档,并可同高级程序设计语言一样进行编辑、修
24、改,并可同高级程序设计语言一样进行编辑、修改,有利于软件的维护。有利于软件的维护。l可自动生成程序代码,提高软件生产率。可自动生成程序代码,提高软件生产率。6.3.5 判定树判定树l判定树是判定表的变种,能清晰表示复杂的条件判定树是判定表的变种,能清晰表示复杂的条件组合与操作之间的关系,形式简单,不需要做任组合与操作之间的关系,形式简单,不需要做任何说明,是常见的系统分析工具。何说明,是常见的系统分析工具。l例例1:检查发货单的判定树:检查发货单的判定树“计算行李费计算行李费”的判定树的判定树面向数据流的结构化分析与设计方法总结面向数据流的结构化分析与设计方法总结6.5 程序复杂程度的定量度量
25、程序复杂程度的定量度量l1、软件复杂性、软件复杂性l是软件度量的一个重要分支。主要参数有:是软件度量的一个重要分支。主要参数有:l规模规模:即总共的指令数,或源程序行数。:即总共的指令数,或源程序行数。l难度难度:通常由程序中出现的操作数的数目所决定的量来:通常由程序中出现的操作数的数目所决定的量来表示。表示。l结构结构:通常用与程序结构有关的度量来表示:通常用与程序结构有关的度量来表示l智能度智能度:即算法的难易程度。:即算法的难易程度。2、程序复杂性、程序复杂性l软件复杂性主要表现在程序的复杂性,程序复杂软件复杂性主要表现在程序的复杂性,程序复杂性主要指模块内程序的复杂性。性主要指模块内程
26、序的复杂性。l常见的定量度量软件复杂性的方法有:常见的定量度量软件复杂性的方法有:l代码行度量法代码行度量法lMcCabe度量法:又称环路度量法。度量法:又称环路度量法。lHalstead 的软件科学的软件科学6.5.1 McCabe 方法方法lT.McCabe 的研究:的研究:lMcCabe 方法根据程序控制流的复杂程度定量度方法根据程序控制流的复杂程度定量度量程序复杂程度,这样度量出的结果称为程序的量程序复杂程度,这样度量出的结果称为程序的环形复杂度。环形复杂度。l一个程序的环形复杂度(一个程序的环形复杂度(cyclomatic complexity)取决于它的)取决于它的程序图程序图(流
27、图流图)包含的包含的判定结点的数量。判定结点的数量。1、什么是程序图、什么是程序图l一种简化了的流程图。一种简化了的流程图。程序图程序图(流图流图)仅描绘程序仅描绘程序的控制流程,完全不表现对数据的具体操作以及的控制流程,完全不表现对数据的具体操作以及分支或循环的具体条件。分支或循环的具体条件。l流程图中的各种处理框(如加工框,判断框等),流程图中的各种处理框(如加工框,判断框等),都被简化成用圆圈表示的结点都被简化成用圆圈表示的结点l可由流程图导出码。或其他工具(可由流程图导出码。或其他工具(PAD 图、代图、代码等)变换获得。码等)变换获得。程序图的基本元素程序图的基本元素l符号符号“O”
28、为程序图的为程序图的结点结点,表示一个或多个无,表示一个或多个无分支的语句;分支的语句;l箭头为箭头为边边,表示控制流的方向。,表示控制流的方向。l边和结点圈定的封闭范围叫做区域。边和结点圈定的封闭范围叫做区域。l程序图的基本元素程序图的基本元素l从图论的观点看,它是一个可以用从图论的观点看,它是一个可以用 G=N,E 来表示的有向图。其中:来表示的有向图。其中:lN 一结点;一结点;E 一有向边,指明程序的流程。一有向边,指明程序的流程。l包含条件的结点称为判定结点;包含条件的结点称为判定结点;程序流程图与对应的控制流图程序流程图与对应的控制流图l2、环路复杂性、环路复杂性 V(G)的计算方
29、法)的计算方法l方法一:方法一:V(G)流图中区域流图中区域数(包括图外区域)数(包括图外区域)如右图:如右图:V(G)=4l方法二:方法二:lV(G)判定结点数判定结点数 1l方法三:方法三:l V(G)=E 一一 N+2 E:边数边数lN:结点数结点数l例:例:E=11 lN=9lV(G)=11-9+2=4McCabe 结论结论l环形复杂度反映程序分支数或循环个数。环形复杂度反映程序分支数或循环个数。l环形复杂度高的程序往往是最困难、最容易出问环形复杂度高的程序往往是最困难、最容易出问题的程序。题的程序。l实践表明:模块规模以实践表明:模块规模以 V(G)=10 为宜。为宜。l.用用Jackson图描绘下述的一列火车的构成图描绘下述的一列火车的构成l一列火车有一个火车头,位于列车最前面。火车一列火车有一个火车头,位于列车最前面。火车头即可能是内燃机车也可能是电器机车。车厢分头即可能是内燃机车也可能是电器机车。车厢分为硬座车厢、硬卧车厢和软卧车厢为硬座车厢、硬卧车厢和软卧车厢3种。硬座车种。硬座车厢在所有车厢的前面,软卧车厢在所有车厢的后厢在所有车厢的前面,软卧车厢在所有车厢的后面。此外,在硬卧车厢和软卧车厢之间还有一节面。此外,在硬卧车厢和软卧车厢之间还有一节餐车餐车