如何静态检测由于代码更改而引入的错误?
How to statically detect bugs that are being introduced because of a code change?
我有一个主要用 C 语言编写的大型代码库,其中包含几个枚举。最近我修改了一个枚举,它产生了重大影响,因为我有点 "mis"-估计了影响。
有一个枚举看起来像这样:-
typedef enum en_e_type
{
ENUM_VAL_1 = 1,
ENUM_VAL_2 = 2,
ENUM_VAL_3 = 3,
ENUM_VAL_MAX = 4,
}en_e;
这已更改为
typedef enum en_e_type
{
ENUM_VAL_1 = 1,
ENUM_VAL_2 = 2,
ENUM_VAL_3 = 3,
ENUM_VAL_MAX = ENUM_VAL_3 ,
}en_e;
我们可以看到ENUM_VAL_MAX
的值被修改了。
我的代码中有一些断言看起来像这样
ASSERT (in_value < ENUM_VAL_MAX )
还有一些 if 条件是这样的 :-
if (in_val < ENUM_VAL_MAX)
我们一直期待 in_value < ENUM_VAL_MAX
,随着新枚举的改变,asserts
和 if 条件应该相应地修改,但其中一些被遗漏了,因此出现了问题。
我的问题是,识别这类错误的最佳方法是什么?是否有一些静态分析器工具可以查看代码差异并相应地分析其影响?对于前。在这种情况下,是否有一种工具可以将我指向这些 if/assert
条件(通过静态解析代码)并发出一些警告?我查看了 Helgrind,但它似乎没有帮助。
您可能不想听到这个,但是:
断言应该基于记录的行为。在这种情况下,枚举值上方应该有一个摘要,说明 ENUM_VAL_MAX 大于前面的任何值。
重构时,始终右键单击 -> 检查引用(大多数 IDE 都有此选项)并滚动浏览它。您会在概览中看到使用它的代码行,因此您会检测到比较。
我有一个主要用 C 语言编写的大型代码库,其中包含几个枚举。最近我修改了一个枚举,它产生了重大影响,因为我有点 "mis"-估计了影响。 有一个枚举看起来像这样:-
typedef enum en_e_type
{
ENUM_VAL_1 = 1,
ENUM_VAL_2 = 2,
ENUM_VAL_3 = 3,
ENUM_VAL_MAX = 4,
}en_e;
这已更改为
typedef enum en_e_type
{
ENUM_VAL_1 = 1,
ENUM_VAL_2 = 2,
ENUM_VAL_3 = 3,
ENUM_VAL_MAX = ENUM_VAL_3 ,
}en_e;
我们可以看到ENUM_VAL_MAX
的值被修改了。
我的代码中有一些断言看起来像这样
ASSERT (in_value < ENUM_VAL_MAX )
还有一些 if 条件是这样的 :-
if (in_val < ENUM_VAL_MAX)
我们一直期待 in_value < ENUM_VAL_MAX
,随着新枚举的改变,asserts
和 if 条件应该相应地修改,但其中一些被遗漏了,因此出现了问题。
我的问题是,识别这类错误的最佳方法是什么?是否有一些静态分析器工具可以查看代码差异并相应地分析其影响?对于前。在这种情况下,是否有一种工具可以将我指向这些 if/assert
条件(通过静态解析代码)并发出一些警告?我查看了 Helgrind,但它似乎没有帮助。
您可能不想听到这个,但是:
断言应该基于记录的行为。在这种情况下,枚举值上方应该有一个摘要,说明 ENUM_VAL_MAX 大于前面的任何值。
重构时,始终右键单击 -> 检查引用(大多数 IDE 都有此选项)并滚动浏览它。您会在概览中看到使用它的代码行,因此您会检测到比较。