1、n教学目标教学目标 掌握常用的详细设计工具、了解人机界面设掌握常用的详细设计工具、了解人机界面设计问题、了解计问题、了解Jackson结构程序设计技术结构程序设计技术。n教学重点教学重点 各种详细设计工具的使用。各种详细设计工具的使用。n教学难点教学难点 Jackson结构结构程序设计技术。程序设计技术。第第6章章 详细设计详细设计详细详细设计设计的基本目的就是回答的基本目的就是回答“详尽、精确地详尽、精确地描述系统各模块的具体实现方法描述系统各模块的具体实现方法”。详细设计的结果基本决定了最终程序代码的质详细设计的结果基本决定了最终程序代码的质量,其中包括:正确性、可读性、效率。量,其中包括
2、:正确性、可读性、效率。第第6章章 详细设计详细设计第第6章章 详细设计详细设计n6.1 结构程序设计结构程序设计n6.2 人机界面设计人机界面设计n6.3 过程设计的工具过程设计的工具n6.4 面向数据结构的设计方法面向数据结构的设计方法n6.5 程序复杂程度的定量度量程序复杂程度的定量度量n6.6 小结及作业小结及作业结构程序设计的经典定义:结构程序设计的经典定义:“如果一个程序的如果一个程序的代码块代码块仅仅通过仅仅通过顺序、选择和循环这顺序、选择和循环这3种基本控种基本控制结构进行连接,并且每个代码块只有一个入口制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化
3、的。和一个出口,则称这个程序是结构化的。”消灭消灭GOTO语句!语句!仅用仅用3种基本结构,称为经典的结构程序设计;种基本结构,称为经典的结构程序设计;若还允许使用若还允许使用DO-CASE(多分支循环)、(多分支循环)、DO-UNTIL(直到型循环),成为扩展结构程序(直到型循环),成为扩展结构程序设计;设计;如果在允许使用如果在允许使用LEAVE(或或BREAK,中断,中断)结结构,则称为修正结构程序设计。构,则称为修正结构程序设计。6.1 结构程序设计结构程序设计6.2 人机界面设计人机界面设计对于交互式系统来说,人机界面设计和数据设对于交互式系统来说,人机界面设计和数据设计、体系结构设
4、计及过程设计一样重要。计、体系结构设计及过程设计一样重要。直接影响用户对软件产品的评价,从而影响软直接影响用户对软件产品的评价,从而影响软件产品的竞争力和寿命。件产品的竞争力和寿命。人机界面目前所占的工作量越来越大。人机界面目前所占的工作量越来越大。固定菜单固定菜单下拉菜单下拉菜单在设计人机界面常会遇到下述在设计人机界面常会遇到下述4 4个问题:个问题:l 系统响应时间系统响应时间l 用户帮助设施用户帮助设施l 出错信息处理出错信息处理l 命令交互命令交互上述问题,最好在设计初期作为重要的设计问题上述问题,最好在设计初期作为重要的设计问题来考虑,这时修改比较容易,代价也低。来考虑,这时修改比较
5、容易,代价也低。6.2.1 设计问题设计问题系统响应时间有两个重要属性,分别是长度和易系统响应时间有两个重要属性,分别是长度和易变性。变性。原则:原则:避免相应时间过长或过短:响应时间过长,会感避免相应时间过长或过短:响应时间过长,会感到沮丧;响应时间过短,会迫使用户加快节奏,会到沮丧;响应时间过短,会迫使用户加快节奏,会犯错。犯错。减少易变性。一般稳定较好,若发生变化,用户减少易变性。一般稳定较好,若发生变化,用户往往比较敏感,担心系统工作出现了异常。往往比较敏感,担心系统工作出现了异常。1.系统响应时间系统响应时间常见的帮助设施可分为常见的帮助设施可分为集成的集成的(根据当前的应用(根据当
6、前的应用进行的帮助)和进行的帮助)和附加的附加的(需查询使用)两类。集成(需查询使用)两类。集成的帮助优于附加的帮助设施。的帮助优于附加的帮助设施。具体设计帮助设施时,必须解决下述的具体设计帮助设施时,必须解决下述的 问题。问题。(1)(1)帮助的程度:全部还是部分;帮助的程度:全部还是部分;(2)(2)如何实现帮助:菜单、功能键和如何实现帮助:菜单、功能键和HELPHELP命令;命令;(3)(3)怎样显示帮助信息:独立窗口、指出参考某怎样显示帮助信息:独立窗口、指出参考某个文档个文档(不理想不理想)、显示简短;、显示简短;(4)(4)使用帮助后,如何返回原交互方式中使用帮助后,如何返回原交互
7、方式中:返回按返回按钮、功能键;钮、功能键;(5)(5)如何组织帮助信息:平面结构、信息的层次如何组织帮助信息:平面结构、信息的层次结构和超文本结构。结构和超文本结构。2.用户帮助设施用户帮助设施交互式系统的出错信息或警告信息,应该具有下交互式系统的出错信息或警告信息,应该具有下述属性:述属性:(1)(1)信息应该使用用户可以理解的术语描述问题;信息应该使用用户可以理解的术语描述问题;(2)(2)信息应该提供有助于从错误中恢复的建设性信息应该提供有助于从错误中恢复的建设性意见;意见;(3)(3)信息应该指出错误可能导致哪些负面后果信息应该指出错误可能导致哪些负面后果(例例如,破坏数据文件如,破
8、坏数据文件);(4)(4)信息应该伴随着听觉上或视觉上的提示,强信息应该伴随着听觉上或视觉上的提示,强化出现异常;化出现异常;(5)(5)信息不能带有指责用户的内容。信息不能带有指责用户的内容。当确实出现了问题的时候,有效的出错信息能提当确实出现了问题的时候,有效的出错信息能提高交互式系统的质量,减轻用户的挫折感。高交互式系统的质量,减轻用户的挫折感。3.出错信息处理出错信息处理在多数情况下,用户既可以从菜单中选择软件功在多数情况下,用户既可以从菜单中选择软件功能,也可以通过键盘命令序列调用软件功能。能,也可以通过键盘命令序列调用软件功能。在提供命令交互方式时,必须考虑下列设计问题:在提供命令
9、交互方式时,必须考虑下列设计问题:(1)(1)是否每个菜单选项都有对应的命令;是否每个菜单选项都有对应的命令;(2)(2)采用何种命令形式:控制序列采用何种命令形式:控制序列(如如Ctrl+P)Ctrl+P)、功能键、键入命令。功能键、键入命令。(3)(3)命令的难度有多大,忘记了命令怎么办;命令的难度有多大,忘记了命令怎么办;(4)(4)用户是否可以定制或缩写命令。用户是否可以定制或缩写命令。4.命令交互命令交互6.3 过程设计的工具过程设计的工具描述程序处理过程的工具称为过程设计的工具。描述程序处理过程的工具称为过程设计的工具。一般有图形、表格和语言一般有图形、表格和语言3 3种。种。6.
10、3.1 程序流程图程序流程图程序流程图的主要缺点如下:程序流程图的主要缺点如下:(1)(1)程序流程图本质上不是逐步求精的好工具,程序流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构。去考虑程序的全局结构。(2)(2)程序流程图中用箭头代表控制流,因此程程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制。的精神,随意转移控制。(3)(3)程序流程图不易表示数据结构。程序流程图不易表示数据结构。6.3.1 程序流程图程
11、序流程图abX1X2X7X6X4X3X5higfedcjFTFFFTTT多分支选多分支选择结构择结构先判定型循先判定型循环结构环结构选择结构选择结构后判定型循环结构后判定型循环结构6.3.2 盒图盒图(N-S图图)顺序结构顺序结构块块1块块2块块3块块4条件条件T FELSETHEN选择结构选择结构Case I=1,2,3T块块1块块2多分支选择结构多分支选择结构F块块3块块当条件成立时当条件成立时当型循环当型循环块块直到条件成立时直到条件成立时直到型循环直到型循环6.3.2 盒图盒图(N-S图图)N-SN-S图。它有下述特点:图。它有下述特点:(1)(1)功能域功能域(即,一个特定控制结构的
12、作用域即,一个特定控制结构的作用域)明确,可以从盒图上一眼就看出来。明确,可以从盒图上一眼就看出来。(2)(2)不可能任意转移控制。不可能任意转移控制。(3)(3)很容易确定局部和全程数据的作用域。很容易确定局部和全程数据的作用域。(4)(4)很容易表现嵌套关系,也可以表示模块的很容易表现嵌套关系,也可以表示模块的层次结构。层次结构。ab条条 件件 1TF Case Xi,i=2,3,4X2X3X4当条件当条件3成立成立条条 件件 2直到条件直到条件4成立成立直直 到到 条条 件件 成立成立cdefghij顺序结构顺序结构选择结构选择结构多分支选择结构多分支选择结构先判定型循环结构先判定型循环
13、结构后判定型循环结构后判定型循环结构FTTFN-SN-S图举例图举例NS图举例6.3.3 PAD图图任务任务1任务任务2任务任务3 顺序结构顺序结构WHILE型条件型条件循环体循环体先判定型循环结构先判定型循环结构条件条件then部分部分else部分部分选择结构选择结构TFUNTIL型条件型条件循环体循环体后判定型循环结构后判定型循环结构控控制制变变量量 任务任务1任务任务2任务任务n多分支选择结构多分支选择结构值值 1值值 2值值 nPADPAD图基本结构图基本结构6.3.3 PAD图图PAD(problem analysis diagramPAD(problem analysis diag
14、ram,问题分析图,问题分析图)自自19731973年由日本日立公司发明以后,已得到一定年由日本日立公司发明以后,已得到一定程度的推广,该图翻译成程序代码比较容易。程度的推广,该图翻译成程序代码比较容易。PADPAD图的主要优点如下:图的主要优点如下:(1)(1)使用表示结构化控制结构的使用表示结构化控制结构的PADPAD符号所设计符号所设计出来的程序必然是结构化程序。出来的程序必然是结构化程序。6.3.3 PAD图图(2)(2)便于描绘程序结构,图中最左面的竖线是便于描绘程序结构,图中最左面的竖线是程序的主线,即第一层结构。程序的主线,即第一层结构。随着程序层次的增加,随着程序层次的增加,P
15、ADPAD图逐渐向右延伸,每图逐渐向右延伸,每增加一个层次,图形向右扩展一条竖线。增加一个层次,图形向右扩展一条竖线。PADPAD图中图中竖线的总条数就是程序的层次数竖线的总条数就是程序的层次数。6.3.3 PAD图图(3)(3)程序从图中最左竖线上端的结点开始执行,程序从图中最左竖线上端的结点开始执行,自上而下,从左向右自上而下,从左向右顺序执行,遍历所有结点,顺序执行,遍历所有结点,易读、易懂、易记。易读、易懂、易记。(4)(4)容易将容易将PADPAD图转换成高级语言源程序,这种图转换成高级语言源程序,这种转换可用软件工具自动完成,从而可省去人工编转换可用软件工具自动完成,从而可省去人工
16、编码的工作,有利于提高软件可靠性和软件生产率。码的工作,有利于提高软件可靠性和软件生产率。(5)(5)即可用于表示程序逻辑,也可用于描绘数即可用于表示程序逻辑,也可用于描绘数据结构。据结构。6.3.3 PAD图图(6)PAD(6)PAD图的符号支持自顶向下、逐步求精方法图的符号支持自顶向下、逐步求精方法的使用。的使用。开始时设计者可以定义一个抽象的程序,随着开始时设计者可以定义一个抽象的程序,随着设计工作的深入而使用设计工作的深入而使用defdef符号逐步增加细节,直符号逐步增加细节,直至完成详细设计,如图所示。至完成详细设计,如图所示。BEGIN FIRST:=K1;SECOND:=0;FI
17、RST=KISECOND=0I:=2 to NKI SECONDKIFIRSTSECOND =FIRSTFIRST=KISECOND =KI ELSE SECOND:=KI END END END.对应对应PADPAD图图FOR I:=2 TO N DO BEGIN IF KISECOND THENBEGIN IF KIFIRSTTHEN BEGIN SECOND:=FIRST;FIRST:=KI ENDPADPAD图应用举例图应用举例PAD图应用举例6.3.4 判定表判定表对于多重嵌套的条件选择,用程序流程图、盒对于多重嵌套的条件选择,用程序流程图、盒图、图、PADPAD图或后面即将介绍的过
18、程设计语言图或后面即将介绍的过程设计语言(PDL)(PDL)都不易清楚地描述。都不易清楚地描述。例如:假设某航空公司规定,乘客可以免费托例如:假设某航空公司规定,乘客可以免费托运重量不超过运重量不超过30kg30kg的行李。当行李重量超过的行李。当行李重量超过30kg30kg时,对头等舱的国内乘客超重部分每公斤收费时,对头等舱的国内乘客超重部分每公斤收费4 4元,元,对其他舱的国内乘客超重部分每公斤收费对其他舱的国内乘客超重部分每公斤收费6 6元,对元,对外国乘客超重部分每公斤收费比国内乘客多一倍,外国乘客超重部分每公斤收费比国内乘客多一倍,对残疾乘客超重部分每公斤收费比正常乘客少一对残疾乘客
19、超重部分每公斤收费比正常乘客少一半。半。利用判定表则可清晰地描述。利用判定表则可清晰地描述。6.3.判定表判定表6.3.5 判定树判定树判定表含义不是一眼就能看出来的。判定表含义不是一眼就能看出来的。PDLPDL(Program Design LanguageProgram Design Language)程序设计语)程序设计语言言,这是一种结构化的语言。是非形式化比较灵活这是一种结构化的语言。是非形式化比较灵活的语言,用于描述模块内部过程的具体算法,以的语言,用于描述模块内部过程的具体算法,以便在开发人员之间比较精确的进行交流。便在开发人员之间比较精确的进行交流。PDLPDL的语法是开放式的
20、,其外层语法是确定的,的语法是开放式的,其外层语法是确定的,而内层语法则不确定。外层语法描述控制结构它而内层语法则不确定。外层语法描述控制结构它用类似于一般程序设计语言控制结构的关键字:用类似于一般程序设计语言控制结构的关键字:IF-THEN-ELSE WHILE-DO REPEAT-UNTILIF-THEN-ELSE WHILE-DO REPEAT-UNTIL DO CASE DO WHILE DO CASE DO WHILE 等表示。等表示。有时还用关键字反排,表示控制结构结束:有时还用关键字反排,表示控制结构结束:DO-OD IF-FIDO-OD IF-FI6.3.6 过程设计语言过程设
21、计语言 PDL例如:例如:if X is not negativeif X is not negative then then return(square root of X as a real number);return(square root of X as a real number);else else return(square root of-X as an imaginary return(square root of-X as an imaginary number);number);外层语法外层语法IF-THEN-ELSEIF-THEN-ELSE是确定的,内层操作是确定的,
22、内层操作“square square root of X root of X”是不确定的。是不确定的。6.4 面向数据结构的设计方法面向数据结构的设计方法面向数据结构的设计方法是按输入和输出以面向数据结构的设计方法是按输入和输出以及内部存储信息的数据结构进行设计及内部存储信息的数据结构进行设计,然后再把然后再把数据结构的描述变换为对软件结构的描述。数据结构的描述变换为对软件结构的描述。JacksonJackson方法和方法和WarnierWarnier方法是最著名的两个方法是最著名的两个面向数据结构的设计方法,本节结合一个简单例面向数据结构的设计方法,本节结合一个简单例子扼要地介绍子扼要地介绍
23、JacksonJackson方法,目的是使读者对面方法,目的是使读者对面向数据结构的设计方法有初步了解。向数据结构的设计方法有初步了解。29主要适用主要适用范范 围围面向数据结构的设计面向数据结构的设计最终目标最终目标工作基础工作基础面向数据流的设计面向数据流的设计设计方法设计方法 在详细设计阶段确定部分在详细设计阶段确定部分或全部模块的逻辑过程。或全部模块的逻辑过程。在概要设计阶段用在概要设计阶段用SD方法确方法确定软件的结构。定软件的结构。以数据结构以数据结构 为基础。为基础。从问从问题的数据结构出发题的数据结构出发导出它的程导出它的程序结构序结构。以数据流图为基础。在分析阶以数据流图为基
24、础。在分析阶段用段用DFD表示软件的逻辑模型,表示软件的逻辑模型,在设计阶段按数据流类型,将在设计阶段按数据流类型,将数数据流图据流图转换为软件结构。转换为软件结构。两种方法的共同点:两种方法的共同点:1.遵循遵循“由顶向下、逐步细化由顶向下、逐步细化”的原则;的原则;2.服从服从“程序结构必须适应问题结构程序结构必须适应问题结构”的原则。的原则。程序的过程性描述。程序的过程性描述。软件的最终软件的最终SC图图面向数据结构的设计与面向数据流的设计的异同面向数据结构的设计与面向数据流的设计的异同JacksonJackson图是作为图是作为JacksonJackson方法配套使用的表达方法配套使用
25、的表达工具,可以作为需求分析和程序设计阶段的表达工具,可以作为需求分析和程序设计阶段的表达工具。工具。JacksonJackson图的优点:图的优点:便于表示层次结构便于表示层次结构,是对结构进行自顶向下分解是对结构进行自顶向下分解的有力工具;的有力工具;形象直观形象直观,可读性好;可读性好;既能表达程序的结构既能表达程序的结构,也可表达问题的数据结构。也可表达问题的数据结构。6.4.1 Jackson图图31重复结构重复结构选择结构选择结构ABCAB0C0AB*ABCAB0C0sAB*I A由由B、C两部分顺序两部分顺序组成组成 A可以包含可以包含B或或C(S代表选择代表选择)A由由B重复任
26、意次重复任意次(含含零次零次)构成构成(I 代表重复代表重复)注:改进的注:改进的Jackson图规定顺序执行的处理中不许混有选择执行和重复执行。图规定顺序执行的处理中不许混有选择执行和重复执行。顺序结构顺序结构JacksonJackson图表达符号图表达符号JacksonJackson图是层次图的一种精化,两者的图形类图是层次图的一种精化,两者的图形类似,但有着许多区别,表现在:似,但有着许多区别,表现在:层次图主要描绘软件结构层次图主要描绘软件结构,而而JacksonJackson图除描绘图除描绘软件结构外软件结构外,也能描绘数据结构;也能描绘数据结构;层次图中的一个方框代表一个模块层次图
27、中的一个方框代表一个模块,而而JacksonJackson图即使在描绘程序结构时图即使在描绘程序结构时,一个方框也不表示一个一个方框也不表示一个模块模块,而只代表几个语句;而只代表几个语句;层次图表现的是调用关系层次图表现的是调用关系,通常一个模块除了调通常一个模块除了调用下级模块外还完成其它操作;而用下级模块外还完成其它操作;而JacksonJackson图表现图表现的是组织关系,的是组织关系,一个方框中包括的操作仅仅由它下层框中的哪一个方框中包括的操作仅仅由它下层框中的哪些操作组成。些操作组成。Jackson图与层次图的区别图与层次图的区别JacksonJackson图中三种结构对应的伪代
28、码如下图中三种结构对应的伪代码如下(凡带下划线的凡带下划线的字均为关键字字均为关键字)Jackson伪代码伪代码重复结构伪代码重复结构伪代码选择结构伪代码选择结构伪代码 A seq B C end A A select cond1 B or cond2 C end AABCAB0C0SAB*I untilA iter cond while Bend A顺序结构伪代码顺序结构伪代码姓名姓名类别类别津贴津贴表头表头表体表体教职工名册教职工名册6.4.1 Jackson图图名册名册栏名行栏名行表名行表名行表头表头表体表体行行*姓名姓名类别类别津贴津贴工龄津贴工龄津贴0教龄津贴教龄津贴0IS6.4.1
29、 Jackson图图产生名册文件产生名册文件产生栏名行产生栏名行产生表名行产生表名行产生表头产生表头产生表体产生表体产生行产生行*产生姓名产生姓名产生类别产生类别产生津贴产生津贴产生工龄津贴产生工龄津贴0产生教龄津贴产生教龄津贴0SI6.4.1 Jackson图图程序分析程序分析详细设计详细设计结构设计结构设计程序设计程序设计JacksonJackson方法方法映射映射数据结构数据结构(Jackson(Jackson图图)程序结构程序结构(Jackson(Jackson图图)程序的过程描述程序的过程描述(Jackson(Jackson伪代码伪代码)SDSD方法方法映射映射问题结构问题结构(DF
30、D)(DFD)软件结构软件结构(SC(SC图图)模块的过程表示模块的过程表示(PDL(PDL等工具等工具)6.4.2 Jackson方法方法JacksonJackson方法的步骤方法的步骤 1.1.分析并确定输入数据和输出数据的逻辑结构分析并确定输入数据和输出数据的逻辑结构,用用JacksonJackson图描绘这些数据结构。图描绘这些数据结构。实质是对求解的问题进行需求分析。实质是对求解的问题进行需求分析。用用JacksonJackson图表示数据结构时图表示数据结构时,省略与解题无关的多省略与解题无关的多余信息余信息,仅保留需要用到的数据单元。仅保留需要用到的数据单元。2.2.找出输入数据
31、结构和输出数据结构中有对应关找出输入数据结构和输出数据结构中有对应关系的数据单元系的数据单元(即有因果关系即有因果关系,在程序中可以同在程序中可以同时处理的数据单元时处理的数据单元),按照下列映射规则,按照下列映射规则,导导出描绘程序结构的出描绘程序结构的JacksonJackson图。图。6.4.2 Jackson方法方法(1)(1)为每一对在输入结构和输出结构中有对应关系为每一对在输入结构和输出结构中有对应关系的单元画一个处理框;的单元画一个处理框;(2)(2)为输入数据结构中每一剩余的数据单元画一个为输入数据结构中每一剩余的数据单元画一个处理框;处理框;(3)(3)为输出数据结构中每一剩
32、余的数据单元画一个为输出数据结构中每一剩余的数据单元画一个处理框;处理框;(4)(4)所有处理框在程序结构上的位置所有处理框在程序结构上的位置,应与由它处应与由它处理的数据单元在数据结构理的数据单元在数据结构JacksonJackson图上的位置相图上的位置相对应对应(程序中具有因果关系程序中具有因果关系)。6.4.2 Jackson方法方法3.3.写出程序的过程性表示写出程序的过程性表示:列出所有操作和条件,列出所有操作和条件,并把它们分配并把它们分配 到程序结构图的适当位置。到程序结构图的适当位置。4.4.用用JacksonJackson伪代码写出与程序结构图对应的过程伪代码写出与程序结构
33、图对应的过程性表示。性表示。6.4.2 Jackson方法方法例例:有两个输入文件有两个输入文件:考生基本情况文件考生基本情况文件(简称考生情况文件简称考生情况文件)和考生和考生 高考成绩文件高考成绩文件(简称考分文件简称考分文件)如下如下:考生情况文件考生情况文件 考分文件考分文件通讯地址通讯地址姓姓 名名准考证号准考证号考考 分分准考证号准考证号 产生输出文件产生输出文件:考生新文件考生新文件 通讯地址通讯地址考考 分分姓姓 名名准考证号准考证号 试用试用JacksonJackson方法完成下列工作方法完成下列工作 (1)(1)用用JacksonJackson图表示输入与输出结构,找出它们
34、之间的对应单元;图表示输入与输出结构,找出它们之间的对应单元;(2)(2)画出用画出用JacksonJackson图表示的程序结构;图表示的程序结构;(3)(3)列出程序所需要的操作,并加到上一步画出的程序结构图上;列出程序所需要的操作,并加到上一步画出的程序结构图上;(4)(4)用用JacksonJackson伪代码写出与程序结构图对应的过程性表示。伪代码写出与程序结构图对应的过程性表示。(1)(1)输入结构输入结构考生情况文件考生情况文件通讯地址通讯地址姓姓 名名准考证号准考证号考生情况文件考生情况文件考分文件考分文件考考 分分准考证号准考证号输出结构输出结构通讯地址通讯地址姓姓 名名准考
35、证号准考证号考考 分分考生记录考生记录I I考生记录考生记录I I考生记录考生记录I I43 输入结构与输出结构中对应的数据单元输入结构与输出结构中对应的数据单元产生新文件产生新文件(2)(2)程序结构图程序结构图产生通讯地址产生通讯地址产生姓名产生姓名产生准考证号产生准考证号产生考分产生考分考生情况文件考生情况文件考生记录考生记录通讯通讯地址地址姓名姓名准考准考证号证号I I处理考生记录处理考生记录I I考生新文件考生新文件考分考分通讯通讯地址地址姓名姓名准考准考证号证号考生记录考生记录I I考分文件考分文件考生记录考生记录I I考分考分准考准考证号证号(3)(3)列出程序所需用的操作,并加
36、到上一步画出的程序结构图上列出程序所需用的操作,并加到上一步画出的程序结构图上I(1)I(1)将新记录写入输出文件;将新记录写入输出文件;建立输出文件;建立输出文件;I(1)I(1)文件结束文件结束生成一条新记录;生成一条新记录;打开两个输入文件;打开两个输入文件;关闭全部文件;关闭全部文件;从输入文件中各读一条记录从输入文件中各读一条记录停止;停止;分析考生记录分析考生记录产生新文件产生新文件处理考生记录处理考生记录产生通讯地址产生通讯地址产生姓名产生姓名产生准考证号产生准考证号产生考分产生考分1 14 46 65 57 74 43 32 2 产生新文件产生新文件 seqseq 打开两个输入
37、文件打开两个输入文件 建立输出文件建立输出文件 从输入文件中各读一条记录从输入文件中各读一条记录 分析考生记录分析考生记录iter untiliter until文件结束文件结束 处理考生记录处理考生记录 seqseq 产生准靠证号产生准靠证号 产生姓名产生姓名 产生通讯地址产生通讯地址 产生考分产生考分 生成一条新记录生成一条新记录 将新记录写入输出文件将新记录写入输出文件 从输入文件中各读一条记录从输入文件中各读一条记录 处理考生记录处理考生记录 endend 关闭全部文件关闭全部文件 停止停止 产生新文件产生新文件 endend(4)(4)用用JacksonJackson伪代码写出上述程
38、序的过程表示。伪代码写出上述程序的过程表示。6.5 程序复杂程度的定量度量程序复杂程度的定量度量定性度量软件质量定性度量软件质量软件软件设计基本原理设计基本原理;定量度量软件质量定量度量软件质量程序复杂度是一种方法。程序复杂度是一种方法。定量度量程序复杂程度的方法的意义:定量度量程序复杂程度的方法的意义:l 程序的复杂程度乘以适当常数:估算软件中错程序的复杂程度乘以适当常数:估算软件中错误的数量、软件开发需要用的工作量;误的数量、软件开发需要用的工作量;l 可用来比较不同的设计或不同算法的优劣;可用来比较不同的设计或不同算法的优劣;l 定量的复杂程度可以作为模块规模的精确限度。定量的复杂程度可
39、以作为模块规模的精确限度。下面着重介绍使用得比较广泛的下面着重介绍使用得比较广泛的McCabeMcCabe方法和方法和H Halsteadalstead方法。方法。1.流图流图McCabeMcCabe方法根据方法根据程序控制流程序控制流的复杂程度定量度的复杂程度定量度量程序的复杂程度量程序的复杂程度程序的环形复杂度程序的环形复杂度。流图流图程序图,实质是程序图,实质是“退化了的退化了的”程序流程序流程图,仅描绘程序的控制流程。程图,仅描绘程序的控制流程。在流图中用圆表示在流图中用圆表示结点结点,一个圆代表一条或多,一个圆代表一条或多条语句。条语句。程序流程图中的一个顺序的处理框序列和一个程序流
40、程图中的一个顺序的处理框序列和一个菱形判定框,可以映射成流图中的一个结点菱形判定框,可以映射成流图中的一个结点。6.5.1 McCabe方法方法1.流图流图流图中的箭头线称为流图中的箭头线称为边边,代表控制流,终止于,代表控制流,终止于一个结点。一个结点。由边和结点围成的面积称为由边和结点围成的面积称为区域区域,当,当计算区域计算区域数数时应该包括图外部未被围起来的那个区域。时应该包括图外部未被围起来的那个区域。图图6.15所示。所示。6.5.1 McCabe方法方法6.5.1 McCabe方法方法图图6.15程序流程图映射成流图程序流程图映射成流图用任何方法表示的过程设计结果,都可以翻译用任
41、何方法表示的过程设计结果,都可以翻译成流图。成流图。图图6.16是用是用PDL表示的处理过程及与之对应的流表示的处理过程及与之对应的流图。图。6.5.1 McCabe方法方法图图6.16 由由PDL翻译成的流图翻译成的流图当过程设计中包含复合条件时,生成流图的方当过程设计中包含复合条件时,生成流图的方法稍微复杂一些。所谓复合条件,就是在条件中法稍微复杂一些。所谓复合条件,就是在条件中包含了一个或多个布尔运算符包含了一个或多个布尔运算符(逻辑逻辑OROR,ANDAND,NANNAND D,NOR)NOR)。在这种情况下,应该把复合条件分解为若干个在这种情况下,应该把复合条件分解为若干个简单条件,
42、每个简单条件对应流图中一个结点。简单条件,每个简单条件对应流图中一个结点。包含条件的结点称为判定节点,从每个判定结包含条件的结点称为判定节点,从每个判定结点引出两条或多条边。图点引出两条或多条边。图6.176.17是由包含复合条件是由包含复合条件的的PDLPDL片断翻译成的流图。片断翻译成的流图。6.5.1 McCabe方法方法图图6.17 由包含复合条件的由包含复合条件的PDL映射成的流图映射成的流图2.计算环形复杂度的方法计算环形复杂度的方法环形复杂度定量度量程序的逻辑复杂度。环形复杂度定量度量程序的逻辑复杂度。利用流图,可以用下述利用流图,可以用下述3 3种方法中的任何一种来种方法中的任
43、何一种来计算环形复杂度。计算环形复杂度。(1)(1)流图中的区域数等于环形复杂度。流图中的区域数等于环形复杂度。(2)(2)流图流图G G的环形复杂度的环形复杂度V(G)=E-N+2,V(G)=E-N+2,其中,其中,E E是是流图中边的条数,流图中边的条数,N N是结点数。是结点数。(3)(3)流图流图G G的环形复杂度的环形复杂度V(G)=P+1V(G)=P+1,其中,其中,P P是是流图中判定结点的数目。流图中判定结点的数目。6.5.1 McCabe方法方法(1)(1)流图中的区域数等于环形复杂度;流图中的区域数等于环形复杂度;V(G)=4V(G)=4(2)(2)流图流图G G的环形复杂
44、度的环形复杂度V(G)=E-N+2,V(G)=E-N+2,其中,其中,E E是流是流图中边的条数,图中边的条数,N N是结点数;是结点数;E=11,N=9,V(G)=4E=11,N=9,V(G)=4(3)(3)流图流图G G的环形复杂度的环形复杂度V(G)=P+1V(G)=P+1,其中,其中,P P是流是流图中判定结点的数目图中判定结点的数目;P=3,V(G)=4;P=3,V(G)=4。3.环形复杂度的用途环形复杂度的用途程序的环形复杂度取决于程序控制流的复杂程程序的环形复杂度取决于程序控制流的复杂程度,也即是取决于程序结构的复杂程度。度,也即是取决于程序结构的复杂程度。当程序内分支数或循环个
45、数增加时,环形复杂当程序内分支数或循环个数增加时,环形复杂度也随之增加,因此它是对测试难度的一种定量度也随之增加,因此它是对测试难度的一种定量度量,也能对软件最终的可靠性给出某种预测。度量,也能对软件最终的可靠性给出某种预测。McCabeMcCabe研究大量程序后发现,环形复杂度高的研究大量程序后发现,环形复杂度高的程序往往是最困难、最容易出问题的程序。实践程序往往是最困难、最容易出问题的程序。实践表明,模块规模以表明,模块规模以V(G)10V(G)10为宜,也就是说,为宜,也就是说,V(G)V(G)=10=10是模块规模的一个更科学更精确的上限。是模块规模的一个更科学更精确的上限。6.5.1
46、 McCabe方法方法Halstead方法是根据程序中运算符和操作数的总方法是根据程序中运算符和操作数的总数来度量程序的复杂程度。数来度量程序的复杂程度。令令N1为程序中运算符出现的总次数,为程序中运算符出现的总次数,N2为操作为操作数出现的总次数,程序长度数出现的总次数,程序长度N定义为:定义为:N=N1+N2。详细设计完成之后,可以知道程序中使用的不详细设计完成之后,可以知道程序中使用的不同运算符同运算符(包括关键字包括关键字)的个数的个数n1,以及不同操作数,以及不同操作数(变量和常数变量和常数)的个数的个数n2。Halstead给出预测程序长给出预测程序长度的公式如下:度的公式如下:H
47、=n1log2 n1+n2 log2n2多次验证都表明,预测的长度多次验证都表明,预测的长度H与实际长度与实际长度N非非常接近。常接近。6.5.2 Halstead方法方法Halstead还给出了预测程序中包含错误的个数的还给出了预测程序中包含错误的个数的公式如下:公式如下:E=N log2(n1+n2)/3000有人曾对从有人曾对从300条到条到12000条语句范围内的程序条语句范围内的程序核实了上述公式,发现预测的错误数与实际错误核实了上述公式,发现预测的错误数与实际错误数相比误差在数相比误差在8%之内。之内。6.5.2 Halstead方法方法详细设计阶段的关键任务是确定怎样具体地实详细
48、设计阶段的关键任务是确定怎样具体地实现用户需要的软件系统现用户需要的软件系统,以便将来编写出的程序:以便将来编写出的程序:l 可读性好可读性好l 容易理解容易理解l 容易测试容易测试l 容易修改和维护容易修改和维护是详细设计阶段最重要的目标。是详细设计阶段最重要的目标。结构化设计可以帮助人们实现上述目标。结构化设计可以帮助人们实现上述目标。6.6 小结小结人机界面设计是接口设计的一个重要的组成部人机界面设计是接口设计的一个重要的组成部分。人机界面的质量直接影响用户对软件产品的分。人机界面的质量直接影响用户对软件产品的接受程度。接受程度。人机界面设计是一个迭代过程。人机界面设计是一个迭代过程。过
49、程设计应该在数据设计、体系结构设计和接过程设计应该在数据设计、体系结构设计和接口设计完成之后进行,它的任务是设计解题的详口设计完成之后进行,它的任务是设计解题的详细步骤细步骤(即算法即算法),它是详细设计阶段应完成的主,它是详细设计阶段应完成的主要工作。要工作。过程设计的工具可分为图形、表格和语言过程设计的工具可分为图形、表格和语言3 3类,类,这这3 3类工具各有所长,读者应该能够根据需要选用类工具各有所长,读者应该能够根据需要选用适当的工具。适当的工具。6.6 小结小结当应用领域中信息有清楚的层次结构,可采用当应用领域中信息有清楚的层次结构,可采用面向数据结构的设计方法完成过程设计。面向数据结构的设计方法完成过程设计。例如例如JacksonJackson结构程序设计技术。结构程序设计技术。使用环形复杂度可以定量度量程序的复杂程度,使用环形复杂度可以定量度量程序的复杂程度,实践表明,环形复杂度实践表明,环形复杂度V(G)=10V(G)=10是模块规模的合理是模块规模的合理上限。上限。6.6 小结及作业小结及作业