連載
» 2017年07月26日 11時00分 UPDATE

山浦恒央の“くみこみ”な話(97):タダでソフト開発の生産性と品質を上げる方法(7):高機能な単体テストツール「GoogleTest」を使いこなす(その2) (1/3)

「タダでソフト開発の生産性と品質を上げる方法」の第7回。グーグル(Google)製の単体テストフレームワーク「GoogleTest」の高度な機能のうち、今回は「パスカバレッジ」を取り上げます。

[山浦恒央 東海大学 大学院 組込み技術研究科 非常勤講師(工学博士),MONOist]

1.はじめに

 本コラムの第95回第96回では、意外な本格派ツール「GoogleTest」のダウンロードの方法を解説し、GoogleTestの2大機能のうち「アサーション*1)」を説明しました。今回は、もう1つの機能である「パスカバレッジ」を紹介します。

国鉄 ※写真はイメージです

*1)筆者が初めて、仕事としてプログラミングを始めたのが1977年でした。当時、米国の大統領は、関西弁のようにどろどろした南部訛りのジミー・カーター氏、王貞治がホームラン新記録となる756号を打ち、その勢いで国民栄誉賞の最初の受章者となりました。ピンク・レディーの『ペッパー警部』が大ヒットしたころで、任天堂初のテレビゲーム、『カラーテレビゲーム15』が登場。今では、メカ音痴のオジサンでも普通に使っている銀行のオンラインシステムがやっと一般化し、国鉄(10年後の1987年からJRに改名)の「みどりの窓口」で座席のオンライン予約ができるようになり、私は「みどりの窓口」の開発を担当していた部署に配属されました。

 使用言語はもちろんアセンブラーです。16個のレジスターを駆使して、掛け算や割り算ルーティンを自分で作ったり、「貧乏人の仮想記憶」とか「手動式仮想記憶」と言われた「プログラム・オーバレイ」を使い、「雀のひたい」より小さいメモリ上で、アフリカ象ほど巨大なプログラムを稼働させていました(この「メモリの工面」は、中小企業の社長が毎日、資金繰りに東奔西走するような感じでしょう)。

 当時、ソフトウェア工学という概念はなく「プログラミングをする職人の知恵」として、プロジェクトや部内で共有していました。先輩が、まず教えてくれたデバッグ法が、現在のアサーションで、私の「人生初品質制御技法」でした。先輩から、「いいか、この変数(例えば、ソートするデータの総件数)の値がマイナスになったらシステムのエラーだ。自己矛盾を起しているので、ある番地へジャンプさせてメモリの内容を出力するようなデバッグ文をあちこちのモジュールに入れておくんだ」と指導を受け、私は、「おぉ、これがプロの技だ」と感動しました。

 現在のソフトウェアの品質は、当時に比べると、品質制御技術の経験値や習熟度が上がったり、ツールが豊富になったりしたことで向上しましたが、基本的な技法はほとんど進歩していないように思います。今後の品質制御に関し、私は、「いかにテストを高速化/自動化するか」よりも、「いかにして、テストをしないで済ませるか」を目指した「品質のカプセル化」へ向かうと考えています。

2.GoogleTestを使ったカバレッジ

 どの程度、テストしたかを具体的な数字で表す方法の1つがテストカバレッジです(カバレッジの詳細は、本コラムの第84〜90回をご覧ください)。簡単な順に、「C0カバレッジ」「C1カバレッジ」から始まり、可能なあらゆる数値の全組合せをテストする「C∞カバレッジ」まで、いろいろなカバレッジがあります。一番簡単なC0カバレッジでも、100%網羅するのは非常に大変で、ツールなしでは不可能です。

 GoogleTestでは、eclipseを使うと、gcovと組み合わせて、カバレッジ計測と、実行したソースコードを色付けできます。視覚的な要素があり、非常に便利なデバッグツールです。これを使わない手はありません。カバレッジのツールを使ったことがないなら、まずはここからスタートしましょう。

       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.