グレーは白と黒をあわせたもの?
今日は休暇。久しぶりにまともな更新。
==
ふと、グレーボックステストってどういうものだろう?と思って調べてみた。
ある程度、作りが分った上で実施するテストをグレーボックステストといいます。(中略)
グレーボックステストはアーキテクチャが分っていることに意味のあるに時に用いるやり方で、ユーザビリティテストの様に仕組みを知ることがかえってマイナスとなるテストでは適用すべきではありません。「こう作っているのだから、そう動くべきだ」という見方と、「こう使いたいのだから、(作りがどうであろうと)そう使えるべきだ」とでは検証で目指すところが違うからです。
この定義だと、ホワイトボックステストでもなく、ブラックボックステストでもない検証項目、といったイメージ。ホワイトボックステストケースとブラックボックステストケースを優先順位で並び替えた総合テストケース群、ということではない。
しかしだ。
例としてABS(アンチ・ロック・ブレーキ・システム)の動作確認をするケースで考えてみましょう。構成を何も知らず、要件として「ABSスイッチがONの時は、急ブレーキをかけてもタイヤがロックしないこと」ということだけを知っていて、検証するケースがあるとします。この場合と「ABSスイッチがONで、時速XXkm以上にて走行時、踏力XX㎏以上でブレーキングされ、タイヤのロックがセンサにより検出された場合にはABSを作動させる...」という仕様をテストで確認するケースとでは、検証の詳細度がかなり異なります。
グレーボックスは後者に当たり、
ここでは「ABSスイッチがONで、時速XXkm以上にて走行時、踏力XX㎏以上でブレーキングされ、タイヤのロックがセンサにより検出された場合にはABSを作動させる...」をグレーボックス的なテストケースと位置づけている。
でも、これはABSスイッチの状態、走行速度、ブレーキの踏力、センサーの感知といった条件での動作確認であって、仕様書に載っている条件と思われる。それってブラックボックステストケースになるんじゃ?
「黒と白の中間」と表現されることが多いグレーボックステストだが、意外にわかりにくい定義な気がする。
==
今、自分なりのTDDっぽい開発をしているが、そこでのテストケースはグレーボックスだなあと思っている。が、それってもしかしたら黒と白をあわせただけのテストケースなのかも。これってどうなのだろうか。
====================================================================
2006年11月29日 追記。
JUnitと単体テスト技法―JUnit4対応 by それはBooks
このブログではコンピュータ書籍, デザイン書籍, ビジネス書籍, その他の書評を行っているようで、
このJUnit の使い方と単体テストについての書籍中では以下のように解説している。
ブラックボックステストブラックボックステストは、プログラムの仕様を元にテストを行うものです。プログラムの内部構造は考慮せず、入出力の仕様に注力します。
ブラックボックステストとして、次の4つのテストがあげられています。・同値クラステスト
・境界値テスト
・デシジョンテーブルテスト
・強制エラーテスト
・グレーボックステスト
ここではグレーボックステストは、ブラックボックステスト技法のうちのひとつになっている模様。
| 固定リンク

コメント
グレイボックステストはブラックボックステストをする際にソースコードや設計書をちらっと覗いて、処理の順番を知ることで、テストケースを効率的に削減したり、引数の事前チェックをしているかを調べてしていなかったらそこをつつくとか、そういうテストの方法だと思います。
内部構造のテストをする(ホワイトボックス)ではなくて、あくまでも仕様に対するテストなんだけど、頑なにソースコードは見ないぞというんじゃなくて、ちらっと見て効率化できるなら見ちゃったほうがいいんじゃない?って感じでは。
投稿: あきやま | 2006年11月29日 (水) 23:30
>あきやまさん
なるほど。解説ありがとうございます。
ということは追記で載せた「グレーボックステスト⊆ブラックボックステスト」
といったイメージのが近そうですね。
そうなると主に開発者が担当することが多い単体テストや結合テストでは、
「ブラックボックス≒グレーボックステスト」といった見方もできるかも?
(実装した本人なので無意識的に引数チェックや処理順序チェックをやってる)
システムテストや受け入れテストでは真っ黒だと思いますが^^;
投稿: softest | 2006年11月30日 (木) 11:24