8

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

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

4

3 回答 3

2

是的,这是静态分析的标准技术。这被称为变量活跃度分析。在本书中,介绍的例子就是在做这样的分析。

来自维基百科关于它的文章:

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

简单地说:如果一个变量拥有一个未来可能需要的值,那么它就是活的。

于 2013-01-15T10:24:09.930 回答
0

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

局部变量范围大小
是局部变量可访问的语句数。这不应该太大,因为这表明方法太长。然而,方法语句计数可能是对此更充分的衡量标准。

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

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

局部变量的连贯修改计数
是同一块内局部变量的修改次数。这表明多个局部变量属于一起。因此,它们应该形成自己的对象,从而增加连贯性。

于 2013-01-15T13:25:30.693 回答
0

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

from f in Fields where f.IsGlobal && f.MethodsUsingMe.Count()==1 select f
于 2017-07-05T17:10:11.257 回答