Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

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
    テスト設計技法をなぜ&
    どのように使うのか体験しよう!

    View Slide

  2. Copyright (C) 2022 WACATE All rights reserved
    自己紹介
    名前
    角田 俊
    お仕事
    ソフトウェア開発エンジニア
    & QAエンジニア
    Twitter
    imtnd
    コミュニティ活動
    WACATE実行委員など
    新潟へは何回か行ったことがあります。

    View Slide

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

    View Slide

  4. Copyright (C) 2022 WACATE All rights reserved
    Agenda
    本セッションの進め方
    1. テスト技法をなぜ学ぶのか?
    2. テスト技法(一部)の説明・ワーク
    (時間の関係からミニワーク)
    4
    なぜテスト技法を学ぶのか? 座学・ミニワーク

    View Slide

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

    View Slide

  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)

    View Slide

  7. Copyright (C) 2022 WACATE All rights reserved
    Agenda
    バグが早く見つけるほど良い
    • バグ発見フェーズ
    と修正コストの関係
    • バグの修正コストは
    後工程になるほど
    増加していく
    7
    ロジャー・プレスマン,ブルース・マキシム ,西康 晴 他(翻訳), 『実践ソフトウェアエンジニアリング(第9版)』, オーム社, 2021, P230

    View Slide

  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)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  16. Copyright (C) 2022 WACATE All rights reserved
    さまざまなテスト技法 16
    テスト技法ポジショニングマップ. https://note.com/akiyama924/n/n072e24135964, (2022/5/15)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  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

    有効同値クラス
    無効同値クラス
    無効同値クラスは
    仕様に明示されないことも
    あるので要注意!

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  29. Copyright (C) 2022 WACATE All rights reserved
    29
    ミニワーク
    ~実際にやってみよう~

    View Slide

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

    View Slide

  31. Copyright (C) 2022 WACATE All rights reserved
    31
    解説

    View Slide

  32. Copyright (C) 2022 WACATE All rights reserved
    同値分割 32
    単純に同値分割法を適用すると・・・
    3歳以下 4歳以上 小学生 中学生 高校生 18歳以上
    小人 中人 大人
    仕様に定義されていない値

    View Slide

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

    View Slide

  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歳非
    高校生

    View Slide

  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歳
    非高校生

    View Slide

  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






    小人
    中人
    大人
    不要
    【参考】
    デシジョンテーブルという技法で整理すると、もっと情報が整理しやすくなります

    View Slide

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

    View Slide

  38. Copyright (C) 2022 WACATE All rights reserved
    まとめ 38
    ■ なぜ、テスト技法を使うか
    ■ テスト技法
    ■ いろいろとある
    ■ 一部を説明
    同値分割/境界値分析
    ■ 実際に手を動かす
    ■ 同値分割のミニワークを実施

    View Slide

  39. Copyright (C) 2022 WACATE All rights reserved
    さまざまなテスト技法 39
    テスト技法ポジショニングマップ. https://note.com/akiyama924/n/n072e24135964, (2022/5/15)
    今回扱ったテスト技法はごく一部です。
    テスト技法は幅広く理解して、
    取捨選択して活用できる状態を目指そう

    View Slide

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

    View Slide

  41. Copyright (C) 2022 WACATE All rights reserved
    テスト技法のスライドも公開中 41

    View Slide

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

    View Slide

  43. Copyright (C) 2022 WACATE All rights reserved

    View Slide