是否存在涵盖变量范围的代码度量标准

时间:2013-01-15 10:19:09

标签: c# java c++ static-analysis metrics

在试图概述一些遗留的C ++和C#代码难以维护的难度以及向其引入错误的风险时,有人建议测量范围变量的范围或范围是有用的。代码使用了很多全局变量或广泛范围的变量,本地变量会更好。常见的情况是发现这些变量用于2或3行代码,这些代码位于声明它们的几个范围级别。

我知道静态代码分析工具通常会尝试量化耦合和内聚,但有没有更具体的测量变量/数据范围?

3 个答案:

答案 0 :(得分:2)

是的,这是静态分析的标准技术。它被称为变量活跃度的分析。在this book中,介绍示例正在进行此类分析。

关于它的Wikipedia article

  

在编译器理论中,实时变量分析(或简单的活跃性)   分析)是由编译器执行的经典数据流分析   为每个程序点计算可能存在的变量   在下次写入之前读取,即生存的变量   从每个计划点退出。

     

简单地说:如果变量包含可能的值,则变量是活动的   将来需要。

答案 1 :(得分:0)

我将专注于OO语言中的局部变量(Java,C#,C ++)。我可以想到一些关于局部变量范围的措施。

局部变量范围
是可以访问局部变量的语句数。这不应该太大,因为这表明方法太长。但是,方法语句计数可能是一个更适合的测量方法。

可访问的本地变量计数
是方法的每个语句的可访问局部变量的数量。这不应该大于3,因为它使选择在表达式中使用哪个局部变量更加困难。

本地变量使用密度
是访问局部变量的语句与可访问局部变量的语句的百分比。低值表示该方法不是很连贯。

对局部变量的一致修改计数
是同一块内局部变量的修改数。这表明多个局部变量属于一起。所以他们应该形成自己的对象,从而提高连贯性。

答案 2 :(得分:0)

您可以尝试使用CppDepend及其CQLinq代码查询语言来检测仅由一个方法或一个类使用的一些全局变量。

from f in Fields where f.IsGlobal && f.MethodsUsingMe.Count()==1 select f