本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回のハッカーはmoznionこと川上大喜さんで,
静的解析の背景
静的解析とは何か
静的解析とは,
一般に静的解析と言った場合,
静的解析の利点
静的解析を行うことにより,
また,
加えて,
静的解析を実行する方法
静的解析を実現するアプローチとしては,
- ソースコードをトークナイザによってトークン列に分解してそれを直接評価・解析する方法
- 分解したトークン列をパーサによって抽象構文木に変換してから解析する方法
- 言語処理系の出力する中間ファイルを解析する方法
など多岐にわたります。1つ目のトークン列を直接評価および解析する手法は汎用的に使える技術なので,
- 注1)
- たとえば
「どのクラスがどのクラスを参照しているか」 といったことです。
静的解析の例
実際の静的解析の例を見てみましょう。静的解析の技術やその周辺ツールがほかの言語と比較して豊富なJavaを例に解説します。
未使用のローカル変数の検出
静的解析の代表的な例として,
検出結果はコンパイラの警告として出力されますが,
Checkstyle――コーディングスタイルのチェック
Checkstyleというソフトウェアを利用することでコーディングスタイルのチェックを行えます。CheckstyleはEcpilseをはじめとしたさまざまなIDEのプラグインとしてサポートされているので,
図2では,
FindBugs――潜在的なバグの検出
静的解析によって潜在的なバグの検出も実現できます。JavaではFindBugsというソフトウェアが有名です。FindBugsも多くのIDEでプラグインが提供されています。
図3ではFindBugsを使って,
これらはほんの一例にすぎませんが,
Perlにおける静的解析の背景と課題
Perlの静的解析が抱えていた問題
先述したように,
PPIの登場
しかし,
最近の静的解析を取り巻く状況
最近では,
これらにまつわる詳細については次節で説明します。