同値分割・境界値分析 2値と3値

ブログに書いた内容が間違っていたため、秋山さんに直接教えてもらいました。
4
ネモトノリユキ@ソフトウェアテスト技法練習帳 発売中!! @nemorine

jasst東海のチュートリアルで説明があったものです! QT: ブログを更新しました。 『同値分割 2値の選択と3値の選択』 http://t.co/Qiyyw3Ru

2012-12-01 21:50:52
あきやま🍠 @akiyama924

解説が間違っているので書き直したほうが良いです。境界値の3値は、この問題では{0, 1, 2}と、{299, 300, 301}です。そして、(x >=1)を(X == 1)と書き間違えた時に0で無効、1で有効となることが2値の問題。http://t.co/QOpLOnc6

2012-12-02 06:02:07
ネモトノリユキ@ソフトウェアテスト技法練習帳 発売中!! @nemorine

ありがとうございます!もう一回考えて書き直します。@akiyama924 QT: 解説が間違っているので書き直したほうが良いです。境界値の3値は、この問題では{0, 1, 2}と、{299, 300, 301}です。そして、(x >=1)を(X == 1)と…

2012-12-02 09:06:34
ネモトノリユキ@ソフトウェアテスト技法練習帳 発売中!! @nemorine

マジっすか!!もう一回やり直しますm(_ _)m @akiyama924 QT: @nemorine まだ違います。(^_^;)

2012-12-02 11:37:56
あきやま🍠 @akiyama924

@nemorine まず、境界値を3値とるときには、仕様書に書かれている境界値(これをOnポイントと呼びます)の前後の値を取ります。そして、Onポイント(この例では、1と300)を使ってプログラミングはされるだろうという前提を置きます。

2012-12-02 11:21:50
あきやま🍠 @akiyama924

@nemorine この問題(入力の値が1~300の整数値)であれば、 if ((x >= 1) && (x <= 300)) {   処理A; } else {   処理B; } といったコードを仮定するわけです(改行しないTwitter環境でしたらごめんなさい)。

2012-12-02 11:24:29
あきやま🍠 @akiyama924

@nemorine この時に、ほとんどの問題はOnポイントとOffポイント(境界を挟んでOnポイントに最も近い値)で見つけることができます。0(On)と1(Off)、300(On)と301(Off)です。これが境界値を2つ取るBeizer方式でJSTQBもこちらで説明しています。

2012-12-02 11:28:34
あきやま🍠 @akiyama924

@nemorine 先ほどのif文の条件判定において、前半の「>=」を「>」や「<=」や「<」に書き間違えたり、後半の「<=」を「<」や「>=」や「>」に書き間違えたケースはBeizerの2値方式で、 xに{0, 1, 300, 301}をセットしてテストすることで見つかります。

2012-12-02 11:33:02
あきやま🍠 @akiyama924

@nemorine でも、前半の「>=」や後半の「<=」を「==」に書き間違えたケースはBeizerの2値方式では見つかりません。Beizerは、それを見つけたければ有効同値(Inポイント)を一つ追加して{0, 1, 150, 300, 301}のテストをしなさいと言っています。

2012-12-02 11:35:46
あきやま🍠 @akiyama924

@nemorine Beizerの方法とは別に、仕様書に書かれたOnポイントの前後を加えた3つのポイントでテストするJorgensenの方法(英国標準BS 7925-2で採用)があります。先ほどの例では、{0, 1, 2, 299, 300, 301}を選択することになります。

2012-12-02 11:39:19
あきやま🍠 @akiyama924

@nemorine この{0, 1, 2, 299, 300, 301}をテストデータ(xへ代入する値)に選べば、「<」、「<=」、「>=」、「>」のそれぞれを、「==」に書き間違えたバグを見つけることができます。

2012-12-02 11:45:26
あきやま🍠 @akiyama924

@nemorine 3値のメリットは、テストデータの選択ミスがなくなることと、「==」への書き間違えバグを見つけることができる点です。特に、設計者自身がテスト設計する場合は前者が重要です(同じミスを犯すことを防ぐから)。 デメリットは、テストケースが4つから6つに増えることです。

2012-12-02 11:48:38
あきやま🍠 @akiyama924

@nemorine では、どちらを使うか? ですが、私は、開発者本人が行うコンポーネントテストでは3値が良いと思っています(コーディングとテストで同じ間違えを犯すことを救うため)。第三者がテストする際には仕様をきちんと読み直し2値で実施するのが良いと思っています。

2012-12-02 11:59:11
鈴木三紀夫 @mkoszk

@akiyama924 @nemorine 僕の場合は、レビューのし易さを考えて選びました。

2012-12-03 09:09:51
ネモトノリユキ@ソフトウェアテスト技法練習帳 発売中!! @nemorine

なるほどです。自分は、コードの前提条件が違いました。onポイントを使う実装と使わない実装も考えていました。そうすると、4値じゃないかと思ってみたり。でも、仮定を置いて、onポイントの前後なので3値なのですね!また後で書き直します! ありがとうございました @akiyama924

2012-12-02 12:20:14
ネモトノリユキ@ソフトウェアテスト技法練習帳 発売中!! @nemorine

秋山さん、遅くなりました。再度修正しました。m(_ _)m @akiyama924 QT: 解説が間違っているので書き直したほうが良いです。http://t.co/tEbTOMtK

2012-12-02 22:14:25
あきやま🍠 @akiyama924

@nemorine だいたいOKですが、「 境界に一番近い有効な値(on)とonに一番近い無効な値(off)」というのは誤りです。 有効値・無効値と、On・Offは無関係です。あくまでも仕様に書いてある値がOnです。

2012-12-02 22:39:43
あきやま🍠 @akiyama924

@nemorine この問題を「1以上、301より小さな整数」とした場合、Onポイントは、(文章にある)1と301になりますが、301は無効値です。Offポイントの300が有効値です。

2012-12-02 22:43:54
ネモトノリユキ@ソフトウェアテスト技法練習帳 発売中!! @nemorine

うむーなるほどです。仕様に書いてある値がonなのですね。一番端の有効な値=onだと思ってました。 @akiyama924 QT: @nemorine この問題を「1以上、301より小さな整数」とした場合、Onポイントは、(文章にある)1と301になりますが、301は無効値です。

2012-12-02 22:59:37
ネモトノリユキ@ソフトウェアテスト技法練習帳 発売中!! @nemorine

@akiyama924 「1以上、301より小さな整数」の場合、・・・」ではコードはif (x >= 1 && x < 301)となっていると仮定して、3値の場合で上の方は 300(in), 301(on), 302(off)を選択するということで合ってるでしょうか?

2012-12-02 23:06:19
あきやま🍠 @akiyama924

@nemorine 違います。300(Off), 301(On), 302(Out)です。300と301の間に境界がありますよね。

2012-12-03 06:22:00
ネモトノリユキ@ソフトウェアテスト技法練習帳 発売中!! @nemorine

ありがとうございます。自分はon, off, in, outのイメージが間違っていました。。。秋山さんのJaSST11四国の資料を参考にさせていただきました。COOOOI m(__)m @akiyama924

2012-12-03 09:02:37
ゆにまる @Unity1004

@nemorine @akiyama924 横からすみません。Onポイントを意識する理由は、2値でテストする場合にどちらの隣の値を選択するのかを把握するためでしょうか?

2012-12-02 23:06:04