組み込みソフトウェア・バグの分類学,その傾向と対策 ――ツールを利用してバグ対策の手間を軽減

渡辺 雄一

tag: 組み込み Interface

技術解説 2009年1月13日

組み込みソフトウェアを開発していると,さまざまなタイプのバグに悩まされる.ここではバグの原因の典型例であるメモリ・リーク,バッファ・オーバラン,NULLポインタ参照,未初期化変数について,その症状と対策を説明する.また,静的解析ツールを用いてこれらのバグを検出した例も紹介する.最近では,ソース・コード・レビューの前のチェックに各種の静的解析ツールを利用する例が増えている. (編集部)

 本稿では,いくつかの代表的なプログラム・バグを取り上げて,その欠陥を引き起こす原因やその対応策,レビュー時のポイントを解説します.

 また,最近では,「実機動作テスト前の早い段階に,静的な注1解析手法を用いてソース・コードの品質を確保する」という考え方が注目を集めています.

注1:一般に,作成したコードを実行して検査する手法を"動的(dynamic)",コードを実行せずに検査する手法を"静的(static)"と分類する.

 静的な解析手法として,以下の三つの方法が知られています.

  1. コーディング規約の適用――過去に発生した不具合や注意点を元に,ルールや規約として整理されたものに従ってコーディングを行うことで,ソース・コードの品質を確保する

  2. ソース・コード・レビューの実施――対象とするソース・コードに対して,その作成者やそれ以外の第三者が,仕様書や品質特性,コーディング規約の観点などから,コードの書き方に問題がないか,効率的に記述できているか,などをチェックする

  3. 静的解析ツールの利用――ソース・コード・レビューを行う前などに,ツールを使用して機械的にコードをチェックする
 このうち,3番目に示した静的解析ツールを利用したコード解析結果の例を併せて示します.

 静的解析ツールには,コーディング・ルール・チェッカやバグ検出ツール,レビュー支援ツールなどがあります.ここではバグ検出ツールに分類される米国GrammaTech社の「CodeSonar」を利用します.コーディング・ルール・チェッカは原理的に,ファイル間をまたがる動的エラーについて,文脈を正確に理解して検出することが苦手とされています.これに対してCodeSonarのようなバグ検出ツールは,ソース・コードをビルドする際の情報を取得し,それを元にデータフロー解析を行うので,ファイル間をまたがる動的エラーを検出できるという特徴があります.また,トレース結果を図1のような形で出力し,ソース・コード・レビューの検討材料を提供します.図1の赤色部分はバグに至るまでの実行パスを,緑色部分はバグの原因を,そして黄色部分はバグの発生箇所を示しています.

zu01.gif
図1 単純なNULLポインタ参照の検出例※ 図をクリックすると拡大できます

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日