Page tree

CAST质量模型包含各种被分类为“复杂性度量”的度量标准,即度量应用中工件复杂性的度量标准。此页面包含用于确定给定工件复杂性的机制的基本描述。

CAST复杂性度量

CAST为以下“复杂性指标”提供数据:

  1. 循环复杂性
  2. 基本循环复杂性
  3. 本质复杂性
  4. 集成复杂性
  5. 成本复杂性——用于成本估算特性

复杂性计算

循环, 基本循环, 本质, 集成

在分析和随后的快照生成过程中,CAST通过计算工件遇到的语句的数量(例如,IF、ELSE-IF、WHILE、DO等)来确定工件的复杂性得分——每遇到一条语句就增加一条。此外还会计算嵌套语句,这对总体复杂性评分有帮助。

每个复杂性度量都考虑了不同的语句——下面列出了这些语句。

对于下面列出的所有指标,将程序或子程序入口点计算为一个。因此下面的所有指标的最小值都是1(即使对象不包含代码)。

循环复杂性

为了计算这个度量,每当遇到下列语句之一时,计数器就增加1:

  • IF
  • ELSE-IF
  • AND-OR
  • CASE
  • CATCH
  • CONTINUE (only in loops)
  • DO-WHILE
  • WHILE
  • FOR
  • TRY

基础循环复杂性

为了计算这个度量,每当遇到下列语句之一时,计数器就增加1:

  • IF
  • ELSE-IF
  • CASE
  • CATCH
  • CONTINUE (only in loops)
  • DO-WHILE
  • WHILE
  • FOR
  • TRY

基础循环复杂性

该指标考虑了两种语句类型:

原始语句

  • IF
  • ELSE-IF
  • AND-OR
  • SWITCH
  • CASE
  • TRY
  • CATCH
  • DO-WHILE
  • WHILE
  • FOR

复杂的语句

  • BREAK (仅在循环中使用)
  • CONTINUE (仅在循环中使用)
  • GOTO
  • RAISE

工作方式

CAST通过工件中的原始语句,然后通过复杂语句。如果在原语语句中遇到一条语句,但不确定是否匹配预定义的复杂语句之一,那么分支将“简化”(即跳过)到遇到的第一个复杂语句(或者根语句(如果没有))。例如:

遇到复杂的语句
Function XX 					=> Init = 1
	Prim 1 						=> +1
		Prim 2 					=> +1
			Prim 3 				=> +1
				Complex 1 		=> Complex => No reduction

Result = 4
复杂语句后面跟着非复杂语句(减少)
Function XX 					=> Init = 1
	Prim 1 						=> +1
		Complex 1 				=> Complex => No reduction
		Prim 2 					=> +1
			Prim 3 				=> +1
				Statement 		=> Non-Complex => Reduction to the first Complex statement
Result = 2
非复杂语句
Function XX             		=> Init = 1
	Prim 1               		=> +1
		Prim 2              	=> +1
			Prim 3            	=> +1
				Statement       => No Complex => Reduction to the root

Result: EvG = 1

集成的复杂性

这个度量函数的功能与本质复杂性(如上所述)完全相同,只是复杂语句的列表不同:

原始语句

  • IF
  • ELSE-IF
  • AND-OR
  • SWITCH
  • CASE
  • TRY
  • CATCH
  • DO-WHILE
  • WHILE
  • FOR

复杂语句

  • CALL

成本

成本复杂性的计算方法与其它复杂性度量方法不同。它考虑到其它类型复杂性的得分(例如循环复杂性),并将其聚合以提供成本复杂性的得分。

考虑事项

考虑到下列情况:

缺少评论索引

工件的定位基于它们的注释/代码比率,使用以下阈值:

  • 平均注释/代码比率:15
  • 高注释/代码比率:7
  • 非常高的注释/代码比率:3

循环复杂性索引

工件的定位基于其循环复杂性评分如下:

  • 中等循环复杂性:对于度量65503结果的所有工件(中等复杂性工件)

  • 高级循环复杂性:对于度量65504的所有工件(高级复杂性工件)

  • 非常高的循环复杂性:对于度量65505结果的所有工件(非常高的复杂性工件)

SQL复杂性指数

根据SQL复杂性评分,工件的位置如下:

  • 中等SQL复杂性:对于度量65803的所有工件(中等的SQL复杂性工件)

  • 高级SQL复杂性:对于度量65804(高级SQL复杂性工件)的结果的所有工件

  • 非常高的SQL复杂性:对于度量65805的所有工件(非常高的SQL复杂性工件)

工件粒度指数

工件的位置是基于规模分布分数,如下所示:

  • 平均粒度:对于度量65102(平均大小工件)有结果的所有工件

  • 高粒度:对于度量65103(大型工件)产生结果的所有工件

  • 非常高的粒度:对于度量65104(非常大的工件)产生结果的所有工件

工件耦合指数

工件的位置基于耦合分布分数,如下所示:

  • 平均耦合:对于度量65302结果的所有工件(平均耦合工件)

  • 高耦合:对于度量65303结果的所有工件(高耦合工件)

  • 非常高的耦合:对于度量65304结果的所有工件(非常高的耦合工件)

成本计算复杂性

一旦确定了工件的上述得分,那么成本复杂性得分的计算方法如下:

非常高的成本复杂性

当下列情况之一为真时,成本复杂性将非常高:

  • 循环复杂性指数非常高     
  • SQL复杂性指数 非常高
  • 工件粒度指数非常高缺少注释指数非常高工件耦合指数非常高

高成本的复杂性

当下列情况之一为真时,成本复杂性将很高:

  • 循环复杂性指数中等SQL复杂性指数中等工件粒度指数非常高,或者缺少注释指数非常高,或者工件耦合指数非常高
  • 循环复杂度指数高    
  • 工件粒度指数缺少注释指数工件耦合指数

中等成本的复杂性

当下列情况之一为真时,成本复杂性将是中等的:

    • 循环复杂性指数SQL复杂性指数(工件粒度指数,或者缺少注释指数,或者工件耦合指数
    • 循环复杂度指数中等
    • SQL复杂性指数中等

标签对应

请注意在报告 - FlexReport中,可以从四个成本复杂性过滤器中进行选择。标签不同于上面的分类分数。等效的标签如下所示。

报告 - FlexReport中的标签本页对应资料
上面没有记录——默认情况下,所有工件的成本复杂性得分都很低。
平均中等
极度非常高
  • No labels