CAST质量模型包含各种被分类为“复杂性度量”的度量标准,即度量应用中工件复杂性的度量标准。此页面包含用于确定给定工件复杂性的机制的基本描述。
CAST复杂性度量
CAST为以下“复杂性指标”提供数据:
- 循环复杂性
- 基本循环复杂性
- 本质复杂性
- 集成复杂性
- 成本复杂性——用于成本估算特性
复杂性计算
循环, 基本循环, 本质, 集成
在分析和随后的快照生成过程中,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中的标签 | 本页对应资料 |
低 | 上面没有记录——默认情况下,所有工件的成本复杂性得分都很低。 |
平均 | 中等 |
高 | 高 |
极度 | 非常高 |