1、11/11/20221教学内容教学内容 详细设计的目的、原则、过程;详细设计说明详细设计的目的、原则、过程;详细设计说明书;详细设计工具;结构化程序设计方法;面向数据书;详细设计工具;结构化程序设计方法;面向数据结构的设计方法;环形复杂度的度量方法和文本复杂结构的设计方法;环形复杂度的度量方法和文本复杂度的度量方法;人度的度量方法;人-机界面设计要点。机界面设计要点。教学要求教学要求 1 1熟练掌握:详细设计工具,包括图形工具熟练掌握:详细设计工具,包括图形工具(程序流程图、(程序流程图、N-SN-S图和图和PADPAD图)、表格工具(判定表图)、表格工具(判定表和判定树)、语言工具(和判定树
2、)、语言工具(PDLPDL语言);结构化程序设语言);结构化程序设计方法;环形复杂度的度量方法。计方法;环形复杂度的度量方法。2 2一般掌握:详细设计的目的、原则、过程;一般掌握:详细设计的目的、原则、过程;人人-机界面设计的要求与设计、实现原则。机界面设计的要求与设计、实现原则。3 3了解:详细设计文档;面向数据结构的设计了解:详细设计文档;面向数据结构的设计方法;文本复杂度的度量方法。方法;文本复杂度的度量方法。11/11/202221 1详细设计详细设计(过程设计过程设计)目的目的 目的是为系统结构图中的目的是为系统结构图中的每一个模块每一个模块确定采用确定采用的的算法算法和块内和块内数
3、据流图数据流图,用某种选定的表达工具给,用某种选定的表达工具给出清晰的描述,使程序员可以将这种描述直接翻译出清晰的描述,使程序员可以将这种描述直接翻译为某种语言程序。为某种语言程序。2 2详细设计的原则详细设计的原则 为了能够使模块的逻辑描述清晰准确,在详细为了能够使模块的逻辑描述清晰准确,在详细设计阶段应遵循下列原则。设计阶段应遵循下列原则。(1)(1)将保证程序的清晰度放在首位将保证程序的清晰度放在首位 (2)(2)设计过程中应采用逐步细化的实现方法设计过程中应采用逐步细化的实现方法 (3)(3)选择适当的表达工具选择适当的表达工具 11/11/20223 3 3详细设计的过程详细设计的过
4、程 (1 1)为每个模块确定采用的算法,并用适当的工)为每个模块确定采用的算法,并用适当的工具表达算法的过程,给出详细的描述;具表达算法的过程,给出详细的描述;(2 2)确定每一模块使用的数据结构和模块接口的)确定每一模块使用的数据结构和模块接口的细节,包括内部接口、外部接口、模块的输入、输出细节,包括内部接口、外部接口、模块的输入、输出及局部数据等;及局部数据等;(3 3)为每个模块设计一组测试用例,以便在编码)为每个模块设计一组测试用例,以便在编码阶段对模块代码进行预定的测试;阶段对模块代码进行预定的测试;(4 4)编写详细设计说明书,提交复审。)编写详细设计说明书,提交复审。11/11/
5、20224 4 4详细设计说明书详细设计说明书 (1)(1)引言:用于说明编写本说明书的目的、背景,引言:用于说明编写本说明书的目的、背景,定义所用到的术语和缩略语,以及列出文档中所引用定义所用到的术语和缩略语,以及列出文档中所引用的参考资料等。的参考资料等。(2)(2)总体设计:用于给出软件系统的体系结构图。总体设计:用于给出软件系统的体系结构图。(3)(3)模块描述:依次对各个模块进行详细的描述,模块描述:依次对各个模块进行详细的描述,主要包括模块的功能和性能、实现模块功能的算法、主要包括模块的功能和性能、实现模块功能的算法、模块的输入及输出、模块接口的详细信息等。模块的输入及输出、模块接
6、口的详细信息等。参见参见GB8567-2006GB8567-2006计算机软件文档编制规范。计算机软件文档编制规范。11/11/20225 描述程序处理过程的工具称为过程设计工具,它描述程序处理过程的工具称为过程设计工具,它们可以分为图形、表格和语言三类。们可以分为图形、表格和语言三类。1 1图形工具:包括程序流程图、图形工具:包括程序流程图、N-SN-S图和图和PADPAD图;图;2 2表格工具:包括判定表和判定树;表格工具:包括判定表和判定树;3 3语言工具:包括语言工具:包括PDLPDL语言。语言。11/11/20226 程序流程图也称为程序框图,它是历史最悠久、程序流程图也称为程序框图
7、,它是历史最悠久、使用最广泛的一种描述程序逻辑结构的工具。使用最广泛的一种描述程序逻辑结构的工具。1 1)程序流程图的符号和表示方式)程序流程图的符号和表示方式 程序流程图常用的基本符号如图所示。程序流程图常用的基本符号如图所示。11/11/20227用程序流程图表达的三种基本控制结构如图所示。用程序流程图表达的三种基本控制结构如图所示。11/11/202282 2)程序流程图的实例)程序流程图的实例例:求一组数中的最大值,画出程序流程图。例:求一组数中的最大值,画出程序流程图。将这组数存于一个数组将这组数存于一个数组A A中,用语言描述其计算过程:中,用语言描述其计算过程:(1 1)输入一个
8、数组)输入一个数组A A,元素个数为元素个数为N N;(2 2)令最大数令最大数MAX=AMAX=A(1 1)()(数组中的第数组中的第1 1元素);元素);(3 3)从)从A A(2 2)至)至A A(N N)()(即第即第2 2个元素至最末一个元素)个元素至最末一个元素)依次与最大数依次与最大数MAXMAX进行比较;进行比较;(4 4)如新元素)如新元素MAXMAX,则,则MAX=MAX=新元素;新元素;(5 5)输出最大数)输出最大数MAXMAX。11/11/20229用程序流程图来描述这一算法的过程,结果如图所示。用程序流程图来描述这一算法的过程,结果如图所示。图图7-3 用程序流程图
9、描述的求最大值的算法用程序流程图描述的求最大值的算法11/11/202210 3 3)程序流程图的优缺点)程序流程图的优缺点优点:比较直观、清晰,使用灵活,便于阅读和掌握。优点:比较直观、清晰,使用灵活,便于阅读和掌握。缺点:缺点:可以随心所欲地画控制流程线的流向,容易造成非结构可以随心所欲地画控制流程线的流向,容易造成非结构化的程序结构,编码时势必不加限制地使用化的程序结构,编码时势必不加限制地使用GOTOGOTO语句,导致基语句,导致基本控制块多入口多出口,这样会使系统质量受到影响,与系统本控制块多入口多出口,这样会使系统质量受到影响,与系统设计的原则相违背;设计的原则相违背;程序流程图本
10、质上不支持逐步求精,它使程序员容易过程序流程图本质上不支持逐步求精,它使程序员容易过早地考虑程序的具体控制流程,而忽略了程序的全局结构;早地考虑程序的具体控制流程,而忽略了程序的全局结构;程序流程图难以表示系统中的数据结构;程序流程图难以表示系统中的数据结构;对于大型系统而言,程序流程图描述过于琐碎,不容易对于大型系统而言,程序流程图描述过于琐碎,不容易阅读和修改。阅读和修改。为了克服程序流程图的缺陷,要求程序流程图都应由三种为了克服程序流程图的缺陷,要求程序流程图都应由三种基本控制结构顺序组合和完整嵌套而成,不能有相互交叉的情基本控制结构顺序组合和完整嵌套而成,不能有相互交叉的情况,这样的程
11、序流程图才是结构化的程序流程图。况,这样的程序流程图才是结构化的程序流程图。11/11/202211 盒图(盒图(N-SN-S图)是由图)是由NassiNassi和和ShneidermanShneiderman 按照结按照结构化的程序设计要求提出的描述一种图形算法工具。构化的程序设计要求提出的描述一种图形算法工具。1 1)盒图的表示方式)盒图的表示方式 用盒图表达的三种基本控制结构如图所示。用盒图表达的三种基本控制结构如图所示。11/11/202212 2 2)盒图的实例)盒图的实例 以前面求一组数中最大值的算法为例,如用盒图以前面求一组数中最大值的算法为例,如用盒图描述,结果如图描述,结果如
12、图7-57-5所示。所示。11/11/202213 3 3)盒图的优缺点)盒图的优缺点 盒图有如下一些优点:盒图有如下一些优点:所有的程序结构均用方框来表示,无论并列所有的程序结构均用方框来表示,无论并列或者嵌套,程序的结构清晰可见;或者嵌套,程序的结构清晰可见;它的控制转移不能任意规定,必须遵守结构它的控制转移不能任意规定,必须遵守结构化程序设计的要求;化程序设计的要求;很容易确定局部和全程数据的作用域;很容易确定局部和全程数据的作用域;很容易表现嵌套关系,也可以表示模块的层很容易表现嵌套关系,也可以表示模块的层次结构。次结构。盒图不足的是,当程序内嵌套的层数增多时,内盒图不足的是,当程序内
13、嵌套的层数增多时,内层的方块越画越小,不仅会增加画图的困难,并将使层的方块越画越小,不仅会增加画图的困难,并将使图形的清晰性受到影响;当需要对设计进行修改时,图形的清晰性受到影响;当需要对设计进行修改时,盒图的修改工作量会很大。盒图的修改工作量会很大。11/11/202214PAD(Problem Analysis Diagram)-PAD(Problem Analysis Diagram)-问题分析图问题分析图PADPAD图的基本原理是:采用自顶向下、逐步细化和结构设图的基本原理是:采用自顶向下、逐步细化和结构设计的原则,将模糊的问题解的概念逐步转换为确定的计的原则,将模糊的问题解的概念逐步
14、转换为确定的和详尽的过程,使之最终可采用计算机直接进行处理。和详尽的过程,使之最终可采用计算机直接进行处理。1 1)PADPAD图的表示方式图的表示方式 用用PADPAD图表达的三种基本控制结构如图所示。图表达的三种基本控制结构如图所示。11/11/2022152)PAD2)PAD图的实例图的实例 以前面求一组数中最大值的算法为例,如用以前面求一组数中最大值的算法为例,如用PADPAD图图来描述,结果如图所示。来描述,结果如图所示。11/11/202216 3 3)PADPAD图的优缺点图的优缺点PADPAD图的主要优点如下:图的主要优点如下:支持自顶向下,逐步求精的要求;支持自顶向下,逐步求
15、精的要求;PADPAD图满足结构化程序设计要求,因此采用图满足结构化程序设计要求,因此采用PADPAD图导出的程序必然是结构化的;图导出的程序必然是结构化的;PADPAD图描述的算法结构清晰、易读易懂、使用图描述的算法结构清晰、易读易懂、使用方便。图中每条竖线表示一个嵌套层次,图示随层次方便。图中每条竖线表示一个嵌套层次,图示随层次增加向右伸展;增加向右伸展;PADPAD图既可以描述控制,也可以描述数据结构,图既可以描述控制,也可以描述数据结构,很容易将很容易将PADPAD图描述的算法转换为源程序代码;图描述的算法转换为源程序代码;可自动生成程序。可自动生成程序。与程序流程图和盒图相比,与程序
16、流程图和盒图相比,PADPAD图的使用不是很普遍。图的使用不是很普遍。11/11/202217l下面分别使用程序流程下面分别使用程序流程图、盒图和图、盒图和PADPAD图来表图来表达计算应发工资模块的达计算应发工资模块的算法过程,结果如图所算法过程,结果如图所示。示。(a a)采用程序流程图描述计算应发工资模块采用程序流程图描述计算应发工资模块11/11/202218 (b)b)采用采用N NS S图描述计算应发工资模块图描述计算应发工资模块 (c)c)采用采用PADPAD图描述计算应发工资模块图描述计算应发工资模块 图图7-8 7-8 三种详细设计中使用的图形工具示例三种详细设计中使用的图形
17、工具示例 11/11/202219l请分别用判定表和判定树工具来描述某单位工资档案请分别用判定表和判定树工具来描述某单位工资档案管理系统中管理系统中“职务津贴计算职务津贴计算”加工逻辑过程。加工逻辑过程。l假定职工的职称只分为助工、工程师和高工三种,保假定职工的职称只分为助工、工程师和高工三种,保低津贴分别是低津贴分别是350350、400400、500500元,并且单位根据职工的元,并且单位根据职工的工作年限给予津贴适当的上浮奖励,具体上浮情况如工作年限给予津贴适当的上浮奖励,具体上浮情况如下:无论助工、工程师和高工工作年限在下:无论助工、工程师和高工工作年限在1010年以下的年以下的无浮动
18、;对于在单位工作超过无浮动;对于在单位工作超过1010年但不到年但不到2020年的职工,年的职工,助工、工程师津贴上浮助工、工程师津贴上浮20%20%,高工上浮,高工上浮30%30%;对于在单;对于在单位工作超过位工作超过2020年的职工,助工津贴上浮年的职工,助工津贴上浮30%30%,工程师津,工程师津贴上浮贴上浮35%35%,高工上浮,高工上浮40%40%。11/11/202220对应的判定表如表对应的判定表如表7-17-1所示所示 。11/11/202221对应的判定树如图对应的判定树如图7-97-9所示。所示。11/11/202222 PDLPDL语言即过程设计语言语言即过程设计语言(
19、Process Design Language)(Process Design Language),是是一种用于描述程序算法和定义数据结构的伪码设计语言。一种用于描述程序算法和定义数据结构的伪码设计语言。1 1)PDLPDL的构成的构成 PDLPDL是一种是一种“混杂混杂”语言,它使用一种语言(通常是某种语言,它使用一种语言(通常是某种自然语言)的词汇来表示实际操作,同时却使用另一种语言自然语言)的词汇来表示实际操作,同时却使用另一种语言(某种结构化的程序设计语言)的语法来定义控制结构和数据(某种结构化的程序设计语言)的语法来定义控制结构和数据结构。自然语言的采用使算法的描述灵活自由、清晰易懂
20、,结结构。自然语言的采用使算法的描述灵活自由、清晰易懂,结构化程序设计语言的采用使控制结构的表达具有固定的形式且构化程序设计语言的采用使控制结构的表达具有固定的形式且符合结构化设计的思想。符合结构化设计的思想。PDLPDL语言的构成与用于描述加工的结构化语言相似但又有语言的构成与用于描述加工的结构化语言相似但又有区别,区别,主要区别在于:由于主要区别在于:由于PDLPDL语言表达的算法是编码的直接依语言表达的算法是编码的直接依据,因此其语法结构更加严格并且处理过程描述更加具体详细。据,因此其语法结构更加严格并且处理过程描述更加具体详细。11/11/202223 2 2)PDLPDL的实例的实例
21、 前面求一组数中最大值的过程如果用前面求一组数中最大值的过程如果用PDLPDL语言描述,语言描述,结果如下结果如下:INPUT ARRAY A INPUT ARRAY A MAX=A(1)MAX=A(1)DO FOR I=2 TO N DO FOR I=2 TO N IF MAXA(I)IF MAXO THEN A1 ELSE A2 END IF;IF A O THEN A1 ELSE A2 END IF;S1;S1;IF B0 THEN B1;IF B0 THEN B1;WHILE C DO S2;S3 ENDWHILE;WHILE C DO S2;S3 ENDWHILE;ELSE B2 E
22、LSE B2 ENDIF;ENDIF;B3 B3 ENDWHILE;ENDWHILE;11/11/20222611/11/202227 1 1结构化程序设计的概念结构化程序设计的概念 定义定义:结构化程序设计是一种设计程序的技术,采用自顶:结构化程序设计是一种设计程序的技术,采用自顶向下、逐步细化的设计方法和单入口、单出口的控制技术,认向下、逐步细化的设计方法和单入口、单出口的控制技术,认为任何程序都可以通过顺序、选择(为任何程序都可以通过顺序、选择(IF_THEN_ELSEIF_THEN_ELSE型选择)和型选择)和循环(循环(DO_WHILEDO_WHILE型循环)三种基本控制结构的复合实
23、现。型循环)三种基本控制结构的复合实现。如果只允许使用顺序、如果只允许使用顺序、IF_THEN_ELSEIF_THEN_ELSE型分支和型分支和DO_WHILEDO_WHILE型型循环这三种基本控制结构,则称为循环这三种基本控制结构,则称为经典的结构程序设计经典的结构程序设计;如果除了上述三种基本控制结构之外,还允许使用如果除了上述三种基本控制结构之外,还允许使用DO_CASEDO_CASE型多分支结构和型多分支结构和DO_UNTILDO_UNTIL型循环结构,则称为扩展的结构程序型循环结构,则称为扩展的结构程序设计;如果再加上允许使用设计;如果再加上允许使用LEAVELEAVE(或(或BRE
24、AKBREAK)结构,则称为结构,则称为修修正的结构程序设计正的结构程序设计。11/11/202228结构化程序设计的主要原则包括:结构化程序设计的主要原则包括:1)1)使用语言中的顺序、选择、重复等有限的基本控制结构表示程使用语言中的顺序、选择、重复等有限的基本控制结构表示程序逻辑。序逻辑。2)2)选用的控制结构只准许有一个入口和一个出口。选用的控制结构只准许有一个入口和一个出口。3)3)复杂结构应该用基本控制结构进行组合嵌套来实现。复杂结构应该用基本控制结构进行组合嵌套来实现。4)4)语言中没有的控制结构,可用一段等价的程序段模拟。语言中没有的控制结构,可用一段等价的程序段模拟。5)5)严
25、格控制严格控制GOTOGOTO语句,仅在下列情形才可使用:语句,仅在下列情形才可使用:(a)(a)用一个非结构化的程序设计语言来实现一个结构化的构造。用一个非结构化的程序设计语言来实现一个结构化的构造。(b)(b)若不使用若不使用GOTOGOTO语句就会使程序功能模糊。语句就会使程序功能模糊。(c)(c)在某种可以改善而不是损害程序可读性的情况下。在某种可以改善而不是损害程序可读性的情况下。11/11/202229使用结构化程序设计技术的好处体现在:使用结构化程序设计技术的好处体现在:(1 1)自顶向下、逐步细化的方法符合人类解决复杂问题的)自顶向下、逐步细化的方法符合人类解决复杂问题的普遍规
26、律,可以显著提高系统开发的成功率和生产率。普遍规律,可以显著提高系统开发的成功率和生产率。(2 2)先全局后局部、先整体后细节、先抽象后具体的逐步)先全局后局部、先整体后细节、先抽象后具体的逐步求精过程开发出的程序有清晰的层次结构。求精过程开发出的程序有清晰的层次结构。(3 3)使用单入口单出口的控制结构而不使用)使用单入口单出口的控制结构而不使用GO TOGO TO语句,使语句,使得程序的静态结构和它的动态执行情况比较一致。得程序的静态结构和它的动态执行情况比较一致。(4 4)控制结构有确定的逻辑模式,编写程序代码只限于使)控制结构有确定的逻辑模式,编写程序代码只限于使用很少几种直截了当的方
27、式。用很少几种直截了当的方式。(5 5)程序清晰和模块化使得在修改和重新设计一个系统时)程序清晰和模块化使得在修改和重新设计一个系统时可以重用的代码量最大。可以重用的代码量最大。(6 6)程序的逻辑结构清晰,有利于程序正确性证明。)程序的逻辑结构清晰,有利于程序正确性证明。11/11/202230 结构程序设计技术的主要缺点是:结构化方法编结构程序设计技术的主要缺点是:结构化方法编制的源代码较长,存储容量和运行时间有所增加(估制的源代码较长,存储容量和运行时间有所增加(估计增加计增加10%10%20%20%);有些非结构化语言不直接提供单);有些非结构化语言不直接提供单入、单出的基本控制结构;
28、个别情况下结构化程序的入、单出的基本控制结构;个别情况下结构化程序的结构也十分复杂。然而随着计算机硬件技术的发展,结构也十分复杂。然而随着计算机硬件技术的发展,存储容量和运行时间已经不是严重问题;如果使用非存储容量和运行时间已经不是严重问题;如果使用非结构化语言编程,有限制地使用结构化语言编程,有限制地使用GOTOGOTO语句,常常可以语句,常常可以达到既满足程序结构清晰的要求,又能够保证程序执达到既满足程序结构清晰的要求,又能够保证程序执行的效率。行的效率。11/11/202231 在详细设计以及编码阶段采用自顶向下、逐步细在详细设计以及编码阶段采用自顶向下、逐步细化的方法,可以把一个模块的
29、功能再逐步细化为一系化的方法,可以把一个模块的功能再逐步细化为一系列具体的处理步骤或某种高级语言的语句。列具体的处理步骤或某种高级语言的语句。逐步细化的步骤可以归纳为三步:逐步细化的步骤可以归纳为三步:1 1)由粗到细地对程序进行逐步的细化,每一步可)由粗到细地对程序进行逐步的细化,每一步可选择其中一条或数条将它们分解为更多或更详细的程选择其中一条或数条将它们分解为更多或更详细的程序步骤。序步骤。2 2)在细化程序过程时,对数据的描述同时进行细)在细化程序过程时,对数据的描述同时进行细化。化。3 3)每步细化均使用相同的结构语言,最后一步一)每步细化均使用相同的结构语言,最后一步一般直接用伪码
30、来描述。般直接用伪码来描述。11/11/202232 下面用一个简单的例子来说明下面用一个简单的例子来说明“逐步细化逐步细化”的实的实现方法。现方法。设学生信息管理系统模块图中统计模块的功能之设学生信息管理系统模块图中统计模块的功能之一是:输入一个班学生某门课的成绩,分别统计成绩一是:输入一个班学生某门课的成绩,分别统计成绩在在8585分分100100分、分、6060分分8484分和分和6060分以下各分数段的人分以下各分数段的人数。数。编程思路是:读入学生成绩(可利用已存在的学编程思路是:读入学生成绩(可利用已存在的学生成绩数据文件),成绩用生成绩数据文件),成绩用scorescore表示,
31、对每一个成绩表示,对每一个成绩确定它所在的分数段,并将所在分数段人数加。为确定它所在的分数段,并将所在分数段人数加。为此须设三个计数变量此须设三个计数变量num1num1、num2num2、num3num3来存放各分数来存放各分数段人数。段人数。11/11/202233 一级算法过程为:一级算法过程为:(1 1)将各分数段人数设置为;)将各分数段人数设置为;(2 2)循环:循环控制变量初值,终值班级人数,改)循环:循环控制变量初值,终值班级人数,改变量(若从数据文件读成绩,执行循环体条件应是变量(若从数据文件读成绩,执行循环体条件应是“未到未到文件尾文件尾”););(3 3)读入成绩;)读入成
32、绩;(4 4)确定成绩所在分数段,并将所在分数段人数加;)确定成绩所在分数段,并将所在分数段人数加;(5 5)输出各分数段人数。)输出各分数段人数。其中第步和第步需细化求精。其中第步和第步需细化求精。二级求精过程为:二级求精过程为:(1 1)num1=0num1=0、num2=0num2=0、num3=0num3=0 (4 4)IF score=85 THEN num1=num1+1IF score=85 THEN num1=num1+1 ELSE IF score=60 THEN num2=num2+1 ELSE IF score=60 THEN num2=num2+1 ELSE num3=
33、num3+1 ELSE num3=num3+111/11/202234 在详细设计阶段,还会用到一些面向数据结构的在详细设计阶段,还会用到一些面向数据结构的设计方法。下面主要介绍两种面向数据结构的方法:设计方法。下面主要介绍两种面向数据结构的方法:JacksonJackson方法和方法和WarnierWarnier方法。方法。1 1JacksonJackson方法方法 JacksonJackson方法是面向数据结构设计方法的代表之一,方法是面向数据结构设计方法的代表之一,它的基本思想是:在充分理解问题输入、输出数据的它的基本思想是:在充分理解问题输入、输出数据的基础上,找出输入、输出数据的层次
34、结构对应关系,基础上,找出输入、输出数据的层次结构对应关系,根据数据结构的层次关系映射为软件控制层次结构,根据数据结构的层次关系映射为软件控制层次结构,然后对问题进行求精,给出对外求解的精确描述。然后对问题进行求精,给出对外求解的精确描述。11/11/202235 JacksonJackson图由方框、连线及有特殊含义的一些标记图由方框、连线及有特殊含义的一些标记组成。由于尽管数据结构种类繁多,但其数据元素之组成。由于尽管数据结构种类繁多,但其数据元素之间的联系只有顺序、选择和循环三种。因此,使用间的联系只有顺序、选择和循环三种。因此,使用JacksonJackson图无论表达数据结构或程序结
35、构,都是由这三图无论表达数据结构或程序结构,都是由这三种基本结构组合而成的。这三种基本结构在种基本结构组合而成的。这三种基本结构在JacksonJackson图图中的表示符号如图中的表示符号如图7-107-10所示。所示。11/11/202236 JacksonJackson方法是一种典型的面向数据结构的结构化方法是一种典型的面向数据结构的结构化程序设计方法,其设计目标是从分析系统的数据结构程序设计方法,其设计目标是从分析系统的数据结构出发,最后得出用出发,最后得出用JacksonJackson伪代码表示的程序处理过程。伪代码表示的程序处理过程。为了便于理解,下面通过一个简单的例子来说明为了便
36、于理解,下面通过一个简单的例子来说明JacksonJackson方法的具体设计步骤。假定某单位原来存在一方法的具体设计步骤。假定某单位原来存在一个职工工资文件和一个职工档案文件,两个文件中的个职工工资文件和一个职工档案文件,两个文件中的记录均按照职工编号升序排列且数目相等,现在要将记录均按照职工编号升序排列且数目相等,现在要将这两个独立的文件合并为一个职工工资档案文件。这两个独立的文件合并为一个职工工资档案文件。采用采用JacksonJackson方法设计,共分为以下四步进行:方法设计,共分为以下四步进行:11/11/202237(1 1)分析问题,确定输入、输出数据的逻辑结构,并用)分析问题
37、,确定输入、输出数据的逻辑结构,并用JacksonJackson图将其描述出来。图将其描述出来。11/11/202238 (2 2)找出输入数据结构和输出数据结构中有对应关系)找出输入数据结构和输出数据结构中有对应关系的单元,并按下列规则导出描述程序结构的的单元,并按下列规则导出描述程序结构的JacksonJackson图,图,结果如图结果如图7-127-12所示。所示。11/11/202239 (3 3)列出完成结构图中各处理框功能的所有操作、分)列出完成结构图中各处理框功能的所有操作、分支及循环条件,并把它们放到程序结构图上的适当位支及循环条件,并把它们放到程序结构图上的适当位置。例子中所
38、涉及的基本操作和条件如下:置。例子中所涉及的基本操作和条件如下:A.A.打开输打开输入文件;入文件;B.B.新建工资档案文件;新建工资档案文件;C.C.读取输入文件中读取输入文件中的一条记录;的一条记录;D.D.关闭文件;关闭文件;E.E.合并生成工资档案记合并生成工资档案记录;录;F.F.将工资档案记录写入文件;将工资档案记录写入文件;G.G.终止;终止;I(1).I(1).输入文件未结束。输入文件未结束。(a)改进前的程序结构图;改进前的程序结构图;(b)改进后的程序结构图改进后的程序结构图 图图7-13 加入基本操作和条件后的程序结构图加入基本操作和条件后的程序结构图11/11/2022
39、40 (4 4)用)用JacksonJackson伪代码写出程序的处理过程。伪代码写出程序的处理过程。图图7-13(b)7-13(b)所示的程序结构图对应的伪代码表示如下:所示的程序结构图对应的伪代码表示如下:产生工资档案文件产生工资档案文件seqseq 打开两个输入文件打开两个输入文件 新建工资档案文件新建工资档案文件 程序体程序体itelitel while while 输入文件未结束输入文件未结束 产生工资档案记录产生工资档案记录seqseq 从两个输入文件中各读取一条记录从两个输入文件中各读取一条记录 合并生成工资档案记录合并生成工资档案记录 将生成的工资档案记录写入工资档案文件中将生
40、成的工资档案记录写入工资档案文件中 产生工资档案记录产生工资档案记录endend 程序体程序体endend 关闭所有文件关闭所有文件 终止终止 产生工资档案文件产生工资档案文件endend11/11/2022411 1)WarnierWarnier图图 在在WarnierWarnier图中,数据元素按从上到下顺序出现,元素选择图中,数据元素按从上到下顺序出现,元素选择出现或重复出现的事实用在元素下面圆括号中标出的出现次数出现或重复出现的事实用在元素下面圆括号中标出的出现次数注明。注明。WarnierWarnier图除了表示数据结构外,也可表示程序结构。图除了表示数据结构外,也可表示程序结构。2
41、 2)使用)使用WarnierWarnier方法的步骤方法的步骤 (1 1)分析确定输入数据、输出数据的逻辑结构,并用)分析确定输入数据、输出数据的逻辑结构,并用WarnierWarnier图描绘数据结构。图描绘数据结构。(2 2)依据输入数据结构导出程序结构,并用)依据输入数据结构导出程序结构,并用WarnierWarnier图描绘图描绘数据程序的处理层次。数据程序的处理层次。(3 3)将程序结构图改为流程图,并自下至上给每个处理框)将程序结构图改为流程图,并自下至上给每个处理框编号。编号。(4 4)根据程序流程图分类写出程序的伪代码指令。)根据程序流程图分类写出程序的伪代码指令。(5 5)
42、按分类写出的指令按序号排序,从而得出描述处理过)按分类写出的指令按序号排序,从而得出描述处理过程的伪码。程的伪码。11/11/202242 面向数据结构的方法主要适用于数据结构比较稳面向数据结构的方法主要适用于数据结构比较稳定、变化不大的程序模块。如果一个程序的数据结构定、变化不大的程序模块。如果一个程序的数据结构经常有变化,或无法准确地定义数据结构,则不适宜经常有变化,或无法准确地定义数据结构,则不适宜采用这样的设计方法。采用这样的设计方法。11/11/202243 定量度量程序复杂程度的方法很有价值:把程序定量度量程序复杂程度的方法很有价值:把程序的复杂程度乘以适当常数即可估算出系统中故障
43、的数的复杂程度乘以适当常数即可估算出系统中故障的数量以及系统开发需要用的工作量,定量度量的结果可量以及系统开发需要用的工作量,定量度量的结果可以用来比较两个不同的设计或两个不同算法的优劣;以用来比较两个不同的设计或两个不同算法的优劣;程序的定量的复杂程度可以作为模块规模的精确限度。程序的定量的复杂程度可以作为模块规模的精确限度。l环形复杂度的度量方法环形复杂度的度量方法l文本复杂度的度量方法。文本复杂度的度量方法。11/11/2022441 1程序图程序图 使用使用McCabeMcCabe方法首先需要画出程序图方法首先需要画出程序图(Program(Program Graph)Graph),所
44、谓程序图可以看成是所谓程序图可以看成是“退化了的退化了的”程序流程序流程图,也就是把程序流程图中的每个处理符号都退化程图,也就是把程序流程图中的每个处理符号都退化成一个点,原来连接不同处理符号的箭头变成连接不成一个点,原来连接不同处理符号的箭头变成连接不同点的有向弧,这样得到的有向图就称为程序图。几同点的有向弧,这样得到的有向图就称为程序图。几种基本结构的程序图如图种基本结构的程序图如图7-147-14示。示。11/11/202245 例如,对如图例如,对如图7-15(a)7-15(a)所示的程序流程图进行所示的程序流程图进行简化,可得到如图简化,可得到如图7-15(b)7-15(b)所示的程
45、序图。所示的程序图。11/11/202246 环形复杂度等于强连通的程序图中线性无关的有环形复杂度等于强连通的程序图中线性无关的有向环的个数。根据图论,在一个强连通的有向图中线向环的个数。根据图论,在一个强连通的有向图中线性无关环的个数由下面的公式给出:性无关环的个数由下面的公式给出:V(G)V(G)m mn np p 其中,其中,V(G)V(G)表示有向图表示有向图G G中的线性无关的环数;中的线性无关的环数;m m表示有向图表示有向图G G中有向边中有向边(弧弧)的个数;的个数;n n表示有向图中的结点个数;表示有向图中的结点个数;p p是有向图是有向图G G中的分离部分的数目。中的分离部
46、分的数目。11/11/202247 对于一个正常的程序来说,应该从程序图内的入对于一个正常的程序来说,应该从程序图内的入口点到达图中任何一个结点(一个不能达到的结点代口点到达图中任何一个结点(一个不能达到的结点代表永远不能执行的程序代码,显然是错误的),因此,表永远不能执行的程序代码,显然是错误的),因此,程序图总是连通的,也就是说,程序图总是连通的,也就是说,p=1p=1。m m和和n n的值从程序的值从程序图中可以方便地得到。现在的关键问题是,程序图虽图中可以方便地得到。现在的关键问题是,程序图虽然是连通图,但却不是强连通图然是连通图,但却不是强连通图(图中靠近入口的结点图中靠近入口的结点
47、可以到达下面的结点,而靠近出口的结点往往不能到可以到达下面的结点,而靠近出口的结点往往不能到达上面的结点达上面的结点),而强连通图是要求从图中任一结点出,而强连通图是要求从图中任一结点出发都可以到达所有其他结点。为了使程序图能够满足发都可以到达所有其他结点。为了使程序图能够满足图论中计算环形复杂度公式的要求,可以在程序图中图论中计算环形复杂度公式的要求,可以在程序图中增加一条从出口点到入口点的虚弧,此时,程序图就增加一条从出口点到入口点的虚弧,此时,程序图就变成了一个强连通图。变成了一个强连通图。11/11/202248 对图对图7-15(b)7-15(b)所示的程序图添加虚弧后,就得到所示的
48、程序图添加虚弧后,就得到了如图了如图7-167-16所示的强连通图。所示的强连通图。强连通程序图的环形复杂度:强连通程序图的环形复杂度:V(G)V(G)131310101 14 4 11/11/202249 实质上,除了采用上面的公式可以计算环形复杂度的值实质上,除了采用上面的公式可以计算环形复杂度的值以外,还可以使用下面两个公式来计算程序图中的环形复杂度。以外,还可以使用下面两个公式来计算程序图中的环形复杂度。V(G)V(G)强连通的程序图在平面上围成的区域数强连通的程序图在平面上围成的区域数 V(G)V(G)判定结点数判定结点数1 1 结构化程序的程序图总是平面图,因此均可采用公式来结构化
49、程序的程序图总是平面图,因此均可采用公式来进行环形复杂度的计算。图进行环形复杂度的计算。图7-167-16中,程序图围成的区域有中,程序图围成的区域有(b,c,d,f,b)(b,c,d,f,b),(c,d,f,e,c)(c,d,f,e,c),(g,h,E,g)(g,h,E,g)和和(S,a,b,g,E,S)(S,a,b,g,E,S),因因此,根据公式可得该程序图的环形复杂度为此,根据公式可得该程序图的环形复杂度为4 4。通过公式可以看出,一个程序的环形复杂度取决于它的通过公式可以看出,一个程序的环形复杂度取决于它的程序图中所包含的判定结点的个数。在图程序图中所包含的判定结点的个数。在图7-16
50、7-16中,判定结点分中,判定结点分别为别为b b,c c和和g g,每个判定结点都在程序图中产生一个环域,因此,每个判定结点都在程序图中产生一个环域,因此,程序中的分支或循环结构越多,嵌套层次数越多,程序的环形程序中的分支或循环结构越多,嵌套层次数越多,程序的环形复杂度就越大。根据公式可得图复杂度就越大。根据公式可得图7-167-16的环形复杂度为:的环形复杂度为:3 31 14 4。11/11/202250 程序的环形复杂度取决于程序控制流的复杂程度,程序的环形复杂度取决于程序控制流的复杂程度,也即取决于程序结构的复杂程度。当程序内分支数或也即取决于程序结构的复杂程度。当程序内分支数或循环