在试图概述一些遗留的C ++和C#代码难以维护的难度以及向其引入错误的风险时,有人建议测量范围变量的范围或范围是有用的。代码使用了很多全局变量或广泛范围的变量,本地变量会更好。常见的情况是发现这些变量用于2或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