テスト効率を高める「同値分割法」とは?
同値分割法とは、ブラックボックステストで利用されるテスト技法であり、複数の値を特定の条件でグループ分けし、単位ごとにテストケースを設計することで、効率的なテストを実現します。 つまり、「これとこれは同じようなものだからどちらかでテストをすれば充分」としてテストの効率性を高める手法です。 同値分割法の基本的な考え方として、ある入力や条件が同じ振る舞いをすると仮定し、その同等のパーティションや範囲を同値パーティションとして扱います。各同値パーティションから1つ以上のテストケースを選択し、それを対象となる機能や条件のテストに利用します。 これにより、広範囲かつ重要なケースを網羅的にテストし、不必要なテストケースを除外することができます。

同値分割法の活用でテストケースを最適化
同値分割法は、テストケースを最小限に抑えながらも広範囲をカバーし、効率的にテストを実施することを目的としておりテストケースの削減に繋がります。
例えば以下のようなシステムがあったとします。
・テキストボックスと「確定」ボタンが存在する
・テキストボックスには1~9までの数字が1文字のみ入力できる。
・テキストボックスに1~4までを入力して確定ボタンを押すと「OK」、5~9までを入力して確定ボタンを押すと「NG」と表示される

この場合、「入力する数字」に対して同値分割法を用いて最小のテストケースを作成する時、どのような結果になるでしょうか。模範的な回答として「OKとなる数字」・「NGとなる数字」の2ケースになります。

入力可能な数字をすべて網羅すると9ケースのところ、2ケースまで削減できました。
この同値分割法には情報の整理を行う際にも役立ち、「抜け漏れがないテスト」を作るための重要な技法になります。
先ほどのシステムが、以下の仕様となった場合、同じように「入力する数字」に対して同値分割法を用いて網羅的なテストを作成するには、どのようにすれば良いのでしょうか。
・テキストボックスと「確定」ボタンが存在する
・テキストボックスに1~4までを入力して確定ボタンを押すと「OK」、5~9までを入力して確定ボタンを押すと「NG」と表示される
「OKとなる数字」・「NGとなる数字」以外に入力可能な文字を探すと、「10以上の数字」や「負の数字」、「小数点含む数字」などが考えられます。
これを「無効な数字」としてグループ分けするのが最小ケースかつ網羅的なテストとなるでしょう。

ただし、無効な数字を入力した際の挙動については仕様に明記されていない可能性があります。仕様書の内容を考慮するだけでは、漏れが生じる可能性があるため同値分割法を使用して「他にグループ分けできるものが無いか」を探すことが重要です。
同値分割法の注意点「適切なグループ分け」
同値分割法を用いて漏れなくグループ分けしても、品質の高いテストであるとは言い切れません。同値分割法は有用な手法である一方で、そのグループ分けがシステムの仕様やテストの目的に合致しているかどうかが重要になります。以下は、先述のシステムで「入力する数字」に対して同値分割法を用いた場合の考え方です。
・テキストボックスと「確定」ボタンが存在する
・テキストボックスには1~9までの数字が1文字のみ入力できる。
・テキストボックスに1~4までを入力して確定ボタンを押すと「OK」、5~9までを入力して確定ボタンを押すと「NG」と表示される
例えば1~9を「奇数」「偶数」とグループ分けすることも可能であり、これにより入力可能な数字を網羅できているため、誤りではありません。ただし、この分け方だけでは上記システムの機能テストとしては適切であるとは言えないでしょう。なぜなら、「奇数」と「偶数」という条件だけでテストした場合、確認されない仕様が発生する可能性があるからです。
(例えば、テスターが「奇数」として「1」を選択し、「偶数」として「2」を選択した場合、「NG」が表示される結果を確認できない)
そのため、漏れがないことと同じように、「グループ分けが適切か」を検討することが重要になるのです。
テスト品質を左右する「同値の定義」の重要性
同値分割法を使用して、漏れなくグループ分けをすることや適切なグループ分けをしても、それだけで品質の高いテストが可能であるとは限りません。もう一つ重要な点として、グループ分けの対象となる「同値」とは何かについても考慮する必要があります。
以下のような仕様書があるとします。

よくある方針である「一通りの機能のテストを網羅的に実施する」という目的の下、仕様書から以下のテストケースを作成したとします。

上記のテストケースに漏れがあることがわかるでしょうか。
そう、「戻る」ボタンの機能テストが無いのです。
原因は「仕様書に書かれていない」ということもありますが、目的が「一通りの機能のテストを網羅的に実施する」である以上、必要な対応がなされていないテスト設計者のミスです。
ではなぜこのようなことが起こるのでしょうか。上記のテストケースを作成する上で、「テスト対象」は同値であり、上記のテストケースは「テスト対象」=「資料の「項目」」としていました。これが「一通りの機能のテストを網羅的に実施する」という目的に合致していないために発生してしまったのです。
「テスト対象」=「数字判定画面内の機能」とし、それを漏れなく洗い出せば、漏れは発生しません。それでは、「テスト対象」=「数字判定画面内の機能」としたとき、どのようなテストケースになるでしょうか。

「数字判定画面の機能」を「数字判定画面内のオブジェクト」とし、それを網羅する形でテストケースを作成しました。
1つ目のテストケースの例でも問題ないケースもありますが、それは「資料に記載されていることを漏れなくテストする」という目的の場合です。質が高いテストと言うかはさておき、お客様の要求を満たすことは可能です。このように分け方だけでなく、全体の塊として「同値」をどう定義するかでテストの品質が変わるため、それぞれのテストにおいて「同値」をどう定義するか留意する必要があります。
まとめ
同値分割法を活用することで、広範囲かつ重要なテストケースを網羅的にテストすることが可能になります。同値の明確な定義がテストの質を左右するため、同値の定義にも注意しましょう。テスト効率・テストの品質を向上させることは、結果的にソフトウェアの品質向上に繋がります。また、適切なテスト技法を活用することに加え、当社の第三者検証サービスを組み合わせることで、より堅固で信頼性の高いソフトウェア開発を実現できます。
当社のソフトウェアテスト・第三者検証サービスについて、詳しく知りたい方は以下よりお問い合わせください♪
