$30 off During Our Annual Pro Sale. View Details »

テスト設計技法をなぜ&どのように使うのか体験しよう!

 テスト設計技法をなぜ&どのように使うのか体験しよう!

テスト設計技法をなぜ&どのように使うのか体験しよう!

https://confengine.com/conferences/scrum-fest-niigata-2022/proposal/16403

imtnd

May 21, 2022
Tweet

More Decks by imtnd

Other Decks in Programming

Transcript

  1. Copyright (C) 2022 WACATE All rights reserved 角田 俊 (WACATE実行委員会)

    2022年5月21日 Scrum Fest Niigata 2022 テスト設計技法をなぜ& どのように使うのか体験しよう!
  2. Copyright (C) 2022 WACATE All rights reserved 自己紹介 名前 角田

    俊 お仕事 ソフトウェア開発エンジニア & QAエンジニア Twitter imtnd コミュニティ活動 WACATE実行委員など 新潟へは何回か行ったことがあります。
  3. Copyright (C) 2022 WACATE All rights reserved Agenda 本セッションの目的 目的:テスト技法で効率の良いテスト方法を学ぼう

    1. なぜテスト技法を学ぶ必要があるのかを知る 2. いろいろなテスト技法があることを知る 3. 実際にテスト技法を使ってみる 3
  4. Copyright (C) 2022 WACATE All rights reserved Agenda 本セッションの進め方 1.

    テスト技法をなぜ学ぶのか? 2. テスト技法(一部)の説明・ワーク (時間の関係からミニワーク) 4 なぜテスト技法を学ぶのか? 座学・ミニワーク
  5. Copyright (C) 2022 WACATE All rights reserved Agenda テストとは? •

    テストの種類 • 静的テスト • 動的テスト • テストの段階 5 ロジャー・プレスマン,ブルース・マキシム ,西康 晴 他(翻訳), 『実践ソフトウェアエンジニアリング(第9版)』, オーム社, 2021, P275
  6. Copyright (C) 2022 WACATE All rights reserved Agenda テストをするのは誰? •

    テストを実施する人 • 関係者全員 • テストが関連するフェーズ • 設計フェーズ • テストフェーズ 6 JaSST Tokyo 2017, ソフトウェアの品質保証の本質~ 技法の変遷から学ぶ ~, https://www.jasst.jp/symposium/jasst17tokyo/pdf/A7.pdf, (2022/5/15)
  7. Copyright (C) 2022 WACATE All rights reserved Agenda バグが早く見つけるほど良い •

    バグ発見フェーズ と修正コストの関係 • バグの修正コストは 後工程になるほど 増加していく 7 ロジャー・プレスマン,ブルース・マキシム ,西康 晴 他(翻訳), 『実践ソフトウェアエンジニアリング(第9版)』, オーム社, 2021, P230
  8. Copyright (C) 2022 WACATE All rights reserved ホリスティックテスティング 8 アジャイルQAに求められるプロセス全体を俯瞰する「ホリスティックテスティング」とは何か?(翻訳),

    https://daipresents.com/2022/05/09/testing-from-a-holistic-point-of-view/, (2022/05/15)
  9. Copyright (C) 2022 WACATE All rights reserved Agenda なぜテスト技法を学ぶのか? •

    テストは関係者全員で行う • テストに利用できる人員、機材、時間は有限 • 全ての値をテストするのは非現実的 9 現実的な手数で効率的に バグを検出していく必要がある
  10. Copyright (C) 2022 WACATE All rights reserved Agenda なぜテスト技法を使うのか •

    テスト技法を使わないと・・・ • たくさんテストをしてもなかなかバグが見つからない • 同じところを何度もテストしている 10 テストした箇所 バグがある箇所 凡例 Point
  11. Copyright (C) 2022 WACATE All rights reserved Agenda なぜテスト技法を使うのか •

    現実的な手数で・・・ • 効率的に・・・ 11 現実的な手数で効率的に バグを検出していく必要がある 論理的にテストケースを減らして バグがあるところを狙って ダブらず広い範囲を
  12. Copyright (C) 2022 WACATE All rights reserved テスト技法のリスク 12 •

    テストケースを減らすということは、 減らした分だけ確認しない箇所があるということ • 適切にテスト技法を適用できないと 必要なテストが漏れたり、 無駄な箇所ばかりテストすることに・・・
  13. Copyright (C) 2022 WACATE All rights reserved アジャイル開発でのテスト 13 •

    アジャイル開発ではチームメンバでストーリーポイント を見積もる • ソフトウェアの品質が悪いものに対して変更を加えていく と、変更コストが増加していく テストを網羅的にできるようになって、 必要なテスト期間を把握できるようになることが大切
  14. Copyright (C) 2022 WACATE All rights reserved 自動テストもテスト設計が必要 14 •

    現在の「自動テスト」と呼ばれるものの大半は 「テスト実行」のフェーズを自動化しているもの • 「テスト設計」は人が考えて行う必要がある • 効果的でないテストを自動化すると、 • 効果のない大量のテストが自動で実行される • テストケースが取捨選択できないので、 マシンパワー(お金)と時間がどんどん減っていく • テスト実行に時間がかかるので開発効率も低下していく
  15. Copyright (C) 2022 WACATE All rights reserved ユニットテストの自動化 15 •

    TDD(テスト駆動開発)でテストコードは 作成されやすくなっている • ただ、TDDのテストコードは設計のためのコードであり、 品質を担保するコードではないことが多い • TDDのテストコードをそのまま自動化すると、 メンテナンス不可能なテストになりやすい テスト技法を用いてテストコードを取捨選択できるようになろう
  16. Copyright (C) 2022 WACATE All rights reserved さまざまなテスト技法 16 テスト技法ポジショニングマップ.

    https://note.com/akiyama924/n/n072e24135964, (2022/5/15)
  17. Copyright (C) 2022 WACATE All rights reserved 今回とりあげるテスト技法 17 •

    仕様ベースの技法から以下をご紹介 • 同値分割 • 境界値分析 テスト技法ポジショニングマップ. https://note.com/akiyama924/n/n072e24135964, (2022/5/15)
  18. Copyright (C) 2022 WACATE All rights reserved 18 同値分割

  19. Copyright (C) 2022 WACATE All rights reserved 同値分割 19 •

    同値分割とは • たくさんある入力値や出力値を【同値クラス】に分けること • 同値クラスとは • システムによって同じように扱われる(と思われる)値のセットや 範囲 • 同値クラス内の値は、全て同じように扱われるはずなので、 テストケースを減らすことができる • 同値クラス毎に1つの値を確認すればOK
  20. Copyright (C) 2022 WACATE All rights reserved 同値分割 20 •

    配送チケットを代金引換で購入する場合、 購入金額に応じて代引き手数料がかかります。 • 購入金額に対して代引き手数料が正しく 判断されるか確認するテストを考えてみましょう 購入金額(円) 代引き手数料(円) ~ 29,999 324 30,000 ~ 100,000 540 100,001 ~ 200,000 864 200,001 ~ 1,080
  21. Copyright (C) 2022 WACATE All rights reserved 同値分割 21 1.

    有効同値クラスと無効同値クラスを見つける 購入金額(円) 代引き手数料 ~ 29,999 324円 30,000 ~100,000 540円 100,001 ~200,000 864円 200,001 ~ 1080円 ~ 29,999 30,000~ 100,000 100,001~ 200,000 200,001 ~ 999,999 ~ 0 1,000,000 ~ 有効同値クラス 無効同値クラス 無効同値クラスは 仕様に明示されないことも あるので要注意!
  22. Copyright (C) 2022 WACATE All rights reserved 同値分割 22 2.

    そのクラスから代表値を選ぶ • 平均値、中央値、最頻値など 2. 期待結果を決定して テストケースにする ~ 29,999 30,000~ 100,000 100,001~ 200,000 200,001 ~ ~ 0 ~999,999 -10,000 15,000 70,000 150,000 600,000 2,000,000 No 購入金額(入力値) 代引き手数料(期待結果) 1 -10,000 N/A 2 15,000 324円 3 70,000 540円 4 150,000 864円 5 600,000 1080円 6 2,000,000 N/A
  23. Copyright (C) 2022 WACATE All rights reserved 同値分割 23 •

    同値分割の使いどころ • 基本的な動作を確認したいとき • 細かいテストの前にそもそもそれなりに動くのか (有効値と無効値を1個ずつとか) • 異常系の細かいテストを全てパスした後で 普通の正常系でエラーになったらショック大きいですよね! • ユーザー受入テストなど通常の使い方で問題がないか • ビルド後に想定外の影響がないかスモークテストとか • 他のテスト設計技法を適用する準備や合わせ技
  24. Copyright (C) 2022 WACATE All rights reserved 24 境界値分析

  25. Copyright (C) 2022 WACATE All rights reserved 境界値分析 25 •

    境界値とは • システムの振る舞いを分ける境界のポイント • 条件分岐とか繰り返し処理の最後 • 同値クラス内の最小値と最大値 • なぜ境界値なのか • バグが多いため • 「未満」と「以下」などの仕様のバグ • 条件分岐のプログラムもバグ • バグがありそうなところを狙うための技法です
  26. Copyright (C) 2022 WACATE All rights reserved 境界値分析 26 •

    先ほどの代引き手数料の例ですが・・・ • 境界が間違っていないかどうかは確認が必須 購入金額(円) 代引き手数料 ~ 29,999 324円 30,000 ~100,000 540円 100,001 ~200,000 864円 200,001 ~ 1080円 ~ 29,999 30,000~ 100,000 100,001~ 200,000 200,001 ~ 999,999 ~ 0 1,000,000 ~
  27. Copyright (C) 2022 WACATE All rights reserved 境界値分析 27 •

    テストケース # 購入金額 (入力値) 代引き手数料 (期待結果) 1 0 N/A 2 1 324円 3 29,999 324円 4 30,000 540円 5 100,000 540円 ~ 29,999 30,000~ 100,000 100,001~ 200,000 200,001 ~ 999,999 ~ 0 1,000,000 ~ # 購入金額 (入力値) 代引き手数料 (期待結果) 6 100,001 864円 7 200,000 864円 8 200,001 1080円 9 999,999 1080円 10 1,000,000 N/A
  28. Copyright (C) 2022 WACATE All rights reserved 境界値分析 28 •

    境界値分析の使いどころ • 境界にバグが多いことはわかっているので、 可能な限りどこかで1回はテストすべき • 境界の値だけをテストすればいいわけではない • 境界を見誤っても気づけるように同値分割を併用した り、3点の境界値などを使って保険をかけましょう
  29. Copyright (C) 2022 WACATE All rights reserved 29 ミニワーク ~実際にやってみよう~

  30. Copyright (C) 2022 WACATE All rights reserved 同値分割 30 とある遊園地の1dayチケットは利用者に応じて入場料金が異なります。

    18歳以上の大人は7,400円です。 中学生、高校生の中人は6,400円です。 4歳以上、小学生の小人は4,800円です。 年齢と、学生区分を入力すると、 どのチケットを入場料金を教えてくれるプログラムがあります。 インプット情報となる年齢と学生区分に着目して、 同値分割法を用いてテストケースを考えてください。 出来た人は境界値分析でテストケースを考えてください。 個人ワーク 10分 グループディスカッション 10分
  31. Copyright (C) 2022 WACATE All rights reserved 31 解説

  32. Copyright (C) 2022 WACATE All rights reserved 同値分割 32 単純に同値分割法を適用すると・・・

    3歳以下 4歳以上 小学生 中学生 高校生 18歳以上 小人 中人 大人 仕様に定義されていない値
  33. Copyright (C) 2022 WACATE All rights reserved 同値分割 33 •

    分割なので同値クラス間で重複はNGです • 仕様に明示された条件を並べただけでは同値分割に ならない(そもそも仕様がイケてない) 3歳以下 4歳以上 小学生 中学生 高校生 18歳以上 高校生 18歳 以上
  34. Copyright (C) 2022 WACATE All rights reserved 同値分割 34 年齢で区分すると・・・

    4~11歳 → 小人、12~17歳 → 中人、18歳~ → 大人 学生で区分すると・・・ 小学生 → 小人、中学生、高校生 → 中人 ただし、12歳と、18歳は学生区分により、2つの区分に分かれる 0~3歳 4~11歳 12歳 小学生 13~17歳 中学生、高校生 18歳 高校生 19歳以上 小人 中人 大人 12歳 中学生 18歳非 高校生
  35. Copyright (C) 2022 WACATE All rights reserved 同値分割 35 この区分けでも、学生ではない18歳以下がどうなるのかが不明

    → 仕様の抜けがまだある 0~3歳 4~11歳 12歳 小学生 13~17歳 中学生、高校生 18歳 高校生 19歳以上 小人 中人 大人 12歳 中学生 18歳非 高校生 0~3歳 4~11歳 12歳 小学生 13~17歳 中学生、高校生 18歳 高校生 19歳以上 小人 中人 大人 12歳 中学生 18歳非 高校生 15~17歳 非高校生
  36. Copyright (C) 2022 WACATE All rights reserved 1 2 3

    4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 条 件 年 齢 0~3歳 Y Y Y Y 4~11歳 Y Y Y Y 12歳 Y Y Y Y 13~17歳 Y Y Y Y 18歳 Y Y Y Y 19歳以上 Y Y Y Y 在 学 状 況 小学生 Y Y Y Y Y Y 中学生 Y Y Y Y Y Y 高校生 Y Y Y Y Y Y その他 Y Y Y Y Y Y 動 作 購 入 券 種 小人 中人 大人 不要 【参考】 デシジョンテーブルという技法で整理すると、もっと情報が整理しやすくなります
  37. Copyright (C) 2022 WACATE All rights reserved 同値分割 37 •

    いかがでしたか? • 思ったより手が動かなかった人もいるのでは? • やさしいものでも、結構考えるところがあります • 実際の仕事は、もっと難しい・複雑ですよね • 解りやすいように見える問題も、 意外と難しかったりします。
  38. Copyright (C) 2022 WACATE All rights reserved まとめ 38 ▪

    なぜ、テスト技法を使うか ▪ テスト技法 ▪ いろいろとある ▪ 一部を説明 同値分割/境界値分析 ▪ 実際に手を動かす ▪ 同値分割のミニワークを実施
  39. Copyright (C) 2022 WACATE All rights reserved さまざまなテスト技法 39 テスト技法ポジショニングマップ.

    https://note.com/akiyama924/n/n072e24135964, (2022/5/15) 今回扱ったテスト技法はごく一部です。 テスト技法は幅広く理解して、 取捨選択して活用できる状態を目指そう
  40. Copyright (C) 2022 WACATE All rights reserved Agenda コミュニティの概要 1.

    WACATE ワカテと読みます 2. 活動 • 自主的なコミュニティ • 1年に夏・冬の2回 • 1泊2日の合宿(今はオンライン) 3. 内容 • 主にソフトウェアテストの勉強会 • ワークショップがメイン • 参加者間の交流も深める 4. ターゲット • 若手でテストに興味がある人 • 特に年齢制限はない 40 https://wacate.jp
  41. Copyright (C) 2022 WACATE All rights reserved テスト技法のスライドも公開中 41

  42. Copyright (C) 2022 WACATE All rights reserved 次回のWACATE参加者募集中 42

  43. Copyright (C) 2022 WACATE All rights reserved