GoogleTest連携

C/C++testによるGoogleTestの既存テスト資産を活用したテスト

GoogleTestは、Googleが提供する無償のC++言語用単体テストフレームワークです。わかりやすい記法でさまざまなアサーションを記述することができ、広く利用されています。そのため、すでにGoogleTestで作成されたテスト資産の蓄積がある、また今後も単体テストケースの作成と実行はGoogleTestで行いたい、という場合もあるでしょう。そういったケースでも、C/C++testとの連携によって、既存のテスト資産の価値をさらに高めることができます。

GoogleTestのカバレッジ計測の課題を解決する

GoogleTestのテスト資産の活用方法として、GoogleTestのテスト用プログラムを実行しながら、gcovでは計測できないMC/DC等のテストカバレッジをC/C++testで計測する方法を紹介します。
GoogleTestでは、テスト用APIライブラリとテスト対象ソースをビルドし、テスト用プログラムを作成します。そのテスト用プログラムを実行することでテスト結果が得られるという仕組みです。いっぽう、C/C++testには、任意のプログラムを実行しながらカバレッジを計測する機能があります。そのため、C/C++testを介してGoogleTestのテスト用プログラムをビルドし、カバレッジ計測のための情報を組み込んだテスト用プログラムを作成して実行することで、テスト実行時のカバレッジを計測できます。

GoogleTestで作成したテスト資産をC/C++testに取り込んでカバレッジを計測

機能安全規格にも対応:MC/DCを含む9種類のカバレッジ

GoogleTestにカバレッジ機能はありませんが、GCCの標準ユーティリティであるgcovを利用することでカバレッジを計測できます。gcovで計測できるカバレッジはC0とC1です。いっぽう、C/C++testはC2やMC/DCを含む9種類のカバレッジを計測できます。これが特に意味を持つのは、ISO26262等の機能安全規格に準拠する必要がある場合です。たとえばISO26262では、最高の安全性レベルを必要とするASIL Dの場合、MC/DCカバレッジの計測が強く推奨されています。

C/C++testがサポートする9種類のカバレッジ

 
  •  ステートメントカバレッジ(C0)
  • 判断文カバレッジ(C1)
  • 単純条件カバレッジ(C2)
  • MC/DCカバレッジ
  • 関数カバレッジ
  • コールカバレッジ
  • 行カバレッジ
  • ブロックカバレッジ
  • パスカバレッジ

カバレッジのマージ

C/C++testでは、複数の実行のカバレッジをマージすることができます。つまり、GoogleTestのテストケース実行によるカバレッジと、C/C++testで作成したテストケース実行によるカバレッジをマージし、どちらのテストでもカバーされていないコードを確認することも可能です。これは、テストケースの作成方法に関して選択の幅を広げます。

カバレッジのGUI表示・レポート作成機能

GoogleTestとgcovを使ってテストのカバレッジを計測すると、コマンドラインにサマリーが出力されるとともに、ソースコードの各行に対して実行された回数が付加された詳細情報ファイルが生成されます。ある程度ビジュアル化されたHTML形式のレポートを生成するには、さらにlcovツールを使います。
いっぽうC/C++testを使うと、IDEに統合されたGUIでカバレッジを探索したり、カスタマイズされたレポートを簡単に作成したりできます。

カバレッジのGUI表示

C/C++testの[カバレッジ]ビューでは、ツリー形式でプロジェクト、ファイル、メソッドごとのカバレッジ率をすばやく参照できます。ソースコードエディターでは、カバーされた行とカバーされていない行が色分け表示されます。MC/DCの場合、条件にカーソルを置くと、条件と判断文において評価された実際の値がツールチップに表示されます。

C/C++testに表示されたGoogleTestテストケースのカバレッジ

レポートの生成

C/C++testのレポート生成機能を利用すると、あらかじめ見やすくレイアウトされたHTML/PDF形式のレポートを選択し、オプションの設定によって内容をカスタマイズできるほか、XSLTを使用した高度なカスタマイズも可能です。これにより、テストのエビデンスとして必要なレポートを簡単に作成できます。

レポートのサンプル

既存のテスト資産を活かし、運用プロセスを補強する「C/C++test」

多少の課題があったとしても、既存のツールで何とか運用できているときに、ツールを完全に置き換えるという決断はハードルが高いでしょう。C/C++testであれば、GoogleTestのテスト資産を使いながら、その弱点を補うことができます。

静的解析ツール・単体テストツール C/C++testに
関するお問い合わせ

  • テクマトリックス株式会社
    東京本社

    ソフトウェアエンジニアリング事業部

    03-4405-7853

メールでのお問い合わせ
parasoft-info@techmatrix.co.jp

お問い合わせ

製品についてやテクマトリックスについてなど、
こちらよりお気軽にお問い合わせいただけます。