境界値はテスト観点か

Twitterで2013/6/14で@akiyama924さんからご質問頂いたものをまとめておきますね。回答もTwitterで行ったので、140字ずつになっていますから、少し読みにくいかもしれませんが、ご容赦下さい。

にしさんには、テスト観点でない観点を何故それはテスト観点ではないのかといった理由とともに教えてほしいです。「意地悪漢字はテスト観点ではない」「同値はテスト観点ではない」等々の理由。その辺がもやっとしています。

 まず、同値はテスト観点ではない、というのは正確ではありません。同値クラスは(末端の)テスト観点ですが、境界値はテスト観点ではありません。境界値は、あるテスト観点のカバレッジ基準、もしくは選ばれた値そのものに過ぎないからです。全値、代表値、境界値などは全て同様です。

で、この説明を聞くとモヤモヤ感が高まると思います。

実はテスト設計における境界値というのは、2つの意味があるからです。1つは、同値クラスの主要な代表値としての意味。もう1つは、バグを如実に叩き出す武器としての意味。

テスト技法のセミナーを想像してみましょう。私の基礎コースもそうですが、同値分割の後に境界値分析を扱い、両者は関連があると教えることが多いですね。

しかしよく考えてみましょう。同値クラスというのは全て同じふるまいをする入力値集合です。しかし境界値とは、同じ同値クラスに属する他の値よりもバグを検出する確率が高いのです。ならば、境界値とそれ以外の値は、同じ同値クラスには属しません。なぜなら、ふるまいが異なると予想されるからです。

ここから論理的に帰結されるのは、実は境界値分析は同値分割と「意味的に」つながっていないということです。手順的につながっているだけです。言い換えると、境界値分析というのは同値分割に新たなテスト観点を加えているわけです。

もう少し正確に表現しましょう。同値分割は、入力条件網羅を行うためのテスト要求分析の技法です。境界値分析は、入力条件網羅のテスト詳細設計の技法です。これが一つの位置づけ。この位置づけを元に、NGTでは「境界値はテスト観点ではない」と取り扱います。

もう一つの解釈をすると、境界値分析はif文の比較演算子のミスや配列の境界越えのようなバグのパターンを示唆するテスト観点に基づき、テスト要求分析からテスト詳細設計までを統合した技法です。

この解釈を取るのであれば、境界値という曖昧なテスト観点よりも、むしろ「比較演算子のミス」をテスト観点として挙げた方が、モデリングが分かりやすくなります。ですのでNGTでは「境界値はテスト観点じゃないよ」という教え方をしています。

エキスパートの皆さんがモヤモヤしないように正確に表現するならば「境界値そのものじゃなくて、境界値で狙っているバグのパターンを直接テスト観点として挙げましょう。何のバグを狙ってもいない境界値は、単なる同値クラスのカバレッジ基準ないし値ですから、テスト観点ではありません」となります。

意地悪漢字も同様です。意地悪漢字が狙っているバグのパターンを直接テスト観点として挙げる方が、モデリングとして分かりやすくなります。

ただそれが難しいことも多々あるので、最終的にテスト観点に残さない前提で、他のテスト観点と組み合わせて考えるヒントとして、境界値や意地悪漢字が初期のテスト観点図に出てくる方がモデリングしやすい、ということであれば、別に構わないと思います。私もそうすることがあります。

あ、まだ疑問があったか、テスト技法はテスト観点じゃない、というやつね。

NGTでは、テスト技法はテスト観点じゃないという説明をしています。それは、テスト技法というのが何を意味しているか、に依存した説明です。より正確に言うと、一般的にテスト技法という用語が含んでいるものは、単純にテスト観点になるわけじゃないよ、という意味です。ヒントにはなります。

一般にテスト技法というのは、2つの工程をいっしょに行います。テスト要求分析すなわちテスト観点の特定と、テスト詳細設計すなわちテストデータの特定です。ただ面倒なのは、片方しかやらないテスト技法もある点です。

例えば境界値分析は両方やりますし、同値分割はテスト要求分析が主です。制御パステストはテスト詳細設計が主です。

テスト観点を挙げる時にヒントとなるのは、制御パステストのようにテスト詳細設計を主に行う技法です。なぜなら、テスト詳細設計を行うためにテスト観点を特定しているからです。テスト技法をテスト観点にすると、そのテスト技法で特定しているテスト観点を挙げていることになります。

ただall-pair法のように、テスト詳細設計を主に行うのにテスト観点を特定していないテスト技法もありますから、そう一筋縄ではいきません。ですのでNGTでは、テスト技法はテスト観点を挙げる際のヒントにはなるけれど、直接テスト観点にすべきではない、と説明しています。

一般に、NGTを教わるテストのモデラーはここまでテスト技法について考察しているわけではありませんので、ここまで詳しく説明するとかえって混乱を招くと予想されます。

要するに「テスト技法」という用語は、テスト要求分析とテスト詳細設計が分離されてなかった時代につくられた用語なので、テスト観点の特定とテストデータの導出の切り分けが難しい用語なのです。それが本件の原因。これは29119-4でテスト条件の粒度がずいぶん変わることからも分かります。