静的解析とは?
静的解析は、ソースコードを実行せずに調べ、何かが動く前にバグ、危険なパターン、スタイルの問題を指摘します。
テストはコードを実行して動作を観察します。静的解析はコードを読んでそれについて推論します - 未使用の変数、nullのデリファレンス、安全でないパターンといった問題を、1行も実行せずに検出します。
静的解析と動的解析
静的解析は、実行前に、コードのテキストまたはコンパイルされた形式に対して機能します。動的解析はプログラムが動いている間に観察します(テスト、profiler、fuzzer)。両者は異なる種類の問題を検出し、互いを補完します。
検出する内容
- 起こりやすいバグ: nullのデリファレンス、到達不能なコード、型エラー。
- セキュリティの問題: これはSASTの基盤です。
- スタイルと保守性: 複雑さ、デッドコード、規約。
小さな例
静的アナライザーは、if (x = 5) を == のタイプミスの可能性として、また一部のbranchでは返すが他では返さない関数を、どのテストが実行される前にも指摘します。これらは、通過するテストスイートが決してトリガーしないかもしれないバグです。
パイプラインでの位置づけ
静的解析は早く高速に、多くの場合lintingと並行して実行され、高コストなテストが走る前にbuildをゲートします。ここでの高速なフィードバックは、アプリを一切起動せずにバグのカテゴリ全体を検出します。
偽陽性の管理
静的ツールは指摘に偏りがちで、一部の指摘は実際のバグではありません。ルールセットを調整し、安全とわかっているパターンは文書化した理由とともに抑制し、新しい指摘をdiff上で追跡して、バックログがシグナルを飲み込まないようにします。
重要なポイント
- 静的解析はコードを実行せずに検査します。
- 動的解析を補完し、異なる種類の問題を検出します。
- テストの前に、安価なゲートとして早く高速に実行されます。
関連ガイド
What Is SAST?SAST is static application security testing - analyzing source code for security flaws without running it. Le…
What Is Linting?Linting analyzes code for style issues, likely bugs, and bad patterns using configurable rules. Learn how lin…
What Is a Quality Gate?A quality gate is a pass/fail condition that blocks a change from merging unless it meets defined thresholds.…