短納期、低コストのプレッシャーに負けたくない!

「C++test」で開発初期段階から
ソフトウェアの品質向上をサポートする


開発初期における徹底的なバグ退治により、やっかいな開発後期の問題発生を未然に防止しよう。「C++test」を使うことで、ソフトウェア検証作業の自動化および効率化をはかれる。独自のバッチ機能を利用した夜間の自動検証もできる。

 IT技術の進歩に伴い、この基盤を支えるソフトウェアは機能が増大し、ソースコードは肥大化し続けている。例えば、携帯電話のソースコードの規模は1200万ステップを超える。一方で、ビジネスの側面からは、短納期、低コストのプレッシャーがより厳しくなっている。

 この状況に加えて、製品の品質はより高いレベルが要求されている。例えば、1200万ステップのソフトウェアをたった数カ月で開発する場合、新規の開発が20%だとしても、240万ステップであり、開発チームは相当の人数が必要になる。開発経験が異なる人間の集合である大規模な開発チームで、ソースコードの品質を高いレベルに保つことは、非常に難しい。このような短納期の大規模開発において高品質なソフトウェアを開発するには、開発の初期段階でバグをつぶすことが大切だ。

 さらに、開発の初期段階でバグをつぶすことは、品質向上だけでなく、開発後期に発見される問題を未然に防ぎ、納期厳守やコスト削減につながる。

   
 C++testの3つの検証機能


  ここで紹介する「C++test」には、開発の初期段階から品質向上に大きく貢献する3つの検証機能(フロー解析、静的解析、自動単体テスト)が備わっている。

【フロー解析】処理フローに依存したバグを検出する「バグ探偵」

 フロー解析というとネットワークのフロー解析などが有名だが、ここでいうフロー解析は、ソースコードを解析して、実行される可能性があるパスをすべて列挙し、エラーの有無を解析することを指す。

図1 処理フローの例

図2 図1の処理フローに含まれるパス

  コードの網羅率(カバレッジ)でいえば、パスカバレッジに相当するパスを網羅してエラーを検出する。例えば、図1のフローチャートでは、図2に示す4つのパスが存在する。C++testの「バグ探偵」のフロー解析は、図2の4つのパスをすべて解析して、フロー1つ1つの中で発生する可能性があるエラーを検出する。

 C++testのバグ探偵が検出するエラーのカテゴリは、以下の6つである。

  • メモリリーク
  • リソースリーク
  • NULLポインタを参照する可能性があるポインタ処理
  • 未初期化変数を参照する可能性がある処理
  • ゼロ除算の可能性がある処理
  • 配列の範囲外のアクセス

 C++testのバグ探偵が採用するエラー検出方法は、実際にプログラムを動作させることによりエラーを見付ける方法に比べ、以下のような優れた利点がある。

  • 検証用のコードを準備する必要がない
  • エラーの検出漏れがなくなる

 プログラムを動作させて実施するエラー検出は、使用するテストケースに大きく依存する。例えば、図1のフローでは、最後の処理を通るテストケースの実行が漏れた場合、このフローで発生するエラーは検出できない。

 しかし、C++testのバグ探偵のエラー検出方法では、検証の網羅率が非常に高く、エラーの検出漏れを防げる。また、プログラムを動作させないので、開発の早い段階から検証を実施でき、開発後期のテストで発見される重大なバグを未然に防ぎ、負担の大きいデバッグ作業を軽減させることができる。

図3 C++testのバグ探偵がリソースリークを検出した例
(画像をクリックすると拡大します)

【単体テスト】テストドライバ、テストスタブ、テストケースを自動生成、テストを自動実行

 C++testは、テストケースやテストスタブ、テストドライバを自動生成し、単体テストを自動化する。人手による単体テストでは、テストスタブやテストケースの作成に多くの時間を取られるが、C++testで自動化することにより、単体テストを効率化することができる。また、6種類のカバレッジ情報がレポートされるので、これらの情報から単体テストの妥当性を確認することもできる。

【静的解析】900種類のコーディングルールでソースコードを検証

 C++testには、「Effective C++」「MISRA」「C++ Coding Standards」といったコーディングルールが約900種類、搭載されている。これらのコーディングルールでソースコードを検証し、エラーを引き起こす可能性のあるコードや保守性、可読性の低いコードを検出する。また、コーディングルールは編集したり、ユーザー独自のものを作成することが可能だ。

   
 夜間バッチテストによるC++testの利用


  コーディング工程において、各開発者がC++testを利用して検証作業を実施することは、ソフトウェアの品質向上において非常に効果的である。しかし、開発チームの検証の均一化や管理、開発者のテスト実施負荷といった課題が残る。これらの問題を解決するため、C++testには「ナイトリービルド」という機能がある。

  ナイトリービルドでは、開発者がチェックインしたソースコードに対して、夜間にC++testによる検証をバッチで自動実行し、その結果を各開発者にフィードバックする方法だ。この運用の場合、開発者は自身のマシンでC++testによる検証を実施する必要がないので、その分の時間を削減できるとともに、検証漏れを防ぐことができる。

Information
テクマトリックスでは、体験版ダウンロードサービスハンズオンセミナーを無償で提供している。

*ナイトリービルドならびにバグ探偵は、「C++test Server Edition」に含まれる機能です。
*バグ探偵は、C言語のみのサポートです。

本記事で取り上げた製品の詳細な資料をダウンロードしていただけます。
以下の画像をクリックしてください。
プログラムの処理フローに潜むエラーを自動検出──C++testの 『バグ探偵』機能

C++testの『バグ探偵』は、処理フローを静的に検証して、
メモリリークや未初期化メモリといった問題を検出する。
本ホワイトペーパーでは『バグ探偵』の機能を例題を交えながら、詳しく紹介する。
お問い合わせ先:テクマトリックス株式会社
E-mail:parasoft-info@techmatrix.co.jp
電話:03-5792-8606

 


提供:テクマトリックス株式会社
企画:アイティメディア 営業局
制作:@IT 編集部
掲載内容有効期限:2007年11月15日

関連リンク
テクマトリックス

取り扱い製品一覧

C++test6.0 発表資料(PDF)

体験版ダウンロードサービス

ハンズオンセミナー

アプリケーションの構造をマトリックス形式で視覚化すると − @IT


本記事で取り上げた製品の詳細な資料を
ダウンロードしていただけます。
以下の画像をクリックしてください。
プログラムの処理フローに潜むエラーを自動検出──C++testの 『バグ探偵』機能

C++testの『バグ探偵』は、処理フローを
静的に検証して、メモリリークや
未初期化メモリといった問題を検出する。
本ホワイトペーパーでは『バグ探偵』の機能を
例題を交えながら、詳しく紹介する。
お問い合わせ先:テクマトリックス株式会社
E-mail:parasoft-info@techmatrix.co.jp
電話:03-5792-8606

組み込みソフトウェアテスト特集
組み込みソフトウェアテストが抱える課題とは?
品質管理・テストツールの有効性
 効率的に品質を確保するため、テストをどう効果的に実践するか? これが、組み込みソフトウェア開発における最大の関心事であることは間違いないだろう。
 各産業で世界最高水準の組み込み機器が開発されているが、その背景では、肥大化の一途をたどるソフトウェアに対する綱渡り的な品質確保が行われ、そのため開発現場は疲弊し、ビジネス上も看過できないほどのロスを生んでいる。