【せいてきかいせき】

静的解析 とは?

最終更新:
💡 「動かす前」に問題の候補を見つける

プログラムを実行せずにソースコードを解析して、バグにつながりやすい書き方やセキュリティ上の問題、コーディング規約違反などの候補を見つける手法。

📌 このページのポイント
静的解析 ― 実行せずにコードを分析 ソースコード .js .py .ts ... 実行しない 静的解析ツール ・構文チェック ・型チェック ・コーディング規約 ・脆弱性検出 指摘なし 指摘あり → 確認 静的解析 コードを読んで分析 早い段階で問題の候補を発見 誤検知・見逃しもある 動的解析 実行して動作を確認 実行時の動きや設定の問題を発見
静的解析のイメージ
ひよこ ひよこ
リンターと何が違うの?
ペンギン先生 ペンギン先生
リンターは静的解析の一種だよ。静的解析はもっと広い言葉で、型チェック、データの流れを追ってセキュリティ上の問題を探す解析、複雑さの測定なども含むんだ
ひよこ ひよこ
具体的にどんな問題が見つかる?
ペンギン先生 ペンギン先生
null参照の可能性、使われていない変数、到達しないコード、閉じ忘れたファイル、ハードコードされたパスワード、入力値がそのままSQLに入る流れなどだね。OWASPは、SQLインジェクションのような種類はツールで見つけやすいと説明しているよ
ひよこ ひよこ
じゃあ静的解析を通ればバグはないってこと?
ペンギン先生 ペンギン先生
そうとは限らないよ。問題ないのに指摘する誤検知も、問題があるのに見逃すこともある。しかもOWASPによると、設定の問題はコードに現れないので見つけにくいし、認証やアクセス制御の不備も自動検出がとても難しいんだ。テストやレビューと組み合わせて使う前提だね
ひよこ ひよこ
誤検知が多いと面倒そう…
ペンギン先生 ペンギン先生
そこが運用のポイントだよ。指摘が多すぎると、みんなが警告を読まなくなる。プロジェクトに合わないルールを外したり、確認済みの箇所に理由を書いて抑制したりして、重要な指摘が埋もれないようにするんだ
ひよこ ひよこ
どんなツールがあるの?
ペンギン先生 ペンギン先生
JavaScriptならESLintのように、言語ごとに定番のツールがあるよ。複数の言語をまとめて解析して結果を管理するSonarQubeのようなプラットフォームもある。まずは使っている言語のツールをCIで動かして、指摘の量を見ながらルールを調整するところから始めるといいね
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「静的解析」って出てきたら「コードを実行せずに問題の候補を探す分析」と思えればだいたいOK!
📖 おまけ:英語の意味
「Static Analysis」 = 静的解析
💬 Static(静的=実行しない)Analysis(分析)。対になるのはDynamic Analysis(動的解析=実行して分析)だよ

参考資料

← 用語集にもどる