ブログ 約3分

なぜC/C++静的解析に本気で取り組むべきなのか?

Share this article
なぜC/C++静的解析に本気で取り組むべきなのか?

静的解析ツールを使う利点や、コードベースの改善にどう役立つかを論じた資料はたくさんあります。それらは、ツールを使うことで得られるものを示してくれます。しかし、使わないことで失うものについて考えたことはあるでしょうか。

たとえば、ポインタを二重に解放することで発生するメモリ破壊は、ランダムなクラッシュにつながる可能性があります。この種の問題の特定には、数時間から数日かかることもあります。C/C++には、特にメモリ破壊に関して、同じように危険な問題が数多く存在します。たった1つの問題でも、数ドルから数万ドルものコストになる可能性があります。

問題の影響はプログラムの性質にも左右されます。機械を制御する組み込みアプリケーションの問題と、ペイントアプリケーションのクラッシュでは、結果が同じではありません。場合によっては、たった1つの問題が数百万ドル、あるいは数十億ドルの損失につながることもあります。その例が アリアン5です。ここでは、1つのバグが70億ドルの損失をもたらしました。

静的解析ツールを使うと何を失うのか?

例として Cppcheck を見てみましょう。このツールは主に、コンパイラが通常検出しない種類のバグを検出します。このツールでは、興味深いエラーが多数報告されます。

ダウンロードには1分もかからず、設定にも20分ほどしかかかりません。解析には数分から数時間かかりますが、その間は別の作業を自由に進められます。解析後には数千件の潜在的な問題が見つかるかもしれませんが、最初は優先度の最も高いエラーだけに集中すれば十分です。

つまり、無料の静的解析ツールで失うものは 30分 だけです。たったそれだけで、数万ドルものコストになり得る潜在的な問題の一覧を入手できます。

商用ツールの場合、失うのは時間だけではありません。購入費用を支払う必要があるため、お金も失います。たとえば、1,000ドルのツールを購入し、それによって開発者が2~3日かけて見つけるはずだった問題を発見できたとします。C/C++開発者の3日分の人件費は、もちろん企業の所在地にもよりますが、1,000ドルを超える可能性があります。さらに、1つの問題に潜む隠れたコストを考慮すると、一見単純な問題が企業にどれほどの損失をもたらすかに驚くかもしれません。単純な問題のコストについて語る話は、Web上にもたくさんあります。

無料で使える静的解析ツールをいくつか紹介します。

Cppcheck (無料):Cppcheckには多くのチェック機能があります。利用できる主なチェックは次のとおりです。

  • 範囲外アクセスのチェック
  • 例外安全性のチェック
  • メモリリークの検出
  • 廃止された関数が使われている場合の警告
  • STLの不正な使用のチェック STL
  • 未初期化変数と未使用関数のチェック

Clang (無料):C/C++コンパイラです。診断機能は非常に優れており、報告される的確な問題に驚かされるかもしれません。対象となるのは次のような問題です。

  • 非推奨となった使用法
  • キャストの問題
  • 初期化の問題
  • OpenMP の問題など。

Clang-Tidy (無料):ClangベースのC++「リンター」ツールです。静的解析によって推測できるスタイル違反、インターフェースの誤用、バグなど、典型的なプログラミングエラーを診断・修正するための拡張可能なフレームワークを提供することを目的としています。 clang-tidy はモジュール式で、新しいチェックを作成するための便利なインターフェースを提供しています。clang-tidy の チェック一覧 はこちらです。

ほかにも多くの静的解析ツールがあります。すぐに試せるものもあれば、ベンダーに連絡して試用版を依頼する必要があるものもあります。

30分だけCppcheckを試す時間があれば、それはおそらく有益な時間の使い方になるでしょう。

まとめ

C++コードベースの問題を検出するには、複数のC++ツールを組み合わせるのが望ましい方法です。バグを検出するツールもあれば、バグが発生しやすい状況まで検出するツールもあります。まず無料ツールから始め、報告される問題を確認してみるとよいでしょう。

Share this article