Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

テスト自動化から、 開発を支える継続的テストへ

Autify
November 02, 2023

テスト自動化から、 開発を支える継続的テストへ

2023-11-02 JaSST'23 Kyushu 招待講演
https://www.jasst.jp/symposium/jasst23kyushu.html

実装完了後の手動テストに依存した開発サイクルに継続的テストのアプローチを適用し、段階的に品質を向上する方法について説明しています。

Autify

November 02, 2023
Tweet

More Decks by Autify

Other Decks in Programming

Transcript

  1. Takuya Suemura 末村 拓也 •Autify, Inc •Technical Support Engineer /

    Test Automation Specialist •倉庫内軽作業→PHP開発→QAエンジニア→現職 •JaSST Online 実行委員 •趣味: テトリス、音ゲー、メカニカルキーボード
  2. ある開発チーム • Webアプリケーション開発 • 開発者10人 + PO1人 + QA1人 •

    スクラム開発 / 1スプリント2週間 • スプリントの終わりにリリース PO QA 開発者
  3. クライマックステスト 実装 バックログ チケット チケット チケット 実装 実装 テスト リリース

    バグ報告 UT UT UT ・開発者はユニットテストを書くが、 E2Eは 書かない ・リリースの直前にQAが手動テスト ・リリース3日前にコードフリーズ(リリース 範囲の確定)
  4. E2E 自動テスト 手動テスト 課題 - 問題に気づくのが遅い バックログ チケット チケット チケット

    リリース バグ報告 ここでようやく問題に気づく このテストコード 古いみたいだよ 実装 実装 実装 UT UT UT
  5. 開発中に問題に気づける バックログ チケット チケット チケット E2E E2E E2E 実装 実装

    実装 UT UT UT バックログ テストコード が古い バグがある リリース 手動テスト
  6. E2Eテストしすぎを減らす ✅ 正しいメールアドレス [email protected] ✅ エイリアスの入ったアドレス [email protected] ❌ ローカルパートがない @example.com

    ❌ ドメインパートがない foo123 ❌ ピリオドが連続している [email protected] ❌ スペースが入っている foo [email protected] 結合テスト ユニットテスト E2Eテスト
  7. 課題感が変わった • ✅ 一度にリリースする量が多い • ✅ 駆け込みマージが多い • ✅ 手戻りが多い

    • どんなテストが必要か、 チームで議論する機会がない • 機能性以外のテストがない • QAの手動テストが ボトルネックになっている
  8. 課題感が変わった • どんなテストが必要か、 チームで議論する機会がない • 機能性以外のテストがない • QAの手動テストが ボトルネックになっている •

    必要なテストについて議論する • 非機能性もテストする • QAの手動テストに頼らず 様々な方法を使う • QAの手動テストを挟まず どんどんデプロイする
  9. 開発の前 実装 バックログ チケット チケット チケット 実装 デプロイ 実装 自動

    テスト 自動 テスト 自動 テスト デプロイ デプロイ β GA
  10. リファインメントでテスト計画を立てる 💡 SMSでの多要素認証 E2Eテスト: • ユーザーは電話番号にSMSを送信できる。 • ユーザーが不正な電話番号を指定すると、エラーが表示される。 • 多要素認証を有効にしていないユーザーには、SMS認証画面が表示されない。

    結合テスト: • Twilioのテスト用番号を使って正常系/異常系のテストをする。 探索的テスト: • 30分 3~5人 出来るだけ幅広いモバイルキャリア、OSを準備する • 目的: モバイルキャリアや端末に依存する問題を見つける。 ロールアウト: • 日本国内の1%のユーザーに対して有効にし、段階的に範囲を広げる。
  11. リファインメントでテスト計画を立てる 💡 バグ修正: 検索結果表示数に 100 を指定しても表示数が変わらない E2Eテスト: • ユーザーは “50”

    を指定すると検索結果が50件になる。(既存) 結合テスト: • APIパラメーターとして 25/50/75/100 が渡されたとき、レスポンスに含まれるアイテムの 数はそれらに準じた数になる。 • 検索結果の数が指定された数より少ない場合は、すべての検索結果がレスポンスに含 まれる。 探索的テスト: 実施しない。
  12. 継続的デプロイメントとテスト Janet Gregory, Lisa Crispin, and Yuya Kazama. Agile Testing

    Condensed Japanese Edition (Kindle Location 869). Kindle Edition. 図形とイラストの追加は発表者によるもの。
  13. ユーザーにテストしてもらう カナリアリリース / パブリックベータリリース • ユーザビリティーの改善 • 互換性など、事前に見つけにくい不具合の発見 ◦ 例:

    特定のOS、特定の言語設定でのみ文字化けする ◦ 例: 特定のファイアーウォール設定下でのみ 画面の自動更新が不安定になる
  14. リリース後 実装 バックログ チケット チケット チケット 実装 デプロイ 実装 自動

    テスト 自動 テスト 自動 テスト デプロイ デプロイ β GA
  15. 今日話したこと • 手動テストに依存したQAテストフェーズから 開発サイクル全体を通した 継続的テスト に進化する 道筋の例を話しました • この例をたたき台にして 自分たちのチームでも話してみてください

    • 開発サイクルの要所要所で段階的にプロダクトを検証し リズミカルに品質を上げていきましょう クライマックステスト テスト自動化 シフトレフト テスト リアーキテクティング 継続的テスト