SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

テンプレートから学ぶ 受注する開発者のためのテスト仕様書

単体テスト計画書(3)
― ホワイトボックステスト(2)、網羅率

開発者のためのテスト仕様書テンプレート(4)

3. 考慮点

 「ホワイトボックステスト」にはさまざまな考慮点があります。

3.1. データやデータ構造は網羅率に含まれない

 プログラムは制御構造の他にデータが重要です。実際、ヴィルト先生の『アルゴリズム+データ構造=プログラム』(絶版)という名著もある程です。データやデータ構造に着目してテストを行いたい訳ですが、網羅率にはデータもデータ構造も含まれていません。C0、C1、C2網羅率がすべて100%だったとしても、十分テストしたと言えないことがあるのです。

3.2. 並列性やミドルウェアを利用したさまざまな処理など、別途テストが必要である

 並列性(concurrency)のプログラミング言語レベルのサポートはかなり大きな挑戦です。ADAやJavaのように並列性を考慮している言語もありますが、それでも網羅率で並列性をテストできる訳ではありません。他の言語になると、API呼び出しなどで並列性を実現しますが、やはり網羅率で並列性のテストをするわけにはいきません。別途テストが必要になりますね。

3.3. コピー&ペーストしたプログラムではテスト対象が増える

 ソースコードをコピー&ペーストしてプログラミングをしている場合、テスト対象はペーストしたソースを含みます。保守しているともっと劇的にテスト対象が増えることになります。つまり母体が1,000行、修正が10行だったとすると、テスト対象は1,000行からなる母体です。これは当たり前かもしれませんが、時としてテスト負担が大きく感じられます。

 これは「ブラックボックステスト」では発生しない考慮点です。「ブラックボックステスト」を解説する時に、この考慮点を再び議論します。

3.4. C1網羅率が100%でも、テストしていない経路がある

 例えば、図5に示したような「あるセグメント構造」を持つプログラムをテストするとしましょう。

図5: 「あるセグメント構造」
図5: 「あるセグメント構造」

 図6(a)のようにテストしたとします。この時、C0網羅率は100%です。2つのテストケースでこのプログラムのすべてのセグメントを網羅しているからです。

図6: 「あるテスト」
図6: 「あるテスト」

 ところで図6(b)の赤で示した経路にエラーがあったとします。そのエラーは赤の経路を実行しない限り発現しないとすれば、その経路のテストをしなかった場合、エラーを見過ごしたことになります。

 つまりC1網羅率が100%でも、エラーを含む経路をテストしていない可能性があるということです。

3.5. C2網羅率が100%でも、大事なテストが抜けているかもしれない

 例えば、図7に示したような「ある反復構造」を持つプログラムをテストするとしましょう。

図7: 「ある反復」
図7: 「ある反復」

 図8のようにテストしたとします。この時、C1網羅率は100%です。赤い経路を通るテストケースが全セグメントを網羅しているからです。

 C2網羅率も100%です。C1網羅率が100%の上、反復の内も外も網羅しているからです。

図8: 「あるテスト」
図8: 「あるテスト」

 このプログラムではインテリアを5回実行すると初めてエラーが発現するとしましょう(例えばインテリアでメモリーを獲得していき一定回数を越えるとエラーになる場合、などを想定しています)。

 C2網羅率が100%でも、エラーが発現する程十分にインテリアをテストしていなかった可能性があるということでうのです。

4. まとめ

 今回も単体テストの手法のうちホワイトボックステストを見てみました。ホワイトボックステストではプログラムの構造に基づいてテストすることになります。今回取り上げた構造は「反復」でした。「反復」とはループのことでした。

 網羅率の計算の仕方も勉強しました。サンプルを使っての網羅率の計算は「ブラックボックステスト」の解説の際に、まとめて勉強することにします。

 網羅率の計算方法はプログラムの構造に依っているので、それ以外のデータや並列性などについては別途テストが必要です。コピー&ペーストした場合や保守の場合にはホワイトボックステストだとテスト対象が増えます。C1、C2網羅率がそれぞれ100%だったとしても、テストすべき重要な経路が抜けている場合があります。

 ホワイトボックステストは単体テストの中で重要なテスト方法です。しかし、それが万能だということではなく、他のテスト方法と相補的に実施することが必要なのです。

参考文献

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
テンプレートから学ぶ 受注する開発者のためのテスト仕様書連載記事一覧

もっと読む

この記事の著者

山村 吉信(ヤマムラ ヨシノブ)

同志社大学大学院・電気工学専攻修了(工学修士)。プリンストン大学大学院・計算機科学科修了(MSE)。1978年、日本アイ・ビー・エム(IBM)入社。システムズ・エンジニア(SE)として、性能評価モデルの営業支援に従事。1983年、IBMサイエンス・インスティチュート(現東京基礎研究所)にて研究員とし...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4433 2009/10/19 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー