謎のバグに長年いじめられてきた、やしまです。
この前バグ修正時に助けて頂いた静的コード解析について書いてきます。
★ 静的コード解析
静的コード解析 (static code analysis) または静的プログラム解析 (static program analysis)とは、コンピュータのソフトウェアの解析手法の一種であり、実行ファイルを実行することなく解析を行うこと。逆にソフトウェアを実行して行う解析を動的プログラム解析と呼ぶ[1]。静的コード解析はソースコードに対して行われることが多く、少数ながらオブジェクトコードに対して行う場合もある。また、この用語は以下に列挙するツールを使用した解析を意味することが多い。人間が行う作業はインスペクション、コードレビューなどと呼ぶ。
出展元: Wikipedia/静的コード解析
とのことらしいです。要は自分のコードを実行することなく解析してもらい問題点を見つけてもえる便利なことです。
★ 実際にやってみた
今回はフリーソフトの静的コード解析ツールのCppCheckさんを使用してみたいと思いますー。
まずは公式サイトでインストーラーを落としてインストール!!
インストールが終わったらCppCheckのプロジェクト設定をし、早速コードを解析してもらいます。今回、解析してもらうコードはコチラ↓
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
static const int ArraySize = 100; int main() { int *pTest = new int[ArraySize]; // 配列外アクセス for ( int i = 0; i <= ArraySize; ++i ) { pTest[i] = 0; } // delete忘れ return 0; } |
配列外アクセス、未解放の2箇所の問題がある、素晴らしく完璧にダメなコードです!!
このコードをCppCheckさんに解析してもらうとー ↓
・Array ‘pTest[100]’ accessed at index 100, which is out of bounds.(配列外アクセス)
・Memory leak: pTest.(pTestの解放忘れ)
わーすごい!!見事に問題あるコードを見つけてもらえました。
こんな感じで静的解析ツールに頼ることによってバグを見つけられます。
使えるものはガシガシ使っていってバグを取ってきましょー!!
おわり