同値分割について

湯本さんの<同値分割の「分割」とは何か?>という記事に触発された記事です。
https://note.mu/yumotsuyo/n/n33c0d7e2d56b

湯本さんは partition という言葉に違和感を持ち、記事を書かれました。

以前、僕は同値クラスと言葉に違和感を持ち、調べたことがありました。「クラス」という言葉を使うことに疑問を持ったからです。実務でテストを行うとき、「区分」という意識を持って行うからです。つまり partition です。


「区分」は、範囲が決まっていてその中を分けるときに使います。弁当箱の中を仕切りで分けるイメージです。

ところがテスト技法では「クラス」という言葉が使われています。「種別」や「分類」です。「類別」と言ってもいいかもしれません。範囲が決まっていないところで分けるイメージです。範囲が決まっていませんから、種別が後から追加される可能性があるというイメージです。

ある範囲の中を仕切りで分けているイメージでテストデータを分割しているのに、テスト技法では同値「クラス」と呼んでいます。ここに違和感を持ち調べました。15年以上前のことです。

結論を言いますと、数学の同値類の考え方からテスト技法の同値クラスという言葉を援用した、ということが分かりました。
同値類の解説は専門家に任せるとして、僕のような数学の素人に対して、同値類を説明するとき、次のような例がよく用いられます。

ある数で割った余りが等しい、という例です。
3で割って余りが1のもの{1,4,7,・・・}
3で割って余りが2のもの{2,5,8,・・・}
3で割って余りが0のもの{3,6,9,・・・}
このように同値関係が成り立つ元を全て集めた集合のことを同値類(equivalence class)と言います。

テスト技法の同値分割はこの考え方に基づいています。
入力:自然数
処理:3で割った余りを求める
出力:余り(0,1,2)
※話を分かりやすくするために、入力エラーは考えないことにします。

このとき、余り0の入力値を集め、余り1の入力値を集め、余り2の入力値を集めます。
この集めた入力値を同値クラスと言います。

さて、ここまで読んでみて「区分する」と発想が違うことに気づかれた方もいるかもしれません。
「区分する」は範囲の決まっている入力値に仕切りを入れていきます。そこには出力は関与しません。

ですから同値分割というテスト技法を厳密に解釈される方々は、入力値を分けるだけの方法を同値分割として認めません。そのような方々の意見を乱暴にまとめると、現場で入力値を区分しているという実情は分かるけれども、それは同値分割ではないというものでした。

同値分割というテスト技法を厳密な意味で使う場合、出力から考えないといけません。入力から考えるのは厳密な意味ではおかしい、別の技法だとなります。
しかし、現場では入力値を意味のあるグループに分けることを同値分割と呼び、実際にこの考え方に基づいて仕事をしています。

湯本さんの記事の画像を見ると、Domain(入力全体領域)という文字が見えます。湯本さんの記事も入力を見ていることが分かります。

このような経緯から同値クラスから同値パーティションというように、使われる用語が実態に合わせているのかなと思います。

この記事が気に入ったらサポートをしてみませんか?