Slide 1

Slide 1 text

同値分割&境界値分析と その難しさについて考えてみた Ver.2 ※JaSST'18 Kyushu講演資料「ワークを通してじっくり考える同値分割&境界値分析」を更新した資料です 井芹 久美子 1 JaSST'18 Kyushu

Slide 2

Slide 2 text

本書について/最新Ver.の主な変更点 本資料は、もともとJaSST‘18 Kyushuの講演資料でした。 しかし、講演を聞かなくても、同値分割&境界値分析の学習資料としてお使いいただける内容に なっていると思っています(ワークは以前から公開の対象外です)。 2022年春に更新してVer.2としました。 [最新Ver.の主な変更点] • タイトルを「ワークを通してじっくり考える同値分割&境界値分析」から、 「同値分割&境界値分析の解説とその難しさについて考えてみた」に変更 • JSTQBのテスト技術者資格制度 Foundation Level シラバス Version 2018V3.1.J03にあわせて、 「同値クラス」を「同値パーティション」に変更 • 「同値分割の手順」の現在の1番を追加。暗黙の手順を明文化するため • 「境界値分析の手順 > 補足」を見直し • 「同値パーティションをどう見つけるか?」のページの白字部分について、文章表現を一部変更 • 「テストの目的の曖昧さ」に「値だけで同じ同値パーティションに属するか判断することはできない」のページを追加 • フォントを変更 • ワークのページを削除 • 「本書について/最新Ver.の主な変更点」のページ(本ページ)を追加 JaSST'18 Kyushu 2

Slide 3

Slide 3 text

自己紹介 • JSTQB技術委員 • JSTQBは、ソフトウェアテスト技術者資格認定の運営組織 http://jstqb.jp/index.html • ほか、ソフトウェア関係の勉強会での登壇や コミュニティ参加など • 過去にはWACATE実行委員会にも 3 JaSST'18 Kyushu

Slide 4

Slide 4 text

このあたりのお話をします • 図は、参考文献[01]を参考に作成 • 組織によって名前が違うかもしれません 計画 分析 設計 実装 実行 終了基準 の評価と レポート 終了作業 計画 テスト ケース 作成 テスト 手順作成 実行 結果の 評価と 報告 引き継ぎ 4 JaSST'18 Kyushu

Slide 5

Slide 5 text

テーマ/持ち帰っていただきたいこと • テスト(設計)技法の「同値分割」「境界値分析」 • 特徴と使い方 • 活用時にぶつかる問題 5 JaSST'18 Kyushu

Slide 6

Slide 6 text

今日お話しすること • 同値分割、境界値分析の特徴 • 同値分割とは? • 境界値分析とは? • 同値分割や境界値分析の活用時にぶつかる問題 6 JaSST'18 Kyushu

Slide 7

Slide 7 text

同値分割、境界値分析の特徴 • 同値分割、境界値分析は、テスト(設計)技法のひとつ • 何を元にテストを考える? • どんなテストで使える? • どんなことができる? • 同値分割と境界値分析の関係は? 7 JaSST'18 Kyushu

Slide 8

Slide 8 text

同値分割、境界値分析の特徴 • 何を元にテストを考える? • 仕様の分析からテストのケースやデータを考える技法 • ソフトウェア、プログラムの構造を必ずしも使用しない。 8 ホワイトボックス テスト設計技法 (構造ベースの技法) ブラックボックス テスト設計技法 (仕様ベースの技法) JaSST'18 Kyushu

Slide 9

Slide 9 text

• どんなテストで使える? 複数のシステムを統合 同値分割、境界値分析とは? 9 システム単位 複数のコンポーネントを統合 コンポーネント単位 JaSST'18 Kyushu

Slide 10

Slide 10 text

同値分割、境界値分析とは? • どんなことができる? 10 同値分割 テストケースを 合理的に減らす 境界値分析 バグが潜みやすい所(境界)を 狙い撃つ JaSST'18 Kyushu

Slide 11

Slide 11 text

同値分割と境界値分析の関係は? • 同値分割と境界値分析の関係は? • 境界値分析では、同値分割の結果を使う • 同値分割だけでは、バグを見つけにくいことがある 11 同値分割 境界値分析 JaSST'18 Kyushu

Slide 12

Slide 12 text

今日お話しすること • 同値分割、境界値分析の特徴 • 同値分割とは? • 境界値分析とは? • 同値分割や境界値分析の活用時にぶつかる問題 12 JaSST'18 Kyushu

Slide 13

Slide 13 text

同値分割 • 同値分割とは? • 見つけたいバグについて結果が同じになる値同士を 同値とみなしてグループ(同値パーティション)にする • ある値を入力してバグを見つかったとすると、 同じグループに属する他の値を入力した場合でも同じバグが見つかるはず • ある値を入力してバグが見つからなかったとすると、 同じグループに属する他の値を入力した場合でもバグが見つからないはず • 入力値だけでなく、出力結果や状態などにも適用可能 13 JaSST'18 Kyushu

Slide 14

Slide 14 text

同値分割の手順 1. どの値に同値分割を適用するか考える 2. 同値とみなせる値ごとにグループ(同値パーティション)に 分ける 3. グループごとに、テストに使う値を選択する 14 JaSST'18 Kyushu

Slide 15

Slide 15 text

同値分割の手順 • 例題 買い物サイトの商品の個数入力についてテストを行う 1. どの値に同値分割を適用するか考える • 今回テストしたいのは有効性、割引券発行有無の判定の正しさ これらは指定された個数に左右されるため、個数に適用する 個数として有効なのは、1以上100未満の値です。 その他の値を指定するとエラーになります。 50個以上の場合は、次回使える1割引の割引券が発行されます。 入力された数値の、有効性と割引券発行有無について、 正しく判定できていることをテストしましょう。 15 JaSST'18 Kyushu

Slide 16

Slide 16 text

同値分割の手順 2. 同値とみなせる値ごとにグループ(同値パーティション)に分ける • どんなグループ? • ある値を入力してバグが見つかったとすると、 同じグループに属する他の値を入力した場合でも同じバグが見つかるはず • ある値を入力してバグが見つからなかったとすると、 同じグループに属する他の値を入力した場合でもバグが見つからないはず 個数として有効なのは、1以上100未満の値です。 その他の値を指定するとエラーになります。 50個以上の場合は、次回使える1割引の割引券が発行されます。 入力された数値の、有効性と割引券発行有無について、 正しく判定できていることをテストしましょう。 16 JaSST'18 Kyushu

Slide 17

Slide 17 text

同値分割の手順 • グループ化の注意点 • まずは有効同値パーティションと無効同値パーティションに分ける • 更にグループを分ける必要があれば、細分化する • 数直線を書いて考える • 仕様に登場した値同士の関係性が確認しやすくなる • 抜け漏れがチェックしやすくなる 17 JaSST'18 Kyushu

Slide 18

Slide 18 text

•有効同値パーティションと無効同値パーティションに 分ける •有効同値パーティション 有効な値、目的の動作につながる値のグループ •無効同値パーティション 無効な値、目的の動作につながらない値のグループ 有効同値パーティションは、 エラーにならず買い物を続けられる値のグループ 同値分割の手順 18 JaSST'18 Kyushu

Slide 19

Slide 19 text

有効同値パーティションは更に細分化できそう 1〜99の値を1グループにすると、 割引券発行有無が正しく判定されないバグを見逃すかもしれない 同値分割の手順 100 1 0 99 19 無効同値パーティション 有効同値パーティション 無効同値パーティション 個数として有効なのは、1以上100未満の値です。 その他の値を指定するとエラーになります。(略) JaSST'18 Kyushu

Slide 20

Slide 20 text

同値分割の手順 •他の同値パーティションを見つける 50 100 1 0 99 49 個数として有効なのは、1以上100未満の値です。 その他の値を指定するとエラーになります。 50個以上の場合は、次回使える1割引の割引券が発行されます。 (略) 20 無効同値 パーティション (小さすぎ) 有効同値 パーティション (割引券なし) 無効同値 パーティション (大きすぎ) 有効同値 パーティション (割引券あり) JaSST'18 Kyushu

Slide 21

Slide 21 text

同値分割の手順 3. グループごとに、テストに使う値を選択する • 無効同値(小さすぎる値):〜0 → 0 • 有効同値(割引券なし) :1〜49 → 30 • 有効同値(割引券あり) :50〜99 → 80 • 無効同値(大きすぎる値):100〜 → 120 21 JaSST'18 Kyushu

Slide 22

Slide 22 text

同値分割の手順 • 同値分割を使ったテスト • 個数に0を指定する • 個数に30を指定する • 個数に80を指定する • 個数に120を指定する • 値を1つずつテスト • 個数に0を指定する • 個数に1を指定する • 個数に2を指定する • 個数に3を指定する • … 22 99回 より 多 4回 同値分割を使わず 1値ずつテストすると… 同値分割を使うと… JaSST'18 Kyushu

Slide 23

Slide 23 text

同値分割の手順 > 補足3点:その1 • 配送先のテストも実施する場合 個数として有効なのは、1以上100未満の値です。 その他の値を指定するとエラーになります。 50個以上の場合は、次回使える1割引の割引券が発行されます。 配送先の数を指定する欄があります。 1以上7以下が有効で、その他の値を指定するとエラーになります。 8 1 0 7 23 無効同値パーティション 有効同値パーティション 無効同値パーティション JaSST'18 Kyushu

Slide 24

Slide 24 text

同値分割の手順 > 補足3点:その1 • 個数の同値分割結果 • 無効同値(小さすぎる値): 〜0 • 有効同値(クーポンなし): 1〜49 • 有効同値(クーポンあり): 50〜99 • 無効同値(大きすぎる値): 100〜 • 配送先の数の同値分割結果 • 無効同値(小さすぎる値): 〜0 • 有効同値 : 1〜5 • 無効同値(大きすぎる値): 6〜 個数と配送先を 組合せて テストすると? 24 JaSST'18 Kyushu

Slide 25

Slide 25 text

同値分割の手順 > 補足3点:その1 • 有効同値パーティション同士を組合わせてテストするのはOK • ○例 • 個数 30 …有効同値(クーポンなし) • 配送先の数 3 …有効同値 • 無効同値パーティション同士を組合わせてテストするのはNG 期待通りエラーが出力されても、どちらが要因か不明 • ×例 • 個数 200 …無効同値 • 配送先の数 0 …無効同値 25 JaSST'18 Kyushu

Slide 26

Slide 26 text

同値分割の手順 > 補足3点:その2 • 同値分割してみましょう。 • どんな数直線が書けるでしょう? 体重管理アプリのテストを依頼されました。 体重として登録できる値は、10Kg以上800Kg以下です。 その他の値を指定するとエラーになります。 26 JaSST'18 Kyushu

Slide 27

Slide 27 text

同値分割の手順 > 補足3点:その2 • どちらが正解? • 最小単位=1kgで考える • 最小単位=0.1kgで考える場合 801 10 9 800 800.1 10.0 9.9 800.0 27 JaSST'18 Kyushu 無効同値パーティション 有効同値パーティション 無効同値パーティション

Slide 28

Slide 28 text

同値分割の手順 > 補足3点:その3 • 数直線は必要? • 値同士の関係性や抜け漏れを確認しやすい • 重なりがないことの確認 • 大小関係の確認 • 途切れている部分がないことの確認 • オイラー図(ベン図)のように図示するのも有効 28 普通 買い物サイト会員種類 プレミアム JaSST'18 Kyushu

Slide 29

Slide 29 text

同値分割の手順 1. どの値に同値分割を適用するか考える • 何をテストしたいか、どのようなテストをしたいかに基づいて考える 2. 同値とみなせる値ごとにグループ(同値パーティション)に分ける • 単位を確認する • 同値パーティションを見つける • 有効同値、無効同値を見つける • その他の同値パーティションを見つける • 数直線や図を書いて、同値分割を行う 3. グループごとに、テストに使う値を選択する 29 JaSST'18 Kyushu

Slide 30

Slide 30 text

今日お話しすること • 同値分割、境界値分析の特徴 • 同値分割とは? • 境界値分析とは? • 同値分割や境界値分析の活用時にぶつかる問題 30 JaSST'18 Kyushu

Slide 31

Slide 31 text

境界値分析 • 境界値分析とは? • 同値分割で分けたグループ同士の境界を狙う • 境界は、問題が起きやすい • 不等号の向きを間違える 1以上を有効にすべきなのに、逆だと勘違いして1以上を無効としてしまった • 境界を間違える 799.9gまで有効にすべきなのに、799.0gまで有効としてしまった • 同値分割対象の値同士に順序がある場合に適用しやすい 31 JaSST'18 Kyushu

Slide 32

Slide 32 text

境界値分析の手順 1. 同値分割する 2. 同値パーティション同士の境界をテストする 32 JaSST'18 Kyushu

Slide 33

Slide 33 text

境界値分析の手順 • テスト対象の値 0、1、7、8 33 配送先の数を指定する欄があります。 1以上7以下が有効で、その他の値を指定するとエラーになります。 8 1 0 7 無効同値パーティション 有効同値パーティション 無効同値パーティション JaSST'18 Kyushu

Slide 34

Slide 34 text

境界値分析の手順 > 補足 • 疑問:誤りをどう検出するか? • 配送先が1と7のとき「だけ」有効と判定していた JaSST'18 Kyushu 34 8 1 0 7 2 6 3 4 5 有効同値パーティションなのに 誤って無効な値と判定されていた

Slide 35

Slide 35 text

境界値分析の手順 > 補足 • 方法1 1つの境界に2つの境界値を識別する方法に、代表的な値(よく使う値) を追加する 解答例 0、1、3、7、8 • 方法2 1つの境界値に3つの値を識別する方法を適用する • 解答例 0、1、2、6、7、8 JaSST'18 Kyushu 35 8 1 0 7 3 8 1 0 7 2 6

Slide 36

Slide 36 text

境界値分析の手順 > 補足 • 境界値分析には1つの境界に2つの境界値を識別する方法と3つ の境界値を識別する方法がある • テストのコストと、テストで低減したいリスクのバランスで判断する • よく使う値で問題が起きないことを確認しておきたいことは 多い • 境界値分析の結果と代表値でテストする考え方もある 36 JaSST'18 Kyushu

Slide 37

Slide 37 text

今日お話しすること • 同値分割、境界値分析の特徴 • 同値分割とは? • 境界値分析とは? • 同値分割や境界値分析の活用時にぶつかる問題 37 JaSST'18 Kyushu

Slide 38

Slide 38 text

勉強会 シンプルな仕様が多い 必要なことが不足なく書かれている仕様が多い 現実は? 実際のソフトウェア開発では 同値分割と境界値分析の活用が難しいこともある 同値パーティションをどう見つけるか? 38 JaSST'18 Kyushu

Slide 39

Slide 39 text

同値分割や境界値分析の活用時にぶつかる問題 • テストの目的の曖昧さ • 自然言語の曖昧さ • ソフトウェアの利用場面の多様さ • 実装上の制約 39 JaSST'18 Kyushu

Slide 40

Slide 40 text

同値分割や境界値分析の活用時にぶつかる問題 • テストの目的の曖昧さ • テストで確認したいことが曖昧な場合 • 同値分割してみると? 40 JaSST'18 Kyushu ある買い物サイトで特定の操作をすると、会員限定でポイントを付与する。 会員にはシルバー、ゴールド、プラチナ、ダイヤモンドの4種類がある。 ゴールド、プラチナ、ダイヤモンド会員はシルバー会員に比べて、 付与ポイントがそれぞれ1.1倍、1.3倍、1.5倍になる。

Slide 41

Slide 41 text

同値分割や境界値分析の活用時にぶつかる問題 • テストの目的の曖昧さ • 同値分割すると? • 非会員、シルバー会員、ゴールド会員、プラチナ会員、ダイヤモンド会員 …付与ポイント数の違いをテストしたい場合はこちら • 非会員、会員 …付与ポイント数は問わず、付与の有無をテストしたい場合は、こちらで十分 • ズームイン、ズームアウト ある買い物サイトで特定の操作をすると、会員限定でポイントを付与する。 会員にはシルバー、ゴールド、プラチナ、ダイヤモンドの4種類がある。 ゴールド、プラチナ、ダイヤモンド会員はシルバー会員に比べて、 付与ポイントがそれぞれ1.1倍、1.3倍、1.5倍になる。 41 JaSST'18 Kyushu

Slide 42

Slide 42 text

同値分割や境界値分析の活用時にぶつかる問題 • テストの目的の曖昧さ • 値だけで同じ同値パーティションに属するか判断することはできない • ある同値パーティションに属する値は、特定の関係においては、 その同値パーティションに属する他のどの値とも等しいと言える • 参考:参考文献[12] 337ページ • どのような関係をテストしたいのか、も明らかにする必要がある • 西暦を入力する欄において、800と1000は同じ同値パーティションに属するか? • 入力された西暦がそのまま表示される画面において、 桁数が変わっても見切れなく表示されることを確認するなら、No • それぞれ、3桁の同値パーティションと4桁の同値パーティションに属する • 入力された西暦が日本史の何時代にあたるかを判定して出力する処理の判定の 正しさを確認するなら、Yes • 800年も1000年も出力が「平安時代」ならば同値パーティションと言える JaSST'18 Kyushu 42

Slide 43

Slide 43 text

同値分割や境界値分析の活用時にぶつかる問題 • 自然言語の曖昧さ • 背景によりスコープが変わる • 「入力値が数字ならば有効」ー 「数字」とは? • 負の数は? • 小数点以下は? • 対数表記は? 例:1.23E+11 • 先頭に0がついた「01」「09」などは? • 具体的に見えても注意 • 「毎年2/28に処理する」ー 閏年の場合は? • 毎月最終日に処理をするのか、毎月決まった日(28日)に処理をするのか 43 JaSST'18 Kyushu

Slide 44

Slide 44 text

同値分割や境界値分析の活用時にぶつかる問題 • ソフトウェアの利用場面の多様さ • 国や地域 • 電話番号は何桁? ー 海外にかける場合は? • 時代 • 郵便番号は何桁? ー 7桁より少ない値は考慮不要? • 用途、種類 • 体温を管理したい。小数点は第何位まで? ー小数点第1位までの体温計もあるし、小数点第2位まで測れる体温計もある 44 JaSST'18 Kyushu

Slide 45

Slide 45 text

同値分割や境界値分析の活用時にぶつかる問題 •実装上の制約 • 変数の型の制約 Javaのint型で扱えるのは -2,147,483,648 ~ 2,147,483,647 • 2038年問題 ある時点から時刻データを正しく扱えなくなる問題 • 日本語1文字は2バイト? Shift_JISとUTF-8で異なる 45 JaSST'18 Kyushu

Slide 46

Slide 46 text

同値分割や境界値分析の活用時にぶつかる問題には、視野を広げ対処する • テストの目的 • 何を確認したいのか? 何のために行うテストか? 理解する • テストの周辺のアクティビティ • 仕様の意図や背景を理解する • プログラムや環境の制約について学ぶ • 経験 • 類似のソフトウェアやその利用体験、バグの知識を活用する • 仲間と知見を共有する 同値分割、境界値分析の活用時、 目の前のテストケース作成以外にも意識を向ける。 46 JaSST'18 Kyushu

Slide 47

Slide 47 text

テスト ということで… 計画 分析 設計 実装 … 47 JaSST'18 Kyushu

Slide 48

Slide 48 text

テスト ということで… 計画 分析 設計 実装 … 48 要求 定義 設計 プログ ラミン グ … 利用 … … JaSST'18 Kyushu

Slide 49

Slide 49 text

おわりに • 「同値分割」「境界値分析」をテーマに、お話ししました。 • 特徴と使い方 • 活用時にぶつかる問題 • 同値分割、境界値分析は 使える場面が多く、 強力で、 一人での実践や勉強がしやすい 技法です。 活用して、良いテストにつなげていただければ、嬉しいです。 49 JaSST'18 Kyushu

Slide 50

Slide 50 text

参考文献 • [01] ISTQBテスト技術者資格制度 Foundation Level シラバス 日本語版 Version 2011.J02 http://jstqb.jp/dl/JSTQB-SyllabusFoundation_Version2011.J02.pdf • [02] ISTQBテスト技術者資格制度 Advanced Level シラバス 日本語版 テストアナリスト Version2012.J01 http://jstqb.jp/dl/JSTQB-Syllabus.Advanced_TA_Version2012.J01.pdf • [03] ソフトウェアテスト標準用語集 日本語版 Version 2.3.J02 http://jstqb.jp/dl/JSTQB-glossary.V2.3.J02.pdf • [04] JaSST ’11 Shikoku 実践!同値分割と境界値分析とドメイン分析 http://jasst.jp/archives/jasst11t/pdf/s2-1.pdf http://jasst.jp/archives/jasst11t/pdf/s2-2.pdf • [05] 事例とツールで学ぶHAYST法―ソフトウェアテストの考え方と上達のポイント, 秋山 浩一 (著), 日科技連出版社 (2014) • [06] ソフトウェアテスト技法ドリル―テスト設計の考え方と実際, 秋山 浩一 (著),日科技連出版社 (2010) • [07] ソフトウェアテスト実践ワークブック, レックス・ブラック (著), 成田 光彰 (翻訳), 日経BP社 (2007/1/18) • [09] テスト設計技法を活用する https://thinkit.co.jp/article/15366 • [08] はじめて学ぶソフトウェアのテスト技法, リー・コープランド (著), 宗 雅彦 (翻訳),日経BP社 (2005) • [10] 秋山浩一のソフトウェアテスト技法ドリルセミナー テキスト, 一般財団法人 日本科学技術連盟(2012) • [11] ISTQBテスト技術者資格制度 Foundation Level シラバス 日本語版 Version 2018V3.1.J03 http://jstqb.jp/dl/JSTQB-SyllabusFoundation_Version2018V31.J03.pdf • [12]ソフトウェアテスト技法, Boris Beizer (原著), 小野間 彰 (翻訳), 山浦 恒央 (翻訳),日経BP(1994) 50 JaSST'18 Kyushu