Googleのソフトウェアエンジニアリング ―持続可能なプログラミングを支える技術、文化、プロセス
by Titus Winters, Tom Manshreck, Hyrum Wright, 竹辺 靖昭, 久富木 隆一
20章静的解析
Caitlin Sadowski 著
Lisa Carey 編
静的解析(static analysis)とは、ソースコードを解析して、バグ、アンチパターン、その他の課題等、そのプログラムを実行せずに原因が究明可能である潜在的な問題を見つけるプログラムを指す。「静的」の部分は、プログラムの実行(「動的(dynamic)」解析と呼ばれる)を行わずにソースコードを解析することを特に指している。静的解析は、プログラム内のバグを、本番環境のコードとしてチェックインされる前に早期に発見できる。静的解析が特定できる問題は、例えば、オーバーフローする定数式†1、絶対に実行されないテスト、ログ取得文内に入っている実行時にクラッシュする不正な書式文字列等だ†2。しかし静的解析が役に立つ用途は単なるバグ発見だけにとどまらない。Googleでは静的解析を通じて、ベストプラクティスをコード化し、コードが現代的なAPIバージョンへ合わせて更新され続けるよう促し、技術的負債を防ぐかあるいは減らす。そのような解析の例には、命名規約が維持されていることの検証、廃止されたAPIの利用箇所へのフラグ付け、コードを読みやすくするさらに単純な同値の式の指摘、等がある。静的解析はAPI廃止プロセスで不可欠なツールでもある。API廃止プロセスでは、新APIへのコードベース移行の最中に、廃止されるAPIへの後戻りを静的解析によって防げる(22章参照)。さらに我々は、静的解析のチェックがあることで、開発者を教育でき、またコードベースにアンチパターンが入り込むことを実際に防げるというエビデンスも見つけている†3。
†1 訳注:例えばJavaでは、整数リテラルにLをつけないとlongではなくintとして扱われるため、計算内容によってはintの表現範囲を超えて定数式がオーバーフローしやすくなる。 ...