見出し画像

第267回: 「ALTAのテキストをつくろう」27 (境界値分析/中編)

◀前の記事へ 次の記事へ▶


≡ はじめに

前回は、「3. テスト技法」の「3.2 ブラックボックステスト技法」の「3.2.2 境界値分析」の前編として、「境界値分析の定義」(おもに境界値そのもの)について書きました。

前回の復習は以下で模擬試験問題の確認を通して行います。
今回はJSTQBのALTAシラバスの「3.2.2 境界値分析」の中編として、境界値分析をおこなうときに役に立つ知識である「適用、制限/注意事項」について書きます。



≡ 前回の復習

以下は前回出題したJSTQB ALTAの模擬試験問題を𝕏にポストした結果です。


𝕏によるアンケート結果

投票の結果、4の「0と1と100と101」が59%と最も多かったのですが、正解は2です。30.8%なのでちょっと低めです。

図を描いてみます。

「1≦x≦100」の境界値分析結果

「1≦x≦100」の数値(整数)という条件の同値分割結果は、
 ① 無効同値パーティション1: 0以下
 ② 有効同値パーティション1: 1以上100以下
 ③ 無効同値パーティション2: 101以上
の3つのパーティションに分かれます。

設問は「同値パーティション「1≦x≦100」の【境界値】はどれか」です。図の②の境界値についてです。

境界値の定義は、

ISTQB用語集より

です。

ここから、「同値パーティション「1≦x≦100」の【境界値】」は、最大値の100と最小値の1となります。(上の図では、目立つように黄色くしています)

それでは、なぜ選択肢4の「0と1と100と101」を選んだ人が一番多かったのでしょうか。

おそらく【境界値】ではなく【境界値分析をした結果、同値パーティション「1≦x≦100」に対してテストをする対象となる値(ローレベルテスト条件)】を選択してしまったからと思われます。
シラバスで言うと以下の個所です。

2つの値を用いる境界のテストでは、境界値(境界上)と境界を少し超えた値(必要な精度に基づいた可能な限り最小の増加分)を使用する。

ALTAシラバスp. 34

上記の太字の個所、「境界値(境界上)と境界を少し超えた値」の「境界値」は1と100、「境界を少し超えた値」は0と101ですから、この4つの数値を小さい順に並べると、選択肢4となります。

「ひっかけ問題」ではありません。
「境界値」を指し示すことが境界値分析の基本なので出題される可能性があります。

さて、復習は以上とし、今回のnoteのテーマである「境界値分析の適用、制限/注意事項義」に移ります。



≡ 境界値分析の適用、制限/注意事項

JSTQBのALTAシラバスの境界値分析の解説を続けます。

■ 境界値分析の適用

簡単に言えば、境界値分析で見つけた「テスト対象の値」は、「順序付けられた同値パーティションの境界値(同値パーティションの最大値と最小値)」です。図で説明します。

「1≦x≦100」の境界値分析結果

「1≦x≦100」の数値(整数)という条件を同値分割した結果、①、②、③の3つの順序付けられた同値パーティションが見つかりました。①、②、③それぞれの境界値(最小値と最大値)は以下の通りです。

 ① 無効同値パーティション1: 最小値:不明、最大値:0
 ② 有効同値パーティション1: 最小値:1、最大値:100
 ③ 無効同値パーティション2: 最小値:101、最大値:不明

したがって、上記の分析結果に従って識別できた境界値{0, 1, 100, 101}をテストします。これが境界値分析です。

同値パーティション①の最小値や、同値パーティション③の最大値をテストしてもよいけれど、無効同値パーティションなので、優先度は低いです。

①の最小値と③の最大値ですが、プログラム上の変数xの大きさの制約から識別することがあります。

仮に変数xが、ソースコード上で1バイト(8ビット)で符号付きと型宣言された変数なら、変数xには「-128≦x≦127」の範囲の整数値を格納できます。
そこで、①の最小値としてー128、③の最大値として+127をテストします。
このとき、さらに、プログラム上の変数xが取りうる境界値を少し超えた値として「-129」と「+128」をテストしてもよいですが、今度は「-129」や「+128」を含む同値パーティションを考えると、、、マトリョーシカのようにキリがありません。(マトリョーシカはキリがあるか……。)

※ キリがないので、通常、無効同値パーティションの境界値は有効同値パーティションに隣接した値を1つだけテストすれば十分と思います。

既述の「境界値をテストする」が基本なのですが、境界値を探す手間を軽くするために、ALTAのシラバスでは、「2つの値を用いる方法と3つの値を用いる方法」が紹介されています。この楽をする方法を“境界値分析”と呼びます。

・ 2つの値を用いる方法

こちらは前回の問題の解説のなかで説明したものです。「(順序付けられた値を持つ同値パーティションの)境界値と境界を少し超えた値の2つの値」をテストする方法です。

「1≦x≦100」という同値パーティションであれば、「1という境界値と、1を少し超えた0」と「100という境界値と、100を少し超えた101」をテストします。

図で確認します。
同値パーティション②に着目して②の分析をします。
そうすれば、②の同値パーティションに隣接する同値パーティションの境界値の0と101が見つかるということです。

2つの値を用いる方法

1つの境界値に対して「境界値と境界を少し超えた値」の2つのテストすべき値を識別してテストするので、こちらの手法を「2つの値を用いる方法」と呼びます。

※ 境界値分析では、特に断りがなければ、2つの値を用いる方法を使います。


・ 3つの値を用いる方法

こちらは「境界上、および境界の前後の値の合わせて3つの値」をテストする方法です。図で確認しましょう。

3つの値を用いる方法

「1≦x≦100」という同値パーティションであれば、「1という境界値とその前後の0と2」と「100という境界値とその前後の99と101」をテストします。

1つの境界値に対して「境界値と境界値の前後」の計3つをテストするので、「3つの値を用いる方法」と呼びます。

補足(ALTA受験者は読まないほうが良いかも)

ALTAシラバスの説明は上記の通りなのですが、「3つの値を用いる方法」のほうは、説明が足りないように思います。
というのは、下図をみてほしいのですが、無効同値パーティションの境界値(0と101)の前後を取ると{-1, 0, 1, 2, 99, 100, 101, 102}となりますので、この方法では8個の値をテストしなければならないと誤解を与えそうだからです。

そもそも、境界値分析の目的は、境界値をテストすることです。従って、「2つの値を用いる方法」で十分です。
「3つの値を用いる方法」について、シラバスでは、「リスクの高いアイテムに対しては3つの値を用いる方法を使用する」と書いてありますが、それは違います。
テスト設計者が、境界値を正しく選べている自信がない場合に3つの値を用いる方法を使用します。そして「境界値と境界値の前後の値」ではなく「OnポイントとOnポイントの前後の値」をテストします。「Onポイント」とは仕様書や設計書に現れている値のことです。「1≦x≦100」なら1と100です。(無効同値パーティションの境界値である0や101は仕様に書かれていないことに注意してください)
こうすることで、必ず、境界値含む値をテストできます。

「1<x<100」で確認してみます。Onポイントは1と100ですから、その前後を取って{0, 1, 2, 99, 100, 101}をテストします。図で確認します。

「1<x<100」の境界値分析

同値パーティション①②③の境界値、{1, 2, 99, 100}が含まれています。ということで、「OnポイントとOnポイントの前後の値」をテストすれば必ず、境界値をテストします。

ここで、同値パーティション「1<x<100」のOnポイントである「1」と「100」は、同値パーティション「1<x<100」の境界値ではないことに注意してください。
「1」は、隣接している(無効)同値パーティション「x≦1」の境界値です。ややこしいけれど大切なポイントなので一度は納得することが大切です。

以上のことから「3つの値を用いる方法」は、「境界値をテストしないという失敗を防ぐ方法」と言えます。

これが、「3つの値を用いる方法」のメリットです。(また、Onポイントの前後をとる方法では、1つの有効同値パーティションに対して8つもテストすることはありません)


■ 境界値分析の制限/注意事項

シラバスには以下の記載があります。

この技法の正確性は、境界を正しく識別するために同値パーティションの正確な識別に依存するので、EPと同じ制限と注意事項の対象となる。

ALTAシラバスより

同値分割法が正しく適用できて、順序を持った同値パーティションが見つかったら、あとは最小値と最大値を選ぶだけなので、同値分割法と同じ制限と注意事項となるということです。

同値分割法の制限/注意事項で大切なことは、以下の通りでした。

【同値分割法を適用するテスト対象】は「処理」です。
つまり、「処理ごとに最低1回はテストしようじゃないか!」というのが同値分割法です。

同値分割法の復習

そこで、境界値分析でも「処理」に着目し、処理が切り替わるところのテストをしようという考えを持つことが大切です。

この点については、高橋寿一さんも『知識ゼロから学ぶソフトウェアテスト-第3版-』で境界値分析をして選ばれる境界値について以下のようにスッキリとまとめています。

異なる処理が行われる一番近い2地点

『知識ゼロから学ぶソフトウェアテスト』39ページ

このように大切なことを簡潔に書いているので、『知識ゼロから学ぶソフトウェアテスト』はソフトウェアテストの入門書として最適です。



≡ JSTQB ALTA試験対策

いつものことですが、まずは、「学習の目的」を確認します。

TA-3.2.2 (K4)境界値分析を適用して、特定の仕様アイテムを分析しテストケースを設計する。

「K4」なので「理解」して「適用」できるだけではなく「分析」まで求められる重要な項目ということです。試験問題には、境界値分析を適用した結果のテストケースのカバレッジを問う問題が出ると思います。

《問題》
 整数xが「1≦x≦100」の同値パーティションを持つとき、3つの値を用いる方法による境界値分析によって、識別した【テスト対象の値】はどれか。

1. 「1と50と100」
2. 「0と1と100と101」
3. 「0と1と2と、99と100と101」
4. 「-1と0と1と、100と101と102」

答えは次回に書きます。



≡  おわりに

今回は、「境界値分析の適用、制限/注意事項」がテーマでした。シラバスには、今回のnoteの他に、“境界値分析はどこに使うことができるのか”といったことも書いてあるのですが、順序がある同値パーティションであれば、どこにでも使えます。もう少し適用先別に具体的な注意点が書いてあればいいのになと思いました。

ループ境界の話は次回書きます。

以下は、『ソフトウェアテスト技法練習帳』のサンプルページのコピペです。

問題
解答

このように、同値分割法と境界値分析は、別々に行うのではなくセットで実施して、テストケースをつくるのが良いと思います。
上記解答は同値パーティションの境界値(上限と下限)および代表値(同値パーティションの代表となる値)をテスト対象としていて、とても分かりやすいものです。

次回は、「3.2.2 境界値分析」の後編として、「カバレッジ、検出できる欠陥の種類」について書きます。

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