在尝试了解某些遗留 C++ 和 C# 代码的维护难度以及向其中引入错误的风险时,有人建议衡量变量的范围有多广或有多窄会很有用。该代码使用了许多全局变量或范围广泛的变量,而本地变量会更好。一个常见的情况是发现这些变量用于 2 或 3 行代码,在它们被声明的几个范围级别。
我知道静态代码分析工具通常会尝试量化耦合和内聚,但有没有更具体的测量变量/数据范围的方法?
在尝试了解某些遗留 C++ 和 C# 代码的维护难度以及向其中引入错误的风险时,有人建议衡量变量的范围有多广或有多窄会很有用。该代码使用了许多全局变量或范围广泛的变量,而本地变量会更好。一个常见的情况是发现这些变量用于 2 或 3 行代码,在它们被声明的几个范围级别。
我知道静态代码分析工具通常会尝试量化耦合和内聚,但有没有更具体的测量变量/数据范围的方法?
我将专注于 OO 语言(Java、C#、C++)中的局部变量。我可以想到一些关于局部变量范围的措施。
局部变量范围大小
是局部变量可访问的语句数。这不应该太大,因为这表明方法太长。然而,方法语句计数可能是对此更充分的衡量标准。
可访问局部变量计数
是方法的每个语句的可访问局部变量的数量。这不应大于 3,因为它使选择在表达式中使用哪个局部变量变得更加困难。
局部变量使用密度
是访问局部变量的语句与可访问局部变量的语句的百分比。低值表明该方法不太连贯。
局部变量的连贯修改计数
是同一块内局部变量的修改次数。这表明多个局部变量属于一起。因此,它们应该形成自己的对象,从而增加连贯性。
您可以尝试CppDepend和它的 CQLinq 代码查询语言来检测仅由一种方法或一个类使用的一些全局变量。
from f in Fields where f.IsGlobal && f.MethodsUsingMe.Count()==1 select f