短納期、低コストのプレッシャーに負けたくない!
「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言語のみのサポートです。
|









