同値分割に関するツイート

ソフトウェアテストの技法のひとつである「同値分割」に関する議論。自分も考えてみたいと思ったので、まとめてみました。
4
鈴木三紀夫 @mkoszk

僕がイメージしている同値分割は、同値分割らしきものなんだろうなあ。だから、ほかの人と意見が合わないのかもしれない。また、僕の考えはエンプラでは効くけど組込みでは効かないということもあるかもしれない。

2011-05-01 15:52:57
鈴木三紀夫 @mkoszk

同値分割の件。どうして他の人と違うのか考えてみたのですが、僕は処理では考えていないみたい。

2011-05-01 17:56:26
あきやま🍠 @akiyama924

私も同値分割で、if文のデシジョンカバレッジを網羅しようと考えているわけではないなぁ。 RT @mkoszk: 同値分割の件。どうして他の人と違うのか考えてみたのですが、僕は処理では考えていないみたい。

2011-05-01 18:50:44
あきやま🍠 @akiyama924

では、同値分割で何を使っているかというとエラー推測と、バグ発生時のインパクトかな。

2011-05-01 19:01:49
鈴木三紀夫 @mkoszk

同値分割で気にしているところは認知。立場によって分類の仕方を変えるから。仕様に書かれているものを信用していないわけじゃないけれど、疑っているというのがベースにあるかな。ドメインを分析してから実装すれば必要ないのかもしれないけれど、実装への圧力に負けていい加減な仕様で作るからなあ。

2011-05-01 19:46:38
鈴木三紀夫 @mkoszk

僕の同値分割の捉え方は、正美さんの影響が強いからテストというよりもデータモデリング寄りなのかもしれないなあ。

2011-05-01 19:49:22
いこま みきお @m_ku

@akiyama924 @mkoszk 現在の標準的な同値分割の解釈が、「同値関係はバグ検出可否」→「処理が同じと思えるか否か」となっているだけ。もし、他の同値関係や解釈が見出せればソフトウェアテスト技術の大きな進歩だと思います。

2011-05-01 20:19:57
鈴木三紀夫 @mkoszk

同値分割は同値類からきているので、「処理が同じと思えるか否か」で入力データを集めます。また、処理が同じと思えるかどうかは、「処理結果が同じ類いのものとみなせるか否か」です。だからこの点については同意しています。相違点は「処理が同じと思えるか」の後の思考過程です。

2011-05-01 21:29:04
鈴木三紀夫 @mkoszk

「処理が同じと思えるか」を識別するのに、プログラムのif文を想定していますが、僕はif文を想定するのはもう少し後。出力データと入力データの関係について検討し、無効同値クラスに入るものを考えます。この時点で、エラー推測が入り込むので、厳密な意味での同値分割では無くなっています。

2011-05-01 21:33:34
鈴木三紀夫 @mkoszk

テスト設計のとき、同値分割を適用しつつ、別の技法も適用しているのだと思います。僕の場合、同値分割と別の技法の適用時期が同じであるため、混同しているのでしょう。別の技法とはエラー推測やデータモデリングのテクニックなのだと思います。

2011-05-01 21:39:19
鈴木三紀夫 @mkoszk

「処理では考えない」という昼のつぶやきの補足。同値分割は同等の処理を行うと想定されるデータを集めますし、それが前提です。同等の処理かどうかは同等と思われる結果かどうかで判断します。そして僕が意識しているのは、「想定」とか「思われる」というところ。意識の焦点がそこに当たっている感じ

2011-05-01 21:52:58
あきやま🍠 @akiyama924

@m_ku @mkoszk だから、同値分割の目的がデシジョンカバレッジというのには違和感を感じます。

2011-05-02 09:16:06
あきやま🍠 @akiyama924

@m_ku @mkoszk たとえば、身近な例で言うと、コピー枚数を指定する機能があり、それは、1~99枚を指定するものだったとします。同値分割をすると≪1~99枚≫の有効同値クラス1つと、≪0枚以下≫と≪100枚以上≫の無効同値クラスが2つ見つかります。

2011-05-02 09:19:41
あきやま🍠 @akiyama924

@m_ku @mkoszk 私が、そのレビュー会に出ていたとしたら、「コピーのスキャン用メモリバッファは何枚分ある?」と質問し、「A4で20ページ分です」という答えを得たらそこで同値分割するようにアドバイスするでしょう。

2011-05-02 09:22:13
あきやま🍠 @akiyama924

@m_ku @mkoszk 私は、『ソフトウェアテスト技法ドリル』に、「同値分割というのは、入力される可能性があるデータをすべてテストするのはたいへんなので入力をグルーピングしてそれぞれのグループから代表となる値を選びそれだけをテストする方法です」と書きました。

2011-05-02 09:26:13
あきやま🍠 @akiyama924

@m_ku @mkoszk グルーピングの観点の一つとして処理(if文のデシジョンカバレッジ)ももちろんあります。でも、同値分割の主目的がそれかというと違うんじゃないかなぁと思うのです。ブラックボックステスト技法ですし。

2011-05-02 09:27:36
いこま みきお @m_ku

@mkoszk @akiyama924 同値分割の件、私の説明能力不足だと思います。申し訳ありません。@mkoszkさんの『「処理が同じと思えるか否か」で分割する方法だ』という点で@akiyama924さんも同意見であれば、そんなに違うことを言ってないはずだと私は思っています。

2011-05-02 13:19:50
いこま みきお @m_ku

@mkoszk @akiyama924 問題は「処理が同じと思える」ことを、「そういう制御フローがテスト対象にきっと有って、きっと同じところを通るだろう」とする部分が問題です。既存のテスト本はそうなっており、私は有効だと思いますが、他の方法もあり得ます。

2011-05-02 13:20:19
いこま みきお @m_ku

@mkoszk @akiyama924 でも、まず知るべき基本は、「外部仕様からこういう条件分岐がテスト対象に無ければいけないはずだ」とテスタが考えるだと私は思います。こういう主観は同値分割の欠点でもありますが、ホワイトボックスでは摘出困難な「if漏れ」等のバグ摘出には有効です。

2011-05-02 13:21:04
いこま みきお @m_ku

@mkoszk @akiyama924 さんのコピー機の事例は、2年前に私がJaSSTで示したmallocの同値分割事例に似ています。これも、MLの投稿の記述では「同値のはずが同値で無い」に相当し、同値分割の(正統的な)手順を適用するだけじゃ実戦には役に立たない事例だと思います。

2011-05-02 13:21:29
いこま みきお @m_ku

@mkoszk @akiyama924 ただ、この場合(内部処理方法に関係なく)バッファが20枚と分かっているであれば、「20*nに関連した条件分岐があるはずだ」と居駒の示した同じ手順で(正統的な同値分割かどうかは微妙ですが)ましなテスト項目は得られるように思います。

2011-05-02 13:22:05
いこま みきお @m_ku

@mkoszk @akiyama924 テスト識者の皆様:英語のテスト本では"results"と"outputs"は使い分けているように思いますが、これって、ソフトウェアテストの世界で正式な定義があるのでしょうか。日本語だとどちらも「結果」というのも事態紛糾の遠因のような気も。

2011-05-02 13:23:38
いこま みきお @m_ku

@mkoszk @akiyama924 MLでは、理論編と初級者編のつもりで書いたのですが、そういう意味では、swtestの標準的参加者を対象にした説明になっていなかったのかとも反省しています。

2011-05-02 13:25:04
鈴木三紀夫 @mkoszk

@m_ku @akiyama924 期待結果とアウトプットは使い分けをしています。テストケースの構成要素としては期待結果が主に使われます。同値分割の議論ではアウトプットを使っていました。同値分割の議論ではテストケースの構成要素としての期待結果は今まででていないと思います。

2011-05-02 13:36:06
鈴木三紀夫 @mkoszk

@m_ku @akiyama924 僕は「条件分岐が無ければならない」と考えて同値分割を行いません。またテスト教育の観点からも行いません。初心者に「条件分岐」という言葉を使ったら、ホワイトボックステストとの区別が付かないからです。

2011-05-02 13:48:37