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

自動テスト

Cybozu
July 26, 2024
310

 自動テスト

Cybozu

July 26, 2024
Tweet

Transcript

  1. 『iOSアプリ開発⾃動テストの教科書』 によると 8 参考: 『iOSアプリ開発⾃動テストの教科書』, 1-1 なぜ⾃動テストを実装するのか』 ▌早く実⾏できる ▌正確に実⾏できる o

    ⼈為的ミスや属⼈性の排除 ▌何度もくり返し実⾏できる ▌仕様書(⾃動テストが通れば、機能が担保されているという安⼼感)
  2. ⾃動テストの現実 17 ▌⾃動テストは仕様変更との戦い o ⾃動テストは仕様=期待結果が変わればその変更に追随しない かぎり落ちてしまう ▌仕様変更の⼀例 o 製品機能の変更 §

    機能変更により、テストの⼿順⾃体の修正が必要 o 製品デザインの変更 § ボタンや⼊⼒欄の名称や位置が変更になったことによる修正 o ブラウザや端末のOSなど周辺ソフトウェアの仕様変更
  3. ▌テストのピラミッドはMike Cohnの "Succeeding with Agile"[Coh09]で 最初に提唱されたモデル ▌UIテスト、結合テスト、ユニットテストの3つの異なる⾃動 テストがどのように互いに補完し合うかを⽰すもの テストピラミッドとは 27

    UIテスト 結合テスト ユニットテスト ⼿動テスト ※ピラミッドの上部に「⼿動テスト」を記載する書き⽅もみられるが、 説明の便宜上、本講義資料でもそのように書く。 参考: 『初めての⾃動テスト ―Webシステムのための⾃動テスト基礎』, 1.4 テストのビラミッドに⼊り込む
  4. テストピラミッドとは 28 テストの数 ユニットテスト 結合テスト UIテスト ⼿動テスト ⾼コスト 横に広いほどテスト の数が多く、

    上にいくほどコスト がかかる(^1) ^1: コストがかかるとは、実⾏時間が⻑かったり、 不安定となりがちであるために⾃動テストの信頼 性を維持するコストがかかるということを指す 参考: 『初めての⾃動テスト ―Webシステムのための⾃動テスト基礎』, 1.4 テストのビラミッドに⼊り込む
  5. テストピラミッドの3層の解説 – UIテスト 32 参考: 『初めての⾃動テスト ―Webシステムのための⾃動テスト基礎』, 1.5 Ulテスト UIテスト

    結合テスト ユニットテスト ✓ エンドツーエンド/E2E ✓ ユーザーと同じ操作でテスト ☓ 時間がかかる、不安定
  6. テストピラミッドの3層の解説 – 結合テスト 33 参考: 『初めての⾃動テスト ―Webシステムのための⾃動テスト基礎』, 1.6 結合テスト UIテスト

    結合テスト ユニットテスト ✓ 複数のモジュールを組み合わせて⾏う ✓ 壊れやすいUI層に左右されない安定さ ☓ ユニットテストほど問題のある場所を 詳細に教えてくれない/「何か」が壊れて いる
  7. テストピラミッドの3層の解説 – ユニットテスト 34 参考: 『初めての⾃動テスト ―Webシステムのための⾃動テスト基礎』, 1.7 ユニットテスト UIテスト

    結合テスト ユニットテスト ✓ あるクラスや構造体などのあるひとつ の部品、ユニットに対して⾏う ✓ どこで落ちているか速く正確にフィー ドバックを返してくれる ☓ ユニットの結合部分の確認が苦⼿
  8. 再掲)テストピラミッドとは 37 テストの数 ユニットテスト 結合テスト UIテスト ⼿動テスト ⾼コスト 横に広いほどテスト の数が多く、

    上にいくほどコスト がかかる(^1) ^1: コストがかかるとは、実⾏時間が⻑かったり、 不安定となりがちであるために⾃動テストの信頼 性を維持するコストがかかるということを指す 参考: 『初めての⾃動テスト ―Webシステムのための⾃動テスト基礎』, 1.4 テストのビラミッドに⼊り込む
  9. なぜUIテストはコストが⾼いといわれるのか 38 テスト︕︕ テストが⻑く フィードバッ クが遅い テストが 落ちる (テストをな おすのも時

    間がかかる) 再テストする ためにビルド ▌テストがよく落ちる のでテストが通りに くい ▌テストのフィード バックも遅いのでCI 全体の実⾏時間も⻑ くなり、デリバリー も遅くなる 参考: 『初めての⾃動テスト ―Webシステムのための⾃動テスト基礎』, 8.4 UIテストヘ到達する, 8.5 逆ピラミッド, 8.6 不安定なテストの扱い⽅
  10. アイスクリームコーン型 41 テストの数 ⾼コスト UIテスト ⼿動テスト 結合テスト ユニットテスト Լ૚ʹߦ͘΄Ͳ ্૚ʹߦ͘΄Ͳ

    テストの数が多い 参考: 『初めての⾃動テスト ―Webシステムのための⾃動テスト基礎』, 8.4 UIテストヘ到達する, 8.5 逆ピラミッド, 8.6 不安定なテストの扱い⽅
  11. アイスクリームコーン型 42 テストの数 ⾼コスト UIテスト ⼿動テスト 結合テスト ユニットテスト 例)テスト対象のアプ リケーションがモノリ

    シック/密結合でユニッ トテストが書きにくい ケース 参考: 『初めての⾃動テスト ―Webシステムのための⾃動テスト基礎』, 8.4 UIテストヘ到達する, 8.5 逆ピラミッド, 8.6 不安定なテストの扱い⽅
  12. UIテスト 結合テスト ユニットテスト テストピラミッドの「カタチ」 を意識しよう 44 ▌テストはできるだけ下層でカ バーする l UIテストよりユニットテスト

    l 結合テストはユニットテストでできなければ ▌ただし、戦略的にUIテストや ⼿動テストを多くするケースも ある 参考: 『初めての⾃動テスト ―Webシステムのための⾃動テスト基礎』, 8.4 UIテストヘ到達する, 8.5 逆ピラミッド, 8.6 不安定なテストの扱い⽅
  13. 『LEADING QUALITY』 によると 63 参考: 『LEADING QUALITY』,第4章 ⼿動テストと⾃動テスト "テストを⼿動で⾏うよりも⾃動化したほうが有効となる要素が主に3つあ ると結論づけられた。

    1.⾃動化されたテストケースが変更の⼿を⼊れることなく⻑期にわたっ て利⽤できると期待できること。 2.テストケースが⽐較的⾃動化しやすいものであること。すなわち、細 部にわたる操作を必要としない⼿動テストから⽣成できるか。⼿順が複雑 になるほど、⾃動化は著しく困難になる。 3.⼿動で実施するよりも⾃動化して実施および維持するコストのほうが 安いこと。"
  14. チーム全体で取り組もう 67 ▌チームでなければできないことがある o チームを俯瞰した効率化 § チームによって、効率化できるポイントは異なる § チームの構成、スキルにより最適な⽅法は異なる o

    協⼒体制を作る § 各⼯程のテスト実施には、チームの協⼒が不可⽋ § 特定の⼯程だけでテストを効率化するのは限界がある o ⼈に依存しないための協⼒体制 § チーム全体で⾃動化のメリットを理解し、協⼒を得られなければ誰かに依 存した体制になってしまう
  15. チームにあった⾃動テストツールを選定しよう 69 ▌⾃動テストツールの選択基準 o テストピラミッドなどテスト戦略に基づいて § 「⾃動化しない」「あえてE2Eテストを⾃動化」もあり o チームメンバーの構成⼈数や内訳 §

    例)⾃動テストツールの利⽤者⽬線 ▌ ⾃動テストツールでテストケースを作る⼈ ▌ 壊れたテストケースを直す⼈ § ⾃動テストツールの実⾏結果がわかればいい⼈ o 製品の開発サイクル § 例)アジャイル
  16. 

  17. 付録. 適切なタイミングで必要なテストをする 76 出所: 『Agile Testing Condensed Japanese Edition』,第 1

    章:アジャイルテストが意味するものは何か? , 図: DevOps における継続的テストのループ
  18. 付録. 適切なタイミングで必要なテストをする 79 ▌完成した料理に含まれる塩分量を調べるのはたいへん💦 作るものを 決める レシピを 決める 材料を ⽤意

    調理 盛り付け 1.⾷品のサンプルをミキサーにかける 2.専⽤の分析器に⼊れる 3.偏りがないように、複数のサンプルを調査 ✓ イラストの出所: https://www.irasutoya.com/2015/03/blog-post_90.html
  19. 付録. 適切なタイミングで必要なテストをする 82 ▌そこで、「盛り付け」で味⾒もする 作るものを 決める レシピを 決める 材料を ⽤意

    調理 盛り付け 😇 ✓ ✓ イラストの出所: https://www.irasutoya.com/2020/12/blog-post_29.html, https://www.irasutoya.com/2013/12/blog-post_3932.html
  20. 付録. 適切なタイミングで必要なテストをする 83 ▌もし、「レシピを決める」段階でレシピに書かれた塩の分量が正し いか確認していたら・・・ 作るものを 決める レシピを 決める 材料を

    ⽤意 調理 盛り付け ✓ ✓ ✓ イラストの出所: https://www.irasutoya.com/2015/10/blog-post_944.html, https://www.irasutoya.com/2020/12/blog-post_29.html, https://www.irasutoya.com/2013/12/blog-post_3932.html
  21. 再掲)付録. 適切なタイミングで必要なテストをする 84 出所: 『Agile Testing Condensed Japanese Edition』,第 1

    章:アジャイルテストが意味するものは何か? , 図: DevOps における継続的テストのループ
  22. 参考資料 85 ▌平⽥敏之,細沼祐介.『iOSアプリ開発⾃動テストの教科書』. 技術評論社 . 2019 ▌Jonathan Rasmusson著, ⽟川 紘⼦訳.『初めての⾃動テスト

    ―Webシス テムのための⾃動テスト基礎』.オライリージャパン. 2017 ▌Ronald Cummings-John, Owais Peer著, 河原⽥ 政典訳. 『LEADING QUALITY 』. KADOKAWA. 2023 ▌Janet Gregory, Lisa Crispin著, Yuya Kazama訳. 『Agile Testing Condensed Japanese Edition』. Leanpub. 2020 ▌Continuous Testing in DevOps… – Dan Ashby . https://danashby.co.uk/2016/10/19/continuous-testing-in-devops (2024/04/24閲覧)