65
第第第 第第第 第第第第 第第第第

第六章 详细设计

Embed Size (px)

DESCRIPTION

第六章 详细设计. 第六章内容概要. 详细设计概要 结构程序设计 人机界面设计 过程设计技术和工具 程序复杂程度的定量度量. ★. 详细设计概要. 详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统。 详细设计的目标不仅仅是逻辑上正确地实现每个模块的功能,更重要的是设计出的处理过程应该尽可能的简明易懂。 结构程序设计是实现上述目标的关键技术,是详细设计的逻辑基础。. 第六章内容概要. 详细设计概要 结构程序设计 人机界面设计 过程设计技术和工具 程序复杂程度的定量度量. ★. 结构程序设计. - PowerPoint PPT Presentation

Citation preview

Page 1: 第六章 详细设计

第六章第六章详细设计详细设计

Page 2: 第六章 详细设计

2 - 2011 - 软件工程 第六章 详细设计

第六章内容概要第六章内容概要 详细设计概要详细设计概要 结构程序设计结构程序设计 人机界面设计人机界面设计 过程设计技术和工具过程设计技术和工具 程序复杂程度的定量度量程序复杂程度的定量度量

★★

Page 3: 第六章 详细设计

3 - 2011 - 软件工程 第六章 详细设计

详细设计阶段的根本目标是确定应该怎样详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统。具体地实现所要求的系统。

详细设计的目标不仅仅是逻辑上正确地实详细设计的目标不仅仅是逻辑上正确地实现每个模块的功能,更重要的是设计出的现每个模块的功能,更重要的是设计出的处理过程应该尽可能的简明易懂。处理过程应该尽可能的简明易懂。

结构程序设计是实现上述目标的关键技术,结构程序设计是实现上述目标的关键技术,是详细设计的逻辑基础。是详细设计的逻辑基础。

详细设计概要详细设计概要

Page 4: 第六章 详细设计

4 - 2011 - 软件工程 第六章 详细设计

第六章内容概要第六章内容概要 详细设计概要详细设计概要 结构程序设计结构程序设计 人机界面设计人机界面设计 过程设计技术和工具过程设计技术和工具 程序复杂程度的定量度量程序复杂程度的定量度量

★★

Page 5: 第六章 详细设计

5 - 2011 - 软件工程 第六章 详细设计

结构程序设计的概念最早由结构程序设计的概念最早由 E.W.DijkstraE.W.Dijkstra在在 19651965 年提出,他指出:“可以从高级语年提出,他指出:“可以从高级语言中取消言中取消 GOTOGOTO 语句”,“程序的质量与程语句”,“程序的质量与程序中所包含的序中所包含的 GOTOGOTO 语句的数量成反比”。语句的数量成反比”。

19661966 年年 BohmBohm 和和 JacopiniJacopini 证明了,只用证明了,只用33 种基本的控制结构就能实现任何单入口单种基本的控制结构就能实现任何单入口单出口的程序。这出口的程序。这 33 种基本的控制结构是“顺种基本的控制结构是“顺序”、“选择”和“循环”。序”、“选择”和“循环”。

19681968 年年 DijkstraDijkstra 再次建议,再次建议, 19711971 年年 IBMIBM成功地应用结构程序设计在纽约时报信息库成功地应用结构程序设计在纽约时报信息库管理系统和美国宇航局飞行模拟实验中管理系统和美国宇航局飞行模拟实验中

结构程序设计结构程序设计

Page 6: 第六章 详细设计

6 - 2011 - 软件工程 第六章 详细设计

结构程序设计结构程序设计 结构程序设计的经典定义如下所述:“如结构程序设计的经典定义如下所述:“如

果一个程序的代码块仅仅通过顺序、选择果一个程序的代码块仅仅通过顺序、选择和循环这和循环这 33 种基本控制结构进行连接,并种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。”则称这个程序是结构化的。”

对经典定义的扩充“结构程序设计是尽可对经典定义的扩充“结构程序设计是尽可能少用能少用 GOTOGOTO 语句的程序设计方法。最好语句的程序设计方法。最好仅在检测出错误时才使用仅在检测出错误时才使用 GOTOGOTO 语句,而语句,而且应该总是使用前向且应该总是使用前向 GOTOGOTO 语句。”语句。”

Page 7: 第六章 详细设计

7 - 2011 - 软件工程 第六章 详细设计

结构程序设计结构程序设计 经典的结构程序设计:如果只允许使用顺经典的结构程序设计:如果只允许使用顺

序、序、 IF-THEN-ELSEIF-THEN-ELSE 型分支和型分支和 DO-WHILEDO-WHILE型循环这型循环这 33 种基本控制结构实现单入口单种基本控制结构实现单入口单出口的程序出口的程序

扩展的结构程序设计:如果除了上述扩展的结构程序设计:如果除了上述 33 种种基本控制结构之外,还允许使用基本控制结构之外,还允许使用 DO-CASEDO-CASE型多分支结构和型多分支结构和 DO-UNTILDO-UNTIL 型循环结构型循环结构

修正的结构程序设计:如果再加上允许使修正的结构程序设计:如果再加上允许使用用 LEAVE(LEAVE( 或或 BREAK)BREAK) 结构结构

Page 8: 第六章 详细设计

8 - 2011 - 软件工程 第六章 详细设计

结构程序设计结构程序设计

Page 9: 第六章 详细设计

9 - 2011 - 软件工程 第六章 详细设计

结构程序设计结构程序设计

Page 10: 第六章 详细设计

10 - 2011 - 软件工程 第六章 详细设计

第六章内容概要第六章内容概要 详细设计概要详细设计概要 结构程序设计结构程序设计 人机界面设计人机界面设计 过程设计技术和工具过程设计技术和工具 程序复杂程度的定量度量程序复杂程度的定量度量

★★

Page 11: 第六章 详细设计

11 - 2011 - 软件工程 第六章 详细设计

系统响应时间系统响应时间 用户帮助设施用户帮助设施 出错信息处理出错信息处理 命令交互命令交互

设计问题设计问题

Page 12: 第六章 详细设计

12 - 2011 - 软件工程 第六章 详细设计

系统响应时间:指从用户完成某个控制动系统响应时间:指从用户完成某个控制动作作 (( 例如,按回车键或点击鼠标例如,按回车键或点击鼠标 )) ,到软件,到软件给出预期的响应给出预期的响应 (( 输出信息或做动作输出信息或做动作 )) 之间之间的这段时间的这段时间

两个属性两个属性 长度长度 易变性易变性

系统响应时间系统响应时间

Page 13: 第六章 详细设计

13 - 2011 - 软件工程 第六章 详细设计

帮助设施分为集成的和附加的两类帮助设施分为集成的和附加的两类 具体设计帮助设施时,必须解决的问题具体设计帮助设施时,必须解决的问题

在用户与系统交互期间,是否在任何时候都能获得关于系在用户与系统交互期间,是否在任何时候都能获得关于系统任何功能的帮助信息统任何功能的帮助信息 ?? (提供部分功能的帮助信息和提(提供部分功能的帮助信息和提供全部功能的帮助信息)供全部功能的帮助信息)

用户怎样请求帮助用户怎样请求帮助 ?? (帮助菜单、特殊功能键和(帮助菜单、特殊功能键和 HELPHELP命命令)令)

怎样显示帮助信息怎样显示帮助信息 ?? (在独立的窗口中、指出参考某个文(在独立的窗口中、指出参考某个文档和在屏幕固定位置显示简短提示)档和在屏幕固定位置显示简短提示)

用户怎样返回到正常的交互方式中用户怎样返回到正常的交互方式中 ?? (屏幕上的返回按钮(屏幕上的返回按钮和功能键)和功能键)

怎样组织帮助信息怎样组织帮助信息 ?? (平面结构,信息的层次结构和超文(平面结构,信息的层次结构和超文本结构)本结构)

用户帮助设施用户帮助设施

Page 14: 第六章 详细设计

14 - 2011 - 软件工程 第六章 详细设计

交互式系统给出的出错信息或警告信息,应具交互式系统给出的出错信息或警告信息,应具备的属性:备的属性: 信息应该用用户可以理解的术语描述问题。信息应该用用户可以理解的术语描述问题。 信息应该提供有助于从错误中恢复的建设性意见。信息应该提供有助于从错误中恢复的建设性意见。 信息应该指出错误可能导致哪些负面后果信息应该指出错误可能导致哪些负面后果 信息应该伴随着听觉上或视觉上的提示 信息应该伴随着听觉上或视觉上的提示 信息不能带有指责色彩信息不能带有指责色彩

出错信息处理出错信息处理

Page 15: 第六章 详细设计

15 - 2011 - 软件工程 第六章 详细设计

在提供命令交互方式时,必须考虑的设计在提供命令交互方式时,必须考虑的设计问题:问题: 是否每个菜单选项都有对应的命令是否每个菜单选项都有对应的命令 采用何种命令形式(控制序列采用何种命令形式(控制序列 (( 例如,例如, Ctrl+Ctrl+

P)P) ,功能键和键入命令),功能键和键入命令) 学习和记忆命令的难度有多大学习和记忆命令的难度有多大 用户是否可以定制或缩写命令用户是否可以定制或缩写命令

命令交互命令交互

Page 16: 第六章 详细设计

16 - 2011 - 软件工程 第六章 详细设计

设计过程设计过程

创建界面创建界面原型原型 nn

设计者研设计者研究用户评究用户评审意见审意见

创建界面创建界面原型原型 11

初步设计初步设计

用户评审用户评审界面界面修改设计修改设计

界面设计完毕界面设计完毕

Page 17: 第六章 详细设计

17 - 2011 - 软件工程 第六章 详细设计

人机界面设计指南人机界面设计指南 一般交互指南一般交互指南

保持一致性保持一致性 提供有意义的反馈提供有意义的反馈 在执行有较大破坏性的动作之前要求用户确认在执行有较大破坏性的动作之前要求用户确认 允许取消绝大多数操作允许取消绝大多数操作 减少在两次操作之间必须记忆的信息量减少在两次操作之间必须记忆的信息量 提高对话、移动和思考的效率提高对话、移动和思考的效率 允许犯错误允许犯错误 按功能对动作分类,并据此设计屏幕布局按功能对动作分类,并据此设计屏幕布局 提供对用户工作内容敏感的帮助设施提供对用户工作内容敏感的帮助设施 用简单动词或动词短语作为命令名用简单动词或动词短语作为命令名

Page 18: 第六章 详细设计

18 - 2011 - 软件工程 第六章 详细设计

人机界面设计指南人机界面设计指南 信息显示指南信息显示指南

只显示与当前工作内容有关的信息只显示与当前工作内容有关的信息 不要用数据淹没用户不要用数据淹没用户 使用一致的标记、标准的缩写和可预知的颜色使用一致的标记、标准的缩写和可预知的颜色 允许用户保持可视化的语境允许用户保持可视化的语境 产生有意义的出错信息产生有意义的出错信息 使用大小写、缩进和文本分组以帮助理解使用大小写、缩进和文本分组以帮助理解 使用窗口分隔不同类型的信息使用窗口分隔不同类型的信息 使用“模拟”显示方式表示信息使用“模拟”显示方式表示信息 高效率地使用显示屏高效率地使用显示屏

Page 19: 第六章 详细设计

19 - 2011 - 软件工程 第六章 详细设计

人机界面设计指南人机界面设计指南 数据输入指南数据输入指南

尽量减少用户的输入动作尽量减少用户的输入动作 保持信息显示和数据输入之间的一致性保持信息显示和数据输入之间的一致性 允许用户自定义输入允许用户自定义输入 交互应该是灵活的,并且可调整成用户最喜欢交互应该是灵活的,并且可调整成用户最喜欢

的输入方式的输入方式 使在当前动作语境中不适用的命令不起作用使在当前动作语境中不适用的命令不起作用 让用户控制交互流让用户控制交互流 对所有输入动作都提供帮助对所有输入动作都提供帮助 消除冗余的输入消除冗余的输入

Page 20: 第六章 详细设计

20 - 2011 - 软件工程 第六章 详细设计

第六章内容概要第六章内容概要 详细设计概要详细设计概要 结构程序设计结构程序设计 人机界面设计人机界面设计 过程设计技术和工具过程设计技术和工具 程序复杂程度的定量度量程序复杂程度的定量度量

★★

Page 21: 第六章 详细设计

21 - 2011 - 软件工程 第六章 详细设计

过程设计技术和工具过程设计技术和工具 表达过程规格说明的工具叫做详细设计工表达过程规格说明的工具叫做详细设计工

具:具: 图形工具图形工具 表格工具表格工具 语言工具语言工具

Page 22: 第六章 详细设计

22 - 2011 - 软件工程 第六章 详细设计

过程设计技术和工具过程设计技术和工具 程序流程图(程序流程图( Program Flow ChartProgram Flow Chart ))

程序流程图本质上不是逐步求精的好工具,它程序流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构。去考虑程序的全局结构。

程序流程图中用箭头代表控制流,因此程序员程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制。精神,随意转移控制。

程序流程图不易表示数据结构。 程序流程图不易表示数据结构。

Page 23: 第六章 详细设计

23 - 2011 - 软件工程 第六章 详细设计

过程设计技术和工具过程设计技术和工具 必须限制程序流程图只能使用五种基本的必须限制程序流程图只能使用五种基本的

控制结构控制结构 需要对流程图所用的符号做出确切的规定需要对流程图所用的符号做出确切的规定

Page 24: 第六章 详细设计

24 - 2011 - 软件工程 第六章 详细设计

Page 25: 第六章 详细设计

25 - 2011 - 软件工程 第六章 详细设计

过程设计技术和工具过程设计技术和工具 盒图(盒图( Box-DiagramBox-Diagram )()( N-SN-S 图) 图) NasNas

sisi 和和 ShneidermanShneiderman 提出提出第一个任务第一个任务第二个任务第二个任务第三个任务第三个任务

(a)(a)

TTFF 条件条件

ELSEELSE部分部分

THENTHEN部分部分

(b)(b)

CASECASE 条件条件值值 22 值值 nn

CASE 2CASE 2部分部分

CASE nCASE n部分部分

……

……

值值 11CASE 1CASE 1 部分部分

(c)(c)

循环条件循环条件

DO_WHILEDO_WHILE部分部分

循环条件循环条件

DO_UNTILDO_UNTIL部分部分

(d)(d)

AA

(e)(e)

Page 26: 第六章 详细设计

26 - 2011 - 软件工程 第六章 详细设计

示例示例

Page 27: 第六章 详细设计

27 - 2011 - 软件工程 第六章 详细设计

N-SN-S图的嵌套定义形式图的嵌套定义形式

Page 28: 第六章 详细设计

28 - 2011 - 软件工程 第六章 详细设计

过程设计技术和工具过程设计技术和工具 盒图有下述特点:盒图有下述特点:

功能域功能域 ((即某个特定控制结构的作用域即某个特定控制结构的作用域 )) 明确,明确,可以从盒图上一眼就看出来。可以从盒图上一眼就看出来。

不可能任意转移控制。不可能任意转移控制。 很容易确定局部和全程数据的作用域。很容易确定局部和全程数据的作用域。 很容易表现嵌套关系,也可以表示模块的层次很容易表现嵌套关系,也可以表示模块的层次

结构。 结构。

Page 29: 第六章 详细设计

29 - 2011 - 软件工程 第六章 详细设计

过程设计技术和工具过程设计技术和工具 PADPAD(( Problem Analysis DiagramProblem Analysis Diagram )图:)图: 11

973973 年由日本日立公司发明年由日本日立公司发明 用二维树形结构的图来表示程序的控制流用二维树形结构的图来表示程序的控制流 , , 设置了五设置了五

种基本控制结构的图式,并允许递归使用。种基本控制结构的图式,并允许递归使用。

Page 30: 第六章 详细设计

30 - 2011 - 软件工程 第六章 详细设计

PADPAD描述的示例描述的示例

Page 31: 第六章 详细设计

31 - 2011 - 软件工程 第六章 详细设计

PADPAD 的扩充控制结构的扩充控制结构

Page 32: 第六章 详细设计

32 - 2011 - 软件工程 第六章 详细设计

PADPAD 图的主要优点图的主要优点 :: 使用表示结构化控制结构的使用表示结构化控制结构的 PADPAD符号所设计出来符号所设计出来

的程序必然是结构化程序的程序必然是结构化程序 PADPAD图所描绘的程序结构十分清晰图所描绘的程序结构十分清晰 用用 PADPAD图表现程序逻辑,易读、易懂、易记图表现程序逻辑,易读、易懂、易记 容易将容易将 PADPAD图转换成高级语言源程序,这种转换图转换成高级语言源程序,这种转换

可用软件工具自动完成可用软件工具自动完成 即可用于表示程序逻辑,也可用于描绘数据结构即可用于表示程序逻辑,也可用于描绘数据结构 PADPAD图的符号支持自顶向下、逐步求精方法的使用图的符号支持自顶向下、逐步求精方法的使用

过程设计技术和工具过程设计技术和工具

Page 33: 第六章 详细设计

33 - 2011 - 软件工程 第六章 详细设计

课堂练习课堂练习 画出下列程序流程图对应的画出下列程序流程图对应的 PADPAD图图

BeginBegin

AA

BB

QQ

PP EndEnd

NN

YY

NN

YY

Page 34: 第六章 详细设计

34 - 2011 - 软件工程 第六章 详细设计

A

B

while P

B

QA

T

Page 35: 第六章 详细设计

35 - 2011 - 软件工程 第六章 详细设计

过程设计技术和工具过程设计技术和工具 判定表判定表

当算法中包含多重嵌套的条件选择时,使用判当算法中包含多重嵌套的条件选择时,使用判定表能够清晰地表示复杂的条件组合与应做的定表能够清晰地表示复杂的条件组合与应做的动作之间的对应关系。 动作之间的对应关系。

判定表用于表示程序的静态逻辑。判定表用于表示程序的静态逻辑。 在判定表中的条件部分给出所有的两分支判断在判定表中的条件部分给出所有的两分支判断

的列表,动作部分给出相应的处理。的列表,动作部分给出相应的处理。 要求将程序流程图中的多分支判断都改成两分要求将程序流程图中的多分支判断都改成两分

支判断。支判断。

Page 36: 第六章 详细设计

36 - 2011 - 软件工程 第六章 详细设计

无多分支判断结构无多分支判断结构

Page 37: 第六章 详细设计

37 - 2011 - 软件工程 第六章 详细设计

Page 38: 第六章 详细设计

38 - 2011 - 软件工程 第六章 详细设计

过程设计技术和工具过程设计技术和工具 判定表判定表

优点:能够简洁、无二义性地描述所有的处理优点:能够简洁、无二义性地描述所有的处理规则。规则。

缺点:判定表表示的是静态逻辑,是在某种条缺点:判定表表示的是静态逻辑,是在某种条件取值组合情况下可能的结果,它不能表达加件取值组合情况下可能的结果,它不能表达加工的顺序,也不能表达循环结构,因此判定表工的顺序,也不能表达循环结构,因此判定表不能成为一种通用的设计工具。 不能成为一种通用的设计工具。

Page 39: 第六章 详细设计

39 - 2011 - 软件工程 第六章 详细设计

以行李托运费的算法为例说明判定表的组以行李托运费的算法为例说明判定表的组织方法。假设某航空公司规定,乘客可以织方法。假设某航空公司规定,乘客可以免费托运重量不超过免费托运重量不超过 30kg30kg 的行李。当行李的行李。当行李重量超过重量超过 30kg30kg 时,对头等舱的国内乘客超时,对头等舱的国内乘客超重部分每公斤收费重部分每公斤收费 44元,对其他舱的国内元,对其他舱的国内乘客超重部分每公斤收费乘客超重部分每公斤收费 66元,对外国乘元,对外国乘客超重部分每公斤收费比国内乘客多一倍,客超重部分每公斤收费比国内乘客多一倍,对残疾乘客超重部分每公斤收费比正常乘对残疾乘客超重部分每公斤收费比正常乘客少一半。客少一半。

过程设计技术和工具过程设计技术和工具

Page 40: 第六章 详细设计

40 - 2011 - 软件工程 第六章 详细设计

11 22 33 44 55 66 77 88 99

国内乘客国内乘客 TT TT TT TT FF FF FF FF

头等舱头等舱 TT FF TT FF TT FF TT FF

残疾乘客残疾乘客 FF FF TT TT FF FF TT TT行李重量行李重量 W≤30kW≤30kgg

TT FF FF FF FF FF FF FF FF

免费免费 ××

(W-30) ×2(W-30) ×2 ××

(W-30) ×3(W-30) ×3 ××

(W-30) ×4(W-30) ×4 ×× ××

(W-30) ×6(W-30) ×6 ×× ××

(W-30) ×8(W-30) ×8 ××

(W-30) ×12(W-30) ×12 ××

Page 41: 第六章 详细设计

41 - 2011 - 软件工程 第六章 详细设计

过程设计技术和工具过程设计技术和工具 判定树判定树

判定树是判定表的变种。判定树是判定表的变种。 优点:形式简单,比判定表更直观优点:形式简单,比判定表更直观 缺点:缺点:

简洁性不如判定表简洁性不如判定表画判定树时分枝的次序可能对最终画出的判定树的画判定树时分枝的次序可能对最终画出的判定树的

简洁程度有较大影响 简洁程度有较大影响

Page 42: 第六章 详细设计

42 - 2011 - 软件工程 第六章 详细设计

Page 43: 第六章 详细设计

43 - 2011 - 软件工程 第六章 详细设计

过程设计技术和工具过程设计技术和工具 过程设计语言(过程设计语言( PDLPDL ))

是用正文形式表示数据和处理过程的设计工具,是用正文形式表示数据和处理过程的设计工具,也被称为也被称为伪代码伪代码。。

PDLPDL 具有严格的具有严格的关键字外部语法关键字外部语法,用于定义控,用于定义控制结构和数据结构;另一方面,制结构和数据结构;另一方面, PDLPDL表示实表示实际操作和条件的际操作和条件的内部语法内部语法通常又是灵活自由的,通常又是灵活自由的,可以适应各种工程项目的需要。可以适应各种工程项目的需要。

Page 44: 第六章 详细设计

44 - 2011 - 软件工程 第六章 详细设计

过程设计技术和工具过程设计技术和工具

PROCEDUREPROCEDURE spellcheck spellcheck ISIS 查找错拼的单词 查找错拼的单词 BEGINBEGIN split document into single words split document into single words 把整个文档分离成单词把整个文档分离成单词 look up words in dictionary look up words in dictionary 在字典中查这些单词在字典中查这些单词 display words which are not in dictionary display words which are not in dictionary 显示字典中查不到的单词显示字典中查不到的单词 create a new dictionary create a new dictionary 造一新字典造一新字典 ENDEND spellcheck spellcheck

示例示例 : : 拼写检查程序拼写检查程序

Page 45: 第六章 详细设计

45 - 2011 - 软件工程 第六章 详细设计

过程设计技术和工具过程设计技术和工具 PDLPDL 作为一种设计工具有如下一些优点:作为一种设计工具有如下一些优点:

可以作为注释直接插在源程序中间。这样做能促使维可以作为注释直接插在源程序中间。这样做能促使维护人员在修改程序代码的同时也相应地修改护人员在修改程序代码的同时也相应地修改 PDLPDL注释,注释,因此有助于保持文档和程序的一致性,提高了文档的因此有助于保持文档和程序的一致性,提高了文档的质量质量

可以使用普通的正文编辑程序或文字处理系统,很方可以使用普通的正文编辑程序或文字处理系统,很方便地完成便地完成 PDLPDL 的书写和编辑工作。的书写和编辑工作。

已经有自动处理程序存在,而且可以自动由已经有自动处理程序存在,而且可以自动由 PDLPDL生成生成程序代码。程序代码。

PDLPDL 的缺点是不如图形工具形象直观,描述复杂的缺点是不如图形工具形象直观,描述复杂的条件组合与动作间的对应关系时,不如判定表的条件组合与动作间的对应关系时,不如判定表清晰简单。 清晰简单。

Page 46: 第六章 详细设计

46 - 2011 - 软件工程 第六章 详细设计

第六章内容概要第六章内容概要 详细设计概要详细设计概要 结构程序设计结构程序设计 人机界面设计人机界面设计 过程设计技术和工具过程设计技术和工具 程序复杂程度的定量度量程序复杂程度的定量度量 ★★

Page 47: 第六章 详细设计

47 - 2011 - 软件工程 第六章 详细设计

程序复杂程度的定量度量 程序复杂程度的定量度量 定量度量程序复杂程度的方法的用途:定量度量程序复杂程度的方法的用途:

把程序的复杂程度乘以适当常数即可估算出软把程序的复杂程度乘以适当常数即可估算出软件中错误的数量以及软件开发需要用的工作量;件中错误的数量以及软件开发需要用的工作量;

定量度量的结果可以用来比较两个不同的设计定量度量的结果可以用来比较两个不同的设计或两个不同算法的优劣;或两个不同算法的优劣;

程序的定量的复杂程度可以作为模块规模的精程序的定量的复杂程度可以作为模块规模的精确限度。 确限度。

Page 48: 第六章 详细设计

48 - 2011 - 软件工程 第六章 详细设计

McCabeMcCabe 方法方法 McCabeMcCabe 方法根据程序控制流的复杂程度方法根据程序控制流的复杂程度

定量度量程序的复杂程度,这样度量出的定量度量程序的复杂程度,这样度量出的结果称为结果称为程序的环形复杂度程序的环形复杂度。 。

流图流图(也称为程序图):实质上是“退化(也称为程序图):实质上是“退化了的”程序流程图,它仅仅描绘程序的控了的”程序流程图,它仅仅描绘程序的控制流程,完全不表现对数据的具体操作以制流程,完全不表现对数据的具体操作以及分支或循环的具体条件。及分支或循环的具体条件。 结点结点:用圆表示,代表一条或多条语句;:用圆表示,代表一条或多条语句; 边边:用箭头表示,一边必须终止于一个结点;:用箭头表示,一边必须终止于一个结点; 区域区域:由边和结点围成的面积 ;:由边和结点围成的面积 ;

Page 49: 第六章 详细设计

49 - 2011 - 软件工程 第六章 详细设计

McCabeMcCabe 方法方法 流程图、流图以及流程图、流图以及 EE 、、 NN 、、 VV 的对应关系:的对应关系:

1 2 1

4 4 2

顺序型顺序型

选择型选择型

Page 50: 第六章 详细设计

50 - 2011 - 软件工程 第六章 详细设计

McCabeMcCabe 方法方法 流程图、流图以及流程图、流图以及 EE 、、 NN 、、 VV 的对应关系:的对应关系:

3 3 2

3 3 2

WHILEWHILE

循环循环

UNTILUNTIL

循环循环

Page 51: 第六章 详细设计

51 - 2011 - 软件工程 第六章 详细设计

McCabeMcCabe 方法方法 流程图、流图以及流程图、流图以及 EE 、、 NN 、、 VV 的对应关系:的对应关系:

7 6 3

示例示例

Page 52: 第六章 详细设计

52 - 2011 - 软件工程 第六章 详细设计

McCabeMcCabe 方法方法

910

1

3

6

2

4

7 8 5

11 ( a )( a )

1

2,3

4,5

10

11

9

8 7

6

R3 R3

R2 R2

R1 R1

R4 R4

结结点点

边 边

区区域 域

(( bb))

把程序流程图映射成流图把程序流程图映射成流图

Page 53: 第六章 详细设计

53 - 2011 - 软件工程 第六章 详细设计

PDL PDL

Procedure:sort Procedure:sort

11 :: do while records remain do while records remain

2 : read record2 : read record ;;

if record field 1=0if record field 1=0

3 : then process record;3 : then process record;

store in buffer;store in buffer;

increment counter;increment counter;

4 : elseif record field 2=0 4 : elseif record field 2=0

5 : then reset counter;5 : then reset counter;

6 : else process record;6 : else process record;

store in file;store in file;

7a : endif7a : endif

endifendif

7b : enddo7b : enddo

8 : end8 : end

1

2

3

7b

8

7a

5 6

4

图图 6.16 6.16 由由 PDLPDL翻译成的流图翻译成的流图

Page 54: 第六章 详细设计

54 - 2011 - 软件工程 第六章 详细设计

………

………

IF a OR bIF a OR b then procedure xthen procedure x else procedure yelse procedure yENDIFENDIF

a

x

y

b

判定节点判定节点

包含复合条件的包含复合条件的 PDLPDL 映射成的流图映射成的流图

………

………

IF a AND bIF a AND b then procedure xthen procedure x else procedure yelse procedure yENDIFENDIF

Page 55: 第六章 详细设计

55 - 2011 - 软件工程 第六章 详细设计

McCabeMcCabe 方法方法 有了描绘程序控制流的流图之后,可以用下有了描绘程序控制流的流图之后,可以用下

述述 33 种方法中的任何一种来计算环形复杂度。种方法中的任何一种来计算环形复杂度。 流图中的区域数等于环形复杂度。 流图中的区域数等于环形复杂度。 流图流图 GG 的环形复杂度的环形复杂度 V(G)V(G)== EE-- N+2N+2 ,其中,,其中,

EE 是流图中边的条数,是流图中边的条数, NN 是结点数。是结点数。 流图流图 GG 的环形复杂度的环形复杂度 V(G)V(G)== P+1P+1 ,其中,,其中, PP 是是流图中判断的数目。流图中判断的数目。

例如,使用上述任何一种方法,都可以计算例如,使用上述任何一种方法,都可以计算出书中图出书中图 6.166.16 所示流图的环形复杂度为所示流图的环形复杂度为 44 。 。

Page 56: 第六章 详细设计

56 - 2011 - 软件工程 第六章 详细设计

McCabeMcCabe 方法方法 环形复杂度的用途环形复杂度的用途

为单元或构件的控制流复杂度提供量化表示。为单元或构件的控制流复杂度提供量化表示。 用于查明潜在的不稳定区域。用于查明潜在的不稳定区域。 表示一个单元或构件的可测试性、可理解性和表示一个单元或构件的可测试性、可理解性和

可维护性。 可维护性。 McCabeMcCabe 从大量的调查中发现,从大量的调查中发现,当当 V(G)V(G)等于或大于等于或大于 1010 时,对模块进行充分的时,对模块进行充分的测试将变得非常困难。他主张将测试将变得非常困难。他主张将 1010 作为环域作为环域数的上限,并以此来限制模块的最大规模。数的上限,并以此来限制模块的最大规模。

计算基本路径测试中的路径数目。计算基本路径测试中的路径数目。 描述测试一个单元或构件所需的工作量。描述测试一个单元或构件所需的工作量。

Page 57: 第六章 详细设计

57 - 2011 - 软件工程 第六章 详细设计

McCabeMcCabe 方法方法 这种度量的缺点:这种度量的缺点:

对于不同种类的控制流的复杂性不能区分;对于不同种类的控制流的复杂性不能区分; 简单简单 IFIF 语句与循环语句的复杂性同等看待;语句与循环语句的复杂性同等看待; 嵌套嵌套 IFIF 语句与简单语句与简单 CASECASE 语句的复杂性是一语句的复杂性是一

样的;样的; 一个具有一个具有 10001000 行的顺序程序与一行语句的复行的顺序程序与一行语句的复

杂性相同;杂性相同;

Page 58: 第六章 详细设计

58 - 2011 - 软件工程 第六章 详细设计

课堂练习课堂练习 (( 画出下列程序流程图对应的流图画出下列程序流程图对应的流图 ))Start

DO WHILE

C1

End

CA

E D

B

C2

Page 59: 第六章 详细设计

59 - 2011 - 软件工程 第六章 详细设计

HalsteadHalstead 方法方法

它根据程序中运算符和操作数的总数来度它根据程序中运算符和操作数的总数来度量程序的复杂程度。 量程序的复杂程度。

运算符包括:算术运算符 赋值符( = 或 := ) 数组操作符 逻辑运算符 分界符(,或 ;或 : ) 子程序调用符 关系运算符 括号运算符循环操作符等特别地,成对的运算符,例如“ BEGIN…END” 、“FOR…TO” 、“ REPEAT …UNTIL” 、“ WHILE…DO” 、“IF…THEN…ELSE” 、“(…)”等都当做单一运算符。 运算对象包括变量名和常数运算对象包括变量名和常数

Page 60: 第六章 详细设计

60 - 2011 - 软件工程 第六章 详细设计

HalsteadHalstead 方法方法

① ① 程序长度,即预测的程序长度,即预测的 HalsteadHalstead 长度长度 n1n1表示程序中不同运算符(包括保留字)的个数,表示程序中不同运算符(包括保留字)的个数, n2n2表示程序中不同运算对象的个数,表示程序中不同运算对象的个数, HH表示“程序长度”,则有 表示“程序长度”,则有

H = n1×logH = n1×log22n1+ n2×logn1+ n2×log22n2n2

Page 61: 第六章 详细设计

61 - 2011 - 软件工程 第六章 详细设计

HalsteadHalstead 方法方法

② ② 实际的实际的 HalsteadHalstead 长度长度 设设 N1N1为程序中实际出现的运算符总个数,为程序中实际出现的运算符总个数, N2N2为程序中实际出现的运算对象总个数,为程序中实际出现的运算对象总个数, NN为实际的为实际的 HalsteadHalstead长度,则有 长度,则有 N = N1 + N = N1 +

N2N2 经过多次验证,预测的经过多次验证,预测的 HalsteadHalstead 长度与长度与

实际的实际的 HalsteadHalstead 长度是非常接近的。 长度是非常接近的。

Page 62: 第六章 详细设计

62 - 2011 - 软件工程 第六章 详细设计

HalsteadHalstead 方法方法

③ ③ 程序的词汇表程序的词汇表 HalsteadHalstead 定义程序的词汇表为不同的运算符定义程序的词汇表为不同的运算符

种类数和不同的运算对象种类数的总和。若令种类数和不同的运算对象种类数的总和。若令nn为程序的词汇表,则有 为程序的词汇表,则有 n = n1 + n2 n = n1 + n2

④ ④ 程序量程序量 VV ,可用下式算得,可用下式算得 V = ( N1 + N2 ) × logV = ( N1 + N2 ) × log22 ( n1 + n2 ) ( n1 + n2 )

Page 63: 第六章 详细设计

63 - 2011 - 软件工程 第六章 详细设计

SUBROUTINE SORTSUBROUTINE SORT (( XX ,, NN )) DIMENSION XDIMENSION X (( NN )) IFIF (( N .LT. 2N .LT. 2 ) ) RETURNRETURN DO 20 I = 2, N DO 20 I = 2, N DO 10 J = 1, I DO 10 J = 1, I IF IF (( XX (( II)) .GE. .GE. XX (( JJ ))))

GO TO 10GO TO 10 SAVE = X SAVE = X (( II)) XX (( II)) = X= X (( JJ )) XX (( JJ )) = SAVE= SAVE 10 CONTINUE 10 CONTINUE 20 CONTINUE 20 CONTINUE RETURN RETURN END END

运算符运算符 计数计数 运算对象运算对象 计数计数可执行语句可执行语句

结束结束 77 XX 66

数组下标数组下标 66 II 55

== 55 JJ 44

IF()IF() 22 NN 22

DODO 22 22 22

,, 22 SAVESAVE 22

程序结束程序结束 11 11 11

.LT..LT. 11 nn22=7 =7 NN22=22=22

.GE..GE. 11

GO TO 10GO TO 10 11

nn11=10 =10 NN11=28=28运算符运算符 运算对象运算对象H = 10 × log2 10 + 7 × log2 7 = 52.87

N = N1 + N2 = 28 + 22 = 50

V=( 28 + 22 ) × log2 ( 10 + 7 ) = 204

Page 64: 第六章 详细设计

64 - 2011 - 软件工程 第六章 详细设计

HalsteadHalstead 方法方法 ⑤ ⑤ 程序的潜在错误程序的潜在错误

HalsteadHalstead 度量可以用来预测程序中的错误。 认为程序中可能存度量可以用来预测程序中的错误。 认为程序中可能存在的差错应与程序的容量成正比。因而预测公式为在的差错应与程序的容量成正比。因而预测公式为

B = ( N1 + N2 ) × logB = ( N1 + N2 ) × log22 ( n1 + n2 )∕3000 = V∕3000 ( n1 + n2 )∕3000 = V∕3000 B B表示该程序的错误数。表示该程序的错误数。

它表明程序中可能存在的差错它表明程序中可能存在的差错 BB 应与程序量应与程序量 VV 成正比。 成正比。

例如,一个程序对例如,一个程序对 7575 个数据库项共访问个数据库项共访问 13001300 次,对次,对 151500 个运算符共使用了个运算符共使用了 12001200 次,那么预测该程序的错误数:次,那么预测该程序的错误数:

B = ( 1300 + 1200 )×log2 ( 75 + 150 )∕3000 = B = ( 1300 + 1200 )×log2 ( 75 + 150 )∕3000 = 6.56.5即预测该程序中可能包含即预测该程序中可能包含 66~~ 77 个错误。 个错误。

Page 65: 第六章 详细设计

65 - 2011 - 软件工程 第六章 详细设计

HalsteadHalstead 方法方法

HalsteadHalstead 的重要结论的重要结论 程序的实际程序的实际 HalsteadHalstead长度长度 NN 可以由词汇表可以由词汇表 nn算出。即使程序还未编制完成,也能预先算出算出。即使程序还未编制完成,也能预先算出程序的实际程序的实际 HalsteadHalstead长度长度 NN , 虽然它没有明, 虽然它没有明确指出程序中到底有多少个语句。确指出程序中到底有多少个语句。

这个结论非常有用。经过多次验证,预测的这个结论非常有用。经过多次验证,预测的 HHalsteadalstead长度与实际的长度与实际的 HalsteadHalstead长度是非常长度是非常接近的。接近的。