资源描述
How to do detailedly?详细设计详细设计第第6章章 详细设计详细设计l6.1 结构程序设计l6.2 人机界面设计l6.3 过程设计的工具l6.4 面向数据结构的设计方法l6.5 程序复杂程度的定量度量6.1 结构程序设计结构程序设计-结构化程序设计-“结构程序设计是尽可能少用GO TO语句的程序设计方法。最好仅在检测出错误时才使用GO TO语句,而且应该总是使用前向GO TO语句”,“程序的质量与程序中所包含的GO TO 语句的数量成反比” 。E.W.Dijkstra,1965。-基本的程序控制结构-Bohm和Jacopini证明了:3种基本的控制结构(顺序,选择,循环)就能实现任何单入口单出口的程序。-实际上,顺序结构和循环结构理论上是的最基本的控制结构。三种基本的控制结构三种基本的控制结构其他常用的控制结构其他常用的控制结构结构程序设计指导准则结构程序设计指导准则l经典的结构程序设计:只允许使用顺序、IF-THEN-ELSE型分支和DO-WHILE型循环这3种基本控制结构; l扩展的结构程序设计:除了上述3种基本控制结构之外,还允许使用DO-CASE型多分支结构和DO-UNTIL型循环结构; l修正的结构程序设计:除上述结构以外,还允许使用LEAVE(或BREAK)结构。 l使用GO TO语句的原则:结构程序设计是不使用(或尽可能少用)GO TO语句的程序设计方法。仅在检测出错误时才使用GO TO语句,而且总是使用后向GO TO语句。人机界面设计人机界面设计l设计问题l设计过程l人机界面设计指南设计问题设计问题l1. 系统响应时间 响应时间的长度:适中相应时间的易变性:同一类操作的响应时间不要差异太大。l2. 用户帮助设施 脱机帮助手册附加的联机帮助集成的联机帮助上下文相关的联机帮助l3. 出错信息(及警告信息)处理 如何办, 用户心理l4. 命令交互多媒体(图,文,声,光)自定义宏指令控制序列(CTRL+字母 )设计过程设计过程l迭代的设计过程创建设计模型原型实现评估复审进一步精化l评估复审的准则系统规格说明书的长度和复杂程度动作、命令中的包含的平均参数个数及操作个数设计模型中包含的动作、命令、状态的数量界面风格、帮助设施、出错处理的友好性人机界面设计指南人机界面设计指南l界面的类别l界面应具有的基本特性l界面设计指南l界面设计的任务l界面的基本形式(举例)用户界面的类别用户界面的类别l一般交互界面“一般交互”包括信息显示、数据输入、系统整体控制。这一部分指南具有全局性意义,对系统界面好坏影响极大。l信息显示界面指显示信息时要注意的问题。显示的信息应该是完整的、无二义的、好理解的,这样才能满足用户要求。信息“显示”的不同方式:文字/图形/声音;不同位置/移动;不同大小;不同颜色/分辨率;等等。l数据输入界面数据输入界面,是系统的重要组成部分。主要从输入效率和减少出错率考虑。用户一般会花费大量的时间在命令操作和数据输入操作,因此友好的数据输入操作非常必要。不同输入手段(介质/设备):键盘、鼠标、数字化仪、扫描仪、语音、照片、视频等等。l1、可使用性 使用简单 用户界面中所用术语的标准化和一致性 具有HELP功能 快速的系统响应和低的系统成本 具有容错能力l2、灵活性 考虑用户的特点、能力、知识水平。 提供不同的系统响应信息。 提供根据用户需求制定和修改界面。l3、界面的复杂性与可靠性复杂性界面规模及组织的复杂程度。应该愈简单愈好。可靠性指无故障使用的时间间隔。用户界面应该能够保证用户正确、可靠地使用系统,及程序、数据的安全。用户界面应具有的基本特性用户界面应具有的基本特性一般交互界面设计指南l保持界面格式的一致性l提供有意义的反馈信息l重要操作要确认:如新增0次确认、修改1次确认、删除2次确认l为大部分操作提供“回退”(Undo)l减少两次操作之间的记忆的信息量(自动补充缺省值)l提高操作效率:思考、对话、按键、光标移动等效率l容许错误操作,出错后不会对系统造成严重影响l操作功能/动作分类,屏幕合理布局l提供操作的帮助设施l简单易懂的命令名信息显示界面设计指南l只显示当前工作相关的信息l以合适的形式显示信息:图形?图表?清单?l以统一的风格显示信息:统一的标记、标准的缩写、预定的颜色、确定的位置等l提供可视化的显示环境l产生有意义的出错信息l使用格式化的显示板式:大小写、缩进、文本分段等l使用窗口分隔不同类型信息l使用“模拟”显示方式表示信息:数字仪表盘技术l合理高效地使用物理显示屏数据输入界面设计指南l尽量减少用户的输入动作,使按键最少,如对相同内容输入设置默认值、自动填入、列表选择或点击选择等。l保持信息显示和数据输入一致性:视觉效果一致l容许用户自定义输入:为专家级用户提供的机制l提供灵活的交互方式:键盘、鼠标等,适应不同用户l休眠(disable)当前动作语境中不用的命令l让用户控制交互流:灵活的操作顺序和恢复机制l对所有输入动作都提供帮助l消除冗余的输入用户界面设计的任务用户界面设计的任务l1、用户特性分析 用户模型 了解所有用户的技能和经验,针对用户能力设计或更改界面。从以下方面分析:用户类型通常分为:外行型、初学型、熟练型、专家型。用户特性度量与用户使用模式和用户群体能力有关。包括:用户使用频度、用户用机能力、用户的知识、思维能力等。l2、用户界面的任务分析 任务模型(DFD图)是对系统内部活动的分解,不仅要进行功能分解(用DFD图描述),还要包括与人相关的活动(人工操作)。每个加工即一个功能或任务。l3、确定用户界面类型从用户角度出发,用户界面设计的类型主要有问题描述语言,数据表格、图形与图标、菜单、对话框及窗口等。每一种类型都有不同的特点和性能。用户界面的基本形式举例用户界面的基本形式举例l菜单程序中功能的选择、数据的选择l图象将数据可视化地展示l图表显示统计数据、对比的数据l仪表盘动态变化的数据、仿真的数据l对话框初始数据、任意数据的输入l窗口综合界面,可包含数据输入、信息显示、功能选择操作等。菜单(菜单(menu)正文菜单、图标菜单、正文和图标混合菜单,如:开始菜单固定位置、浮动位置(弹出)、下拉式、嵌入式图象图象图表图表l图表主要形式:折线图、直方图、饼图等l图表的用途:显示时间变化数据、统计数据、对比数据等仪表盘仪表盘l仿真仪表面板,直观、动态地显示数据l适合于动态数据、性能参数、比较数据的显示对话框对话框窗口(窗口(window)用户界面实例用户界面实例6.3 过程设计的工具过程设计的工具l6.3.1 程序流程图l6.3.2 盒图(N-S图)l6.3.3 问题分析图(PAD图)l6.3.4 判定表l6.3.5 判定树l6.3.6 过程设计语言(PDL)6.3.1 程序流程图程序流程图l程序流程图的作用程序流程图(Progran flowchart)作为一种算法表达工具, 是人们对解决问题的方法、思路或算法的一种描述。国家标准GB1525-89:信息处理-数据流程图,程序流程图,系统流程图,程序网络图和系统资源图的文件编制符号及约定国际标准化组织标准ISO5807-85 :Information processing-Documentation symbols and comventions for data,program and system flowcharts,program network charts and system resources chartsl优点采用简单规范的符号,画法简单;结构清晰,逻辑性强;便于描述,容易理解。 l缺点本质上不是“自顶向下、逐步求精”的设计工具(容易引导过早关注细节)不是结构化设计工具(流向线可以随意连)程序流程图的基本符号程序流程图的基本符号l起始框l终止框l执行框l判别框l流线程序流程图的符号程序流程图的符号程序流程图的符号(续)程序流程图的符号(续)l(a)判断(菱形)只有一个入口,但可以有一个或二个出口,在出口流线上注明判断的条件(真、假)l(b)注解符(纵边线和虚线构成)用以标识注解的内容。l(c)特定处理(带有双纵边线的矩形)表示已命名的特定处理.该处理为在另外地方已得到详细说明,如子例行程序。l(d)多重选择 (多出口菱形)只有一个入口,但可以有多个可供选择的出口。在出口流线上注明满足选择条件的值。l(e)端点符(扁圆形)表示转向外部环境或从外部环境转入. 如程序流程的起始或结束,数据的外部使用起点或终点.l(f)准备(六边形符号)它表示修改一条指令或一组指令以影响随后的活动.例如,设置开关,初始化例行程序.l(g-h)循环界限(去角矩形)表示循环的开始和循环的结束. 一对符号内应注明同一循环标识符。程序流程图的符号(续)程序流程图的符号(续)l(i)虚线用于表明被注解的范围或连接被注解部分与注解正文。.l(j)省略符(三点构成)若流程图中有些部分无需给出符号的具体形式和数量,可用省略符。l(k)并行方式(一对平行线)表示同步进行两个或两个以上并行方式的操作.。l(l)处理(矩形)表示各种处理功能.例如,执行一个或一组特定的操作, 矩形内可注明处理名。l(m)数据(平行四边形)表示数据,其中可注明数据名,来源,用途或其它的文字说明。l(n)连接符(圆形)用以表明转向流程图的它处,或从流程图它处转入.它是流线的断点,在圆形内注明断编号(符号)。l(o)连接符(锥形)用以表明转向另一流程图,或从另一流程图转入.它是流线图的断点,在锥形内注明流程图编号(名称)。l(p).流线(箭头直线)表示控制流的流向. 程序流程图例程序流程图例6.3.2 盒图(盒图(N-S图)图)l盒图盒图(N-S图)是一种符合结构化程序设计(SP)的图形工具。其结构化具有强制性。lN-S图的基本结构N-S图仅含有图的5种基本成分,它们分别表示SP方法的几种标准控制结构。lN-S图的数据盒和模块盒用NS图作为详细设计的描述手段时,常需用两个盒子:数据盒和模块盒。前者描述有关的数据,包括全程数据、局部数据和模块界面上的参数等,后者描述执行过程。lN-S图的主要特点:每种结构的功能域明确不可能任意转移(go to)控制很容易确定局部和全局数据作用域很容易表现结构的嵌套关系和模块的层次结构简单、易学易用lNS图的缺点手工修改比较麻烦,这是有些人不用它的主要原因。NS图基本结构图基本结构N-S图举例图举例模块的数据盒和过程盒模块的数据盒和过程盒6.3.3 问题分析图(问题分析图(PAD图)图)lPADPAD(Problem Analysis Diagram,问题分析图)是日立公司创立的一种采用二维(平面)、树形结构表示程序的控制结构的结构化设计方法。PAD为多种高级程序设计语言(Fortran、Cobol、Pascal等)根据其语言结构特点都设计了一套符号。lPAD的优点结构化:采用结构化的PAD设计出的程序必定是结构化的。程序结构清晰:垂直(竖线)方向表明了结构的顺序,水平方向(结构)表明了结构嵌套的层次及深度(竖线的数目)。程序逻辑清晰:很好地表现程序逻辑,易读、易懂、易记。自上而下、从左向右执行,可遍历程序的所有节点(图论中的“广度优先”遍历)。易于转换成高级程序设计语言的源程序:PAD规范,易于自动转换,有利于提高软件可靠性和生产率。表达能力强:既可容易地表达程序逻辑,也可表达数据结构。支持“自顶向下、逐步求精”的设计方法:在上层进行抽象,使用“def”符号在下层逐步细化。lPAD的不足水平嵌套层次太深时,表达显得有点凌乱。PAD图的基本控制结构图的基本控制结构(a)顺序结构(b)选择结构(c)多分枝选族结构(d)前置条件循环结构(e)后置条件循环结构(f)语句标号(g)定义PAD使用使用“def”逐步求精示例逐步求精示例PAD应用示例应用示例6.3.4 判定表判定表l判定表表达复杂的条件组合与需执行的动作之间的对应关系的一种关系表。l判定表由四部分组成:基本条件条件组合矩阵 (规则,或条件表达式)基本动作动作组合矩阵(条件组合对应要执行的动作)l判定表特点可准确地表达“规则-操作”条件表达式(规则)可简化只适用于此,作为其他设计工具的补充C1C1C2C2CmCmA1A1A2A2AmAm判定表:示例判定表:示例1l假设某航空公司规定,乘客可以免费托运重量不超过30kg的行李。l当行李重量超过30kg时, 对头等舱的国内乘客超重部分每公斤收费4元, 对其他舱的国内乘客超重部分每公斤收费6元,对外国乘客超重部分每公斤收费比国内乘客多一倍, 对残疾乘客超重部分每公斤收费比正常乘客少一半。 判定表:示例判定表:示例2l假设某大学要从学生中挑选男子篮球队队员,基本条件是: 各门课程的平均分在70分以上, 身高超过180米,体重超过75千克。 l需要从学生登记表中挑选出符合上述条件的男同学,并列出他们的姓名和住址,以便进一步选拔。 6.3.5 判定树判定树l判定树用树型结构表示条件组合与应做的动作之间的关系。是判定表的变种。l判定树的特点与判定表相比,能更清晰地表达复杂的条件组合关系。形式简单,易于使用,易于理解所表达的条件-动作关系的含义。判定树例判定树例6.3.6 过程设计语言(过程设计语言(PDL)lPDL(Procedure Design Language)过程设计语言PDL也称为“伪码”或“伪语言”,是一种介于自然语言和程序设计语言之间的软件设计语言。 PDL是非形式化比较灵活结构化的语言,用于描述模块内部过程的具体算法,以便在开发人员之间比较精确的进行交流。lPDL的语法PDL的语法是开放式的,其外层语法是确定的,采用类似于一般程序设计语言控制结构和关键字。为了区别关键字,关键字一律大写,其它单词一律小写。而内层语法则不确定,一般使用自然语言(或半形式化语言)来描述处理特性。内语法比较灵活,只要写清楚就可以,不必考虑语法错,以利于人们可把主要精力放在描述算法的逻辑上。这种语法一般称为“类-程序设计语言”,如Like-C,Like-JAVA,Like-Pascal等。PDL特点、优点和缺点特点、优点和缺点lPDL特点结构描述:固定的关键字词法;固定的程序结构语法;结构化的控制结构;模块化。处理描述:采用自然语言或半形式化语言描述操作、处理。数据描述:规范的数据说明(定义),包括简单数据结构(如标量、数组)和复杂数据结构的定义(如记录、链表)。lPDL优点PDL程序易于编写和编辑,使设计人员关注程序的逻辑而不是程序的语法。PDL程序转化成程序设计语言程序时,可用作很好的注释,提高了程序的可读性、可维护性。存在将PDL转化成程序代码的自动化工具。lPDL缺点描述有些算法不如图形化工具形象直观。 描述复杂的条件组合与动作间的对应关系时,不如判定表清晰简单。PDL控制结构语法例控制结构语法例 顺序结构p1; P2; pn示例示例: 拼词检查程序拼词检查程序PROCEDURE spellcheckBEGIN -* split document into single words LOOP get next word add word to word list in sortorder EXIT WHEN all words processed END LOOP -* look up words in dictionary LOOP get word from word list IF word not in dictionary THEN -* display words not in dictionary display word prompt on user terminal IF user response says word OK THEN add word to good word list ELSE add word to bad word list ENDIF ENDIF EXIT WHEN all words processedEND LOOP-* create a new words dictionary dictionary :merge dictionary and good word listEND spellcheck6.4 HIPO法法lHIPO HIPO法法(Hierarchy plus Input-Process-Output) 即按即按功能层次的结构分析法,是功能层次的结构分析法,是1976年由年由 IBM 公司推出的软公司推出的软件分析及设计方法,又称件分析及设计方法,又称HIPO图。图。l基本思想结构化方法是以数据流,数据封闭性准则来分解的,结构化方法是以数据流,数据封闭性准则来分解的,HIPO法则是以功能、功能完备性准则逐层分解的。法则是以功能、功能完备性准则逐层分解的。层次图 (H图)l层次图 (H图) 表明各个功能的隶属关系。它是自顶向下逐层分解得到的。最高一层是整个系统的名称和系统的概括功能说明;最高一层是整个系统的名称和系统的概括功能说明;第二层把系统功能展开,分成几个框;第二层把系统功能展开,分成几个框;第二层功能进一步分解,就得到了第三层、第四层,第二层功能进一步分解,就得到了第三层、第四层,直到最后一层。直到最后一层。每个框内都应有一个名字,用以标识它的功能。还应有每个框内都应有一个名字,用以标识它的功能。还应有一个编号,以记录它所在的层次及在该层次的位置。一个编号,以记录它所在的层次及在该层次的位置。IPO图lIPO图为层次图中每一功能框详细地指明输入(I)、处理(P)及输出(O)。l通常,IPO图有固定格式,处理操作部分总是列在中间,输入和输出部分分别在其左边和右边。l由于某些细节很难在一张IPO图中表达清楚,常常把IPO图又分为两部分:概括的称为概括的称为概要图概要图(overview diagram)具体的称为具体的称为详细图详细图(detail diagram)。)。概要概要IPO图图 vs 详细详细IPO 图图l概要IPO图用于表达对一个系统,或对其中某一子系统功能的概略用于表达对一个系统,或对其中某一子系统功能的概略表达,指明完成某一功能框规定的功能时需要表达,指明完成某一功能框规定的功能时需要哪些输入哪些输入,哪些操作哪些操作和和哪些输出哪些输出。概要概要IPO在总体设计中处理。在总体设计中处理。l详细IPO 图详细表明输入、处理、输出三者之间的关系。详细表明输入、处理、输出三者之间的关系。输入和输输入和输出应是确定的文件和记录,或是文件和记录中的字段,出应是确定的文件和记录,或是文件和记录中的字段,以及具体介质和设备类型,处理框中的操作也应是具体以及具体介质和设备类型,处理框中的操作也应是具体的而不是含糊的,调用子程序时应标明子程序名。的而不是含糊的,调用子程序时应标明子程序名。 详细详细IPO在详细设计中处理。在详细设计中处理。层次图 (H图)l层次图 (H图) 表明各个功能的隶属关系。它是自顶向下逐层分解得到的。最高一层是整个系统的名称和系统的概括功能说明;最高一层是整个系统的名称和系统的概括功能说明;第二层把系统功能展开,分成几个框;第二层把系统功能展开,分成几个框;第二层功能进一步分解,就得到了第三层、第四层,第二层功能进一步分解,就得到了第三层、第四层,直到最后一层。直到最后一层。每个框内都应有一个名字,用以标识它的功能。还应有每个框内都应有一个名字,用以标识它的功能。还应有一个编号,以记录它所在的层次及在该层次的位置。一个编号,以记录它所在的层次及在该层次的位置。例:盘存例:盘存/销售系统的层次图销售系统的层次图l根据需求分析,系统应具备有以下功能:l1)计算买主订单 2)准备销售报表 3)产生买主文件和应收帐发票l4)运行更新的盘存文件 5)产生托运单和包装单 6)保证库存及时订货编号说 明 1.0.0 销售/盘存处理框图1.1.0 顾客订单检查, 核对顾客赊欠金额, 产生销售报表1.1.1 用工作文件的盘存项目号, 对顾客订单进行核对和排序1.1.2 以地区和人员为单位, 编制销售报表, 计算销售佣金1.1.3 检验顾客赊欠金额, 计算折扣, 确定支付项目1.2.0 处理顾客盘存管理报表, 顾客付款收帐, 处理发货、包装、托运例:盘存例:盘存/销售系统的层次图说明销售系统的层次图说明对应H图上框的概要IPO图 对应于对应于H图框的详细图框的详细IPO图图HIPO法的特点法的特点l优点:简单易行,资料易于查找,不仅适于信息软件的开发,也可用于逻辑关系较复杂的应用软件l缺点:无验证功能,功能完备性很难验证。未能反映系统性能要求。资料量大,不宜规模大的系统。6.4 面向数据结构的设计方法面向数据结构的设计方法(Jackson方法方法)l6.4.1 Jackson图l6.4.2 改进的Jackson图l6.4.3 Jackson方法JSD系统方法简介系统方法简介lJackson系统开发(JSD)方法是一种典型的面向数据结构的分析与设计方法。其分析的重点放在构造与系统相关的现实世界,并建立现实世界的信息域的模型上。其最终目标是生产软件的过程性描述。l前面介绍的结构化开发方法是一种面向数据流的开发方法,而Jackson系统开发方法则是面向数据结构的开发方法。其基本思想实现建立输入输出的数据结构,再将其转换为软件结构。lJackson方法由英国的M. Jackson提出,该方法特别适合于数据处理类问题。如企事业管理一类的软件系统。6.4.1 Jackson图图l数据元素彼此间的基本逻辑关系只有顺序、选择和重复3类,因此,逻辑数据结构也只有这3类。l1. 顺序结构顺序结构的数据:由一个或多个数据元素组成,每个元素按确定次序出现一次。l2. 选择结构选择结构的数据:包含两个或多个数据元素,每次使用这个数据时按一定条件从这些数据元素中选择一个。 l3. 重复结构重复结构的数据:根据使用时的条件由一个数据元素出现零次或多次构成。 Jackson图的三种结构图的三种结构6.4.2 改进的改进的Jackson图图l上一小节介绍的Jackson图的缺点是: 表示选择或重复结构时,选择条件或循环结束条件不能直接在图上表示出来;框间连线为斜线,层次结构不严谨。(旧理由:不易在行式打印机上输出。) l改进Jackson图 上、下层之间的连线改成组织结构层次连线。在重复结构的连线上标注循环条件。在选择结构的连线上标注选择条件。增加单分支选择结构,即在无操作的选择臂上使用“无关”结点框。6.4.2 改进的改进的Jackson图图l(a)顺序结构l(b)多重选择结构,带选择条件l(c)单臂选择结构,带选择条件l(d)重复结构,带重复选择条件Jackson图和软件结构层次图不同图和软件结构层次图不同lJackson图和描绘软件结构的层次图形式类似,但是含义却很不相同。l方框中内容不同层次图中的一个方框通常代表一个模块; Jackson图的一个方框只代表几个语句。 l上下方框之间的关系不同 层次图表现的是调用关系,通常一个模块除了调用下级模块外,还完成其他操作;Jackson图表现的是组成关系,一个方框中包括的操作仅仅由它下层框中的那些操作组成。6.4.3 Jackson方法方法lJACKSON方法SD法是一种面向数据流的设计方法,JACKSON方法是一种面向数据结构的设计方法。强调程序结构与问题结构相对应。lJACKSON方法的构成JACKSON方法由JSP(Jackson Structured Programming)和JSD(Jackson System Development)方法构成。JSP法主要体现程序结构的设计,不严格区分软件概要设计和详细设计。可以根据JSP的规则直接导出程序结构。一般用于规模不大的数据处理系统,而且I/O数据结构容易描述的情况。JSD法是对JSP法的扩充,针对JSP法的缺陷而提出的解决方案。其主要特点是:用“分而治之”的策略控制系统的复杂性,解决I/O结构的冲突问题。JSD方法的步骤如下方法的步骤如下l1、实体动作分析l2、实体结构分析l3、定义初始模型l4、功能描述:详细说明与已定义的动作相对应的功能。l5、绝对系统时间特性:对进程调度特性进行评价和说明。l6、实现:设计组成系统的硬件和软件。lJSD方法的前三步属于需求分析阶段,后三步属于软件设计阶段。 例:文本输入输出数据结构的例:文本输入输出数据结构的Jackson图图例:描绘统计空格程序结构的例:描绘统计空格程序结构的Jackson图图把操作和条件分配到程序结构图的适把操作和条件分配到程序结构图的适当位置当位置实体结构分析实体结构分析JACKSON方法的设计过程方法的设计过程例:合并文件例:合并文件l考虑输入和输出之间的对应关系:输入、输出数据结构在内容、数量、次序上是对应的。1、数据结构2、设计程序图回溯结构设计回溯结构设计l 以上回溯结构由三种构件组成:、Posit(假定):用于表示条件成立时的处理过程,进入Posit构件时程序状态就被保存起来。2、Quit(退出):当假定调解不成立,控制转向另一认可。3、Admit (认可):Admit构件提供了另一条处理路径,在Admit的入口处程序无条件恢复到原有状态。JACKSON方法的优点和缺点方法的优点和缺点l优点:结构清晰、易理解、易修改。不会过多依赖于设计者的经验。l缺点:当系统规模及复杂度大时,确定数据结构困难。6.4 程序复杂程度的定量度量l程序的复杂程度定量度量的意义:把程序的复杂程度乘以适当常数即可估算出软件中错误的数量以及软件开发需要用的工作量,定量度量的结果可以用来比较两个不同的设计或两个不同算法的优劣;程序的定量的复杂程度可以作为模块规模的精确限度。 l介绍定量度量的二个著名方法6.4.1 McCabe方法6.4.2 Halstead方法McCabe和Halstead在70年代中期提出的度量方法是非常著名的度量方法,直到今天还被激烈讨论。McCabe根据图论定义了 “循环数”来得到一种软件复杂性度量方法,即著名的McCabe循环复杂度(Cyclomatic Complexity )。Halstead度是基于程序源代码。Halstead指出估计工作量,或者程序员工作时间,可以用运算符,运算元或语法数的函数来表示。6.4.1 McCabe方法方法lMcCabe方法概要McCabe方法根据程序控制流的复杂程度定量地度量程序的复杂程度,这样度量出的结果称为程序的“环形复杂度”。l主要内容流图概念及变换计算环形复杂度的方法环形复杂度的用途1.流图流图l流图“流图”是McCabe方法所基于的表示程序控制流的一种图,也称为“程序图”。 流图是退化的程度流程图,仅仅描述了程序的“控制流”,完全不表示程序中的具体操作和分支或循环的具体判定条件。l流图的构成结点:l流图中的圆点,表示一个元判定(最简单的条件),程序中连续的操作和接着的一个判定可映射成一个结点。边:l流图中的箭头线,表示控制流,每条比边必须终止于某个结点。区域:l由流图的边所围成的封闭区域,所有区域以外的开区域(这样的区域只有一个)也是流图的一个区域。程序流程图映射成流图程序流程图映射成流图l从程序(或程序段)的入口开始,按程序流程顺序处理;l每个判定设置一个结点(如图1、3、6);l将两个判定之间的所有连续操作忽略不计,或合并到后续的第一个判定结点(如图2&3);l后续没有判定的操作(或连续操作合并)各设置一个结点(如图7、8、4&5);l每个结构的出口汇合点各设置一个结点(如图9、10);l按照程序流程图的逻辑关系用边(箭头线)连接起来。PDL翻译成流图翻译成流图包含复合条件的的流图包含复合条件的的流图l复合条件指含有布尔运算符的条件:and、or、nand、nor等l复合条件的变换当程序中包含复合条件时,将其拆分成若干个简单条件(元条件),每个简单条件对应一个结点(如图a、b)。同一个复合条件中简单条件结点串联起来,且连接到同一操作结点。2.计算环形复杂度的方法计算环形复杂度的方法l可采用下面任何一种方法“流图G的环形复杂度”:使用区域数计算lV(G) = D l其中D为区域数使用边与结点数计算:lV(G)=E-N+2l其中:E为边数,N为结点数使用判定结点数计算:lV(G)=P+1l其中:p为判定结点数l例:如图4个区域:R1,R2,R3,R4V(G)=E-N+2=11-9+2=4V(G)=P+1=3+1=43.环形复杂度的用途环形复杂度的用途l预测程序的复杂度程序的“环形复杂度”取决于程序控制流的复杂程度,即反映了程序控制结构(选择结构、循环结构)的复杂程度(选择结构、循环结构多少和条件的复杂程度) 。因此,环形复杂度可用于预测程序的测试难度和预测软件可靠性。l帮助控制程序模块的规模V(G)高的程序结构复杂,难于实现,容易出错。因此,环形复杂度V(G)可用于帮组控制模块规模,参考的模块规模为V(G)10 。6.4.2 Halstead方法方法lHalstead方法概要根据程序中运算符和操作数的总数来度量程序的复杂程度。l程序的总长度N的定义令lN1程序中运算符出现的总次数lN2程序中操作数出现的总次数则程序的总长度N定义为lN=N1+N2l程序的总长度H的预测令ln1 程序中不同运算符(包括关键字)出现的总次数ln2 程序中不同操作数(包括变量和常量)出现的总次数则程序的预测总长度H为lH=n1 log2 n1 + n2 long2 n2l程序中错误数E的预测E=N log2(n1 + n2 )/ 3000Halstead方法的评价方法的评价l可操作性强Halstead度量方法以程序中出现的操作符(Operator)和操作数(Operand)为计数对象,以它们的出现次数作为计数目标来测算程序容量和工作量。 该方法可操作性强,易于使用、易于计算。l应用性强(软件规模、开发、测试、错误度量)Halstead度量方法不仅仅度量了程序长度,还描述了程序的最小实现和实际实现之间的关系,并据此阐释程序语言的等级高低。还可预测程序中的错误数。l计算结果与实测贴近根据试验统计, Halstead度量方法的计算结果(程序长度、错误数)与实际非常接近!小结小结l详细设计的关键任务在总体设计的基础上,进一步确定软件怎样具体实现。主要任务包括人机界面设计、模块过程设计。l人机界面设计(指导原则)重视4个人机界面设计问题:系统响应时间、用户帮助设施、出错信息处理、命令交互方式。领会3类人机界面设计指南:一般交互、信息显示、数据输入。l过程设计(工具)掌握结构化设计工具(图形、表格、语言):程序流程图、盒图、PAD图、判定表、判定树、PDL、Jackson方法。l程序复杂性度量(方法)McCabe方法:基于程序流中“循环数”的环形复杂度。Halstead方法:基于程序中运算符和运算数的程序长度。习题习题6l1. 假设只有SEQUENCE和DO-WHILE两种控制结构,怎样利用它们完成IF-THEN-ELSE操作?l2. 假设只允许使用SEQUENCE和IF-THEN-ELSE两种控制结构,怎样利用它们完成DO-WHILE操作?l3. 画出下列伪码程序的程序流程图和盒图:习题习题6(续)(续)l4. 图给出的程序流程图代表一个非结构化的程序,问:l(1) 为什么说它是非结构化的?l(2) 设计一个等价的结构化程序。l(3) 在(2)题的设计中使用附加的标志变量flag了吗?若没用,再设计一个使用flag的程序;若用了,再设计一个不用flag的程序。习题习题6(续)(续)l5. 研究下图所示的伪码程序, 要求:l(1) 画出程序流程图。l(2) 程序是结构化的吗?说明理由。l(3) 若程序是非结构化的,设计一个等价的结构化程序并画出程序流程图。l(4) 此程序的功能是什么?它完成预定功能有什么隐含的前提条件吗?习题习题6(续)(续)l6. 用Ashcroft_Manna技术可以将非结构化的程序转换为结构化程序,图是一个转换的例子。l(a) 非结构化设计; (b) 转换成的等价的结构化设计l(1) 能否从这个例子总结出Ashcroft-Manna技术的一些基本方法?l(2) 进一步简化图6.19(b)给出的结构化设计。习题习题6(续)(续)l7. 某交易所规定给经纪人的手续费计算方法如下:总手续费等于基本手续费加上与交易l中的每股价格和股数有关的附加手续费。如果交易总金额少于1000元,则基本手续费为交l易金额的8.4%;如果交易总金额在1000元到10000元之间,则基本手续费为交易金额的l5%,再加34元;如果交易总金额超过10000元,则基本手续费为交易金额的4%加上134元。l当每股售价低于14元时,附加手续费为基本手续费的5%,除非买进、卖出的股数不是100的倍数,在这种情况下附加手续费为基本手续费的9%。当每股售价在14元到25元之间时,附加手续费为基本手续费的2%,除非交易的股数不是100的倍数,在这种情况下附加手续费为基本手续费的6%。当每股售价超过25元时,如果交易的股数零散(即,不是100的倍数),则附加手续费为基本手续费的4%,否则附加手续费为基本手续费的1%。l要求:l(1) 用判定表表示手续费的计算方法。l(2) 用判定树表示手续费的计算方法。习题习题6(续)(续)l8. 画出下列伪码程序的流图,计算它的环形复杂度。这个程序的逻辑有什么问题吗?习题习题6(续)(续)l9. 把统计空格程序的Jackson图(图6.13)改画为等价的程序流程图和盒图。习题习题6(续)(续)l10. 人机对话由操作员信息和系统信息交替组成。假设一段对话总是由操作员信息开始,以系统信息结束,用Jackson图描绘这样的人机对话过程。
展开阅读全文