GAIO CLUB

2024年06月24日

テストは好きですか? – Google Testのカバレッジ計測を試してみた #1

Google Test
Google Testのカバレジ計測を試してみた
皆さんはテストがお好きでしょうか。
テストは面倒かもしれません。でも、プログラムを書いたら動かしたいですよね。正しく動いてくれることを確認したくなると思います。テストが嫌いだと思っていても、テストしない開発者はいないでしょう。

今回から何度かに分けてテストの話を聞いて頂きたいと思います。

単体テスト

テストはプログラムを全部書き終えた後に行うこともありますし、書き終えた部分のテストをしながら開発を進める方法もあります。どちらにも良いところがありますが、どちらのテストも最初から正しく動いてくれることはないと思います。残念ながら、私たちは必ず間違ってしまいます。

多くの人が反論しないと思いますが、プログラムを完成させるためには単体テストから始めると効率が良いです。単体テストはできるだけ小さなかたまりを評価することです。C言語であれば関数単位の評価を行います。

単体テストであれば、プログラムの誤りがどの関数にあるのかを考える必要はありませんし、問題の箇所にたどり着くのも早いです。しかし、他の関数を呼び出し、自分も誰かに呼び出される関数は、その関数だけを動かすことができません。

単体テストを行うためには、自分を呼び出してくれる親関数と自分が呼び出す子関数を用意しなければなりません。
単体テスト

テスト環境とデータ

関数は要求を実現するために必要なデータを読んで処理します。処理結果はどこかに保存したり、戻り値として返すこともあります。プログラムは、与えられたデータを処理する関数が連携して動きます。個々の関数が設計通りに正しくデータを処理すれば、全体としても要求通りに機能します。
テスト環境とデータ
単体テストの目的は、個々の関数が設計通りに作られていることを確認することです。その方法は、対象関数に必要なデータを与え、関数を実行し、動作後に処理結果として保存されたデータが想定通りであるかを調べます。

ですから、上図の[関数3-2]の単体テストを行う場合には下図の環境が必要です。
テスト環境とデータ

Google Test

Google Test は、LinuxやWindows その他の主要なオペレーティングシステムで使用可能な単体テストフレームワークです。

正式名はGoogle C++ Testing Frameworkで、その名の通り、Googleが作ったC++言語向けのテストフレームワークです。Google Testのインクルードファイルとライブラリを使用してC++およびC言語プログラムの単体テスト環境を作ることができます。

例えば、[関数3-2]の単体テストを行うのであれば、[関数3-2]を呼び出している[関数2-1]の代わりをするテストドライバーが必要になるのですが、Google Testにはテストドライバーを作る環境が用意されています。そして、単体テスト対象関数を呼び出した時に結果の正しさを確認しやすいように、またテストテーマごとに繰り返し呼び出し、その結果を分類して見やすくするための仕組みも提供してくれます。

Google Mock

Google Mock は、単体テストを行う際、未完成だったり、使用不可能な子関数を補完するモックを作成するためのフレームワークです。

正式名は Google C++ Mocking Frameworkで、テスト対象関数を評価するために必要な子関数とその動作を定義する環境を提供してくれます。モックを使用すれば、発生させることが難しい異常処理やエラー処理も評価することが可能です。
Google Mock
図のように、テスト対象の関数[関数3-2]をテストする際にはテストドライバーが対象関数を呼び出し、[関数3-2]が使用する子関数は実物ではなくモックを準備して使用します。

このような環境を作ることで、未完成の子関数が原因でテストが失敗してしまうようなことを防ぎます。

オープンソース

Google Test/Google Mock はGoogleが開発したものですが、オープンソースとして公開されています。ソースをダウンロードしてLinuxやWindowsなどの環境にGoogle TestとGoogle Mockのライブラリを作成し、自由に使用することができます。C++プログラムの単体テストを行うために開発されたものですが、いくつかの工夫をすることでC言語プログラムのテストに使用することも可能です。

テストドライバーやモックはC++言語で作ることになりますが、私のようにC++言語になじめないC言語開発者がC++を使うきっかけになるかもしれません。

次回から、Google Test/Google Mockの使い方について見て行こうと思います。

筆者紹介

浅野 昌尚(あさの まさなお)

ガイオ・テクノロジー株式会社

開発1部 QTXグループ

1980年代から30年以上にわたり汎用構造のCコンパイラ開発に従事し、その間に8ビットマイコンからRISC・VLIW・画像処理プロセッサまで、さまざまなCPU向けのクロスCコンパイラを開発。

人気のコラム

最新のコラム