CコードベースのコードアナライザーとしてSplintを使用することを計画しています。しかし、これまでSplintツールを試したことはなかったので、そのメリット、長所、短所について意見を求めています。
5 に答える
Lintツールは、コードレビューが見逃しがちな一般的な問題やエラーを見つけるのに役立ちます。私の意見では、静的コード分析を行うときに失うものは何もありません。唯一の欠点は、重要ではない可能性のある多くの誤検知または警告(つまり、コーディングスタイルの推奨)が発生する可能性があることです。優れたフィルタリングスキルを身に付ける必要があります。静的アナライザーもすべてをキャッチするわけではありませんが、何もないよりはましです。
これがあなたの興味を引くかもしれないSANSインスティテュートからのホワイトペーパーです:http: //www.sans.org/reading_room/whitepapers/securecode/secure-software-development-code-analysis-tools_389
Splintは、コードをより慣用的にすることに優れています(したがって、さまざまなコンパイラーが解析しやすく、移植性が高く、リファクタリングしやすいため、読みやすくなります)。Splintは、intとfloatの間の暗黙のキャストなどの微妙なバグを見つけることができます。Splintは、メモリリークやその他のセキュリティの脆弱性を追跡します。
試してみてください:splint hello.c
。
ワッフルマンが示唆したように、静的アナライザーは多くの誤警報を生成します。私は、PreventがSparrowよりも優れたアラームを発することを発見しました。これらは、静的分析に使用する2つです。
典型的な誤警報と良好な警報の例は次のとおりです。
bar (char **output)
{
*output = malloc(100);
}
foo()
{
char *output=NULL;
bar(&output)
}
機能バーでは、ポインタ出力のメモリリークが報告されます。関数fooでは、関数バーが呼び出されたときにNULL逆参照が報告されます。しかし、それにもかかわらず、何百もの誤ったアラームの中から真のアラームを見つけるかの選択です。
そのため、コードレビュー中に見逃される可能性のあるメモリリークを見つけることができます。防止ライセンスには費用がかかり、アラームがfalseとマークされると、その後の分析には表示されません。したがって、Splintが同じことを行うかどうかを確認する必要があります。
ツールは、エラーである可能性のあるパターンを探します。利点は、ツールが潜在的なバグを検出する可能性があることです。欠点は、誤検知についても大量に検出される可能性があることです。