業務効率化の道具箱(5)Google Testを使ってみよう【その1】山浦恒央の“くみこみ”な話(158)(1/3 ページ)

ソフトウェア開発にとどまらない、PCを使う全ての人が対象となるシリーズ「業務効率化の道具箱」。第5回は、単体テストで役立つフリーのツールである「Google Test」と「gcov/lcov」を紹介する。

» 2022年10月20日 07時00分 公開
※本記事はアフィリエイトプログラムによる収益を得ています

1.はじめに

 本シリーズでは、日々の作業を効率化し、定時できちんと帰宅する方法を紹介しています。主な業務効率化の例は、下記です(詳しくは連載第154回を参照)。

  • スペックの高いハードウェアを導入する
  • 使用機器を使いこなす
  • ツールを導入する
  • 自分でツールを作る
  • 働き方を工夫する

 業務効率化の方法はさまざまですが、今回は3番目の「ツールを導入する」に着目します。

⇒連載「山浦恒央の“くみこみ”な話」バックナンバー

2.前回の振り返り

 前回は、VirtualBox(仮想化ソフトウェア)を取り上げました。VirtualBoxでは、ホストOS上で複数のゲストOSが稼働します。例えば、Windows環境のPCにUbuntuを入れられます。

 今回は、前回作成したUbuntu環境をベースに単体テストを効率化するツールを紹介します。なお、Ubuntu環境の構築に関しては、前回の記事を参照ください。

3.単体テストとは

虫眼鏡 ※写真はイメージです

 ソフトウェア品質を確保するには、なるべく小さいまとまりでテストすることが大事です。例えば、100万行のプログラムを一気にテストすると、バグが出た場合、100万行の中からバグを見つけねばなりません。最少のプログラムであるモジュール単位でテストすると、50〜200ステップの中からバグを見つけるので、非常に簡単にバグを摘出できます。

 このモジュール単位のテストが「単体テスト」で、単体テストが完了したら、モジュールを統合した機能単位のテスト(結合テスト)を経て、最後がシステムを統合したシステムテストとなります。

 単体テストでは、プログラムを最少の関数に分割し、入出力が正しいことを確認します※1)

※1)世の中では、「単体テスト」という言葉の解釈の仕方が異なるように思います。本記事における単体テストの定義は、「1関数ずつテストすること」とします。

3.1 単体テストのメリット

 単体テストのメリットの一つは、バグ検出時の修正が比較的容易なことです。例えば、単体テストでバグが発生しても、大半の原因はその関数内にあります(図1)。

図1 図1 関数の呼び出し関係

 図1は、関数の呼び出し関係図です。関数Aは関数Bと関数Cを呼び出し、関数Bは関数D〜Gを呼び出しています。このプログラム全体でバグが発生すると、関連する場所が関数A〜Gまであるため、原因の絞り込みは簡単ではありませんね。

 単体テストでは、関数A〜Gを一つずつテストします。そのため、意図しない動作がある場合、そのバグの原因は基本的にテストしている関数だけにあります(仕様などがおかしい場合もありますが)。後工程で困ることがないように、きちんと単体テストしていくことが大事です。

 単体テストは大事な工程ですが、多くの手間がかかります※2)。そんなときは、ツールを探しましょう。数あるツールの中で、今回は、単体テストで役立つフリーのツールとして、「Google Test」と「gcov/lcov」を取り上げます。

※2)単体テストは多くの手間がかかります。そこで、組織によっては単体テストを実施せず、結合テストで一気にバグをつぶそうと考えるところも少なくありません。バグが多いと、デバッグに多大な時間がかかると思いますが、いい悪いはともかく、世の中の現状はそんなものです。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.