• 软件工程导论——第六章——详细设计


    软件工程导论——第六章——详细设计

    1、详细设计的概述

    (1)目标

    1. 详细设计阶段的根本目标是确定应该怎样具体实现所要求的系统,即进过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。
    2. 详细设计的目标不仅仅是逻辑上正确地实现每个模块的功能,更重要的是设计出处理过程应尽可能简明易懂。

    (2)工作任务

    详细设计阶段的任务是要设计出程序的“蓝图”,以后程序员将根据这个“蓝图”写出实际的程序代码。

    (3)关键技术

    详细设计的结果基本上决定了最终的程序代码的质量。结构程序设计技术是实现详细设计目标的关键技术,也是详细设计的逻辑基础。

    2、结构程序设计

    1、控制结构

    (1)基本控制结构

    三种基本的控制结构是:顺序、选择、循环。如下图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wwcBRWve-1656642480950)(C:\Users\W\AppData\Roaming\Typora\typora-user-images\image-20220630181410732.png)]

    实际上使用顺序结构和循环结构完全可以实现选择结构,因此,理论上最基本的控制结构只有两种。

    (2)扩展的控制结构

    DO UNTIL 和 DO CASE,如下图:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2PLJZMVs-1656642480951)(C:\Users\W\AppData\Roaming\Typora\typora-user-images\image-20220630181532218.png)]

    (3)修正的控制结构

    LEAVE 和 BREAK

    LEAVE和BREAK结构是受限制的前向GO TO 语句,用于转移到循环结构后面的语句,当需要立即从循环(甚至是嵌套的循环)中转移出来,使用LEAVE和BREAK结构,不仅方便而且会使效率提高很多。

    (4)分类

    1. 经典的结构程序设计
      只允许使用顺序、IF THEN ELSE型分支和DO WHILE型循环这三种基本控制结构
    2. 扩展的结构程序设计
      除了基本控制结构之外,还允许使用DO CASE型分支结构和DO UNTIL型循环结构
    3. 修正的结构程序设计
      除了扩展的结构程序设计之外,再允许使用LEAVE(或BREAK)结构

    2、定义

    (1)经典定义:
    如果一个程序的代码块仅仅通过顺序、选择和循环这三种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。

    (2)改进的定义:
    结构程序设计是尽可能少的使用GO TO 语句的程序设计方法,最好仅在检测出错误时才是用GO TO 语句,而且应该总是使用前向GO TO 语句

    3、人机界面设计

    1、重要性:

    (1)人机界面设计是接口设计的一个重要的组成部分。对于交互式系统来说,人机界面设计和数据设计、体系结构设计及过程设计一样重要。

    (2)人机界面的设计质量,直接影响用户对软件产品的评价,从而影响软件产品的竞争力和寿命。

    2、设计问题

    在设计人机界面的过程中,几乎总会遇到下述4个问题:系统响应时间、用户帮助措施、出错信息处理和命令交互

    (1)系统响应时间

    1. 定义:
      系统响应时间指从用户完成某个控制动作,到软件给出预期的响应之间的这段时间。
    2. 属性:
      系统响应时间有两个重要属性,分别是长度和易变性。
      1. 长度:如果系统响应时间过长,用户就会感到紧张和沮丧。但是,当用户工作速度是由人机界面决定的时候,系统响应时间过短也不好,这会迫使用户加快操作节奏,从而可能会犯错误。
      2. 易变性:指系统响应时间相对于平均响应时间的偏差,在许多情况下,这是系统响应时间的更重要的属性。即使系统响应时间较长,响应时间易变性低也有助于用户建立起稳定的工作节奏。

    (2)用户帮助措施

    1. 意义:
      交互是系统的每个用户几乎都需要帮助,当遇到复杂问题时需要查看用户手册以寻找答案。通过使用用户帮助设施,使得用户无需离开用户界面就能解决自己的问题。
    2. 分类:
      常见的帮助设施可分为集成和附加的两类,普遍认为,集成的帮助设施由于附加的帮助设施。
      1. 集成的:
        集成的帮助设施从一开始就设计在软件里面,通常,它对用户工作内容是敏感的,因此用户可以从与刚刚完成的操作有关的主题中选择一个请求帮助。显然,这可以缩短用户获得帮助的时间,增减界面的友好性。集成的帮助设施优于附加的帮助设施。
      2. 附加的:
        附加的帮助设施是在系统建成后再添加到软件中的,在多数情况下它实际上是一种查询能力有限的联机用户手册
      3. 设计时需要解决的问题:
        1. 在用户与系统交互期间,是否在任何时候都能获得关于系统任何功能的帮助信息?有两种选择:提供部分功能的帮助信息和提供全部功能的帮助信息。
        2. 用户怎样请求帮助?有3种选择:帮助菜单、特殊功能键和HELP命令
        3. 怎样显示帮助信息?有三种选择:在独立的窗口中,指出参考某个文档(不理想)和在屏幕固定位置显示简短提示
        4. 用户怎样返回到正常的交互方式中?有两种选择:屏幕上的返回按键和功能键
        5. 怎样组织帮助信息?有三种选择:平面结构(所有信息都通过关键字访问)、信息的层次结构和超文本结构

    (3)出错信息处理:

    1. 定义:
      出错信息和警告信息,是出现问题时交互式系统给出的“坏消息”。出错信息设计得不好,将向用户提供无用的甚至误导的信息,反而会加重用户的挫败感。

    2. 属性:
      交互式系统给出的出错信息和警告信息应该具有下述属性:

      1. 信息应该用用户可以理解的术语描述问题。
      2. 信息应该提供有助于从错误中恢复的建设性意见。
      3. 信息应该指出错误可能导致哪些负面后果,一遍用户检查是否出现了这些问题,并在确实出现问题时及时解决。
      4. 信息应该伴随着听觉上或视觉上的提示
      5. 信息不能带有指责色彩,也就是说,不能责怪用户。

      注意:当确实出现了问题的时候,有效的出错信息能提高交互式系统的质量,减轻用户的挫败感。

    (4)命令交互

    设计时需解决的问题:

    • 是否每个菜单选项都有对应的命令
    • 采用何种命令形式?有三种选择:控制序列,功能键和输入命令
    • 学习和记忆命令的难度有多大?忘记了命令怎么办?
    • 用户是否可以定制或缩写命令?

    命令宏机制

    利用命令宏机制,用户可以用自己的定义的名字代表代表一个常用的命令序列。需要使用这个命令序列时,用户无须依次输入每个命令,只需输入命令宏的名字就可以顺序执行所代表的全部命令。

    3、设计过程

    用户界面设计是一个迭代的过程,也就是说,通常先创建设计模型,再用原型实现这个设计模型,并由用户试用和评估,然后根据用户意见进行修改

    (1)设计流程:

    1. 创建第一级原型;
    2. 用户试用并评估该原型,直接向设计者表示对界面的评价;
    3. 设计者根据用户意见修改设计并实现下一级原型;
    4. 持续进行上述过程,直到用户满意,不需要再修改界面设计为止。

    (2)评估标准:

    1. 系统机器界面的规格说明书的长度和复杂程度,预示了用户学习使用该系统所需要的工作量
    2. 命令或动作的的数量,命令的平均参数个数或动作中的单个操作的个数,预示了系统的交互时间和总体效率
    3. 设计模型中包含的动作、命令和系统状态的数量,预示了用户学习使用该系统时需要记忆的内容的多少
    4. 界面风格、帮助设施和出错处理协议,预示了界面的复杂程度及用户接受该界面的程度。

    4、人机界面设计指南

    用户界面设计主要依靠设计者的经验,总结众多设计者的经验得出的设计指南,有助于设计者设计出友好、高效的人机界面。人机设计指南主要包括一般交互指南、信息显示指南、数据输入指南

    (1)一般交互指南(全局性的):
    一般交互指南涉及信息显示、数据输入和系统整体控制,因此,这类指南是全局性的,忽略它们将承担较大的风险。一般交互指南如下:

    1. 保持一致性:应该为人机界面中的菜单选择、命令输入、数据显示以及众多的其他功能,使用一致的格式。
    2. 提供有意义的反馈:应向用户提供视觉的和听觉的反馈,以保证在用户和系统之间建立双向通信。
    3. 再执行有较大破坏性的动作之前要求用户确认
    4. 允许取消大多数操作
    5. 减少在两次操作之间必须记忆的信息量
    6. 提高对话、移动和思考的效率
    7. 允许犯错误
    8. 按功能对动作分类,并据此设计屏幕布局。
    9. 提供对用户工作内容敏感的帮助设施
    10. 用简单动词或动词短语作为命令名

    (2)信息显示指南
    如果人机界面显示的信息是不完整的、含糊的或难以理解的。则该应用系统显然不能满足用户的需求。可以用多种不同的方式“显示”信息:用文字、图形和声音;按位置、移动和大小;使用颜色、分辨率和省略。信息显示的设计指南如下:

    1. 只显示与当前工作内容相关的信息;
    2. 不要用数据淹没用户,应该用便于用户迅速吸取信息的方式表示数据
    3. 使用一致的标记、标准的缩写和可预知的颜色
    4. 允许用户保持可视化的语境
    5. 产生有意义的出错信息
    6. 使用大小写、缩进和文本分组以帮助理解
    7. 使用窗口分隔不同类型的信息
    8. 使用“模拟”显示方式表示信息,以使信息更容易被用户提取。
    9. 高效率使用显示屏

    (3)数据输入指南
    用户的大部分时间用在选择命令、输入数据和向系统提供输入。在许多应用系统中,键盘仍然是主要的输入介质。数据输入指南如下:

    1. 尽量减少用户的输入动作
    2. 保持信息显示和数据输入之间的一致性
    3. 允许用户自定义输入
    4. 交互应该是灵活的,并且可调整成用户最喜欢你的输入方式。
    5. 使在当前动作语境中不适用的命令不起作用。
    6. 让用户控制交互流
    7. 对所有输入动作都提供帮助
    8. 消除冗余的输入。

    4、过程设计的工作

    1、定义:

    描述程序处理过程的工作称为过程设计的工作,它们可以分为图形、表格和语言3类。基本要求是能提供对设计无歧义的描述,即应该能指明控制流程、处理功能、数据组织以及其他方面的实现细节,从而在编码阶段能把对设计的描述直接翻译成程序代码

    2、分类

    (1)程序流程图

    ①符号表示:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5XtM2xyM-1656642480952)(C:\Users\W\AppData\Roaming\Typora\typora-user-images\image-20220630210357330.png)]

    各种符号的含义:

    (a)选择(分支)

    (b)注释

    (c)预先定义的处理

    (d)多分支

    (e)开始或停止

    (f)准备

    (g)循环上界限

    (h)循环下界限

    (i)虚线

    (j)省略符

    (k)并行方式

    (l)处理

    (m)输入输出

    (n)连接

    (o)换页连接

    (p)控制流

    ②优点:

    对控制流程的描绘很直观,便于初学者掌握。

    ③缺点:

    • 程序流程图本质上不是逐步求精的工具,它诱使程序员过早的考虑程序的控制过程,而不去考虑程序的全局结构
    • 程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制。
    • 程序流程图不易表示数据结构。

    (2)盒图:(N-S图)

    ①特点:

    出于要有一种不允许违背结构设计精神的工具的考虑,Nassi和Shneiderman提出了盒图,又称为N-S图。它有以下特点:

    • 功能域明确,可以从盒图上一眼看出来;
    • 不可能任意转移控制
    • 很容易确定局部和全局数据的作用域
    • 很容易表示嵌套关系,也可以表示模块的层次结构。

    ②表示

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jnqnbhSN-1656642480952)(C:\Users\W\AppData\Roaming\Typora\typora-user-images\image-20220630211252012.png)]

    其中各个图形代表的结构如下:

    (a)顺序结构

    (b)IF_THEN_ELSE型分支

    (c)CASE型多分支

    (d)循环结构

    (e)调用子程序A

    ③优点:

    盒图没有箭头,因此不允许随意转移控制。坚持使用盒图作为详细设计的工具,可以使程序逐步养成用结构化的方式思考问题和解决问题的习惯。

    (3)PAD图

    ①符号表示:

    PAD是问题分析图(problem analys is diagram)的英文缩写,。它用二维树形结构的图来表示程序的控制流,将这种图翻译成程序代码比较容易。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MvI7FOvA-1656642480953)(C:\Users\W\AppData\Roaming\Typora\typora-user-images\image-20220630213559722.png)]

    各个符号代表的含义:

    (a)顺序(先执行P1再执行P2)

    (b)选择(IF C THEN P1 ELSE P2)

    (c)CASE型多分支

    (d)WHILE型循环(WHILE C DO P)

    (e)UNTIL型循环(REPEAT P UNTIL C)

    (f)语句标号

    (g)定义

    ②优点:

    • 使用表示结构化控制结构的PAD符号所设计出来的程序必然是结构化程序。
    • PAD图所描绘的程序结构十分清晰。图中最左面的竖线是程序的主线,即第一层结构。随着程序层次的增加,PAD图逐渐向右延伸,每增加一个层次,图形向右扩展一个竖线。PAD图中竖线的总条数就是程序的层次数
    • 用PAD途表现程序逻辑,易读、易记、易懂。PAD容易是二维树形结构的图形,程序从图中最左竖线上端的结点开始执行,从上而下,从左向右顺序执行,遍历所有结点。
    • 容易将PAD图转换成高级语言源程序,这种转换可以用软件工具自动完成,从而省去人工编码的工作,有利于提高软件可靠性和软件生产率
    • 即可用于表示程序逻辑,也可用于描绘数据结构
    • PAD图的符号是支持自顶向下、逐步求精方法的使用。开始时设计者可以定义一个抽象的程序,随着设计工作的深入而使用def符号逐步增加细节,直至完成详细设计表示初始的PAD图;

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KLjoZZho-1656642480953)(C:\Users\W\AppData\Roaming\Typora\typora-user-images\image-20220630214358444.png)]

    (4)判定表

    ①适用性:算法中包含多重嵌套的条件选择时,判定表能够清晰地标识复杂的条件组合与应做的动作之间的对应关系

    ②组成:

    1. 左上部分列出所有条件
    2. 左下部分是所有可能的动作
    3. 右上部分是和每种条件组合的一个矩阵
    4. 右下部分是和每种条件组合相对应的动作;

    注意:判定表的右半部分的每一列实质上是一条规则,规定了与特定的条件组合相对应的动作

    ③优点:

    1. 判定表能够简洁而又无歧义的描述处理规则
    2. 判定表与布尔代数或卡诺图结合起来使用,可以更加直观、简洁、清晰的描述规则。

    ④缺点:

    1. 不能同时清晰地表示出问题的顺序性和重复性
    2. 初次接触这种工具的人理解它需要有一个学习过程
    3. 数据元素增多时,判定表的简介程度大幅下降

    (5)判定树

    判定树是判定表的变种,是一种比较常用的系统分析和设计的工具。

    ①优点:

    1. 判定树能清晰地表示复杂的条件组合与应做的动作之间的对应关系
    2. 判定树的形式简单到不需任何说明,一眼就能看出其含义,易于掌握和使用

    ②缺点:

    • 简易性差
    • 画判定树时分支的次序可能对最终画出的判定树的简洁程度有较大影响。

    (6)过程设计语言

    ①定义:

    过程设计语言(PDL),即伪码,它是用正文形式表示数据和处理过程的设计工具,PDL具有严格的关键字外部语法,用余定义控制结构和数据结构。PDL表示实际操作和条件的内部语法通常又是灵活自由的,可以适应各种工程项目的需要

    ②特点:

    • 关键字的固定语法,它提供了结构化控制结构,数据说明和模块化的特点。
    • 自然语言的自有语法,它描述处理特点。
    • 数据说明的手段。应该即包含简单的数据结构又包含复杂的数据结构。
    • 模块定义和调用的技术,应该提供各种接口描述模式。

    ③优点:

    • 可作为注释直接插在源程序中。有助于保持文档和程序的一致性,提高文档的质量。
    • 可以使用普通的正文编辑程序或文字处理系统,很方便地完成PDL的书写和编辑工作
    • 已经有自动处理PDL的程序存在,且可以自动由PDL生成程序代码

    ④缺点:

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

    5、面向数据结构的设计方法

    1、相关概念

    (1)目的:

    面向数据结构的设计方法的最终目标是得出对程序处理过程的描述

    (2)适用性:

    面向数据结构的设计方法最适合于在详细设计阶段使用,即在完成了软件结构设计之后,可以使用面向数据结构的方法设计每个模块的处理过程。

    2、Jackson图

    (1)分类:

    Jackson方法与Warnier方法是最著名的两个面向数据结构的设计方法,Jackson图根据程序中的数据元素彼此间的逻辑关系可以分为顺序结构、选择结构和重复结构3类。具体如下:

    ①顺序结构:

    顺序结构的数据由一个或多个数据元素组成,每个元素按确定次序出现一次。如下图:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TYpidmqG-1656642480954)(C:\Users\W\AppData\Roaming\Typora\typora-user-images\image-20220630221910929.png)]

    注意:图中每个元素只出现一次,出现的次序是B、C、D

    ②选择结构:

    选择结构的数据包含两个或多个数据元素,每次使用这个数据时按一定的条件从这些数据元素中选择一个。如下图:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gb7IOBNZ-1656642480954)(C:\Users\W\AppData\Roaming\Typora\typora-user-images\image-20220630222023865.png)]

    注意:在B、C、D的右上角有小圆圈做标记

    ③重复结构:

    重复结构的数据,根据使用时的条件由一个数据元素出现零次或多次构成。如下图:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6piV3A2r-1656642480955)(C:\Users\W\AppData\Roaming\Typora\typora-user-images\image-20220630222118594.png)]

    注意:在B的右上角有星号标记

    (2)优点:

    • 便于表示层次结构,而且是对结构进行自顶向下分解的有力工具
    • 形象直观可读性好
    • 既能表示数据结构也能表示程序结构

    (3)缺点:

    • 用这种图形工具表示选择和重复结构时,选择条件或循环条件不能直接在图上表示出来,影响了图的表达能力,也不易直接把图翻译成程序。
    • 框剪连线为斜线,不易在行式打印机上输出

    3、改进的Jackson图

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qAvdNjwi-1656642480956)(C:\Users\W\AppData\Roaming\Typora\typora-user-images\image-20220630222627939.png)]

    ①顺序结构:

    如图(a)所示,B、C、D中任一个都不能是选择出现或重复出现的数据元素

    ②选择结构:

    如图(b)所示,S右面括号中的数字i是分支条件的编号。

    ③可选结构:

    如图(c)所示,A或者是元素B或者不出现

    ④重复结构:

    如图(d)所示,循环结束条件的编号为i

    (2)与层次图的比较:

    1. 层次图中的一个方框代表一个模块;而Jackson图即使在描绘程序结构时,一个方框也并不代表一个模块。
    2. 层次图表现的是调用关系,通常一个模块除了调用下级模块外,海湾城其他操作;而Jackson图表现的是组成关系。

    4、Jackson方法

    (1)设计步骤

    Jackson结构程序设计方法基本上由下述5个步骤组成:

    1. 分析并确定输入数据和输出数据的逻辑结构,并用Jackson图描绘这些数据结构
    2. 找出输入数据结构和输出数据结构中有对应关系的数据单元。所谓有对应关系是指由直接的因果关系,在程序中可以同时处理的数据单元
    3. 用下述3条规则从描绘数据结构的Jackson图导出描绘程序结构的Jackson图
      1. 为每对有对应关系的数据单元,按照它们在数据结构图中的层次在程序结构图的相应层次画一个处理框。
      2. 根据输入数据结构中剩余的每个数据单元所处的层次,在程序结构图的相应层次分别为它们画上对应的处理框
      3. 根据输出数据结构中剩余的每个数据单元所处的层次,在程序结构图的相应层次分别为它们画上对应的处理框。
    4. 累出所有的操作和条件,并且把它们分 配到程序结构图的适当位置
    5. 用伪码表示程序。

    (2)伪码:

    Jackson方法中使用的伪码和Jackson图是完全对应的,顺序、选择、重复结构对应的伪码如下:

    ①顺序结构对应的伪码:其中seq和end是关键字:

    A seq
    B
    C
    D
    A end
    
    • 1
    • 2
    • 3
    • 4
    • 5

    ②选择结构对应的伪码如下:其中select、or和end是关键字,cond1,cond2,cond3分别是执行B 、C、D的条件

    A select cond1
    B
    A or cond2
    C
    A or cond3
    D
    A end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    ③重复结构对应的伪码如下:其中iter、until、while和end是关键字,cond是条件:

    A iter until(或while) cond
    B
    A end
    
    • 1
    • 2
    • 3

    6、程序复杂程度的定量度量

    1、价值:

    1. 把程序的复杂程度乘以适当数可估算出软件中错误的数量以及开发需要的工作量
    2. 定量度量的结构可以用来比较两个不同的设计或两个不同算法的优劣
    3. 程序的定量的复杂程度可以作为模块规模的精确限度

    2、McCabe方法

    (1)流图

    ①定义:

    流图实质上是“退化了”的程序流程图,它仅仅描绘程序的控制流程,完全不表现对数据具体操作以及分支或玄幻的具体条件,流图通常被用来突出表示程序的控制流。

    ②程序流程图映射成流图

    1. 流图汇中用圆表示结点,一个圆代表一条或多条语句,程序流程图中的一个顺序的处理框序列和一个菱形判定框,可以映射成流图中的一个结点。
    2. 流图中的箭头称为边,代表控制流。刘图中的一条边必须终止于一个结点,即使这个结点并不代表任何语句。
    3. 由边和结点围成的面积称为区域,计算区域数时应包括图外部未被围起来的区域。

    (2)环形复杂度

    ①定义:

    Mache方法根据程序控制流的复杂程度定量度量程序的复杂程度,这样度量出的结构称为程序的环形复杂度。

    ②计算方法:

    1. 流图中国线性无关的区域数等于环形复杂度
    2. 流图G的环形复杂度V(G) = E - N + 2,其中E是流图中边的条数,N是结点数
    3. 流图G的环形复杂度V(G) = P + 1,其中P是流图中判定结点的数目。

    (3)环形复杂度的用途:

    程序的环形复杂度取决于程序控制流的复杂程度,即取决于程序结构的复杂程度,当程序内分支或循环个数增加时,环形复杂度也随之增加,因此它是对测试难度的一种定量度量,也能对软件最终的可靠性给出某种预测。

    (4)环形复杂度的规模

    环形复杂度高的程序往往是最困难、最容易出问题的程序。模块规模V(G)≤ 10 为益,即V(G)=10是模块规模的一个科学精确的上限。

    3、Halstead方法

    (1)定义:

    Halstead方法是根据程序运算符和操作数的总数来度量程序的复杂程度。

    (2)方法:

    1. 程序长度N定义为(N1为程序中运算符出现的总次数,N2为操作数出现的总次数)
      N = N1 + N2
    2. 预测程序长度的公司(使用不同运算符的个数n1,不同操作数的个数n2)
      H = n1 ㏒₂ n1 + n2㏒₂n2
    3. 预测程序中包含错误的个数的公式:
      E = N ㏒₂(n1+n2)/3000
      的区域数等于环形复杂度
    4. 流图G的环形复杂度V(G) = E - N + 2,其中E是流图中边的条数,N是结点数
    5. 流图G的环形复杂度V(G) = P + 1,其中P是流图中判定结点的数目。

    (3)环形复杂度的用途:

    程序的环形复杂度取决于程序控制流的复杂程度,即取决于程序结构的复杂程度,当程序内分支或循环个数增加时,环形复杂度也随之增加,因此它是对测试难度的一种定量度量,也能对软件最终的可靠性给出某种预测。

    (4)环形复杂度的规模

    环形复杂度高的程序往往是最困难、最容易出问题的程序。模块规模V(G)≤ 10 为益,即V(G)=10是模块规模的一个科学精确的上限。

    3、Halstead方法

    (1)定义:

    Halstead方法是根据程序运算符和操作数的总数来度量程序的复杂程度。

    (2)方法:

    1. 程序长度N定义为(N1为程序中运算符出现的总次数,N2为操作数出现的总次数)
      N = N1 + N2
    2. 预测程序长度的公司(使用不同运算符的个数n1,不同操作数的个数n2)
      H = n1 ㏒₂ n1 + n2㏒₂n2
    3. 预测程序中包含错误的个数的公式:
      E = N ㏒₂(n1+n2)/3000
  • 相关阅读:
    hadoop-2.6.4集群编译搭建-阿里云和腾讯云
    D. Yarik and Musical Notes Codeforces Round 909 (Div. 3) 1899D
    识别出图像中的人脸区域
    java面试题(一年工作经验)的心得
    198、RabbitMQ 的核心概念 及 工作机制概述; Exchange 类型 及 该类型对应的路由规则;了解什么是JMS。
    如何创建和使用需求追溯矩阵
    力扣--在排序数组中查找元素的第一个和最后一个位置
    软件测试/测试开发丨venv 环境管理 学习笔记
    【02】基础知识:React - jsx语法规则
    Redis学习(11)|Redis键值管理与Spring Boot集成实战
  • 原文地址:https://blog.csdn.net/qiangqiang103/article/details/125554016