一:价值(了解)

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

二:McCabe方法

(1)流图

A:定义

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

B:把程序流程图映射为流图

①:对于顺序结构,一个顺序处理和下一个选择可以映射为一个结点

在这里插入图片描述

②:对于选择语句,开始/结束语句映射为一个结点,两条分支至少各映射成一个结点

在这里插入图片描述
③:开始语句和结束语句各映射成一个结点

在这里插入图片描述


在这里插入图片描述

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

C:PDL翻译为流图

在这里插入图片描述

(2)环形复杂度

A:定义

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

B:计算方法

环形复杂度定量度量程序的逻辑复杂度,可以用下述3种方法中的任何一种来计算环形复杂度:

  • 流图中的区域数等于环形复杂度
    在这里插入图片描述

  • 流图G的环形复杂度V(G)=E-N+2,E是流图中边的条数,N是结点数
    在这里插入图片描述

  • 流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目。V(G)小于等于10比较科学
    在这里插入图片描述

三:Halstead方法(了解)

(1)定义

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

(2)方法

1.程序长度 N N N定义,其中 N 1 N_{1} N1是程序中运算符出现总次数, N 2 N_{2} N2是程序中操作数出现总次数

N = N 1 + N 2 N=N_{1}+N_{2} N=N1+N2

2.预测程序长度的公式,使用的不同运算符的个数为 n 1 n_{1} n1,不同操作数的个数为 n 2 n_{2} n2

H = n 1 l o g 2 n 1 + n 2 l o g 2 n 2 H=n_{1}log_{2}n_{1}+n_{2}log_{2}n_{2} H=n1log2n1+n2log2n2

3.预测程序中包含错误的个数的公式
E = N ∗ l o g 2 ( n 1 + n 2 ) / 3000 E=N*log_{2}(n_{1}+n_{2})/3000 E=Nlog2(n1+n2)/3000

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐