静的解析 †
- ソースコードを対象として、ソフトウェアの構造や動作を解析する技術
静的解析ツール †
静的解析ツールで解析できること †
- 欠陥の可能性のある部分の検出
- メモリリーク、バッファーオーバーラン、到達不可能な部分、スレッド間でのデッドロックが起きそうな部分
- メトリクスの計測
- コード行数、複雑度、凝集度、結合度等のメトリクスをコードから集計
- コーディング規約の対応チェック
- MISRA-C、CERT-C等のコーディング規約に対応していない部分の検出
- セキュリティ上の脆弱性の検出
- SQLインジェクションやクロスサイトスクリプティングの検出
- コードクローンの検出
- コピー&ペーストで作られている部分の検出(元のコードから変数名・関数名を変えていても検出可能)
- オープンソースコードの混入の検出
- オープンソースプロジェクトのコードを流用している部分を検出
- オープンソースプロジェクトのライセンスによっては、無断使用やコードを公開しないことは問題になるため、意図しない混入は避けたい
動的解析 †
- 動作するソフトウェアを対象として、動作速度やメモリの使用状況、並列処理の実行状況を解析するための技術
動的解析ツール †
動的解析ツールで解析できること †
- メモリリークやメモリ破壊の検出
- 対象機能を一度だけ動作させるような単純なテスト実行では見つけにくく、かといってテストケースも作りにくい問題の検出
- 並列処理に関連した問題の検出
- スレッドのデッドロックのような、実行タイミングによって発生したり、しなかったりするような問題の検出
- 実行時のボトルネックの検出
- 関数の呼び出し回数や実行時間を計測し、ボトルネックとなっている部分を指摘
- カバレッジの計測
- 動的解析ツール内でテストケースを実行していくことで、動作確認された部分/されていない部分を検出