組み込みソフトウェア開発者に贈る「静的解析・動的解析」の必要性:いま求められるソフトウェア静的解析・動的解析 第1回(2/3 ページ)
組み込みソフトウェア開発における「静的解析」「動的解析」を、“なんとなく”行っていないでしょうか。開発効率の向上や品質改善に欠かせないこれらを活用するため、まずはその必要性について解説します。
静的解析とは何か
静的解析とは、ソースコードを対象としてソフトウェアの構造や動作を解析(analyze)する技術です。通常、静的解析は、静的解析ツールにソースコードを読み込ませる形で行い、その結果はソースコード上の問題点の指摘やメトリクスの形などで出力されます。こうした解析をソフトウェアを動作させずに行うので「静的」と呼ばれます。
静的解析を導入するメリットの1つは、欠陥を検出するために、テストケースを準備したり、テストを実行するための時間を用意しなくても良いことです。静的解析ツールはソースコードから直接欠陥を発見するので、用意するのは解析の時間だけで済みます。
静的解析というと、古くはUNIX系でよく知られたlintコマンドのように、書かれたプログラムの構文のおかしさや、コンパイルは通るが危険なプログラム(初期化していない変数の利用等)を検出できるものの、問題ない部分を指摘してしまう誤検出も多く、解析に時間もかかるため、実務で使うには難のあるツールという印象でした。
しかし、現在では誤検出も減り、PCの性能向上により解析時間も短くなったため、実用に耐えるツールとなってきています。
最近の静的解析ツールでは以下の様なものを解析できるようになっています。
- 欠陥の可能性のある部分の検出
- メモリリーク、バッファーオーバーラン、到達不可能な部分、スレッド間でのデッドロックが起きそうな部分
- メトリクスの計測
- コード行数、複雑度、凝集度、結合度等のメトリクスをコードから集計
- コーディング規約の対応チェック
- MISRA-C、CERT-C等のコーディング規約に対応していない部分の検出
- セキュリティ上の脆弱性の検出
- SQLインジェクションやクロスサイトスクリプティングの検出
- コードクローンの検出
- コピー&ペーストで作られている部分の検出(元のコードから変数名・関数名を変えていても検出可能)
- オープンソースコードの混入の検出
- オープンソースプロジェクトのコードを流用している部分を検出
- オープンソースプロジェクトのライセンスによっては、無断使用やコードを公開しないことは問題になるため、意図しない混入は避けたい
このように、現在の静的解析ツールではさまざまな観点から解析を行えるようになっているため、欠陥検出だけでなく、設計上の問題点の発見といった用途でも使えるようになってきています。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 「状態遷移表」を使うと高品質な開発が可能に!
組み込みソフトウェア開発の課題解決に「状態遷移表」を活用しよう。 - 解析ツールを「育成ツール」の視点で、JVCケンウッドの組み込み設計改革
組み込みソフトはチームでの開発が主となっているが、その際に問題となるのが、メンバー間のスキル差だ。「静的解析ツールが開発チームを活性化する」そう紹介するJVCケンウッドの阿部博己氏が語る、組み込み設計改革とは。 - 定義から学ぶ「組み込み機器開発入門」
連載「組み込み機器開発入門」では、これから組み込み機器開発に携わる技術者・エンジニアを目指す方を対象に、組み込み機器開発の入門編として知っておくべき内容を広く紹介します。 - 「組み込みソフトウェア」の重要性をPC向けとの対比で理解する
ソフトウェア開発と一口に言っても、PC向けと組み込み機器向けでは数多くの相違点があります。組み込みソフトウェアが重要な理由と合わせて組み込みソフトウェア開発の要点について解説します。