Download presentation
Presentation is loading. Please wait.
1
第五章 详细设计
2
详细设计阶段的目的与任务 详细设计的目的: 为软件结构图 (SC) 中的每一个模块确定采用的算法和模块内数据结构,用某种选定的表达工具给出清晰的描述。 为每一模块确定算法 确定每一模块使用的数据结构 确定模块的外部接口和用户界面 为每一模块设计一组测试用例 详细设计阶段的主要任务 设计系统测试用例
3
详细设计说明书 (GB8567 — 88)
4
详细设计阶段的任务还不是具体地编写程序,而是要设计出程序的“蓝图”,以后程序员将根据这个蓝图写出实际的程序代码。因此,详细设计的结果基本上决定了最终的程序代码的质量。考虑程序代码的质量时必须注意,程序的“读者”有两个,那就是计算机和人。
5
5.1 结构程序设计 1965年 -- E.W.Dijkstra提出 “可以从高级语言中取消GO TO语句”,“程序的质量与程序中所包含的GO TO 语句的数量成反比”。 1966年 -- Bohm和Jacopini证明了:只用3种基本的控制结构(顺序、选择、循环)就能实现任何单入口单出口的程序。该证明为结构程序设计技术奠定了理论基础。 1968年 -- Dijkstra再次建议从一切高级语言中取消GO TO语句,只使用3种基本控制结构写程序。他的建议引起了激烈争论,要创立一种新的程序设计思想、方法和风格。
6
5.1 结构程序设计 1971年 -- IBM公司在纽约时报信息库管理系统的设计中,在美国宇航局空间实验室飞行模拟系统的设计中,结构程序设计技术获得圆满成功。前者包含83 000行高级语言源程序,后者包含40万行源程序,而且在设计过程中用户需求又曾有过很多改变。 1972年 -- IBM公司的Mills进一步提出,程序应该只有一个入口和一个出口,从而补充了结构程序设计的规则。
7
5.1 结构程序设计 结构程序设计的经典定义如下所述:“如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。” “结构程序设计是尽可能少用GO TO语句的程序设计方法。最好仅在检测出错误时才使用GO TO语句,而且应该总是使用前向GO TO语句。”
8
5.2 人机界面设计 人机界面的设计质量,直接影响用户对软件产品的评价,从而影响软件产品的竞争力和寿命,因此,必须对人机界面设计给予足够重视。 近年来,人机界面在系统中所占的比例越来越大,在个别系统中人机界面的设计工作量甚至占总设计量的一半以上。
9
设计人机界面中的4个问题: 1)系统响应时间 2)用户帮助设施 3)出错信息处理 4)命令交互
1. 人机界面设计问题 设计人机界面中的4个问题: 1)系统响应时间 2)用户帮助设施 3)出错信息处理 4)命令交互 1. 系统响应时间 系统响应时间是许多交互式系统用户经常抱怨的问题。一般说来,系统响应时间指从用户完成某个控制动作(例如,按回车键或点击鼠标),到软件给出预期的响应(输出信息或做动作)之间的这段时间。 系统响应时间有两个重要属性,分别是长度和易变性。如果系统响应时间过长,用户就会感到紧张和沮丧。但是,当用户工作速度是由人机界面决定的时候,系统响应时间过短也不好,这会迫使用户加快操作节奏,从而可能会犯错误。 易变性指系统响应时间相对于平均响应时间的偏差,在许多情况下,这是系统响应时间的更重要的属性。即使系统响应时间较长,响应时间易变性低也有助于用户建立起稳定的工作节奏。例如,稳定在1秒的响应时间比从0.1秒到2.5秒变化的响应时间要好。用户往往比较敏感,他们总是担心响应时间变化暗示系统工作出现了异常。 2. 用户帮助设施 几乎交互式系统的每个用户都需要帮助,当遇到复杂问题时甚至需要查看用户手册以寻找答案。大多数现代软件都提供联机帮助设施,这使得用户无须离开用户界面就能解决自己的问题。 常见的帮助设施可分为集成的和附加的两类。集成的帮助设施从一开始就设计在软件里面,通常,它对用户工作内容是敏感的,因此用户可以从与刚刚完成的操作有关的主题中选择一个请求帮助。显然,这可以缩短用户获得帮助的时间,增加界面的友好性。附加的帮助设施是在系统建成后再添加到软件中的,在多数情况下它实际上是一种查询能力有限的联机用户手册。人们普遍认为,集成的帮助设施优于附加的帮助设施。 具体设计帮助设施时,必须解决下述的一系列问题。 (1) 在用户与系统交互期间,是否在任何时候都能获得关于系统任何功能的帮助信息?有两种选择:提供部分功能的帮助信息和提供全部功能的帮助信息。 (2) 用户怎样请求帮助?有3种选择:帮助菜单,特殊功能键和HELP命令。 (3) 怎样显示帮助信息?有3种选择:在独立的窗口中,指出参考某个文档(不理想)和在屏幕固定位置显示简短提示。 (4) 用户怎样返回到正常的交互方式中?有两种选择:屏幕上的返回按钮和功能键。 (5) 怎样组织帮助信息?有3种选择:平面结构,信息的层次结构和超文本结构。 3. 出错信息处理 出错信息和警告信息,是出现问题时交互式系统给出的“坏消息”。出错信息设计得不好,将向用户提供无用的甚至误导的信息,反而会加重用户的挫折感。 一般说来,交互式系统给出的出错信息或警告信息,应该具有下述属性。 (1) 信息应该用用户可以理解的术语描述问题。 (2) 信息应该提供有助于从错误中恢复的建设性意见。 (3) 信息应该指出错误可能导致哪些负面后果(例如,破坏数据文件),以便用户检查是否出现了这些问题,并在确实出现问题时及时解决。 (4) 信息应该伴随着听觉上或视觉上的提示,例如,在显示信息时同时发出警告铃声,或者信息用闪烁方式显示,或者信息用明显表示出错的颜色显示。 (5) 信息不能带有指责色彩,也就是说,不能责怪用户。 当确实出现了问题的时候,有效的出错信息能提高交互式系统的质量,减轻用户的挫折感。 4. 命令交互 命令行曾经是用户和系统软件交互的最常用的方式,并且也曾经广泛地用于各种应用软件中。现在,面向窗口的、点击和拾取方式的界面已经减少了用户对命令行的依赖,但是,许多高级用户仍然偏爱面向命令行的交互方式。在多数情况下,用户既可以从菜单中选择软件功能,也可以通过键盘命令序列调用软件功能。 在提供命令交互方式时,必须考虑下列设计问题。 (1) 是否每个菜单选项都有对应的命令? (2) 采用何种命令形式?有3种选择:控制序列(例如,Ctrl+P),功能键和键入命令。 (3) 学习和记忆命令的难度有多大?忘记了命令怎么办? (4) 用户是否可以定制或缩写命令? 在越来越多的应用软件中,人机界面设计者都提供了“命令宏机制”,利用这种机制用户可以用自己定义的名字代表一个常用的命令序列。需要使用这个命令序列时,用户无须依次键入每个命令,只需输入命令宏的名字就可以顺序执行它所代表的全部命令。 在理想的情况下,所有应用软件都有一致的命令使用方法。如果在一个应用软件中命令Ctrl+D表示复制一个图形对象,而在另一个应用软件中Ctrl+D命令的含义是删除一个图形对象,显然会使用户感到困惑,并且往往会导致用错命令。
10
2.人机界面设计过程 用户界面设计是一个迭代的过程。 创建设计模型 用原型实现设计模型 根据用户意见进行修改 由用户试用和评估
11
3. 人机界面设计指南 1)一般交互指南 一般交互指南涉及信息显示、数据输入和系统整体控制,因此,这类指南是全局性的,忽略它们将承担较大风险。
12
1)一般交互指南 保持一致性 应该为人机界面中的菜单选择、命令输入、数据显示以及众多的其他功能,使用一致的格式。 (2) 提供有意义的反馈
应向用户提供视觉的和听觉的反馈,以保证在用户和系统之间建立双向通信。
13
1)一般交互指南 在执行有较大破坏性的动作之前要求用户确认 (4) 允许取消绝大多数操作
如果用户删除一个文件,或覆盖一些重要信息,或终止一个程序的运行,应该给出“您是否确实要…”的信息,以请求用户确认他的命令。 (4) 允许取消绝大多数操作 UNDO或REVERSE功能曾经使众多终端用户避免了大量时间浪费。每个交互式系统都应该能方便地取消已完成的操作。
14
1)一般交互指南 (5) 减少在两次操作之间必须记忆的信息量。 (6) 提高对话、移动和思考的效率。
不应该期望用户能记住在下一步操作中需使用的一大串数字或标识符。应该尽量减少记忆量。 (6) 提高对话、移动和思考的效率。 应该尽量减少用户击键的次数,设计屏幕布局时应该考 虑尽量减少鼠标移动的距离,应该尽量避免出现用户问“这是什么意思?”的情况。 (7) 允许犯错误。系统应该能保护自己不受严重错误的破坏。
15
1)一般交互指南 (8) 按功能对动作分类,并据此设计屏幕布局。 (9) 提供对用户工作内容敏感的帮助设施。
下拉菜单的一个主要优点就是能按动作类型组织命令。实际上,设计者应该尽力提高命令和动作组织的“内聚性”。 (9) 提供对用户工作内容敏感的帮助设施。 (10) 用简单动词或动词短语作为命令名。 过长的命令名难于识别和记忆,也会占用过多的菜单空间。
16
3. 人机界面设计指南 2) 信息显示指南 如果人机界面显示的信息是不完整的、含糊的或难于理解的,则该应用系统显然不能满足用户的需求。可以用多种不同方式“显示”信息:用文字、图形和声音;按位置、移动和大小;使用颜色、分辨率和省略。
17
2)信息显示指南 只显示与当前工作内容有关的信息 (3) 使用一致的标记、标准的缩写和可预知颜色。
用户在获得有关系统的特定功能的信息时,不必看到与之无关的数据、菜单和图形。 (2) 不要用数据淹没用户,应该用便于用户迅速吸取信息的方式来表示数据 例如,可以用图形或图表来取代庞大的表格。 (3) 使用一致的标记、标准的缩写和可预知颜色。 显示的含义应该非常明确,用户无须参照其他信息源就 能理解。
18
2)信息显示指南 (4) 允许用户保持可视化的语境。 (5) 产生有意义的出错信息。
如果对所显示的图形进行缩放,原始的图像应该一直显示着(以缩小的形式放在显示屏的一角),以使用户知道当前看到的图像部分在原图中所处的相对位置。 (5) 产生有意义的出错信息。
19
2)信息显示指南 (6) 使用大小写、缩进和文本分组以帮助理解。 (7) 使用窗口分隔不同类型的信息。
人机界面显示的信息大部分是文字,文字的布局和形式对用户从中提取信息的难易程度有很大影响。 (7) 使用窗口分隔不同类型的信息。 利用窗口用户能够方便地“保存”多种不同类型的信息。
20
2)信息显示指南 (8) 使用“模拟”显示方式表示信息,以使信息更容易被用户提取。
例如,显示炼油厂储油罐的压力时,如果简单地用数字表示压力,则不易引起用户注意。但是,如果用类似温度计的形式来表示压力,用垂直移动和颜色变化来指示危险的压力状况,就容易引起用户的警觉,因为这样做为用户提供了绝对和相对两方面的信息。 (9) 高效率地使用显示屏。当使用多窗口时,应该有足够的空间使得每个窗口至少都能显示出一部分。此外,屏幕大小应该选得和应用系统的类型相配套(这实际上是一个系统工程问题)。
21
3. 人机界面设计指南 2) 数据输入指南 用户的大部分时间用在选择命令、键入数据和向系统提供输入。在许多应用系统中,键盘仍然是主要的输入介质,但是,鼠标、数字化仪和语音识别系统正迅速地成为重要的输入手段
22
3)数据输入指南 (1)尽量减少用户的输入动作。 (2) 保持信息显示和数据输入之间的一致性。显示的视觉特征应该与输入域一致。
最重要的是减少击键次数,这可以用下列方法实现:用鼠标从预定义的一组输入中选一个;用“滑动标尺”在给定的值域中指定输入值;利用宏把一次击键转变成更复杂的输入数据集合。 (2) 保持信息显示和数据输入之间的一致性。显示的视觉特征应该与输入域一致。 (3) 允许用户自定义输入。 专家级的用户可能希望定义自己专用的命令或略去某些类型的警告信息和动作确认,人机界面应该为用户提供这样做的机制。
23
3)数据输入指南 (4) 交互应该是灵活的,并且可调整成用户最喜欢 的输入方式。
(4) 交互应该是灵活的,并且可调整成用户最喜欢 的输入方式。 用户类型与喜好的输入方式有关,例如,秘书可能非常喜欢键盘输入,而经理可能更喜欢使用鼠标之类的点击设备。 (5) 使在当前动作语境中不适用的命令不起作用。这可使得用户不去做那些肯定会导致错误的动作。
24
3)数据输入指南 (6) 让用户控制交互流。 (7) 对所有输入动作都提供帮助。 (8) 消除冗余的输入。
用户应该能够跳过不必要的动作,改变所需做的动作的顺序(在应用环境允许的前提下),以及在不退出程序的情况下从错误状态中恢复正常。 (7) 对所有输入动作都提供帮助。 (8) 消除冗余的输入。 除非可能发生误解,否则不要要求用户指定输入数据的单位;尽可能提供默认值;绝对不要要求用户提供程序可以自动获得或计算出来的信息。
25
描述程序处理过程的工具称为过程设计工具,它们可以分为图形、表格、和语言3类。
5.3 过程设计的工具 描述程序处理过程的工具称为过程设计工具,它们可以分为图形、表格、和语言3类。 不论是哪类工具,对它们的基本要求都是能提供对设计的无歧义的描述。即:应该能指明控制流程、处理功能、数据组织,以及其他方面的实现细节,从而在编码阶段能把对设计的描述直接翻译成程序代码。 程序流程图 N-S 图 PAD 图 判定表 判定树 描述工具 PDL 伪代码
26
1. 程序流程图 程序流程图也称为程序框图,它使用五种基本控制结构:
27
示例
28
思考:生成部门树的算法和程序 流程图?
29
从20世纪40年代末到70年代中期,程序流程图一直是软件设计的主要工具。
它的主要优点是对控制流程的描绘很直观,便于初学者掌握。
30
程序流程图的主要缺点如下: (1) 程序流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构。 (2) 程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制 (3) 程序流程图不易表示数据结构。
31
2. 盒图(N-S图) Nassi和Shneiderman提出了盒图,又称为N-S图。它有下述特点: (1) 功能域(即,一个特定控制结构的作用域)明确,可以从盒图上一眼就看出来。 (2) 不可能任意转移控制。 (3) 很容易确定局部和全程数据的作用域。 (4) 很容易表现嵌套关系,也可以表示模块的层次结构。
32
N-S图对五种基本控制结构,由五种图形构件表示
(a) 顺序;(b) 选择;(c) CASE多分支;(d) 循环;(e) 调用子程序A
33
示 例
34
3. PAD图 -- Problem Analysis Diagram
特点:克服了传统的流程图不能清晰表现程序结构的缺点,又不像N-S图那样受到把全部程序约束在一个方框内的限制。
35
PAD图的基本符号 (a) 顺序;(b) 选择;(c) CASE多分支;(d) WHILE型循环;
(e) UNTIL型循环;(f) 语句标号;(g) 定义
36
使用PAD图提供的定义功能来逐步求精的例子
(a) 初始的PAD图;(b) 使用def符号细化处理框P2
38
(3) 用PAD图表现程序逻辑,易读、易懂、易记。
程序从图中最左竖线上端的结点开始执行,自上而下,从左向右顺序执行,遍历所有结点。
39
(5) 即可用于表示程序逻辑,也可用于描绘数据结构。
PAD图的主要优点: (4) 容易将PAD图转换成高级语言源程序。 (5) 即可用于表示程序逻辑,也可用于描绘数据结构。 (6) PAD图的符号支持自顶向下、逐步求精方法的使用。
40
4. 判定树 中 级 职 称 不 分 房 初婚 分房决策 > 5年 3-5 年 < 3年 优先分房 非中 级职称 正常分房
4. 判定树 中 级 职 称 不 分 房 初婚 分房决策 > 5年 3-5 年 < 3年 优先分房 非中 级职称 正常分房 晚 婚 非晚婚
41
5. 判定表 1 2 3 4 5 6 说 明 条 件 婚 龄 >5年 3-5年 <3年 (-) 表示任意 (Y) 条件满足
5. 判定表 1 2 3 4 5 6 说 明 条 件 婚 龄 >5年 3-5年 <3年 (-) 表示任意 (Y) 条件满足 (N) 条件不满足 (*) 选中的决策 中级职称 Y N ----- 晚 婚 ---- 决 策 优先分房 * 正常分房 不分房
42
6. PDL (Program Design Language)
伪码的语法规则分为“外语法”和“内语法”。 PDL具有严格的关键字外语法,用于定义控制结构和数据结构,同时它的表示实际操作和条件的内语法可使用自然语言的词汇。
43
PDL举例(类c语言)
44
PDL应该具有下述特点: 关键字的固定语法,它提供了结构化控制结构、数据说明和模块化的特点。为了使结构清晰和可读性好,通常在所有可能嵌套使用的控制结构的头和尾都有关键字例如,if…(或endif)等等。 (2) 自然语言的自由语法,它描述处理特点。
45
PDL应该具有下述特点: (3) 数据说明的手段。应该既包括简单的数据结构,又包括复杂的数据结构。 (4) 模块定义和调用的技术,应该提供各种接口描述模式
46
(2) 可以使用普通的正文编辑程序或文字处理系统,很方便地完成PDL的书写和编辑工作。
可以作为注释直接插在源程序中间。 (2) 可以使用普通的正文编辑程序或文字处理系统,很方便地完成PDL的书写和编辑工作。 (3) 已经有自动处理程序存在,而且可以自动由PDL生成程序代码。 这样做能促使维护人员在修改程序代码的同时也相应地修改PDL注释,因此有助于保持文档和程序的一致性,提高了文档的质量。
47
PDL的缺点是不如图形工具形象直观,描述复杂的条件组合与动作间的对应关系时,不如判定表清晰简单。
48
在许多应用领域中信息都有清楚的层次结构,输入数据、内部存储的信息(数据库或文件)以及输出数据都可能有独特的结构。
5.4 面向数据结构的设计方法 在许多应用领域中信息都有清楚的层次结构,输入数据、内部存储的信息(数据库或文件)以及输出数据都可能有独特的结构。 数据结构既影响程序的结构,又影响程序的处理过程。如:重复、选择等。 面向数据结构的设计方法的最终目标是得出对程序处理过程的描述。
49
这种设计方法并不明显地使用软件结构的概念,模块是设计过程的副产品,对于模块独立原理也没有给予应有的重视。
5.4 面向数据结构的设计方法 这种设计方法并不明显地使用软件结构的概念,模块是设计过程的副产品,对于模块独立原理也没有给予应有的重视。 这种方法最适合于在详细设计阶段使用,也就是说,在完成了软件结构设计之后,可以使用面向数据结构的方法来设计每个模块的处理过程。
50
Jackson 方法由英国的M.Jackson提出,在西欧率先流行。这个方法适用于数据处理类问题,特别是企事业管理的一类软件系统。
5.4 面向数据结构的设计方法 面向数据结构的方法,其代表有Jackson方法和Warnier提出的LCP方法(Logical Construction of Programs ,详见参考文献)。 Jackson 方法由英国的M.Jackson提出,在西欧率先流行。这个方法适用于数据处理类问题,特别是企事业管理的一类软件系统。
51
5.4 面向数据结构的设计方法 Jackson方法的目标是获得简单清晰的设计方案,因为这样的方案易于理解、易于修改。为了达到这个目标,Jackson方法的设计原则是:使程序结构同数据结构相对应。
52
Jackson图 --- P130 改进的Jackson图 --- P131 Jackson方法步骤 --- P132
自学!!
53
经过详细设计之后每个模块的内容都非常具体了,人们希望能够定量度量软件的性质。
5.5 程序复杂程度的定量度量 经过详细设计之后每个模块的内容都非常具体了,人们希望能够定量度量软件的性质。
54
--- 把程序的复杂程度乘以适当常数即可估算出软件中错误的数量以及软件开发需要用的工作量;
5.5 程序复杂程度的定量度量 定量度量程序复杂程度的价值: --- 把程序的复杂程度乘以适当常数即可估算出软件中错误的数量以及软件开发需要用的工作量; --- 定量度量的结果可以用来比较两个不同的设计或两个不同算法的优劣; --- 程序的定量的复杂程度可以作为模块规模的精确限度。
55
程序复杂性度量 程序复杂性主要指模块内程序的复杂性。它直接关系到软件开发费用的多少,开发周期的长短和软件内部潜伏错误的多少。 减少程序复杂性,可提高软件的简单性和可理解性,并使软件开发费用减少,开发周期缩短,软件内部潜藏错误减少。
56
统计程序中的源代码的行数 1、代码行度量法: 如果设每行代码的出错率为每100行源程序中可能的错误数目。例如,每行代码的出错率为 1%,也就是说,每 100 行源程序中就可能有一个错误。 较小的程序 --- 1.3%~1.8%/行 较大的程序 --- 2.7%~3.2%/行
57
McCabe度量法,又称环路复杂性度量,是一种基于程序控制流的复杂性度量方法。
它基于一个程序模块的程序图中环路的个数,因此计算它先要画出程序图。 程序图是退化的程序流程图。流程图中每个处理都退化成一个结点,流线变成连接不同结点的有向弧(边)。 程序图仅描述程序内部的控制流程,完全不表现对数据的具体操作,以及分支和循环的具体条件。
58
1) 程序图符号
59
2) 从流程图导出程序图 T C1 C2 C A B E D A 开始 C1 B C E D 结束 C2 T F
60
环形复杂度定量度量程序的逻辑复杂度。有了描绘程序控制流的流图G之后,可以用下述3种方法中的任何一种来计算环形复杂度。
3). 计算环形复杂度V(G)的方法 环形复杂度定量度量程序的逻辑复杂度。有了描绘程序控制流的流图G之后,可以用下述3种方法中的任何一种来计算环形复杂度。 (1) 流图中的区域数等于环形复杂度 区域:由边和结点围成的面积称为区域,当计算区域数时应该包括图外部未被围起来的那个区域。 V(G) = 4
61
(2) 流图G的环形复杂度V(G)= E – N + 2 其中,E是流图中边的条数,N是结点数。
(3) 流图G的环形复杂度V(G)= P + 1 其中,P是流图中判定结点的数目。 V(G) = 4
62
4). 环形复杂度的用途 程序的环形复杂度取决于程序控制流的复杂程度。当程序内分支数或循环个数增加时,环形复杂度也随之增加,因此它是对测试难度的一种定量度量。 实践表明,模块规模以V(G)≤10为宜,也就是说,V(G)=10是模块规模的一个更科学更精确的上限。
63
5). 这种度量的缺点是: 对于不同种类的控制流的复杂性不能区分 一个具有1000行的顺序程序与一行语句的复杂性相同
简单IF语句与循环语句的复杂性同等看待 嵌套IF语句与简单CASE语句的复杂性是一 样的 模块间接口当成一个简单分支一样处理 一个具有1000行的顺序程序与一行语句的复杂性相同
64
3. Halstead方法 Halstead方法是另一个著名的方法,它根据程序中运算符和操作数的总数来度量程序的复杂程度。
令: N1为程序中运算符出现的总次数,N2为操作数出现的总次数,程序实际长度N定义为: N = N1 + N2
65
详细设计完成之后,可以知道程序中使用的不同运算符(包括关键字)的个数n1,以及不同操作数(变量和常数)的个数n2。Halstead给出预测程序长度H的公式如下:
H = n1 log2 n1 + n2 log2 n2 这里,H 是程序长度的预测值,并不等于程序中语句个数。
66
在定义中,运算符包括: 算术运算符 赋值符(=或:=) 逻辑运算符 分界符(,或;或:) 关系运算符 括号运算符 子程序调用符 数组操作符 循环操作符等。 特别地,成对的运算符,例如: “begin…end”、“for…to”、 “repeat …until”、“while…do”、 “if…then…else”、“(…)”等都当做单一运算符。
67
Halstead的重要结论: 程序的实际Halstead长度N可以由运算 符、操作数n算出。即使程序还未编制 完成,也能预先算出程序的实际 Halstead长度N, 虽然它没有明确指出 程序中到底有多少个语句。 经过多次验证,预测的Halstead长度与 实际的Halstead长度是非常接近的。
68
程序的潜在错误 Halstead度量还可以用来预测程序中可能存在的错误E。预测公式为 E = (N1+N2)log2(n1+n2) / 3000
69
例如,一个程序对75个数据库项共访问1300次,对150个运算符共使用了1200次,那么预测该程序的错误数:
E = ( )log2(75+150)/3000 6.5 即预测该程序中可能包含6~7个错误 有人曾对从300条到12000条语句范围内的程序核实了上述公式,发现预测的错误数与实际错误数相比误差在8%之内。
70
Halstead度量的缺点: 没有区别自己编的程序与别人编的程序。这是与实际经验相违背的。这时应将外部调用乘上一个大于1的的常数Kf (应在1~5之间,它与文档资料的清晰度有关)。 没有考虑非执行语句。补救办法:在统计n1、n2、N1、N2时,可以把非执行语句中出现的运算对象,运算符统计在内。
71
Halstead度量的缺点: 在允许混合运算的语言中,每种运算符与它的运算对象相关。
如果一种语言有整型、实型、双精度型三种不同类型的运算对象,则任何一种基本算术运算符(+、-、×、/)实际上代表了 = 6 种运算符。在计算时应考虑这种因数据类型而引起差异的情况。
72
Halstead度量的缺点: 没有注意调用的深度。Halstead 公式应当对调用子程序的不同深度区别对待。在计算嵌套调用的运算符和运算对象时,应乘上一个调用深度因子。这样可以增大嵌套调用时的错误预测率。
73
Halstead度量的缺点: 没有把不同类型的运算对象,运算符与不同的错误发生率联系起来,而是把它们同等看待。例如,对简单if语句与while语句就没有区别。 忽视了嵌套结构(嵌套的循环语句、嵌套IF语句、括号结构等)。一般地,运算符的嵌套序列,总比具有相同数量的运算符和运算对象的非嵌套序列要复杂得多。解决的办法是对嵌套结果乘上一个嵌套因子。
74
作业: P140 第3、4、5、7、8
Similar presentations