Share
Embed
テスト設計技法をなぜ&どのように使うのか体験しよう!
テスト設計技法をなぜ&どのように使うのか体験しよう!
https://confengine.com/conferences/scrum-fest-niigata-2022/proposal/16403
imtnd
May 21, 2022
Transcript
43 slides
-
Copyright (C) 2022 WACATE All rights reserved 角田 俊 (WACATE実行委員会)
2022年5月21日 Scrum Fest Niigata 2022 テスト設計技法をなぜ& どのように使うのか体験しよう! -
Copyright (C) 2022 WACATE All rights reserved 自己紹介 名前 角田
俊 お仕事 ソフトウェア開発エンジニア & QAエンジニア Twitter imtnd コミュニティ活動 WACATE実行委員など 新潟へは何回か行ったことがあります。 -
Copyright (C) 2022 WACATE All rights reserved Agenda 本セッションの目的 目的:テスト技法で効率の良いテスト方法を学ぼう
1. なぜテスト技法を学ぶ必要があるのかを知る 2. いろいろなテスト技法があることを知る 3. 実際にテスト技法を使ってみる 3 -
Copyright (C) 2022 WACATE All rights reserved Agenda 本セッションの進め方 1.
テスト技法をなぜ学ぶのか? 2. テスト技法(一部)の説明・ワーク (時間の関係からミニワーク) 4 なぜテスト技法を学ぶのか? 座学・ミニワーク -
Copyright (C) 2022 WACATE All rights reserved Agenda テストとは? •
テストの種類 • 静的テスト • 動的テスト • テストの段階 5 ロジャー・プレスマン,ブルース・マキシム ,西康 晴 他(翻訳), 『実践ソフトウェアエンジニアリング(第9版)』, オーム社, 2021, P275 -
Copyright (C) 2022 WACATE All rights reserved Agenda テストをするのは誰? •
テストを実施する人 • 関係者全員 • テストが関連するフェーズ • 設計フェーズ • テストフェーズ 6 JaSST Tokyo 2017, ソフトウェアの品質保証の本質~ 技法の変遷から学ぶ ~, https://www.jasst.jp/symposium/jasst17tokyo/pdf/A7.pdf, (2022/5/15) -
Copyright (C) 2022 WACATE All rights reserved Agenda バグが早く見つけるほど良い •
バグ発見フェーズ と修正コストの関係 • バグの修正コストは 後工程になるほど 増加していく 7 ロジャー・プレスマン,ブルース・マキシム ,西康 晴 他(翻訳), 『実践ソフトウェアエンジニアリング(第9版)』, オーム社, 2021, P230 -
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) -
Copyright (C) 2022 WACATE All rights reserved Agenda なぜテスト技法を学ぶのか? •
テストは関係者全員で行う • テストに利用できる人員、機材、時間は有限 • 全ての値をテストするのは非現実的 9 現実的な手数で効率的に バグを検出していく必要がある -
Copyright (C) 2022 WACATE All rights reserved Agenda なぜテスト技法を使うのか •
テスト技法を使わないと・・・ • たくさんテストをしてもなかなかバグが見つからない • 同じところを何度もテストしている 10 テストした箇所 バグがある箇所 凡例 Point -
Copyright (C) 2022 WACATE All rights reserved Agenda なぜテスト技法を使うのか •
現実的な手数で・・・ • 効率的に・・・ 11 現実的な手数で効率的に バグを検出していく必要がある 論理的にテストケースを減らして バグがあるところを狙って ダブらず広い範囲を -
Copyright (C) 2022 WACATE All rights reserved テスト技法のリスク 12 •
テストケースを減らすということは、 減らした分だけ確認しない箇所があるということ • 適切にテスト技法を適用できないと 必要なテストが漏れたり、 無駄な箇所ばかりテストすることに・・・ -
Copyright (C) 2022 WACATE All rights reserved アジャイル開発でのテスト 13 •
アジャイル開発ではチームメンバでストーリーポイント を見積もる • ソフトウェアの品質が悪いものに対して変更を加えていく と、変更コストが増加していく テストを網羅的にできるようになって、 必要なテスト期間を把握できるようになることが大切 -
Copyright (C) 2022 WACATE All rights reserved 自動テストもテスト設計が必要 14 •
現在の「自動テスト」と呼ばれるものの大半は 「テスト実行」のフェーズを自動化しているもの • 「テスト設計」は人が考えて行う必要がある • 効果的でないテストを自動化すると、 • 効果のない大量のテストが自動で実行される • テストケースが取捨選択できないので、 マシンパワー(お金)と時間がどんどん減っていく • テスト実行に時間がかかるので開発効率も低下していく -
Copyright (C) 2022 WACATE All rights reserved ユニットテストの自動化 15 •
TDD(テスト駆動開発)でテストコードは 作成されやすくなっている • ただ、TDDのテストコードは設計のためのコードであり、 品質を担保するコードではないことが多い • TDDのテストコードをそのまま自動化すると、 メンテナンス不可能なテストになりやすい テスト技法を用いてテストコードを取捨選択できるようになろう -
Copyright (C) 2022 WACATE All rights reserved さまざまなテスト技法 16 テスト技法ポジショニングマップ.
https://note.com/akiyama924/n/n072e24135964, (2022/5/15) -
Copyright (C) 2022 WACATE All rights reserved 今回とりあげるテスト技法 17 •
仕様ベースの技法から以下をご紹介 • 同値分割 • 境界値分析 テスト技法ポジショニングマップ. https://note.com/akiyama924/n/n072e24135964, (2022/5/15) -
Copyright (C) 2022 WACATE All rights reserved 同値分割 19 •
同値分割とは • たくさんある入力値や出力値を【同値クラス】に分けること • 同値クラスとは • システムによって同じように扱われる(と思われる)値のセットや 範囲 • 同値クラス内の値は、全て同じように扱われるはずなので、 テストケースを減らすことができる • 同値クラス毎に1つの値を確認すればOK -
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 -
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 ~ 有効同値クラス 無効同値クラス 無効同値クラスは 仕様に明示されないことも あるので要注意! -
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 -
Copyright (C) 2022 WACATE All rights reserved 同値分割 23 •
同値分割の使いどころ • 基本的な動作を確認したいとき • 細かいテストの前にそもそもそれなりに動くのか (有効値と無効値を1個ずつとか) • 異常系の細かいテストを全てパスした後で 普通の正常系でエラーになったらショック大きいですよね! • ユーザー受入テストなど通常の使い方で問題がないか • ビルド後に想定外の影響がないかスモークテストとか • 他のテスト設計技法を適用する準備や合わせ技 -
Copyright (C) 2022 WACATE All rights reserved 境界値分析 25 •
境界値とは • システムの振る舞いを分ける境界のポイント • 条件分岐とか繰り返し処理の最後 • 同値クラス内の最小値と最大値 • なぜ境界値なのか • バグが多いため • 「未満」と「以下」などの仕様のバグ • 条件分岐のプログラムもバグ • バグがありそうなところを狙うための技法です -
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 ~ -
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 -
Copyright (C) 2022 WACATE All rights reserved 境界値分析 28 •
境界値分析の使いどころ • 境界にバグが多いことはわかっているので、 可能な限りどこかで1回はテストすべき • 境界の値だけをテストすればいいわけではない • 境界を見誤っても気づけるように同値分割を併用した り、3点の境界値などを使って保険をかけましょう -
Copyright (C) 2022 WACATE All rights reserved 同値分割 30 とある遊園地の1dayチケットは利用者に応じて入場料金が異なります。
18歳以上の大人は7,400円です。 中学生、高校生の中人は6,400円です。 4歳以上、小学生の小人は4,800円です。 年齢と、学生区分を入力すると、 どのチケットを入場料金を教えてくれるプログラムがあります。 インプット情報となる年齢と学生区分に着目して、 同値分割法を用いてテストケースを考えてください。 出来た人は境界値分析でテストケースを考えてください。 個人ワーク 10分 グループディスカッション 10分 -
Copyright (C) 2022 WACATE All rights reserved 同値分割 32 単純に同値分割法を適用すると・・・
3歳以下 4歳以上 小学生 中学生 高校生 18歳以上 小人 中人 大人 仕様に定義されていない値 -
Copyright (C) 2022 WACATE All rights reserved 同値分割 33 •
分割なので同値クラス間で重複はNGです • 仕様に明示された条件を並べただけでは同値分割に ならない(そもそも仕様がイケてない) 3歳以下 4歳以上 小学生 中学生 高校生 18歳以上 高校生 18歳 以上 -
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歳非 高校生 -
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歳 非高校生 -
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 動 作 購 入 券 種 小人 中人 大人 不要 【参考】 デシジョンテーブルという技法で整理すると、もっと情報が整理しやすくなります -
Copyright (C) 2022 WACATE All rights reserved 同値分割 37 •
いかがでしたか? • 思ったより手が動かなかった人もいるのでは? • やさしいものでも、結構考えるところがあります • 実際の仕事は、もっと難しい・複雑ですよね • 解りやすいように見える問題も、 意外と難しかったりします。 -
Copyright (C) 2022 WACATE All rights reserved まとめ 38 ▪
なぜ、テスト技法を使うか ▪ テスト技法 ▪ いろいろとある ▪ 一部を説明 同値分割/境界値分析 ▪ 実際に手を動かす ▪ 同値分割のミニワークを実施 -
Copyright (C) 2022 WACATE All rights reserved さまざまなテスト技法 39 テスト技法ポジショニングマップ.
https://note.com/akiyama924/n/n072e24135964, (2022/5/15) 今回扱ったテスト技法はごく一部です。 テスト技法は幅広く理解して、 取捨選択して活用できる状態を目指そう -
Copyright (C) 2022 WACATE All rights reserved Agenda コミュニティの概要 1.
WACATE ワカテと読みます 2. 活動 • 自主的なコミュニティ • 1年に夏・冬の2回 • 1泊2日の合宿(今はオンライン) 3. 内容 • 主にソフトウェアテストの勉強会 • ワークショップがメイン • 参加者間の交流も深める 4. ターゲット • 若手でテストに興味がある人 • 特に年齢制限はない 40 https://wacate.jp