《软件详细设计》由会员分享,可在线阅读,更多相关《软件详细设计(142页珍藏版)》请在金锄头文库上搜索。
1、详细设计的目标详细设计的根本目标是:详细设计的基本任务1.1.为每个模块进行详细的为每个模块进行详细的算法设计; 2.2.为模块内的为模块内的数据结构进行设计;进行设计;3.3.对对数据库进行物理设计;进行物理设计;4.其他设计:设计: 确定程序模块间的确定程序模块间的详细接口,根据软件系,根据软件系统的类型,还可能要进行统的类型,还可能要进行代码设计、输入输出格式设计、人机界面设计等设计;等设计; 5.5.编写编写详细设计说明书;6.6.对详细设计进行对详细设计进行评审。第 6 章 详细设计(模块设计)第6章 详细设计(模块设计) w6.1 结构化程序设计(SP)w6.2 人机界面设计 w6
2、.3 过程设计工具 w6.4 面向数据结构的设计方法 w6.5 程序复杂程度的定量度量一. 结构化程序设计(SP)的主要思想 6.1 结构化程序设计结构化程序设计 w主要思想主要思想 设计方法:设计方法:自顶向下、逐步求精w结构化程序设计:指导人们用结构化程序设计:指导人们用良好的思想方法开开发出发出易理解、易验证的程序。的程序。需求分析阶段需求分析阶段SASA方法方法总体设计阶段总体设计阶段SDSD方法方法详细设计阶段详细设计阶段SPSP方法方法一. 结构化程序设计(SP)的主要思想 6.1 结构化程序设计结构化程序设计 二. 结构化程序设计(SP) 的三种基本控制结构 w19661966年
3、,年,C.BohmC.Bohm和和G.JacopiniG.Jacopini证明:证明:只用三种基本控制结构就能实现任何单入口单出口的程序。w结构化程序设计的三种结构化程序设计的三种基本控制结构 共同特征:严格地只有一个入口和一个出口顺序结构顺序结构循环结构循环结构ABexpATF分支结构分支结构expABTF6.1 结构化程序设计结构化程序设计 三. 结构化程序设计(SP)的设计准则 n一个程序模块内的一个程序模块内的基本结构(即顺序、选择和(即顺序、选择和循环)应循环)应尽量少; n将一个基本结构组成一个将一个基本结构组成一个容易识别的程序块;的程序块; n程序块的程序块的入/出口都只有一个
4、 6.1 结构化程序设计结构化程序设计 四. 如何把非结构化的程序转化成结构化的程序 1.1.重复编码法重复编码法:6.1 结构化程序设计结构化程序设计 1243goto语句语句非非结构化程序结构化程序1243结构化程序结构化程序4WHILE p DO BEGIN IF q THEN GOTO L1; A; BEND;L1: 非结构化程序非结构化程序四. 如何把非结构化的程序转化成结构化的程序 2.2.布尔标识法:布尔标识法:6.1 结构化程序设计结构化程序设计 bool := true;WHILE (p and bool) DO BEGIN IF q THEN bool := false E
5、LSE BEGIN A; B END END; 结构化程序结构化程序图图6.2 6.2 其他常用的控制结构其他常用的控制结构五、结构化程序设计五、结构化程序设计w经典的经典的结构程序设计:只允许使用顺序、结构程序设计:只允许使用顺序、IF-THEN-ELSEIF-THEN-ELSE型分支和型分支和DO-WHILEDO-WHILE型循环这型循环这3 3种基本控制结构。种基本控制结构。w扩展的扩展的结构程序设计:还允许使用结构程序设计:还允许使用DO-CASE型多分支结构和型多分支结构和DO-UNTIL型循环结构;型循环结构;w修正的修正的结构程序设计:再加上允许在循环体结构程序设计:再加上允许在
6、循环体中使用中使用LEAVE(LEAVE(或或BREAK) )结构。结构。五、结构化程序设计六. 结构化程序设计(SP)的优点 w自顶向下、逐步求精:采用自顶向下、逐步求精:采用先整体后局部、先抽象后具体的方法开发出来的软件具有良好的结构,且开发的方法开发出来的软件具有良好的结构,且开发出的程序易于理解;出的程序易于理解;w单入口单出口:单入口单出口:良好的结构特征,降低复杂度,增强,降低复杂度,增强可读性,可维护性,可验证性等,从而提高软件开发可读性,可维护性,可验证性等,从而提高软件开发工程的成功率和生产率;工程的成功率和生产率;w有利于程序有利于程序正确性的证明。的证明。6.1 结构化程
7、序设计结构化程序设计 w人机界面(人机界面(Human-Computer InterfaceHuman-Computer Interface,简称简称HCIHCI)又称)又称人人- - 机接口或用户界面机接口或用户界面,它是用户与计算机系统交换信息的媒介,它是用户与计算机系统交换信息的媒介,更是用户使用计算机系统的综合操作环境。更是用户使用计算机系统的综合操作环境。w设计用户界面不仅需要计算机科学的理论设计用户界面不仅需要计算机科学的理论和知识,而且需要认知心理学以及人和知识,而且需要认知心理学以及人- -机机工程学、语言学等学科的知识。工程学、语言学等学科的知识。人机界面概述 6.2 人机界
8、面设计人机界面设计最有影响的事件和成果最有影响的事件和成果 1963年发明鼠标器的美国斯坦福研究所的 D.Engelbart,他预言鼠标器比其他输入设备都好,并在超文本系统、导航工具方面做了杰出的成果(Augmented Human Intellect project ),而获1997年ACM图灵奖。10年后鼠标器经不断改进,成为影响当代计算机使用的最重要成果。 最有影响的事件和成果最有影响的事件和成果w7070年代年代XeroxXerox研究中心的研究中心的Alan KayAlan Kay提出了提出了SmalltalkSmalltalk面向对象程序设计等思想,面向对象程序设计等思想,并发明了
9、重叠式多窗口系并发明了重叠式多窗口系统。统。w19891989年年Tim Berners-LeeTim Berners-Lee在在日内瓦的日内瓦的CERNCERN用用HTMLHTML及及HTTPHTTP开发了开发了WWWWWW网,随后出网,随后出现了各种浏览器(网络用现了各种浏览器(网络用户界面),使互联网飞速户界面),使互联网飞速发展起来。发展起来。最有影响的事件和成果最有影响的事件和成果w9090年代美国麻省理工学院年代美国麻省理工学院N.NegroponteN.Negroponte领导的媒体领导的媒体实验室在新一代多通道用实验室在新一代多通道用户界面方面(包括语音、户界面方面(包括语音、
10、手势、智能体等),做了手势、智能体等),做了大量开创性的工作。大量开创性的工作。w9090年代美国年代美国XeroxXerox公司公司PARCPARC的首席科学家的首席科学家Mark Mark WeiserWeiser首先提出首先提出“无所不无所不在计算(在计算(Ubiquitous Ubiquitous ComputingComputing)”思想思想 。 w人机界面的风格人机界面的风格四代。四代。 第一代界面第一代界面命令和询问方式命令和询问方式。 通信完全以正文形式并通过用户命令和用户对系统通信完全以正文形式并通过用户命令和用户对系统询问的响应来完成。例如:询问的响应来完成。例如:Dru
11、n Drun prog1.exe prog1.exe /debug=on /debug=on /out=pl /out=pl /in=t1 /in=t1 / /allocalloc=1000k=1000kRUN ALLOCATION TO BE QUEUED?yesRUN ALLOCATION TO BE QUEUED?yesAUTOMATIC CHECK POINTING INTERVAL?5AUTOMATIC CHECK POINTING INTERVAL?5w缺点:易出错、不友好,且不易于学习。缺点:易出错、不友好,且不易于学习。6.2 人机界面设计人机界面设计人机界面概述第二代界面第二
12、代界面简单的菜单式简单的菜单式,例如:,例如: choose program option that is desired:choose program option that is desired: 1=input data manually 1=input data manually 2=input data from existing data file 2=input data from existing data file 3=perform simplified analysis 3=perform simplified analysis 4=perform detailed an
13、alysis 4=perform detailed analysis 5=produce tabular output 5=produce tabular output 6=produce graphical output 6=produce graphical output 7=other options classes 7=other options classes select option?_ select option?_这种方式与命令行方式相比不易出错,但使用起来仍这种方式与命令行方式相比不易出错,但使用起来仍然乏味。然乏味。6.2 人机界面设计人机界面设计人机界面概述w第三代界面
14、第三代界面面向窗口的点选界面面向窗口的点选界面 (point and pick interfacepoint and pick interface) 亦称为亦称为WIMPWIMP界面,界面,即:窗口(即:窗口(windowswindows)、)、 四位一体,四位一体, 图标(图标(iconsicons)、)、 形成桌面形成桌面(desktopdesktop) 菜单(菜单(menusmenus)、)、 指示器(指示器(pointing devicepointing device)6.2 人机界面设计人机界面设计人机界面概述第三代界面的优点第三代界面的优点1 1能能同同时时显显示示不不同同种种类类
15、的的信信息息,使使用用户户可可在在几几个个工作环境中切换而不丢失几个工作之间的联系。工作环境中切换而不丢失几个工作之间的联系。2 2用用户户通通过过下下拉拉式式菜菜单单(pullpull down down menumenu)可可方方便地执行控制型和对话型任务。便地执行控制型和对话型任务。3 3引入图标、按钮和滚动条技术引入图标、按钮和滚动条技术,可大大减少键,可大大减少键盘输入,这对那些不精于打字的用户无疑提高了盘输入,这对那些不精于打字的用户无疑提高了交互效率,极大地推动了计算机应用。交互效率,极大地推动了计算机应用。6.2 人机界面设计人机界面设计人机界面概述第四代界面第四代界面:w最新
16、一代最新一代HCIHCI,把第三代把第三代HCIHCI技术与超文本、多技术与超文本、多任务概念结合起来,使用户可同时执行多个任任务概念结合起来,使用户可同时执行多个任务(以用户的观点)。务(以用户的观点)。w第四代界面已出现在许多工作站和高性能第四代界面已出现在许多工作站和高性能PCPC机机上。上。6.2 人机界面设计人机界面设计人机界面概述人机界面技术的进展人机界面技术的进展1.1.自然、高效的多通道交互自然、高效的多通道交互 2.2.移动手持设备的移动手持设备的人机人机交互交互 3.3.智能用户界面智能用户界面 1.1.自然、高效的多通道交互自然、高效的多通道交互多通道用户界面多通道用户界
17、面w多通道交互多通道交互(Multi-Modal Interaction)(Multi-Modal Interaction):一种:一种使用多种通道与计算机通信的人机交互方式。使用多种通道与计算机通信的人机交互方式。采用这种方式的计算机用户界面称为采用这种方式的计算机用户界面称为“多通道多通道用户界面用户界面”。 w通道通道(Modality)(Modality):源于心理学的概念,涵盖了:源于心理学的概念,涵盖了用户表达意图、执行动作或感知反馈信息的各用户表达意图、执行动作或感知反馈信息的各种通信方法,如言语、眼神、脸部表情、唇动、种通信方法,如言语、眼神、脸部表情、唇动、手动、手势、头动、
18、肢体姿势、触觉、嗅觉或手动、手势、头动、肢体姿势、触觉、嗅觉或味觉等。味觉等。 多通道交互多通道交互w多通道交互是近年来迅速发展的一种人机交互多通道交互是近年来迅速发展的一种人机交互技术,它既适应了技术,它既适应了“以人为中心以人为中心”的自然交互的自然交互准则,也推动了互联网时代信息产业(包括移准则,也推动了互联网时代信息产业(包括移动计算,移动通信、网络服务器等)的快速发动计算,移动通信、网络服务器等)的快速发展。展。w多通道交互的各类通道(界面)技术中,有不多通道交互的各类通道(界面)技术中,有不少已经实用化、产品化、商品化。其中我国科少已经实用化、产品化、商品化。其中我国科技人员做出了
19、不少优异的工作。技人员做出了不少优异的工作。 手写汉字识别手写汉字识别w中科院自动化所开发的中科院自动化所开发的“汉王笔汉王笔”手写汉字识手写汉字识别系统,经过近别系统,经过近2020年的研究和开发,已能识别年的研究和开发,已能识别2700027000汉字,当用非草写汉字、以每分钟汉字,当用非草写汉字、以每分钟1212个汉个汉字的速度书写时,识别率可达字的速度书写时,识别率可达99.8%99.8%。我国现在。我国现在已约有已约有300300万手写汉字识别系统的用户。万手写汉字识别系统的用户。 笔式交互技术笔式交互技术 w在笔式交互技术研究中,中国科学院软件所人在笔式交互技术研究中,中国科学院软
20、件所人机交互技术与智能信息处理实验室在笔式交互机交互技术与智能信息处理实验室在笔式交互软件开发平台、面向教学的笔式办公套件(包软件开发平台、面向教学的笔式办公套件(包括课件制作、笔式授课、笔式数学公式计算器、括课件制作、笔式授课、笔式数学公式计算器、笔式简谱制作等)、面向儿童的神笔马良系统笔式简谱制作等)、面向儿童的神笔马良系统的开发应用方面均有出色的工作,其中不少已的开发应用方面均有出色的工作,其中不少已经实用化、产品化。经实用化、产品化。 基于笔的字处理基于笔的字处理 EasyEditorEasyEditor手写数学公式手写数学公式视线跟踪(眼动)技术视线跟踪(眼动)技术 w视线跟踪(眼动
21、)技术由于其可能代替键视线跟踪(眼动)技术由于其可能代替键盘输入、鼠标移动的功能,可能达到盘输入、鼠标移动的功能,可能达到“所所视即所得视即所得”(What You Look at is What (What You Look at is What You Get),You Get),因而对残疾人和飞行员等使用因而对残疾人和飞行员等使用有极大的吸引力。有极大的吸引力。视线跟踪(眼动)技术视线跟踪(眼动)技术目前一类产品是采用头戴微目前一类产品是采用头戴微型摄像头的设备,它用来获取型摄像头的设备,它用来获取两眼瞳孔(或角膜)中视点。两眼瞳孔(或角膜)中视点。其采样率、精度高,可靠。其采样率、精度
22、高,可靠。 另一类是在另一类是在PCPC机前装机前装了两个微型摄像头的设备,了两个微型摄像头的设备,精度不高,适合残疾人操作精度不高,适合残疾人操作计算机使用。计算机使用。 2.2.移动手持设备的人机交互移动手持设备的人机交互移动手持设备的交互移动手持设备的交互w移动手持计算设备移动手持计算设备是指具有计算功能的是指具有计算功能的PDAPDA、掌上电脑、智能手机这类小型设备。将计算掌上电脑、智能手机这类小型设备。将计算功能嵌入手机、通信功能加入掌上电脑已成功能嵌入手机、通信功能加入掌上电脑已成潮流。潮流。 移动手持设备的交互移动手持设备的交互w北京大学人机交互和多媒北京大学人机交互和多媒体研究
23、室,开发了体研究室,开发了TGH 是是在手持在手持移动设备上开发的设备上开发的一个一个导游系统,支持语音,支持语音和笔的多通道交互方式。和笔的多通道交互方式。使用语音合成与文字、图使用语音合成与文字、图片相结合的方式输出。其片相结合的方式输出。其中引入了多种上下文辅助中引入了多种上下文辅助交互,如用户地理空间位交互,如用户地理空间位置、用户移动方向、时间置、用户移动方向、时间等等 。3.3. 智能用户界面智能用户界面智能空间及智能用户界面智能空间及智能用户界面 w智能空间智能空间(Smart SpaceSmart Space)是指一个嵌入了计算、)是指一个嵌入了计算、信息设备和多通道传感器的工
24、作空间。信息设备和多通道传感器的工作空间。w由于在智能空间里,用户能方便地访问信息和由于在智能空间里,用户能方便地访问信息和获得计算机的服务,因而可高效地单独工作或获得计算机的服务,因而可高效地单独工作或与他人协同工作。与他人协同工作。w智能用户界面的最终目标智能用户界面的最终目标是使人机交互成为和是使人机交互成为和人人- -人交互一样自然、方便。人交互一样自然、方便。 智能空间及智能用户界面智能空间及智能用户界面w国际上已开展了许多智能空间的项目国际上已开展了许多智能空间的项目lMIT Intelligent RoomlStanfordInteractive Workspace lGeorg
25、ia Tech. Aware Home lMicrosoft EasyLiving lIBMBlue Space lGMD iLand l清华大学智能教室MIT Intelligent Room清华大学 智能教室w设计人机界面,必须考虑四个方面:设计人机界面,必须考虑四个方面: 系统的响应时间;系统的响应时间; 用户帮助设施;用户帮助设施; 出错信息处理;出错信息处理; 命令方式。命令方式。 1 1)系统响应时间指当用户执行了某个控制动作后(如,)系统响应时间指当用户执行了某个控制动作后(如,点击鼠标器等),系统做出反应的时间(指输出信点击鼠标器等),系统做出反应的时间(指输出信息或执行对应的
26、动作)。息或执行对应的动作)。 系统响应时间过长、不同命令在响应时间上的差别系统响应时间过长、不同命令在响应时间上的差别过于悬殊,用户将难以接受。过于悬殊,用户将难以接受。6.2 人机界面设计人机界面设计一. 设计问题2 2)用户都希望得到联机帮助。)用户都希望得到联机帮助。 联机帮助设施有两类:集成式和附加式联机帮助设施有两类:集成式和附加式。集成式帮助一般都与软件设计同时考虑,上下文敏感,集成式帮助一般都与软件设计同时考虑,上下文敏感,整个帮助过程快捷而友好;整个帮助过程快捷而友好;附加式帮助一般是在软件完成后附上一个受限的联机附加式帮助一般是在软件完成后附上一个受限的联机用户手册。用户手
27、册。 此外,还要考虑诸如帮助范围(仅考虑部分还是全此外,还要考虑诸如帮助范围(仅考虑部分还是全部功能)、用户求助的途径、帮助信息的显示、用户部功能)、用户求助的途径、帮助信息的显示、用户如何返回正常交互工作及帮助信息本身如何组织等一如何返回正常交互工作及帮助信息本身如何组织等一系列问题。系列问题。6.2 人机界面设计人机界面设计一.设计问题3 3)出错信息处理)出错信息处理 出出错错信信息息应应选选用用用用户户明明了了、含含义义准准确确的的术术语语描描述述,同同时时还还应应尽尽可可能能提提供供一一些些有有关关错错误误恢恢复复的的建建议议。此此外外,显显示示出出错错信信息息时时,若若辅辅以以听听
28、觉觉(如如铃铃声声)、视视觉觉(专专用用颜颜色色)刺刺激激,则效果更佳。则效果更佳。6.2 人机界面设计人机界面设计一.设计问题4 4)命令交互)命令交互 键盘命令曾经一度是用户与软件系统之间键盘命令曾经一度是用户与软件系统之间最通用的交互方式,随着面向窗口的界面的最通用的交互方式,随着面向窗口的界面的出现,键盘命令虽不再是唯一的交互形式,出现,键盘命令虽不再是唯一的交互形式,但许多有经验的熟练的软件人员仍喜爱这一但许多有经验的熟练的软件人员仍喜爱这一方式,更多的情形是菜单与键盘命令并存,方式,更多的情形是菜单与键盘命令并存,供用户自由选用。供用户自由选用。6.2 人机界面设计人机界面设计一.
29、设计问题用户界面设计是一个迭代过用户界面设计是一个迭代过程,直至与用户模型和系统程,直至与用户模型和系统假想一致为止。假想一致为止。修改设计修改设计创建新界面创建新界面原型原型用户评审界面用户评审界面创建界面创建界面原型原型1初步设计初步设计设计人员分析设计人员分析用户评审意见用户评审意见界面设计界面设计完毕完毕图图12-3-1 界面设计演进过程界面设计演进过程6.2 人机界面设计人机界面设计二. 设计过程一. 过程设计工具分类 6.3 过程设计工具过程设计工具图形图形表格表格语言语言详细设计详细设计编码实现编码实现程序流程图程序流程图盒图(盒图(NS图)图)问题分析图(问题分析图(PAD图)
30、图)判定树判定树判定表判定表 过程设计语言过程设计语言PDL或伪码或伪码(Psudo-code)基于某种程序设计语基于某种程序设计语言的源程序代码言的源程序代码要求:无二义性描述要求:无二义性描述 二. 程序流程图 w历史最悠久历史最悠久, ,使用最广泛使用最广泛; ; 但使用最混乱但使用最混乱. . w程序流程图中使用的符号程序流程图中使用的符号6.3 过程设计工具过程设计工具w w程序流程图也称为程序框图,它使用程序流程图也称为程序框图,它使用五种基本控制结五种基本控制结构:构:w优点:优点: 简单易用、容易修改;简单易用、容易修改; 对控制流程直观、易于理解、易于复审,便于初学对控制流程
31、直观、易于理解、易于复审,便于初学者掌握。者掌握。w缺点:缺点:诱使程序员过早考虑控制流程,而不考虑诱使程序员过早考虑控制流程,而不考虑程序的全局结构;不是;不是逐步求精的过程。的过程。 采用箭头表示控制流,随意转移控制采用箭头表示控制流,随意转移控制, ,导致破坏导致破坏结构结构程序设计程序设计的精神;的精神;不易表示不易表示数据结构,数据的处理与变换不清楚;,数据的处理与变换不清楚;6.3 过程设计工具过程设计工具二. 程序流程图 三. 盒图(N-S图) w不允许违背不允许违背结构化结构化程序设计精神程序设计精神l没有箭头,因此不允许随意转移控制。没有箭头,因此不允许随意转移控制。w由美国
32、由美国I.I.N Nassiassi和和B.B.S Shneiderman,1973hneiderman,1973年提出。年提出。 l功能域(即一个结构的作用域)明确功能域(即一个结构的作用域)明确 l不可能任意转移控制不可能任意转移控制 l易于确定局部和全局数据的作用域易于确定局部和全局数据的作用域 l易于表现嵌套关系和模块的层次结构易于表现嵌套关系和模块的层次结构 坚持使用盒图作为详细设计的工具,可以使程序员坚持使用盒图作为详细设计的工具,可以使程序员逐步养成用结构化的方式思考问题和解决问题的习惯。逐步养成用结构化的方式思考问题和解决问题的习惯。6.3 过程设计工具过程设计工具三. 盒图(
33、N-S图) wNS图的基本符号then部分部分F条件条件Tif-then 结构结构then部分部分else部部分分F条件条件Tif-then-else 结构结构循环条件循环条件do-while部分部分do-while 结构结构循环条件循环条件do-until部分部分do-until 结构结构子程序子程序P调用子程序调用子程序 case条件条件值值1case1部分部分值值2case2部分部分值值ncasen部分部分case 结构结构任务任务1 1任务任务2 2任务任务3 3顺序结构顺序结构6.3 过程设计工具过程设计工具三. 盒图(N-S图)例6.3 过程设计工具过程设计工具x4TFDo-Unt
34、il x5ighfkx1TFbDo-Until x6ajx21cDo-While x323dek :四. 问题分析图(Problem Analysis Diagram 图) 6.3 过程设计工具过程设计工具wPADPAD图图w日立公司,日立公司,19731973年发明年发明w采用二维树形结构来表示程序的控制流。采用二维树形结构来表示程序的控制流。w它即克服了传统的流程图不能清晰表现程序结它即克服了传统的流程图不能清晰表现程序结构的缺点,又不像构的缺点,又不像N-SN-S图那样受到把全部程序约图那样受到把全部程序约束在一个方框内的限制,这就是其优势所在束在一个方框内的限制,这就是其优势所在。 四
35、. 问题分析图(Problem Analysis Diagram 图) P1P2顺序顺序结构结构Case分支分支与分层结构与分层结构 (用用 def 细化处理框细化处理框)P1P2PnX=L1L2LnP11While型循环结构型循环结构WHILE CP连接连接(语句标号语句标号)6.3 过程设计工具过程设计工具Until型循环结构型循环结构UNTIL CPP1P2C选择结构选择结构(if C then P1 else P2)(if C then P1 else P2)def四. 问题分析图(Problem Analysis Diagram 图)开始开始 结束结束 aj Until x5i Un
36、til x6bx1kfx4ghdefkx2de123 While x3c6.3 过程设计工具过程设计工具四. 问题分析图(Problem Analysis Diagram 图)w主要优点:主要优点:n(1)由该图设计出的程序)由该图设计出的程序必为结构化的n(2)结构非常清晰,竖线的条数即程序的层次数竖线的条数即程序的层次数n(3)所表现的程序逻辑)所表现的程序逻辑易读、易懂、易记n(4)可)可利用软件工具自动转换为高级语言源程序为高级语言源程序n(5)既可表示程序逻辑,也可)既可表示程序逻辑,也可描绘数据结构n(6)支持)支持自顶向下、逐步求精(利用def)w面向高级语言:FORTRAN,P
37、ASCAL等都有相应的等都有相应的图形符号,所以将图形符号,所以将PAD图转换成对应的高级语言程序图转换成对应的高级语言程序比较容易比较容易 6.3 过程设计工具过程设计工具五. 判 定 表w 判定表:判定表:6.3 过程设计工具过程设计工具条件 (所有条件)(所有条件)条件组合项(条件组合的矩阵)(条件组合的矩阵)操作(所有可能的动作)(所有可能的动作)操作执行项 (与每种条件组合相应的动作)(与每种条件组合相应的动作)复杂的条件组合复杂的条件组合应做的动作应做的动作w建立判定表的步骤建立判定表的步骤五. 判 定 表6.3 过程设计工具过程设计工具w判定表的分析过程判定表的分析过程五. 判
38、定 表6.3 过程设计工具过程设计工具w步骤步骤1 1:求出各种判定条件可能的取值;:求出各种判定条件可能的取值;五. 判 定 表6.3 过程设计工具过程设计工具w步骤步骤2 2:根据条件取值数,计算条件组合:根据条件取值数,计算条件组合数数五. 判 定 表6.3 过程设计工具过程设计工具w步骤步骤3 3:在判定表中列出所有条件组合,:在判定表中列出所有条件组合,求出各组合的操作判定值求出各组合的操作判定值五. 判 定 表6.3 过程设计工具过程设计工具五. 判 定 表6.3 过程设计工具过程设计工具五. 判 定 表6.3 过程设计工具过程设计工具五. 判 定 表6.3 过程设计工具过程设计工
39、具五. 判 定 表6.3 过程设计工具过程设计工具五. 判 定 表6.3 过程设计工具过程设计工具五. 判 定 表6.3 过程设计工具过程设计工具五. 判 定 表6.3 过程设计工具过程设计工具w下面以行李托运费的算法为例说明判定表的组下面以行李托运费的算法为例说明判定表的组织方法。假设某航空公司规定,乘客可以免费织方法。假设某航空公司规定,乘客可以免费托运重量不超过托运重量不超过30kg30kg的行李。当行李重量超过的行李。当行李重量超过30kg30kg时,对头等舱的国内乘客超重部分每公斤时,对头等舱的国内乘客超重部分每公斤收费收费4 4元,对其他舱的国内乘客超重部分每公斤元,对其他舱的国内
40、乘客超重部分每公斤收费收费6 6元,对外国乘客超重部分每公斤收费比国元,对外国乘客超重部分每公斤收费比国内乘客多一倍,对残疾乘客超重部分每公斤收内乘客多一倍,对残疾乘客超重部分每公斤收费比正常乘客少一半。费比正常乘客少一半。五. 判 定 表6.3 过程设计工具过程设计工具五. 判 定 表RulesRule Condition rowsAction rows判定表w适合描述:包含复杂的条件组合,并要根据这些条件选择动作执行的模块;w缺点:n不能表示:循环、顺序和选择。n当条件为多值条件时(如机票分为头等舱、二等舱、经济舱等多种级别),判定表的简洁程度也下降。n其含义不能一眼看出,初用者需要一个简
41、短的学习过程六. 判 定 树6.3 过程设计工具过程设计工具行行李李费费算算法法行李重量行李重量W 30行李重量行李重量W 30免费免费国内国内乘客乘客外国外国乘客乘客头等舱头等舱其他舱其他舱残疾乘客残疾乘客正常乘客正常乘客(W-30) 2(W-30) 4残疾乘客残疾乘客正常乘客正常乘客(W-30) 3(W-30) 6头等舱头等舱其他舱其他舱残疾乘客残疾乘客正常乘客正常乘客(W-30) 4(W-30) 8残疾乘客残疾乘客正常乘客正常乘客(W-30) 6(W-30) 12判定树:判定表的变种;形式简单,但简洁性不如判定表判定树:判定表的变种;形式简单,但简洁性不如判定表判定树判定树w形式简单:
42、不用任何说明,一眼可看出含义;易学易用。w缺点:n简洁性较差: 同一个数据元素的值往往要要重复写多遍。n分支的次序:对判定树的简洁程度有较大影响七.过程设计语言PDL(伪码)6.3 过程设计工具过程设计工具w伪码:一种以正文形式表示数据和处理过程的设计工伪码:一种以正文形式表示数据和处理过程的设计工具,是一种混合语言。具,是一种混合语言。伪码严格的关键字外部语法自然语言的词汇用于定义控制结用于定义控制结构和数据结构构和数据结构灵活表示实际灵活表示实际操作和条件操作和条件C、PASCAL,借用某种结构化的程序设计语言的语法控制框架。 英语/汉语,某种自然语言(1)(1)、数据说明数据说明:格式格
43、式: TYPE AS 其功能是定义数据的类型和作用域其功能是定义数据的类型和作用域说明说明: 1. 变量名变量名:是一个模块内部使用的变量或模块间共用是一个模块内部使用的变量或模块间共用 的全局变量名。的全局变量名。 2. 限定词限定词1 :标明数据类型标明数据类型 3. 限定词限定词2 :标明该变量的作用域标明该变量的作用域 TYPE number AS STRING LENGTH (12)(2)(2)、程序块程序块: PDL的过程成分是由块结构构成的,而块将作为的过程成分是由块结构构成的,而块将作为一个单个的实体来执行。一个单个的实体来执行。 BEGIN END(3)(3)、子、子程序结构
44、程序结构:把把 PDL 中的过程称为子程序。中的过程称为子程序。 PROCEDURE INTERFACE END(4)(4)、基本控制结构、基本控制结构: IF THEN ; ELSE ; ENDIF - - 选择型结构选择型结构 READ/WRITE TO - - 输入输入/ /输出结构输出结构 DO WHILE ; ENDDO REPEAT UNTIL ; ENDREP - - 重复型结构重复型结构 DO LOOP ; EXIT WHEN ENDLOOP DO FOR ; ENDFOR - - 重复型结构重复型结构 - - 多路选择结构多路选择结构 CASE OF ; WHEN SELEC
45、T ; WHEN SELECT ; DEFAULT: 缺省或错误缺省或错误case: ; ENDCASEwPDLPDL的特性的特性七.过程设计语言PDL(伪码)6.3 过程设计工具过程设计工具w示例:拼写检查程序示例:拼写检查程序七.过程设计语言PDL(伪码)6.3 过程设计工具过程设计工具w使用使用PDLPDL语言逐步求精语言逐步求精七.过程设计语言PDL(伪码)6.3 过程设计工具过程设计工具w使用使用PDLPDL语言逐步求精语言逐步求精七.过程设计语言PDL(伪码)6.3 过程设计工具过程设计工具wPDLPDL的优点的优点七.过程设计语言PDL(伪码)6.3 过程设计工具过程设计工具八.
46、 总 结6.3 过程设计工具过程设计工具w要求掌握:要求掌握: n程序流程图程序流程图nN NS S图图nPADPAD图图nPDLPDL语言(伪码)语言(伪码) n判定树判定树 n判定判定表表相互转换面向数据结构的设计方法 w原理:重复出现的数据通常由循环控制结构处理;:重复出现的数据通常由循环控制结构处理;选择数据通常由分支控制结构。选择数据通常由分支控制结构。w缺点:没有足够重视和体现模块独立原理:没有足够重视和体现模块独立原理w适用范围:详细设计阶段:详细设计阶段w面向数据结构的设计方法:面向数据结构的设计方法:nJackson方法:英国:英国人人M.Jackson在在1973年提年提出
47、出nWarnier方法:法国:法国人人J.D.Warnier在在1973年提年提出出6.4 面向数据结构设计方法面向数据结构设计方法面向数据结构的设计方法 6.4 面向数据结构设计方法面向数据结构设计方法映射映射数据结构数据结构(Jackson图图)程序结构程序结构(Jackson图图)程序过程表示程序过程表示(Jackson伪代码伪代码)程序分析程序分析程序设计程序设计一. Jackson图 6.4 面向数据结构设计方法面向数据结构设计方法wJacksonJackson图描述数据结构图描述数据结构w小圈表示选择结构,星号表示重复结构。AB D C ACBDAB*选择选择结构结构根据条件,A是
48、B或C或D中的某一个重复重复结构结构A由B出现N次(N0)组成顺序顺序结构结构A由B、C、D 3个元素顺序组成每个元素只出现一次,出现的次序依次为B、C、D JacksonJackson图有下述优点图有下述优点:1. 1. 便于表示层次结构,而且是对结构进行便于表示层次结构,而且是对结构进行自顶向下分解的有力工具;自顶向下分解的有力工具;2. 2. 形象直观可读性好;形象直观可读性好;3. 3. 既能表示数据结构也能表示程序结构既能表示数据结构也能表示程序结构( (因因为结构程序设计也只使用上述为结构程序设计也只使用上述3 3种基本控制种基本控制结构结构) )。6.4 面向数据结构设计方法面向
49、数据结构设计方法一. Jackson图 二. 改进的Jackson图6.4 面向数据结构设计方法面向数据结构设计方法w改进:改进:n选择条件或或循环结束条件直接在图上表示直接在图上表示出出来,来,增强图的表达能力,容易直接把图翻译增强图的表达能力,容易直接把图翻译成程序成程序n框间框间连线为直线连线为直线而不是斜线,从而而不是斜线,从而容易在行容易在行式打印机上输出式打印机上输出。二. 改进的Jackson图 6.4 面向数据结构设计方法面向数据结构设计方法选择重复AB*I(i)顺序ACBDABS(i)ABDS(i)C可选在构成在构成顺序结构的元素中中不能有重复出现或选择出现的元素即:即:第一
50、个图中的不能是在右上角有小圆圈或星号的第一个图中的不能是在右上角有小圆圈或星号的元素。元素。wJacksonJackson图、层次图和层次方框图的区别:图、层次图和层次方框图的区别:6.4 面向数据结构设计方法面向数据结构设计方法图名图名方框连线用途阶段Jackson图图 数据或程序数据或程序 组成组成设计模块内部设计模块内部处理过程处理过程详细详细设计设计层次图层次图模块模块调用调用描绘软件总体描绘软件总体结构结构总体总体设计设计层次方框图层次方框图数据数据抽象抽象分析用户需要分析用户需要的数据结构的数据结构需求需求分析分析二. 改进的Jackson图 三. Jackson方法 6.4 面向
51、数据结构设计方法面向数据结构设计方法三. Jackson方法 1. 五个基本步骤6.4 面向数据结构设计方法面向数据结构设计方法三. Jackson方法 1. 五个基本步骤6.4 面向数据结构设计方法面向数据结构设计方法三. Jackson方法 1. 五个基本步骤6.4 面向数据结构设计方法面向数据结构设计方法总之,描绘程序结构的总之,描绘程序结构的JacksonJackson图应该综合图应该综合输入数据结构和输出数据结构的层次关系而导出来。而导出来。 步骤步骤4 4:列出所有列出所有操作和条件(包括分支条件和循环结束条件),并,并分配分配到程序结构图的适当位置。到程序结构图的适当位置。步骤步
52、骤5 5:用用伪码表示程序表示程序。 伪码和伪码和JacksonJackson图是完全对应的图是完全对应的。顺序ACBDA seqBCDA end三. Jackson方法 1. 五个基本步骤6.4 面向数据结构设计方法面向数据结构设计方法3种基本结构对应的伪码种基本结构对应的伪码选择ABDS(i)CA select cond1 BA or cond2CA or cond3DA end三. Jackson方法 1. 五个基本步骤6.4 面向数据结构设计方法面向数据结构设计方法重复AB*I(i)A iter until condBA endA iter while condBA end三. Jac
53、kson方法 1. 五个基本步骤6.4 面向数据结构设计方法面向数据结构设计方法八. 总 结6.3 过程设计工具过程设计工具w要求掌握:要求掌握: n程序流程图程序流程图nN NS S图图nPADPAD图图nPDLPDL语言(伪码)语言(伪码) n判定树判定树 n判定判定表表相互转换面向数据结构的设计方法 6.4 面向数据结构设计方法面向数据结构设计方法映射映射数据结构数据结构(Jackson图图)程序结构程序结构(Jackson图图)程序过程表示程序过程表示(Jackson伪代码伪代码)程序分析程序分析程序设计程序设计二. 改进的Jackson图 6.4 面向数据结构设计方法面向数据结构设计
54、方法选择重复AB*I(i)顺序ACBDABS(i)ABDS(i)C可选在构成在构成顺序结构的元素中中不能有重复出现或选择出现的元素即:即:第一个图中的不能是在右上角有小圆圈或星号的第一个图中的不能是在右上角有小圆圈或星号的元素。元素。三. Jackson方法 1. 五个基本步骤6.4 面向数据结构设计方法面向数据结构设计方法三. Jackson方法 1. 五个基本步骤6.4 面向数据结构设计方法面向数据结构设计方法三. Jackson方法 1. 五个基本步骤6.4 面向数据结构设计方法面向数据结构设计方法总之,描绘程序结构的总之,描绘程序结构的JacksonJackson图应该综合图应该综合输
55、入数据结构和输出数据结构的层次关系而导出来。而导出来。 步骤步骤4 4:列出所有列出所有操作和条件(包括分支条件和循环结束条件),并,并分配分配到程序结构图的适当位置。到程序结构图的适当位置。步骤步骤5 5:用用伪码表示程序表示程序。 伪码和伪码和JacksonJackson图是完全对应的图是完全对应的。6.4 面向数据结构设计方法面向数据结构设计方法三. Jackson方法 2. 实例分析三. Jackson方法 2. 实例分析6.4 面向数据结构设计方法面向数据结构设计方法输入、输出的数据结构及对应关系分别输入、输出的数据结构及对应关系分别为:为: 输入数据结构 输出数据结构 正文文件正文
56、文件字符串字符串*字字 符符*非空格非空格空空 格格IIS输出表格输出表格表格体表格体串信息串信息*空格数空格数字符串字符串空格总数空格总数I6.4 面向数据结构设计方法面向数据结构设计方法三. Jackson方法 2. 实例分析6.4 面向数据结构设计方法面向数据结构设计方法3 3 导出程序导出程序JackSonJackSon结构图结构图 统计空格统计空格程序体程序体处理字符串处理字符串*印总数印总数I处理非空格处理非空格处理空格处理空格分析字符分析字符*S印字符串印字符串印空格数印空格数分析字符串分析字符串I输出表格输出表格表格体表格体串信息串信息*空格数空格数字符串字符串空格总数空格总数
57、I三. Jackson方法 2. 实例分析6.4 面向数据结构设计方法面向数据结构设计方法3 3 导出程序导出程序JackSonJackSon结构图结构图 统计空格统计空格程序体程序体处理字符串处理字符串*印总数印总数I处理非空格处理非空格处理空格处理空格分析字符分析字符*S印字符串印字符串印空格数印空格数分析字符串分析字符串I正文文件正文文件字符串字符串*字字 符符*非空格非空格空空 格格IIS4.4.列出所有操作和条件,并且把它们分配到程序结列出所有操作和条件,并且把它们分配到程序结构图的适当位置。构图的适当位置。(1 1)停止)停止(2 2)打开文件)打开文件(3 3)关闭文件)关闭文件
58、(4 4)印出字符串)印出字符串(5 5)印出空格数目)印出空格数目(6 6)印出空格总数)印出空格总数(7 7)sum:=sumsum:=sum1 1 / sum / sum是保存空格个数的变量是保存空格个数的变量(8 8)totalsumtotalsum:=:=totalsumtotalsumsum/ sum/ totalsumtotalsum保存空格总数保存空格总数(9 9)读入字符串)读入字符串(1010) sum:=0 sum:=0 (1111)totalsumtotalsum:=0:=0(1212)pointer:=1 /pointer:=1 /指示当前分析的字符在字符串中的位置指
59、示当前分析的字符在字符串中的位置(1313)pointer:=pointerpointer:=pointer1 1 I(1) I(1) 文件结束、文件结束、I(2) I(2) 字符串结束字符串结束 S(3) S(3) 字符是空格字符是空格三. Jackson方法 2. 实例分析6.4 面向数据结构设计方法面向数据结构设计方法w经过简单分析经过简单分析不难把这些操不难把这些操作和条件分配作和条件分配到程序结构图到程序结构图的适当位置。的适当位置。三. Jackson方法 2. 实例分析6.4 面向数据结构设计方法面向数据结构设计方法5 5、写出伪码。、写出伪码。统计空格统计空格seqseq打开文
60、件打开文件读入字符串读入字符串totalsumtotalsum=0=0程序体程序体iteriter until until文件结束文件结束 处理字符串处理字符串seqseq印字符串印字符串seqseq 印出字符串印出字符串印字符串印字符串endendsum=0sum=0pointer=1pointer=1分析字符串分析字符串iteriter until until字符串结束字符串结束 分析字符分析字符selectselect字符是空格字符是空格处理空格处理空格seqseq sum=sum+1 sum=sum+1 pointer=pointer+1 pointer=pointer+1处理空格处理
61、空格endend 分析字符分析字符oror字符不是空格字符不是空格处理非空格处理非空格seqseq pointer=pointer+1 pointer=pointer+1处理非空格处理非空格endend 分析字符分析字符endend分析字符串分析字符串endend印空格数印空格数seqseq印出空格数目印出空格数目印空格数印空格数endendtotalsumtotalsum=totalsum+sumtotalsum+sum读入字符串读入字符串 处理字符串处理字符串endend程序体程序体endend印总数印总数seqseq 印出空格总数印出空格总数印总数印总数endend关闭文件关闭文件停止停
62、止统计空格统计空格endend三. Jackson方法 3. Jackson方法小结6.4 面向数据结构设计方法面向数据结构设计方法w程序复杂度主要指模块内程序的复杂性。它直程序复杂度主要指模块内程序的复杂性。它直接关联到软件开发费用的多少,开发周期的长接关联到软件开发费用的多少,开发周期的长短和软件内部潜伏错误的多少。短和软件内部潜伏错误的多少。w减少程序复杂度,可提高软件的简单性和可理减少程序复杂度,可提高软件的简单性和可理解性,并使软件开发费用减少,开发周期缩短,解性,并使软件开发费用减少,开发周期缩短,软件内部潜藏错误减少。软件内部潜藏错误减少。6.5 程序复杂度定量度量程序复杂度定量
63、度量程序复杂度程序复杂度6.5 程序复杂度定量度量程序复杂度定量度量w定量度量定量度量程序复杂程度程序复杂程度的用处:的用处:n程序的复杂程度乘以适当常数程序的复杂程度乘以适当常数估算出软件中估算出软件中错误的数量错误的数量以及所需的以及所需的开发工作量开发工作量,可用于,可用于比较两个不同的设计或两个不同算法的优劣;比较两个不同的设计或两个不同算法的优劣;n可以作为可以作为模块规模模块规模的精确限度。的精确限度。程序复杂度程序复杂度为了度量程序复杂性,要求复杂性度为了度量程序复杂性,要求复杂性度量应满足以下假设:量应满足以下假设: 对于不合理的程序,例如对于长度动态对于不合理的程序,例如对于
64、长度动态增长的程序,或者对于原则上无法排错的增长的程序,或者对于原则上无法排错的程序,不应当使用它进行复杂性计算;程序,不应当使用它进行复杂性计算; 它可以用来计算任何一个程序的复杂性它可以用来计算任何一个程序的复杂性;一. McCabe 方 法6.5 程序复杂度定量度量程序复杂度定量度量什么是程序图?什么是程序图?一. McCabe 方 法6.5 程序复杂度定量度量程序复杂度定量度量程序图的基本元素程序图的基本元素一. McCabe 方 法6.5 程序复杂度定量度量程序复杂度定量度量一. McCabe 方 法6.5 程序复杂度定量度量程序复杂度定量度量程序流程图与对应的流图程序流程图与对应的
65、流图6.5 程序复杂度定量度量程序复杂度定量度量一. McCabe 方 法6.5 程序复杂度定量度量程序复杂度定量度量w流图中的结点可能具有以下的含义:流图中的结点可能具有以下的含义: n过程块:一组:一组连续执行的无分支的语句。在过程块中,语句。在过程块中,如果块中的某个语句被执行,那么块中的所有其它语如果块中的某个语句被执行,那么块中的所有其它语句也将会被执行。句也将会被执行。 例如:结点例如:结点2 2和和3 3、4 4和和5 5。反例:。反例:3 3和和4 4不是过程块;不是过程块; n汇聚点:程序中控制流的结合点(:程序中控制流的结合点(如果程序流程图中这个结合点没有对应的处理框应该
66、在流图中补上)。)。例如:结点例如:结点9 9和和1010n判定点(谓词结点):程序中(谓词结点):程序中控制流的分叉点。 例如:结点例如:结点3 3、6 6图图 由由PDL翻译成的流图翻译成的流图一. McCabe 方 法6.5 程序复杂度定量度量程序复杂度定量度量w环形复杂度环形复杂度V(G): 强连通图强连通图G中线性无关的中线性无关的有向环的个数。三种计算方法:有向环的个数。三种计算方法:nV(G) = 图中平面区域的个数图中平面区域的个数nV(G) = P(判定结点的个数)(判定结点的个数)+ 1nV(G) = E(边数边数)N(结点数结点数)+2 环形复杂性的计算方法环形复杂性的计
67、算方法6.5 程序复杂度定量度量程序复杂度定量度量环形复杂性的计算方法环形复杂性的计算方法6.5 程序复杂度定量度量程序复杂度定量度量环形复杂性的计算方法环形复杂性的计算方法6.5 程序复杂度定量度量程序复杂度定量度量一. McCabe 方法6.5 程序复杂度定量度量程序复杂度定量度量325461程序流程图程序流程图一. McCabe 方法6.5 程序复杂度定量度量程序复杂度定量度量例:1,23,4756结点数结点数: N5边数:边数: E6判定结点数:判定结点数: P2区域数:区域数:3环型复杂度:环型复杂度:3 3程序程序流程图流程图流图流图325461二. McCabe 方 法6.5 程
68、序复杂度定量度量程序复杂度定量度量 If a or b Then X Else YEnd If a bY X TrueFalse True False 将复合条件分解成若干简单条将复合条件分解成若干简单条件。件。 复合条件复合条件:在条件中包含了一在条件中包含了一个或多个布尔运算符个或多个布尔运算符(逻辑逻辑OR,AND,NAND,NOR)。McCabe的的缺点缺点是:是:n对于不同种类的控制流的复杂性不能区分对于不同种类的控制流的复杂性不能区分n简单简单IFIF语句与循环语句的复杂性同等看待语句与循环语句的复杂性同等看待n模块间接口当成一个简单分支一样处理模块间接口当成一个简单分支一样处理二
69、. McCabe 方 法6.5 程序复杂度定量度量程序复杂度定量度量一. McCabe 方 法6.5 程序复杂度定量度量程序复杂度定量度量w环形复杂度的用途:环形复杂度的用途:l环形复杂度是对环形复杂度是对测试难度测试难度的一种的一种定量度量定量度量l对软件最终的对软件最终的可靠性可靠性给出一种给出一种预测预测 l模块规模模块规模以以V(G)10为宜为宜二. Halstead方法wHalsteadHalstead方法是另一个著名的方法,方法是另一个著名的方法,它根据程序中它根据程序中运算符和操作数的总运算符和操作数的总数数来度量程序的复杂程度。来度量程序的复杂程度。令令: N1: N1为程序中
70、运算符出现的总次数,为程序中运算符出现的总次数,N2N2为操作数出现的总次数,为操作数出现的总次数,程序实际程序实际长度长度N N定义为:定义为: N = N1 + N2N = N1 + N26.5 程序复杂度定量度量程序复杂度定量度量w详细设计完成之后,可以知道程序中使用详细设计完成之后,可以知道程序中使用的不同运算符的不同运算符( (包括关键字包括关键字) )的个数的个数n1n1,以,以及不同操作数及不同操作数( (变量和常数变量和常数) )的个数的个数n2n2。HalsteadHalstead给出给出预测程序长度预测程序长度H H的公式如下:的公式如下: H = n1 logH = n1
71、 log2 2 n1 + n2 log n1 + n2 log2 2 n2 n2w 这里,这里,H H 是程序长度的预测值,并不等是程序长度的预测值,并不等于程序中语句个数。于程序中语句个数。二. Halstead方法6.5 程序复杂度定量度量程序复杂度定量度量w wHalsteadHalsteadHalsteadHalstead的重要的重要的重要的重要结论结论结论结论:w w程序的实际程序的实际程序的实际程序的实际HalsteadHalsteadHalsteadHalstead长度长度长度长度N N N N可以由运算符、操作数可以由运算符、操作数可以由运算符、操作数可以由运算符、操作数n n
72、 n n算出。算出。算出。算出。即使程序还未编制完成,也能预先算出程序的实际即使程序还未编制完成,也能预先算出程序的实际即使程序还未编制完成,也能预先算出程序的实际即使程序还未编制完成,也能预先算出程序的实际HalsteadHalsteadHalsteadHalstead长度长度长度长度H H H H , 虽然它没有明确指出程序中到底有虽然它没有明确指出程序中到底有虽然它没有明确指出程序中到底有虽然它没有明确指出程序中到底有多少个语句。多少个语句。多少个语句。多少个语句。w w经过多次验证,预测的经过多次验证,预测的经过多次验证,预测的经过多次验证,预测的HalsteadHalsteadHal
73、steadHalstead长度与实际的长度与实际的长度与实际的长度与实际的HalsteadHalsteadHalsteadHalstead长度是非常接近的。长度是非常接近的。长度是非常接近的。长度是非常接近的。二. Halstead方法6.5 程序复杂度定量度量程序复杂度定量度量程序的潜在错误程序的潜在错误程序的潜在错误程序的潜在错误wHalsteadHalsteadHalsteadHalstead度量还可以用来预测程序中可能存在度量还可以用来预测程序中可能存在度量还可以用来预测程序中可能存在度量还可以用来预测程序中可能存在的错误的错误的错误的错误E E E E。预测公式为。预测公式为。预测公
74、式为。预测公式为 E E E E = ( = ( = ( = (N N N N1+1+1+1+N N N N2)2)2)2) loglogloglog2 2 2 2( ( ( (n n n n1+1+1+1+n n n n2) / 30002) / 30002) / 30002) / 3000w例如,一个程序对例如,一个程序对例如,一个程序对例如,一个程序对150150150150个运算符共使用了个运算符共使用了个运算符共使用了个运算符共使用了1200120012001200次,次,次,次,对对对对75757575个数据库项共访问个数据库项共访问个数据库项共访问个数据库项共访问13001300
75、13001300次,那么预测该程次,那么预测该程次,那么预测该程次,那么预测该程序的错误数:序的错误数:序的错误数:序的错误数: E E E E = (1200+1300)= (1200+1300)= (1200+1300)= (1200+1300) loglogloglog2 2 2 2(150+75)/3000 (150+75)/3000 (150+75)/3000 (150+75)/3000 6.5 6.5 6.5 6.5 即预测该程序中可能包含即预测该程序中可能包含即预测该程序中可能包含即预测该程序中可能包含6 6 6 67 7 7 7个错误个错误个错误个错误二. Halstead方法
76、6.5 程序复杂度定量度量程序复杂度定量度量 有人曾对从有人曾对从300300条到条到1200012000条语句范围内条语句范围内的程序核实了上述公式,发现预测的错误的程序核实了上述公式,发现预测的错误数与实际错误数相比误差在数与实际错误数相比误差在8%8%之内。之内。二. Halstead方法6.5 程序复杂度定量度量程序复杂度定量度量w没有注意调用的深度。没有注意调用的深度。没有注意调用的深度。没有注意调用的深度。Halstead Halstead Halstead Halstead 公式应当对调公式应当对调公式应当对调公式应当对调用子程序的不同深度区别对待。在计算嵌套调用子程序的不同深度
77、区别对待。在计算嵌套调用子程序的不同深度区别对待。在计算嵌套调用子程序的不同深度区别对待。在计算嵌套调用的运算符和操作数时,应乘上一个调用深度用的运算符和操作数时,应乘上一个调用深度用的运算符和操作数时,应乘上一个调用深度用的运算符和操作数时,应乘上一个调用深度因子。这样可以增大嵌套调用时的错误预测率。因子。这样可以增大嵌套调用时的错误预测率。因子。这样可以增大嵌套调用时的错误预测率。因子。这样可以增大嵌套调用时的错误预测率。w没有把不同类型的运算符,操作数与不同的错没有把不同类型的运算符,操作数与不同的错没有把不同类型的运算符,操作数与不同的错没有把不同类型的运算符,操作数与不同的错误发生率联系起来,而是把它们同等看待。误发生率联系起来,而是把它们同等看待。误发生率联系起来,而是把它们同等看待。误发生率联系起来,而是把它们同等看待。例例例例如,对简单如,对简单如,对简单如,对简单ifififif语句与语句与语句与语句与whilewhilewhilewhile语句就没有区别。语句就没有区别。语句就没有区别。语句就没有区别。二. Halstead方法6.5 程序复杂度定量度量程序复杂度定量度量