連載
» 2016年05月20日 07時00分 公開

いま求められるソフトウェア静的解析・動的解析 第1回:組み込みソフトウェア開発者に贈る「静的解析・動的解析」の必要性 (2/3)

[井上樹(豆蔵),MONOist]

静的解析とは何か

 静的解析とは、ソースコードを対象としてソフトウェアの構造や動作を解析(analyze)する技術です。通常、静的解析は、静的解析ツールにソースコードを読み込ませる形で行い、その結果はソースコード上の問題点の指摘やメトリクスの形などで出力されます。こうした解析をソフトウェアを動作させずに行うので「静的」と呼ばれます。

 静的解析を導入するメリットの1つは、欠陥を検出するために、テストケースを準備したり、テストを実行するための時間を用意しなくても良いことです。静的解析ツールはソースコードから直接欠陥を発見するので、用意するのは解析の時間だけで済みます。

 静的解析というと、古くはUNIX系でよく知られたlintコマンドのように、書かれたプログラムの構文のおかしさや、コンパイルは通るが危険なプログラム(初期化していない変数の利用等)を検出できるものの、問題ない部分を指摘してしまう誤検出も多く、解析に時間もかかるため、実務で使うには難のあるツールという印象でした。

 しかし、現在では誤検出も減り、PCの性能向上により解析時間も短くなったため、実用に耐えるツールとなってきています。

 最近の静的解析ツールでは以下の様なものを解析できるようになっています。

  • 欠陥の可能性のある部分の検出
    • メモリリーク、バッファーオーバーラン、到達不可能な部分、スレッド間でのデッドロックが起きそうな部分
  • メトリクスの計測
    • コード行数、複雑度、凝集度、結合度等のメトリクスをコードから集計
  • コーディング規約の対応チェック
    • MISRA-C、CERT-C等のコーディング規約に対応していない部分の検出
  • セキュリティ上の脆弱性の検出
    • SQLインジェクションやクロスサイトスクリプティングの検出
  • コードクローンの検出
    • コピー&ペーストで作られている部分の検出(元のコードから変数名・関数名を変えていても検出可能)
  • オープンソースコードの混入の検出
    • オープンソースプロジェクトのコードを流用している部分を検出
    • オープンソースプロジェクトのライセンスによっては、無断使用やコードを公開しないことは問題になるため、意図しない混入は避けたい

 このように、現在の静的解析ツールではさまざまな観点から解析を行えるようになっているため、欠陥検出だけでなく、設計上の問題点の発見といった用途でも使えるようになってきています。

Copyright © ITmedia, Inc. All Rights Reserved.