2017-07-10 14 views
1

私は大部分のC言語で書かれた大きなコードベースをいくつかの列挙型で持っています。最近、私は列挙型のうちの1つを修正しましたが、それは多少の影響を「誤って」予測したため、大きな影響をもたらしました。コードが変更されたために導入されているバグを静的に検出する方法はありますか?

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) 

そして、いくつかのように見えた私のコードでありアサートされた: - 私たちは常にin_value < ENUM_VAL_MAXを期待して、新しい列挙型の変更で、assertsとし、

if (in_val < ENUM_VAL_MAX) 

それに応じて条件を修正すべきであったが、これらのうちのいくつかが欠落し、そのために問題が生じた場合。

私の質問は、これらの種類のバグを識別するための最良の方法は何ですか?コード差分を見て、その影響を分析するスタティックアナライザーツールはありますか?例えば、この場合、(コードを静的に解析することにより)これらの条件に私を向ける可能性のあるツールがあり、警告が出ますか?私はHelgrindを見ましたが、それは助けに見えません。

答えて

1

あなたはおそらくこれを聞いしたいのですが、ありません:

  1. アサートが文書化行動に基づくべきです。この場合、ENUM_VAL_MAXが前の値より大きいというenum値の上に要約があったはずです。

  2. リファクタリングするときは、常に右クリック - >参照を確認してください(ほとんどのIDEにはこのオプションがあります)。概観では、それが使用されているコードの行が表示されます。そのため、比較を検出したはずです。

関連する問題