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

継続的テストモデルにおける具体的な施策を学ぶ / Specific practice about Continuous Testing Model

nihonbuson
December 19, 2021

継続的テストモデルにおける具体的な施策を学ぶ / Specific practice about Continuous Testing Model

nihonbuson

December 19, 2021
Tweet

More Decks by nihonbuson

Other Decks in Technology

Transcript

  1. 継続的テストモデル
    における
    具体的な施策を学ぶ
    ブロッコリー
    (@nihonbuson)

    View full-size slide

  2. 自己紹介
    ● 風間裕也(ブロッコリー)
    ● @nihobuson
    ● 社外活動
    ○ WACATE 2019 夏からWACATE実行委員
    ○ JaSST Review 実行委員長
    ○ 書籍『Agile Testing Condensed』翻訳
    ○ 書籍『Testing in DevOps』翻訳
    ● 猫派

    View full-size slide

  3. アジェンダ
    ● 継続的テストモデルという考え方
    ● 継続的テストモデルを支える技術
    ● 継続的テストモデルでの具体的な施策
    ○ 開発を手助けする施策
    ○ 一般的に行うテストの後に実施できる施策
    ○ 新機能の利用者を徐々に広げる施策
    ○ 本番環境で試す施策

    View full-size slide

  4. 継続的テストモデル
    という考え方

    View full-size slide

  5. 継続的テストモデル
    https://danashby.co.uk/2016/10/19/continuous-testing-in-devops/
    『Agile Testing Condensed』
    第1章 P3より

    View full-size slide

  6. 継続的テストモデル
    https://danashby.co.uk/2016/10/19/continuous-testing-in-devops/
    テスト作業の
    範囲に
    なりがち 『Agile Testing Condensed』
    第1章 P3より

    View full-size slide

  7. 継続的テストモデル
    https://danashby.co.uk/2016/10/19/continuous-testing-in-devops/
    TDD
    など
    『Agile Testing Condensed』
    第1章 P3より

    View full-size slide

  8. 継続的テストモデル
    https://danashby.co.uk/2016/10/19/continuous-testing-in-devops/
    設計
    レビュー・
    実例
    マッピング
    など
    『Agile Testing Condensed』
    第1章 P3より

    View full-size slide

  9. 継続的テストモデル
    https://danashby.co.uk/2016/10/19/continuous-testing-in-devops/
    『Agile Testing Condensed』
    第1章 P3より
    今回の
    範囲

    View full-size slide

  10. 継続的テストモデル
    を支える技術

    View full-size slide

  11. 継続的テストモデルを支える技術
    ● リリース戦略
    ● トグル

    View full-size slide

  12. リリース戦略
    ● 目的・背景の違いにより、リリースまでの
    デプロイ先環境が異なってくる
    ○ デプロイ…開発したアプリケーションを
         サーバー上に配置・展開すること
    ● どのような目的の環境を作成するのか、
    どのタイミングでデプロイするのか考える必要がある
    ● リリース戦略とテスト戦略には関係性がある
    ○ 作成できる環境の制限やリリース戦略によって、
    実施できるテスト戦略も制限される
    ○ テスト戦略によって作成すべき環境が変わる

    View full-size slide

  13. リリース戦略例1(本番環境に即時デプロイ)
    開発
    環境
    本番
    環境
    機能開発のデプロイ
    バグ修正のデプロイ
    時間軸
    ※本来はブランチでの記載をした方が自然かもしれませんが、
     普段の業務でコードを扱わない人もいるかもしれないため、
     環境のタイムラインとして表現しています

    View full-size slide

  14. リリース戦略例1(本番環境に即時デプロイ)
    開発
    環境
    本番
    環境
    機能開発のデプロイ
    バグ修正のデプロイ
    時間軸
    ※本来はブランチでの記載をした方が自然かもしれませんが、
     普段の業務でコードを扱わない人もいるかもしれないため、
     環境のタイムラインとして表現しています

    View full-size slide

  15. リリース戦略例2(検証環境で一旦確認)
    検証
    環境
    開発
    環境A
    本番
    環境
    機能開発のデプロイ
    バグ修正のデプロイ
    時間軸

    View full-size slide

  16. リリース戦略例2(検証環境で一旦確認)
    検証
    環境
    開発
    環境A
    本番
    環境
    機能開発のデプロイ
    バグ修正のデプロイ
    時間軸

    View full-size slide

  17. リリース戦略例2(検証環境で一旦確認)
    検証
    環境
    開発
    環境A
    本番
    環境
    機能開発のデプロイ
    バグ修正のデプロイ
    時間軸

    View full-size slide

  18. リリース戦略例2(検証環境で一旦確認)
    検証
    環境
    開発
    環境A
    本番
    環境
    開発
    環境B
    機能開発のデプロイ
    バグ修正のデプロイ
    時間軸

    View full-size slide

  19. リリース戦略例2(検証環境で一旦確認)
    検証
    環境
    開発
    環境A
    本番
    環境
    開発
    環境B
    機能開発のデプロイ
    バグ修正のデプロイ
    時間軸

    View full-size slide

  20. トグル(フラグ)
    ● 何らかの条件でスイッチすることで、
    対象者によって見え方を変える仕組み
    ● 有名なものとして
    フィーチャートグル(フィーチャーフラグ)がある
    ● 開発やインフラの技術の制限によって、
    トグルの実現ができない場合がある

    View full-size slide

  21. トグルの例
    機能X
    ユーザーA
    トグルによって振り分け

    View full-size slide

  22. トグルの例
    機能X
    ユーザーA
    機能X'
    ユーザーB
    トグルによって振り分け

    View full-size slide

  23. 継続的テストモデル
    での具体的な施策

    View full-size slide

  24. 継続的テストモデル
    https://danashby.co.uk/2016/10/19/continuous-testing-in-devops/
    『Agile Testing Condensed』
    第1章 P3より

    View full-size slide

  25. 継続的テストモデルでの具体的な施策
    ● 開発を手助けする施策
    ○ ダークローンチ
    ○ A/Bテスト
    ● 一般的なテストの後に実施できる施策
    ○ バグバッシュ
    ○ ドッグフーディング
    ● 新機能の利用者を徐々に広げる施策
    ○ βテスト
    ○ カナリアリリース

    View full-size slide

  26. 開発を手助けする施策

    View full-size slide

  27. 開発を手助けする施策
    ● ダークローンチ
    ● A/Bテスト

    View full-size slide

  28. ダークローンチ
    ● 本番環境のデプロイ内容に、
    開発途中のコードを混ぜて載せる方法
    ● 開発途中の機能はユーザーに見えないようにする

    View full-size slide

  29. ダークローンチのイメージ図
    既存機能
    新規機能
    ユーザーは
    既存機能しか
    見えない

    View full-size slide

  30. ダークローンチのリリース戦略例
    開発
    環境
    本番
    環境
    機能開発のデプロイ
    バグ修正のデプロイ

    View full-size slide

  31. ダークローンチのリリース戦略例
    開発
    環境
    本番環境での
    フィーチャー
    トグルをON
    本番
    環境
    機能開発のデプロイ
    バグ修正のデプロイ
    トグルがONの間
    ユーザーには
    見えていない

    View full-size slide

  32. ダークローンチのリリース戦略例
    開発
    環境
    本番環境での
    フィーチャー
    トグルをON
    本番
    環境
    機能開発のデプロイ
    バグ修正のデプロイ
    トグルがONの間
    ユーザーには
    見えていない

    View full-size slide

  33. ダークローンチのリリース戦略例
    開発
    環境
    本番環境での
    フィーチャー
    トグルをON
    本番
    環境
    機能開発のデプロイ
    バグ修正のデプロイ
    トグルがONの間
    ユーザーには
    見えていない

    View full-size slide

  34. ダークローンチのリリース戦略例
    開発
    環境
    本番環境での
    フィーチャー
    トグルをON
    本番環境での
    フィーチャー
    トグルをOFF
    本番
    環境
    機能開発のデプロイ
    バグ修正のデプロイ
    トグルがONの間
    ユーザーには
    見えていない

    View full-size slide

  35. ダークローンチ無しのリリース戦略例
    開発
    環境
    今までの開発した
    コードをいっぺんに
    本番環境へデプロイ
    本番
    環境
    開発中にデプロイ
    しないため
    差分が溜まり続ける

    View full-size slide

  36. ダークローンチの利点と注意点
    ● 利点
    ○ 毎回の差分が少ないため、
    レビューやテストがしやすい
    ● 注意点
    ○ きちんと設定しないと、
    お客様に開発途中の画面が見えてしまう
    ■ フィーチャートグルの仕組みが重要

    View full-size slide

  37. A/Bテスト
    ● 改善候補と既存の機能を
    実際のユーザーに比較して試してもらい、
    有用な改善か統計的に判断する方法

    View full-size slide

  38. A/Bテストのイメージ図
    既存機能
    ユーザーA
    新規機能
    ユーザーB
    統計的に
    ランダムに振り分け

    View full-size slide

  39. A/Bテストのリリース戦略例
    本番環境での
    A/Bテストの
    トグルをON
    本番
    環境
    開発
    環境
    機能開発のデプロイ
    バグ修正のデプロイ

    View full-size slide

  40. A/Bテストのリリース戦略例(新機能採用)
    本番環境での
    A/Bテストの
    トグルをON
    本番
    環境
    開発
    環境
    機能開発のデプロイ
    バグ修正のデプロイ
    既存機能より
    新機能の方が
    良い結果になった

    View full-size slide

  41. A/Bテストのリリース戦略例(新機能採用)
    本番環境での
    A/Bテストの
    トグルをON
    本番環境での
    A/Bテストの
    トグルを消す
    本番
    環境
    開発
    環境
    機能開発のデプロイ
    バグ修正のデプロイ
    既存機能より
    新機能の方が
    良い結果になった

    View full-size slide

  42. A/Bテストのリリース戦略例(新機能却下)
    本番環境での
    A/Bテストの
    トグルをON
    本番
    環境
    開発
    環境
    機能開発のデプロイ
    リバートのデプロイ
    既存機能より
    新機能の方が
    悪い結果になった

    View full-size slide

  43. A/Bテストのリリース戦略例(新機能却下)
    本番環境での
    A/Bテストの
    トグルをON
    変更前の
    状態に戻す
    本番
    環境
    開発
    環境
    機能開発のデプロイ
    リバートのデプロイ
    既存機能より
    新機能の方が
    悪い結果になった

    View full-size slide

  44. A/Bテストの利点と注意点
    ● 利点
    ○ 本格的な実装前に、有用か判断できる
    ● 注意点
    ○ 統計的にランダムであることを保証する必要がある
    ○ 統計的に有意な差があることを確認する必要がある
    ○ バグ検出は目的でないのでバグが少ない前提が必要
    ○ ユーザーに決定を委ねがちになる
    ■ 「もし顧客に、望むものを聞いていたら、
    『もっと速い馬が欲しい』と答えただろう。」
    byヘンリーフォード

    View full-size slide

  45. 一般的に行うテスト
    の後に実施できる施策

    View full-size slide

  46. 一般的に行うテストの後に実施できる施策
    ● バグバッシュ
    ● ドッグフーディング

    View full-size slide

  47. バグバッシュ
    ● 短時間にみんなでテスト作業を行い、
    新しいバグを見つける方法
    ○ 開発者も開発の手を止めてバグバッシュに参加

    View full-size slide

  48. バグバッシュのリリース戦略例
    検証
    環境
    開発
    環境A
    本番
    環境
    機能開発のデプロイ
    バグ修正のデプロイ
    バグバッシュ実施

    View full-size slide

  49. バグバッシュのリリース戦略例
    検証
    環境
    開発
    環境A
    本番
    環境
    機能開発のデプロイ
    バグ修正のデプロイ
    バグバッシュ実施
    →バグ発見

    View full-size slide

  50. バグバッシュのリリース戦略例
    検証
    環境
    開発
    環境A
    本番
    環境
    開発
    環境B
    機能開発のデプロイ
    バグ修正のデプロイ
    バグバッシュ実施
    →バグ発見

    View full-size slide

  51. バグバッシュのリリース戦略例
    検証
    環境
    開発
    環境A
    本番リリース
    本番
    環境
    開発
    環境B
    機能開発のデプロイ
    バグ修正のデプロイ
    バグバッシュ実施
    →バグ発見

    View full-size slide

  52. バグバッシュの利点と注意点
    ● 利点
    ○ 動くプロダクトにみんなで向き合うことができる
    ■ 開発者がテスター任せにしないようになる
    ● 注意点
    ○ ある程度、製品が安定している必要がある
    ■ バグが少ない製品である
    ● 些細なバグが大量に出ない前提
    ■ バグバッシュ中に製品を更新しない
    ○ リリースサイクルがある程度長い必要がある

    View full-size slide

  53. ドッグフーディング
    ● 一般公開する前に、業務中や生活の中で
    社員が製品を使ってみる方法

    View full-size slide

  54. ドッグフーディングのリリース戦略例
    社内リリース
    環境
    検証環境
    開発環境
    次回分
    検証環境
    次回分
    開発環境
    本番
    環境

    View full-size slide

  55. ドッグフーディングのリリース戦略例
    社内リリース
    環境
    検証環境
    ドッグフーディング期間
    開発環境
    次回分
    検証環境
    次回分
    開発環境
    本番
    環境

    View full-size slide

  56. ドッグフーディングのリリース戦略例
    社内リリース
    環境
    検証環境
    ドッグフーディング期間
    →期間中にバグ発見
    開発環境
    次回分
    検証環境
    次回分
    開発環境
    本番
    環境
    開発
    環境

    View full-size slide

  57. ドッグフーディングのリリース戦略例
    社内リリース
    環境
    検証環境
    ドッグフーディング期間
    →期間中にバグ発見
    本番リリース
    開発環境
    次回分
    検証環境
    次回分
    開発環境
    本番
    環境
    開発
    環境

    View full-size slide

  58. ドッグフーディングの利点と注意点
    ● 利点
    ○ 問題が一般ユーザーに流出するのを防ぐ
    ● 注意点
    ○ 一般ユーザーと専門的な知識の量に差がある場合
    適切にバグを見つけられない
    ■ 開発者が詳しく知りすぎている製品
    ■ 専門家御用達の製品
    ○ リリースサイクルがある程度長い必要がある

    View full-size slide

  59. 新機能の利用者を
    徐々に広げる施策

    View full-size slide

  60. 新機能の利用者を徐々に広げる施策
    ● βテスト
    ● カナリアリリース

    View full-size slide

  61. βテスト
    ● 新しいバージョンを特定のユーザーにリリースして、
    対応できるかどうか確認する方法

    View full-size slide

  62. βテストのイメージ図
    既存機能
    一般
    ユーザー
    新規機能
    βテスト
    ユーザー
    βテスト希望者は
    新規機能に振り分け

    View full-size slide

  63. βテストのリリース戦略例
    本番環境での
    βテストの
    トグルをON
    本番
    環境
    開発
    環境
    機能開発のデプロイ
    バグ修正のデプロイ

    View full-size slide

  64. βテストのリリース戦略例
    本番環境での
    βテストの
    トグルをON
    本番
    環境
    開発
    環境
    機能開発のデプロイ
    バグ修正のデプロイ
    βテストユーザー
    によるバグ報告

    View full-size slide

  65. βテストのリリース戦略例
    本番環境での
    βテストの
    トグルをON
    本番
    環境
    開発
    環境
    開発
    環境
    機能開発のデプロイ
    バグ修正のデプロイ
    βテストユーザー
    によるバグ報告

    View full-size slide

  66. βテストのリリース戦略例
    本番環境での
    βテストの
    トグルをON
    本番環境での
    βテストの
    トグルを消す
    本番
    環境
    開発
    環境
    開発
    環境
    機能開発のデプロイ
    バグ修正のデプロイ
    βテストユーザー
    によるバグ報告

    View full-size slide

  67. βテストの利点と注意点
    ● 利点
    ○ 特定のユーザーならではの多様な視点が入る
    ○ 早めに製品を公開することで差別化を測れる
    ● 注意点
    ○ βテスト参加者は全ユーザーの代表者ではない
    ■ 新しいもの好きな性格
    ○ 製品を熟知して初めて分かるバグを見つけられない
    ○ バグの一部が見過ごされる可能性がある
    ■ 示されている挙動が正しいと勘違いしてしまう

    View full-size slide

  68. カナリアリリース
    ● ユーザーの一部にリリースして、
    状況を見て全体に対象を広げるか判断する方法
    ○ 例)アクセス先が、
    ■ Aサーバー…新機能を使える状態で画面を表示
    ■ Bサーバー…新機能を隠した状態で画面を表示
    ○ 新機能の対象者の振り分け方
    ■ アクセスしたサーバーの所在地
    ● 例)日本のサーバーでは新機能を利用可能
    ■ 利用しているアプリのバージョン
    ● 例)新バージョンの一部ユーザーは利用可能

    View full-size slide

  69. カナリアリリースのイメージ図
    既存機能
    ユーザーA
    新規機能
    ユーザーB
    対象者は
    新規機能に振り分け

    View full-size slide

  70. カナリアリリースのリリース戦略例1
    本番環境での
    カナリアリリースの
    トグルをON
    本番
    環境
    開発
    環境
    機能開発のデプロイ
    バグ修正のデプロイ

    View full-size slide

  71. カナリアリリースのリリース戦略例1
    本番環境での
    カナリアリリースの
    トグルをON
    本番
    環境
    開発
    環境
    機能開発のデプロイ
    バグ修正のデプロイ
    カナリアリリース
    対象者による
    軽微なバグ報告

    View full-size slide

  72. カナリアリリースのリリース戦略例1
    本番環境での
    カナリアリリースの
    トグルをON
    本番
    環境
    開発
    環境
    機能開発のデプロイ
    バグ修正のデプロイ
    カナリアリリース
    対象者による
    軽微なバグ報告

    View full-size slide

  73. カナリアリリースのリリース戦略例1
    本番環境での
    カナリアリリースの
    トグルをON
    本番環境での
    カナリアリリースの
    トグルを消す
    本番
    環境
    開発
    環境
    機能開発のデプロイ
    バグ修正のデプロイ
    カナリアリリース
    対象者による
    軽微なバグ報告

    View full-size slide

  74. カナリアリリースのリリース戦略例2
    本番環境での
    カナリアリリースの
    トグルをON
    本番
    環境
    開発
    環境
    機能開発のデプロイ
    リバートのデプロイ

    View full-size slide

  75. カナリアリリースのリリース戦略例2
    本番環境での
    カナリアリリースの
    トグルをON
    本番
    環境
    開発
    環境
    機能開発のデプロイ
    リバートのデプロイ
    トラブルが
    多発

    View full-size slide

  76. カナリアリリースのリリース戦略例2
    本番環境での
    カナリアリリースの
    トグルをON
    変更前の
    状態に戻す
    本番
    環境
    開発
    環境
    機能開発のデプロイ
    リバートのデプロイ
    トラブルが
    多発

    View full-size slide

  77. カナリアリリースの利点と注意点
    ● 利点
    ○ 想定外の事態になった場合、
    全体へのリリースを取りやめることができる
    ● 注意点
    ○ ロールバックの仕組みを準備しておく必要がある
    ■ データの二重管理が必要になる
    ○ A/Bテストとの併用が難しくなる
    ■ 統計的にランダムである保証が無くなる

    View full-size slide

  78. おわりに

    View full-size slide

  79. まとめ
    施策名 利点 注意点
    ダークローンチ ・毎回の差分が少ない ・開発途中画面が見えるリスク
    A/Bテスト ・事前に有用な機能か判断可能 ・統計の考えが必要
    バグバッシュ ・みんなで製品に向き合う ・長いリリースサイクルが必要
    ドッグ
    フーディング
    ・一般ユーザーの使用前に
     バグ検出
    ・長いリリースサイクルが必要
    ・一般ユーザーとの知識量の差
    βテスト ・多様な視点が入る ・バグの一部が見過ごされる
    カナリア
    リリース
    ・全体のリリースの
     取りやめ判断ができる
    ・ロールバックの仕組みが必要
    ・A/Bテストとの併用が難しい

    View full-size slide

  80. おわりに
    ● リリース戦略とテスト戦略には密接な関係がある
    ○ リリース戦略の決定によって、
    実施できるテスト戦略も変わってくる
    ○ テスト戦略の立案によって、
    リリース戦略に影響を及ぼす
    ● 実現できる技術によって、テスト戦略も変わってくる
    ○ 例)トグルの実現により、ダークローンチが可能に
    ● 「QAだから/テストフェーズだからテストする」
    ではなく、全体の戦略やリリース戦略まで踏まえた
    テストを考えよう!

    View full-size slide

  81. ふりかえり

    View full-size slide

  82. ふりかえり
    ● 自チームや自組織を思い出し、下記の2つを書こう
    ○ 【1】既に実施している内容
    ■ 例)開発が完了した段階で、チーム全員で
      バグが無いか確認する日を設けている
    ● →バグバッシュを既にやっているのかも?
    ○ 【2】これから実施したい/できそうな内容
    ■ 例)毎リリースで差分が大きくて、
      デグレが発生してしまう…
    ● →ダークローンチを試す価値があるかも?
    ● その他、感想等を書こう

    View full-size slide

  83. おしまい

    View full-size slide