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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  78. おわりに

    View Slide

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

    View Slide

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

    View Slide

  81. ふりかえり

    View Slide

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

    View Slide

  83. おしまい

    View Slide