Skip to content
Latchkey

静的解析とは?

静的解析は、ソースコードを実行せずに調べ、何かが動く前にバグ、危険なパターン、スタイルの問題を指摘します。

テストはコードを実行して動作を観察します。静的解析はコードを読んでそれについて推論します - 未使用の変数、nullのデリファレンス、安全でないパターンといった問題を、1行も実行せずに検出します。

静的解析と動的解析

静的解析は、実行前に、コードのテキストまたはコンパイルされた形式に対して機能します。動的解析はプログラムが動いている間に観察します(テスト、profiler、fuzzer)。両者は異なる種類の問題を検出し、互いを補完します。

検出する内容

  • 起こりやすいバグ: nullのデリファレンス、到達不能なコード、型エラー。
  • セキュリティの問題: これはSASTの基盤です。
  • スタイルと保守性: 複雑さ、デッドコード、規約。

小さな例

静的アナライザーは、if (x = 5)== のタイプミスの可能性として、また一部のbranchでは返すが他では返さない関数を、どのテストが実行される前にも指摘します。これらは、通過するテストスイートが決してトリガーしないかもしれないバグです。

パイプラインでの位置づけ

静的解析は早く高速に、多くの場合lintingと並行して実行され、高コストなテストが走る前にbuildをゲートします。ここでの高速なフィードバックは、アプリを一切起動せずにバグのカテゴリ全体を検出します。

偽陽性の管理

静的ツールは指摘に偏りがちで、一部の指摘は実際のバグではありません。ルールセットを調整し、安全とわかっているパターンは文書化した理由とともに抑制し、新しい指摘をdiff上で追跡して、バックログがシグナルを飲み込まないようにします。

重要なポイント

  • 静的解析はコードを実行せずに検査します。
  • 動的解析を補完し、異なる種類の問題を検出します。
  • テストの前に、安価なゲートとして早く高速に実行されます。

関連ガイド