ソフトウェアテストの技法で同値分割というものがあります。
同値分割とは、入力データを「同じ出力結果が得られるグループ」に分割することをいいます。このグループのことを「同値クラス」と言います。また、正常処理を行う同値クラスを「有効同値クラス」と言い、エラー処理を行う同値クラスを「無効同値クラス」と言います。
同値分割の話をいろいろと聞くと、自分とは違う捉え方をしているので面白く感じています。また、私自身も誤った解釈をしていたりして、つくづく毎日が勉強だと感じています。
私は同値分割について、数年前まで勘違いをしていました。無効同値クラスの扱いについて誤った解釈をしていました。無効同値クラスを有効同値クラス以外のものすべてと考えていたのです。
┌───────────────┐
│ │
│ │
│ ┌──────┐ |
│ │有効同値 │ 無効同値 │
│ │ │ │
│ │ │ │
│ └──────┘ │
│ │
│ │
└───────────────┘
と考えるのではなく、
┌─────┐
│有効同値 │ それ以外
│ │
│ │
└─────┘
と考えていました。
え〜、領域で囲んでいないため、無効同値クラスの候補はそれはそれは多かったです。
ある日、「それは同値分割とは言えないよ」という神の声があり、間違いに気づいた次第です。
それから同値分割とはなんぞやということについて考え始めました。当初、考えていたのは、
区分で分ける
ということです。まず大きな領域を考えます。まず始めに、それを有効同値クラスと無効同値クラスに分けます。次に有効同値クラスを区分や種別で分けていきます。無効同値クラスも同様に分けていきます。
このように上から下へサブセットを取りに行く考えを持っていました。今でもこの考え方で検討することの方が多いです。
このやり方でそこそこ自信もついてきた頃、他社の人と勉強会を開いたとき、
共通の性質を取りに行く
やり方を他社の人がしていました。これ以上分けられない要素から、共通の性質を見つけ出し、1つ1つ上に登っていくやり方です。上から下へ分割するやり方と、結果はほとんど同じ形になります。しかし、違うところもあります。なぜ違ってしまうかというと、共通の性質というものは、人によって解釈が異なるからです。基準が無いので表現されたものが変わってしまうのです。
この違うところが、テストケースを挙げる際に漏れてしまうところです。この違いを知ってからは、トップダウンでやりつつもボトムアップで検証するというやり方を取っていました。
最近聞いたのは、いちいちトップダウンだボトムアップだと考えずに、
経験則から導き出してしまう
やり方です。特に無効同値の分け方は、過去に起きた障害情報、バグ情報から導き出されたものを使うというやり方です。
ソフトウェアテストという目的を考えると、これも凄く効果的な考え方だと思っています。
というわけで、今ではどんなアプローチを使ってもいいんじゃないか、という当たり前の考えになっています。
同値分割とは、入力データを「同じ出力結果が得られるグループ」に分割することをいいます。このグループのことを「同値クラス」と言います。また、正常処理を行う同値クラスを「有効同値クラス」と言い、エラー処理を行う同値クラスを「無効同値クラス」と言います。
同値分割の話をいろいろと聞くと、自分とは違う捉え方をしているので面白く感じています。また、私自身も誤った解釈をしていたりして、つくづく毎日が勉強だと感じています。
私は同値分割について、数年前まで勘違いをしていました。無効同値クラスの扱いについて誤った解釈をしていました。無効同値クラスを有効同値クラス以外のものすべてと考えていたのです。
┌───────────────┐
│ │
│ │
│ ┌──────┐ |
│ │有効同値 │ 無効同値 │
│ │ │ │
│ │ │ │
│ └──────┘ │
│ │
│ │
└───────────────┘
と考えるのではなく、
┌─────┐
│有効同値 │ それ以外
│ │
│ │
└─────┘
と考えていました。
え〜、領域で囲んでいないため、無効同値クラスの候補はそれはそれは多かったです。
ある日、「それは同値分割とは言えないよ」という神の声があり、間違いに気づいた次第です。
それから同値分割とはなんぞやということについて考え始めました。当初、考えていたのは、
区分で分ける
ということです。まず大きな領域を考えます。まず始めに、それを有効同値クラスと無効同値クラスに分けます。次に有効同値クラスを区分や種別で分けていきます。無効同値クラスも同様に分けていきます。
このように上から下へサブセットを取りに行く考えを持っていました。今でもこの考え方で検討することの方が多いです。
このやり方でそこそこ自信もついてきた頃、他社の人と勉強会を開いたとき、
共通の性質を取りに行く
やり方を他社の人がしていました。これ以上分けられない要素から、共通の性質を見つけ出し、1つ1つ上に登っていくやり方です。上から下へ分割するやり方と、結果はほとんど同じ形になります。しかし、違うところもあります。なぜ違ってしまうかというと、共通の性質というものは、人によって解釈が異なるからです。基準が無いので表現されたものが変わってしまうのです。
この違うところが、テストケースを挙げる際に漏れてしまうところです。この違いを知ってからは、トップダウンでやりつつもボトムアップで検証するというやり方を取っていました。
最近聞いたのは、いちいちトップダウンだボトムアップだと考えずに、
経験則から導き出してしまう
やり方です。特に無効同値の分け方は、過去に起きた障害情報、バグ情報から導き出されたものを使うというやり方です。
ソフトウェアテストという目的を考えると、これも凄く効果的な考え方だと思っています。
というわけで、今ではどんなアプローチを使ってもいいんじゃないか、という当たり前の考えになっています。










