近年、組み込み製品の高機能・多機能化によるシステム全体の複雑化や開発期間の短期化が著しく進み、企業として品質を確保することが困難になりつつある。しかし、品質への要求は待ってはくれない。一般消費者が使用するような組み込み機器であればリコールなどあってはならないし、人命や社会に影響を及ぼす可能性がある組み込み機器であれば、不具合の1つも許されない。こうした厳しい環境に置かれているのが組み込み開発現場なのだ。

 2008年7月14日、東京・ベルサール神田にて、@IT MONOist編集部主催による「組み込みソフトウェア 品質向上セミナー 〜テストツールが品質確保の活路を開く!〜」が開催された。組み込みソフトウェア開発現場を取り巻く品質確保、テストに関心を持つ参加者が多数来場した。

[基調講演]
ソフトウェアテストを軸とした組み込みソフトウェアの品質確保

 基調講演では、並列処理プログラムや組み込みシステムを対象としたテスト手法についての研究に従事している宮崎大学 工学部 情報システム工学科 准教授 片山徹郎氏が登壇。「ソフトウェアテストを軸とした組み込みソフトウェアの品質確保」と題し、テスト作業を行う際に考慮すべきポイントについて紹介した。

 片山氏は「テスト作業には、必ず付きまとう問題点がある」と指摘。それは“いま見つけたバグがソフトウェアに潜む最後のバグかどうか判断できない点”だという。要するに、いくらテストを一生懸命行っても、どこでテスト作業を終わらせたらよいのか、どこまで時間とコストをかけたらよいのか、明確な判断ができないということだ。

  
宮崎大学 工学部 情報システム工学科
准教授 片山徹郎氏
  

 さらに「テストによって、“このプログラムにはまったくバグが存在しない=このプログラムは正しい”ということを証明できない」とも語った。これは、近年のソフトウェアの大規模化・複雑化によるもので、ソフトウェア全体をテストして、バグを100%探し出すことは現実的にできない(膨大な時間を要する)ということを意味する。

 つまり、“テスト作業というのは時間とコストの都合を考えて、結局どこかで妥協するしかない”のだ。

 これについて片山氏は「“妥協=適当にテストする”ではなく、限りある中でいかにして最大限の成果を出すかを考えることが重要。テスト・品質確保のために“やるべきことをやっていますか?”“まずは、やるべきことをきちんとやりましょう!”」と来場者に訴えた。さらに「いま行っているテスト技法・テストツールが自分たちのターゲットにマッチしているか? メリット、デメリットを理解して使うことが大切だ」とも語った。

 片山氏は講演中、効率的なテストを実施するための「テスト計画」「テスト戦略」「テスト分析」などの考え方を披露。また、エンタープライズ系と組み込み系とのテストの違いや、組み込みソフトウェアならではのテストの難しさに触れ、組み込み分野における品質確保の重要性を示した。

[富士通ソフトウェアテクノロジーズ]
[開発のプロとして]静的解析ツールの活用と人材育成


 富士通グループの中でOSやミドルウェアの開発部隊として培った「コア技術」をベースに、さまざまなサービス/プロダクトを提供する富士通ソフトウェアテクノロジーズは、ソースコードの静的解析ツール「PGRelief 2008(以下、PGRelief)」を題材に、「静的解析ツールの活用と人材育成」についての講演を行った。

 PGReliefは、C/C++ソースコードを静的解析し、「データ構造」と「処理の流れ」に基づいてバグを検出・指摘する品質向上支援ツールである。また、富士通社内の多くの開発事例で培った独自のノウハウを解析エンジンに搭載し、SECコーディング作法やMISRA-Cガイドラインなどのコーディング規約への適合性チェックも可能だ(PGReliefの総チェック数は現時点で569個)。

 本セッションで登壇した同社 アプリケーション基盤グループ AP基盤サービス事業部 第一AP基盤サービス部 辻本寛氏は、近年のコーディング量の増加に伴う品質確保の課題について次のように指摘する。「これまでの“動作テスト・出荷検査工程”重視の品質確保のやり方では、バグの発生現象からその原因を追究し修正するための手戻りが大きい。短納期化・工数不足が叫ばれる中、このやり方で品質確保することは限界だ」。

 こうした課題に対して、効果を発揮するのが静的解析ツールだ。コーディング・レビュー工程で静的解析を行うことでコーディングミスを早い段階で除去し、手戻りを減らすことで短期間での品質確保を実現できる。さらに、コーディングレベルでの品質向上は「信頼性」「移植性」「保守性」を高める効果があるというのが辻本氏の見解だ。

  
富士通ソフトウェアテクノロジーズ
アプリケーション基盤グループ AP基盤サービス事業部 第一AP基盤サービス部
辻本寛氏
  

 また、もう1つの静的解析ツールがもたらす効果として辻本氏は「人材育成効果による開発力向上」を挙げた。PGReliefの場合、バグを指摘した際にそのバグ内容に対応した解説ドキュメントを表示する。このドキュメントの中にはコードの記述例も記載されており、コーディング経験のあるエンジニアであれば指摘メッセージと記述例を一目見れば修正個所をすぐに特定できる。また、より詳細な解説や対処する際の留意点なども表示されるため、コーディング経験の少ないエンジニアへの手助けとなる。若手エンジニアのための教育に時間を割けない昨今、こうした解析ツールによるサポートが技術力の底上げにも役立つわけだ。

 「コーディングの際に開発者がPGReliefを活用することで、品質確保と開発者のスキルアップの2つの効果を期待できる。こうした効果が見えれば、開発現場で“静的解析ツールを使う”ことへの抵抗が少なくなり、最終的に開発者の作業負担も減っていくはずだ」と辻本氏。

 最後に、辻本氏はPGReliefの運用方法を紹介した。まず、開発者がPGReliefを単体で利用する方法だ。この方法はPGReliefが提供するGUI画面を利用し、効率良く指摘個所を確認/修正できるメリットがある反面、開発者自身がツール利用のための設定作業を行う必要がある。こうした開発者への負担削減のため、PGReliefは単体での利用のほかに、統合開発環境との連携機能を用意している。PGReliefでは、富士通の「SOFTUNE」、ルネサス テクノロジの「High-performance Embedded Workshop」など、それぞれの開発環境に対応したプラグインを用意。これにより、開発者は使い慣れた環境でコンパイラを走らせた後、自動的にPGReliefを実行できる。

 また、静的解析を開発現場ではなく品質管理部門などが行う方法もある。この場合はコマンドラインによるPGReliefの実行が有効だ。例えば、ビルド環境を持たない品質管理部門などがPGRelief用のコマンドを実行し、解析結果(CSVファイル形式)を開発現場に返すといった静的解析作業の委託運用も可能だ。

 一方、大規模プロジェクトになると、品質管理者を中心とした組織的な運用が必要となる。PGReliefでは、あらかじめ品質管理者が設定した検査基準を基にソース集約サーバ上で解析を行い、その解析結果やプロジェクト全体の品質状況を「見える化」する品質監視機能を用意。各開発担当者が受け持つプログラムの品質状況を一目で把握することができ、組織的な品質向上を支援する。

 今後もPGReliefは解析精度を高めるためバージョンアップを続けていくという。MISRA-C++ガイドラインへの対応やC/C++指摘メッセージの追加など、今後のエンハンスが楽しみだ。

富士通ソフトウェアテクノロジーズ
PGRelief 2008
PGRelief 体験版ダウンロード

お問い合わせ先:fst-pgr-sales@cs.jp.fujitsu.com

[コベリティ]
導入事例で学ぶ“静的解析ツールの有効性”

 米CoverityのC/C++、Java対応の静的解析ツール「Coverity Prevent(以下、Prevent)」は、世界約450社以上の企業に採用され、およそ10億行を超えるソースコードの解析を行ってきた。こうした多くの実績の中から今回、「ACCESS」と「三菱電機」の導入事例を紹介。両社がどのようにPreventを利用し、品質向上やコスト削減を成功させたのかその実例を披露した。

ACCESSの導入事例

 組み込みソフトウェア開発ベンダであるACCESSの主力製品「NetFront Browser」は携帯端末および情報家電向けに最適化されたブラウザで、日本国内でも数多くの携帯電話やPDA、情報家電に採用されている。同社は、このNetFront Browserの開発にPreventを導入した。

  
  
ACCESS
開発支援室基盤課 主任
川瀬明氏

 ACCESS 開発支援室基盤課 主任の川瀬明氏は、Prevent採用の経緯を次のように話す。「Preventを導入する前は別の静的解析ツールを使用していたが、顧客へより高品質な製品を提供するため、一定の品質基準を保つことができる新たな静的解析ツールを検討することとなった。その際、Preventを含めた7つの静的解析ツールを比較・評価し、誤検知率の低さ、解析範囲、解析結果のレポート機能を高く評価しPreventを導入した」。

 Preventは「15%以下の低い誤検知率」を誇る。誤検知率が高い静的解析ツールの場合、本来バグではないものまで検知するため、解析結果の精査だけでコストがかかってしまう。つまり、静的解析ツールを選択するうえで、誤検知率は重要な指標となる。また、解析範囲についてもPreventは「プロシージャ間解析」と「100%パス解析」を実現。従来なら動的テストでしか検出できなかったメモリリークやデッドロックなど致命的なバグも見つけ出せる。もう1つの評価ポイントであるレポート機能については管理ツール「Defect Manager」の守備範囲。検出したバグの内容やパス、関連するリンクをソースコードの該当個所に埋め込み、ブラウザ上に表示できるため、開発担当者はすぐに修正作業を行える。

 Preventの導入効果について、川瀬氏は「バグの誤検知率が10%以下に軽減。バグの調査作業時間が約5分の1になるなど十分な効果が得られた。投資した以上のコスト削減効果があった」とPreventを評価した。

三菱電機の導入事例

 三菱電機 設計システム技術センター ソフトウエアエンジニアリング部 設計実装検証グループ 藤本 卓也氏が登壇。Preventの導入事例を紹介した。

 近年の製品開発では、ソフトウェアをゼロから作り込むのではなく、既存のソフトウェアによる流用開発が主流となりつつあるが、そこで気を付けなければならないのが既存ソフトウェアの品質だ。既存ソフトウェアの品質レベルの確認はもちろんのこと、重大な不具合につながるような危険な個所を事前に検出・修正するなど、“これまで以上のソフトウェア品質の確保”が必要となる。

  
三菱電機
設計システム技術センター ソフトウエアエンジニアリング部 設計実装検証グループ
藤本 卓也氏
  

 藤本氏の所属部署では、三菱電機グループの各製作所で開発されたソフトウェアの品質向上を目的に1990年代から静的解析ツールを導入・活用していた。しかし、前述のようなこれまで以上のソフトウェア品質の確保のために、新たな静的解析ツールとしてPreventの導入を検討、トライアルを経て2007年3月に導入(解析は4月から開始)した。

 「解析の際、どこに警告が集中しているのかを判断するため、軽微な警告でも出力し、チェックの対象としている」と藤本氏。本来であれば軽微な警告が数多く出力されるとその内容の精査に時間を取られてしまうが、あえてこうすることで、コードの全体的な問題点(どこで、どんな種類の警告が集中しているかなど)を浮き彫りにし、品質向上に役立てているという。さらに、チェック効率も考え、警告を重要度で分類し、重大なものからチェックを実施しているという。

 また、三菱電機では、Preventと既存の静的解析ツールとを連携させることで、それぞれの特徴を生かした利用を実施している。具体的には、真に危険な不具合を検出したい場合は「プロシージャ間解析」「100%パス解析」が武器のPreventを、コードの見易さや保守性向上を目的とする場合は既存の静的解析ツールを、目的に合わせて使い分けている。こうした利用におけるPreventの役割を藤本氏は「Preventは“特効薬”“外科手術”のようなものだ。本当に危険なものを短期間で検出・修正したい場合に向いている」と表現した。

Coverity
Coverity Prevent
Coverity−製品トライアル版 お申し込みフォーム

お問い合わせ先:japan_sales@coverity.com

本セッションで取り上げた製品に関連した資料をダウンロードしていただけます。
以下の画像をクリックしてください。



[東陽テクニカ]
組み込みソフトウェアの信頼性向上:単体テスト・カバレッジテスト事例


 「ソフトウェア開発におけるソフトウェア品質の向上、および生産性の向上」をテーマに掲げ、さまざまなソフトウェア開発支援ツールとコンサルティング、カスタマイズなどの多様なサービスを提供する東陽テクニカは、新たな取り扱い製品として統合ソフトウェアテストソリューション「VectorCAST」を2008年7月より販売。本セッションでは「組み込みソフトウェアの信頼性向上:単体テスト・カバレッジテスト事例」と題し、VectorCASTの開発を行っている米Vector SoftwareのInternational Technical Sales and Marketing Manager スティーブ・バロー(Steve Barriault)氏が講演を行った。

 本セッションの冒頭、バロー氏は「テストが完全に行われたかどうかは、テストによって完全なコードカバレッジが実現できたかどうかにかかっている」と述べた。

 完全なコードカバレッジとは何か。理想的には、アプリケーションに含まれるすべてのソースコードの各行を漏れなくテストすることだろう。しかし、アプリケーションの複雑化・大規模化が進む昨今、システムテストにおいて、全ソースコードの各行をすべて実行するための正しい入力の組み合わせを推測することは困難といえる。

  
  
米Vector Software
International Technical Sales and Marketing Manager
スティーブ・バロー(Steve Barriault)氏

 では、どうしたら100%のカバレッジを実現できるのであろうか。バロー氏は100%のカバレッジの実現について次のように述べた。「単体テストレベルであれば、ソースコードの各行をすべて実行する入力の組み合わせを見つけることは、システムテストのそれよりもはるかに簡単だ。単体テストによって100%のカバレッジを実現できる」。また、バロー氏は「開発作業中に単体テストを行えば早期に不具合が発見できるだけでなく、デバッグコストの削減やソースコードの再利用性の強化などが図れる」と単体テストのメリットについて言及した。

 しかし、単体テストは往々にして、“コスト・時間がかかる=余計な作業”“コードをテストするためにコードを書く=時間の無駄”といった負のイメージが付きまとうもの。実際、手作業で単体テストを行うとなると、「スタブの作成」「テストドライバの作成」「テストハーネスのコンパイル」「実行」「レポートの作成」……など、膨大な時間とコストを要する。品質確保の重要性は分かっていても、限られた時間とコストに追われて作業を行っている開発現場にとって、これ以上の負担は死活問題にも発展しかねない。

 こうした何とも重苦しい単体テストのイメージを、これまで航空・宇宙、自動車分野などのミッションクリティカルな組み込み開発で数多くの実績を築いてきた動的テストツール「VectorCAST」が払拭する。

 VectorCASTは、テストの自動化に必要なテストハーネス(ドライバやスタブなど)およびテストケースの自動生成機能、ホストコンピュータやシミュレータ、ターゲットボード上でのテストケースの自動実行機能、HTMLやテキストでのレポート自動作成機能などを備える。また、「Green Hills MULTI」「WindRiver Tornado」「Freescale Code Warrior」などの多くの組み込み開発環境やコンパイラとの統合もサポートしているため、開発者がすでに使用している環境に即適用できる。さらに、ステートメント、ブランチ、MC/DC(Modified Condition/Decision Coverage)、航空業界で使われるLevel A(ステートメント、ブランチ、MC/DC)およびLevel B(ステートメント、ブランチ)といったカバレッジのレベル設定が可能だ。

 機能的なエラーや堅牢性などのチェックはVectorCAST単体で十分にカバーできる。しかし、コーディング規約や保守・再利用性、実行時エラーのチェックはどうだろうか。バロー氏は次のように話す。「VectorCASTは静的解析ツール『QAC』および『QAC++』との連携が可能だ。機能的なエラーや堅牢性などのチェックはVectorCASTで、コーディング規約や保守・再利用性、実行時エラーのチェックはQAC、QAC++で実行するなど、動的テストと静的テストをうまく組み合わせることで、品質確保の問題に効率よく対処できる」。なお、販売代理店である東陽テクニカは、今後VectorCASTとQAC、QAC++を組み合わせた総合テストソリューションを提供していく予定だ。

 VectorCASTは、これら機能やツール連携により、前述した単体テストによる作業負荷を軽減し、総合的なテスト環境をスムーズに開発現場へ組み込み、100%カバレッジの実現を可能とする。

東陽テクニカ ソフトウェアソリューション
VectorCAST
QAC
QAC++

お問い合わせ先:ss_sales@toyo.co.jp


提供:株式会社富士通ソフトウェアテクノロジーズ
Coverity, Inc.
株式会社東陽テクニカ

企画:アイティメディア 営業本部
制作:@IT MONOist 編集部
掲載内容有効期限:2008年08月31日