Slide 1

Slide 1 text

境界値分析 ブロッコリー (@nihonbuson)

Slide 2

Slide 2 text

テストケースはいくつ? 仕様:8文字以上45文字以下のパスワードは設定できる テストケース:1文字、2文字、3文字、…、100文字 膨大な数の テストケース テストの原則 2. 全数テストは不可能 参考:ISTQBテスト技術者資格制度 Foundation Level シラバス 日本語版 Version 2023V4.0.J02

Slide 3

Slide 3 text

境界値分析とは何か? 境界値分析(BVA)は、順序付けられた 同値パーティションの境界上に存在する値を 適切に処理していることをテストするために使用する。 引用:ISTQBテスト技術者資格制度Advanced Level シラバス日本語版 テストアナリスト Version 3.1.1.J03

Slide 4

Slide 4 text

境界値分析とは何か? 境界値分析(BVA)は、順序付けられた 同値パーティションの境界上に存在する値を 適切に処理していることをテストするために使用する。 引用:ISTQBテスト技術者資格制度Advanced Level シラバス日本語版 テストアナリスト Version 3.1.1.J03 数直線などで 表現できる まずは同値分割を 行って考える

Slide 5

Slide 5 text

仕様:8文字以上45文字以下のパスワードは設定できる 今回のお題

Slide 6

Slide 6 text

①数直線で表現する 仕様:8文字以上45文字以下のパスワードは設定できる 8 45

Slide 7

Slide 7 text

②同値分割をする 仕様:8文字以上45文字以下のパスワードは設定できる 設定できる 文字数 設定できない 文字数 設定できない 文字数 8 45

Slide 8

Slide 8 text

③仕様で言及がない境界の値を記載する 仕様:8文字以上45文字以下のパスワードは設定できる 設定できる 文字数 設定できない 文字数 設定できない 文字数 8 45 7 46

Slide 9

Slide 9 text

なぜ境界値分析を使うのか? 「パスワードが8文字以上」の場合、なぜ 7と8をテストするのか? if( x < 7 ){ return “入力したパスワードが短いです”; }

Slide 10

Slide 10 text

なぜ境界値分析を使うのか? 「パスワードが8文字以上」の場合、なぜ 7と8をテストするのか? if( x < 7 ){ return “入力したパスワードが短いです”; } 上記の例で、不等号のミスによる不具合を 発見できるのは、7の時だけ!

Slide 11

Slide 11 text

カバレッジが100%でもバグは見逃してしまう public boolean judge (int x) { if( x < 7 ){ return false; } else if( x > 46 ){ return false; } return true; } @Test public void test_short_password{ assertThat( judge(5), is(false)); } @Test public void test_long_password{ assertThat( judge(60), is(false)); } @Test public void test_valid_password{ assertThat( judge(15), is(true)); }

Slide 12

Slide 12 text

カバレッジが100%でもバグは見逃してしまう public boolean judge (int x) { if( x < 7 ){ return false; } else if( x > 46 ){ return false; } return true; } @Test public void test_short_password{ assertThat( judge(5), is(false)); } @Test public void test_long_password{ assertThat( judge(60), is(false)); } @Test public void test_valid_password{ assertThat( judge(15), is(true)); }

Slide 13

Slide 13 text

カバレッジが100%でもバグは見逃してしまう public boolean judge (int x) { if( x < 7 ){ return false; } else if( x > 46 ){ return false; } return true; } @Test public void test_short_password{ assertThat( judge(5), is(false)); } @Test public void test_long_password{ assertThat( judge(60), is(false)); } @Test public void test_valid_password{ assertThat( judge(15), is(true)); }

Slide 14

Slide 14 text

カバレッジが100%でもバグは見逃してしまう public boolean judge (int x) { if( x < 7 ){ return false; } else if( x > 46 ){ return false; } return true; } @Test public void test_short_password{ assertThat( judge(5), is(false)); } @Test public void test_long_password{ assertThat( judge(60), is(false)); } @Test public void test_valid_password{ assertThat( judge(15), is(true)); }

Slide 15

Slide 15 text

カバレッジが100%でもバグは見逃してしまう public boolean judge (int x) { if( x < 7 ){ return false; } else if( x > 46 ){ return false; } return true; } @Test public void test_short_password{ assertThat( judge(5), is(false)); } @Test public void test_long_password{ assertThat( judge(60), is(false)); } @Test public void test_valid_password{ assertThat( judge(15), is(true)); }

Slide 16

Slide 16 text

仕様:8文字以上45文字以下のパスワードは設定できる ④システム上の境界値も考える 設定 できない 文字数 8 45 7 46 設定できる 文字数 設定 できない 文字数

Slide 17

Slide 17 text

仕様:8文字以上45文字以下のパスワードは設定できる ④システム上の境界値も考える 設定 できない 文字数 設定 できない 文字数 8 45 7 46 設定できる 文字数 入力 できない 文字数 入力 できない 文字数 0 -1

Slide 18

Slide 18 text

ワーク1

Slide 19

Slide 19 text

ワーク1 割愛

Slide 20

Slide 20 text

境界値分析を 適用する時の 難しさ

Slide 21

Slide 21 text

自然言語でも境界値分析を使う場合あり 例)20人のクラスで背の順に並んだ時、   前から10人目までは組体操で上に登る人、   前から11人目以降は組体操で下で土台になる人 何らかのルールで順序付けができれば、 数値でなくても境界値分析は適用可能 【運動会】組体操でサボテンをする 子どもたちのイラスト - イラストバンク

Slide 22

Slide 22 text

自然言語は境界が曖昧 「以上、以下」「から、まで」などの単語に注目 例 ● 稼働時間…8:00から22:00まで ● 休止時間…22:00から8:00まで 8:00ちょうどや22:00ちょうどは稼働時間?休止時間?

Slide 23

Slide 23 text

自然言語は境界が曖昧 例.東海道新幹線で名古屋駅から新横浜駅まで乗車した ● 東海道新幹線で乗車していた駅は図の通り ● 境界値は「岐阜羽島と名古屋」「新横浜と品川」 ● このときの「新横浜駅まで」は、新横浜駅を含む

Slide 24

Slide 24 text

自然言語は境界が曖昧 例.東海道新幹線の“のぞみ”は名古屋駅を出ると   新横浜駅まで停車しません ● “こだま”が止まって“のぞみ”が止まらない駅は図の通り ● 境界値は「名古屋と三河安城」「小田原と新横浜」 ● このときの「新横浜駅まで」は、新横浜駅を含まない 参考:91号: 境界値分析:前編| Kouichi Akiyama

Slide 25

Slide 25 text

ワーク2

Slide 26

Slide 26 text

ワーク2 割愛

Slide 27

Slide 27 text

おわりに

Slide 28

Slide 28 text

境界値分析のまとめ ● 境界値分析は同値パーティションの境界上に 着目する手法 ● 順序付けることができれば、自然言語にも適用可能 ● 仕様の文章は境界が曖昧であることが多い ○ 境界値分析によって欠陥を発見できる可能性が高い

Slide 29

Slide 29 text

おわりに 同値分割、境界値分析を行うことで、 テストケースの選定だけでなく、 仕様の曖昧さの指摘に繋がります。 同値分割、境界値分析に限らず、 テスト設計技法を活用し、議論して、 より良いプロダクト作りを目指しましょう。 テスト設計技法を定着させるためにも、 今回の内容の復習もしましょう。

Slide 30

Slide 30 text

復習にオススメの書籍 https://bookplus.nikkei.com/atcl/catalog/05/P82510/ https://gihyo.jp/book/2020/978-4-297-11061-1