Slide 1

Slide 1 text

PHPUnitを使って ブラックボックステスト技法を やってみた 札幌PHP勉強会 Kou 1

Slide 2

Slide 2 text

自己紹介 2 https://twitter.com/kou_tech_1017

Slide 3

Slide 3 text

みなさん自動テスト書いていますか? 自動テスト(Automated Test )とは、 開発者がコードに対してテストコードを書くこと 3

Slide 4

Slide 4 text

わたしは書いていませんでした󰣻 4

Slide 5

Slide 5 text

テスト書かなかった理由 - 自分が書いたコードだから、仕様や挙動は把握しているつもりだった - テストコードを書く時間があれば、別のタスクを進めれる - どんなテストを書けばいいかわからない - 書いたテストが正しいか分からない 5

Slide 6

Slide 6 text

テスト技法を学ぶことで なんとなく自信がついた 6

Slide 7

Slide 7 text

テスト技法 ソフトウェアテストのテストケースを作成する技法のこと 次の3つのカテゴリに区別される 1. ホワイトボックステスト技法 2. ブラックボックステスト技法 3. 経験値ベースのテスト技法 https://jstqb.jp/dl/JSTQB-SyllabusFoundation_VersionV40.J01.pdf 7

Slide 8

Slide 8 text

ホワイトボックステスト技法 ソフトウェアの内部構造、設計、コードに焦点を当てたテストのこと プログラムの内部動作の正確さを確認し、内部経路、コード構造、アルゴリズムなどの コードレベルのエラーを検出 コードのカバレッジを分析 - ステートメントカバレッジ - コードカバレッジ 8

Slide 9

Slide 9 text

ブラックボックステスト技法 仕様や外部の入出力に焦点を当てたテストのこと 1. 同値分割法 2. 境界値分析 3. デシジョンテーブルテスト 4. 状態遷移テスト 9

Slide 10

Slide 10 text

経験ベースのテスト技法 テスト担当者の知識・経験・勘をベースにおこなうテストのこと 過去の同じようなシステムで見つかった欠陥や、過去の事例をテストに反映 10

Slide 11

Slide 11 text

ブラックボックステスト技法を PHPUnitでやってみた 11

Slide 12

Slide 12 text

同値分割法 (Equivalence Partitioning) テストデータを同等に扱われるパーティションに分け、各パーティションから任意の一つ の値を選んでテストを行うこと 例 ) 注文フォームがあるサイト - 注文日から3日以内であればキャンセル可能 12

Slide 13

Slide 13 text

パーティションを 区別する 注文日から3日以内であればキャ ンセル可能 1. 注文日より前 2. 注文日から3日以内 3. 注文日から4日以降 13

Slide 14

Slide 14 text

例) 注文日の翌日はキャンセル成功の テストコード - 注文日 : 2024-01-01 - 入力値 : 2024-01-02 (注文日から3日以内) 14

Slide 15

Slide 15 text

境界値分析 (Boundary Value Analysis) 同値パーティションの境界に焦点を当てたテスト技法のこと 境界値付近はバグの温床 - 「>」と「>=」で書き間違い - そもそも境界を考慮していない 15

Slide 16

Slide 16 text

境界値を分析 注文日から3日以内であればキャンセル可能 - 注文日より1日前 - 注文日 - 注文日より1日後 - 注文日より3日後の1日前 - 注文日より3日後 - 注文日より3日後の1日後 16

Slide 17

Slide 17 text

例) 注文日より3日後は キャンセル成功のテストコード - 注文日 : 2024-01-01 - 入力値 : 2024-01-04 (注文日から3日後) 17

Slide 18

Slide 18 text

境界値分析があれば、同値分割法は 不要では...🤔? 理論的には境界値テストをちゃんとすれば、 同値分割のテストは必要ない 無駄にテストケースを増やすのは同値分割法をするから 知識ゼロから学ぶソフトウェアテスト 第3版 アジャイル・AI時代の必携教科書 p33 18

Slide 19

Slide 19 text

ディシジョンテーブル (Decision Table) 入力値の組み合わせと、その期待結果を整理してテストするテスト技法のこと 例 ) 注文金額計算を次の条件の組み合わせで算出する 1. キャンペーン期間中かどうか 2. 限定商品かどうか 3. 大量注文かどうか 19

Slide 20

Slide 20 text

注文金額計算のディシジョンテーブル 20 注文日の状態 商品名 注文量 注文料金計算 キャンペーン期間中 一般商品 10個未満 基本価格 - キャンペーン割引 キャンペーン期間中 一般商品 10個以上 基本価格 - キャンペーン割引 - 大量注文割引 キャンペーン期間中 限定商品 10個未満 基本価格 - 限定商品割引 - キャンペーン割引 キャンペーン期間中 限定商品 10個以上 基本価格 - 限定商品割引 - キャンペーン割引 - 大量注文割引 キャンペーン期間外 一般商品 10個未満 基本価格 キャンペーン期間外 一般商品 10個以上 基本価格 - 大量注文割引 キャンペーン期間外 限定商品 10個未満 基本価格 - 限定商品割引 キャンペーン期間外 限定商品 10個以上 基本価格 - 限定商品割引 - 大量注文割引

Slide 21

Slide 21 text

例) 注文金額メソッド 21

Slide 22

Slide 22 text

キャンペーン期間中かつ、 限定商品かつ、 10個以上注文の場合の テストコード 22

Slide 23

Slide 23 text

状態遷移テスト (State Transition Testing) ソフトウェアの状態の遷移を整理し、状態遷移を網羅してテストする技法のこと 23 例 ) 注文の状態 - 発送準備 - 発送完了 - キャンセル

Slide 24

Slide 24 text

24 例 ) 注文キャンセル処理 - 発送準備中以外の状態の状態 から、キャンセル処理する場合 は例外を投げる

Slide 25

Slide 25 text

注文キャンセル成功時の テストコード 25

Slide 26

Slide 26 text

まとめ - ブラックボックステスト技法の学習によって、テストケース作成に対する自信がつい た - 「なんとなく」でテストケースを書くアプローチから脱却し、体系的なテスト設計がで きるようになった - ディシジョンテーブルと状態遷移テストを用いた際にテストケースが膨大になる課題 があるため、テストケースの管理と効率化が新たな焦点になりそうと感じた - ブログの記事 26

Slide 27

Slide 27 text

ありがとうございました 27