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

E2Eテストのflakyと向き合う / stac2020

ぱいん
December 05, 2020

E2Eテストのflakyと向き合う / stac2020

ぱいん

December 05, 2020
Tweet

More Decks by ぱいん

Other Decks in Technology

Transcript

  1. E2Eテストの
    flakyと向き合う
    ぱいん @pineapplecandy
    2020/12/5
    ソフトウェアテスト自動化カンファレンス
    @オンライン

    View Slide

  2. 本発表のゴール
    1. flakyとそのメカニズムを理解する
    2. flakyを疑似体験する
    3. flakyに立ち向かう勇気
    • 想定参加者
    • テスト自動化を始めたところ
    • テストの実行結果の不安定性を解決できていない
    • 自動テストの課題を見つめ直したい
    ソフトウェアテスト自動化カンファレンス2020
    2

    View Slide

  3. 本日の発表のスコープ
    ソフトウェアテスト自動化カンファレンス2020
    3
    [4]

    View Slide

  4. 自己紹介
    • ぱいん
    • テストアーキテクト@テストベンダー
    • 今は組込系のテスト自動化テックリード
    • Web系5年, 組込み系3年くらい
    • 一児のパパ New!
    • 社外活動など
    • JaSST Review実行委員、JaSST Online実行委員、
    SeleniumConf Tokyo Organizer
    • ソフトウェアテスト系の勉強会に参加したり、
    企画したり、発表したり
    • 趣味
    • Twitter
    • カラオケ
    4

    View Slide

  5. テスト自動化におけるflakyとは
    • 同じコードで成功と失敗の両方が観測できるテスト [1]
    • JaSST ’18 Tokyoの基調講演 “Advances in Continuous Integration Testing
    @Google”以来よく使われる言葉に
    • 「不安定なテスト」ではなく「不安定なテスト結果」 [2]
    • テストコードだけが悪いのではない
    • 考えられる外部要因の例
    • サーバ遅延(サーバ、バッチ処理、DBアクセス)
    • ネットワーク遅延
    • システムへの負荷(同時アクセス、割込処理)
    ソフトウェアテスト自動化カンファレンス2020
    5

    View Slide

  6. なぜ自動テストは失敗するのか?
    1. テスト対象が期待動作、
    期待値と外れている
    2. テストコードが誤っている
    ソフトウェアテスト自動化カンファレンス2020
    6
    合計金額 ¥3,000
    テストコードの期待値: ¥5,000
    合計金額 ¥5,000
    テストケース: 合計金額が¥5,000と表示されること
    テストコードの期待値: ¥3,000

    View Slide

  7. なぜ自動テストは失敗するのか?
    1. テスト対象が期待動作、
    期待値と外れている
    2. テストコードが誤っている
    3. テストケースに書いていない
    ことが起きる
    ソフトウェアテスト自動化カンファレンス2020
    7
    合計金額 ¥3,000
    テストコードの期待値: ¥5,000
    合計金額 ¥5,000
    テストケース: 合計金額が¥5,000と表示されること
    テストコードの期待値: ¥3,000
    合計金額 ¥5,000
    テストケース: 合計金額が¥5,000と表示されること
    テストコードの期待値: ¥5,000
    「表示される」ってすぐに?

    View Slide

  8. Flakyを経験したことありますか?
    ソフトウェアテスト自動化カンファレンス2020
    8
    疑似体験してみよう

    View Slide

  9. 事例紹介
    • Flakyにまつわる事例を紹介します
    • いつ、何が問題だったか考えてみてください
    • 正解はありません
    • [登場人物]
    • ぱいん:テスト自動化チームのリーダー(5年目, 27才)
    • すいか:新卒のテスト自動化エンジニア(2年目, 24才)
    • [状況]
    • とある宿泊予約のWebシステムのE2Eテスト自動化
    • 毎日デプロイされてくるステージング環境に流す
    • 実装できたテストから、順次実行
    • Failしたら、終了処理でスクリーンショットが取られる
    ※リアルに限りなく近いフィクションです。
    ソフトウェアテスト自動化カンファレンス2020
    9

    View Slide

  10. 事例 (1/4)
    ソフトウェアテスト自動化カンファレンス2020
    10
    • ある日
    • 「検索結果画面で合計金額を確認する
    テストがFailしたんですけど」
    • 「エラーのスクショ残ってると思うから見てみて」
    • 「見たんですけど、ちゃんと検索結果は表示されていて…」
    • 「ん?どういうことだろう?そのテストだけもう一回流してみて
    くれます?」
    • (15分後)
    • 「Passしました!なんだったんでしょうね…」
    • 「通ったしOK, OK, 新しいテストの実装すすめちゃって!」
    [3]

    View Slide

  11. 事例 (2/4)
    • 翌日
    • 「検索結果画面で合計金額を確認するテストが
    • Failしたんですけど」
    • 「またかー。エラーのスクショ残ってると思うから見てみて」
    • 「見たんですけど、ちゃんと検索結果は表示されていて…」
    • 「ん?どういうことだろう?そのテストだけもう一回流してみてくれま
    す?」
    • (15分後)
    • 「Passしました!なんだったんでしょうね…」
    • 「Passしたなら、よかったよかった!」
    ソフトウェアテスト自動化カンファレンス2020
    11

    View Slide

  12. 事例 (3/4)
    • 1週間後
    • 「検索結果画面で合計金額を確認するテストが、
    先週と同じところでFailしたんですけど。
    これ、3度目ですよ」
    • 「スクリーンショットみてみた?」
    • 「Loadingのぐるぐるが表示された状態でした」
    • 「なるほどね、じゃあmax waitを10秒伸ばしちゃえ」
    • 「了解です!」
    ソフトウェアテスト自動化カンファレンス2020
    12

    View Slide

  13. 事例 (4/4)
    • 2週間後
    • 「検索結果画面で合計金額を確認するテストが、
    先週と同じところでFailしたんですけど」
    • 「えー、まじかー。原因見てみて」
    • 「4回目なんでもうそろそろ辛いです。サーバのログとかも見てみたん
    ですけど、どうやら検索結果が表示されるのが先週より10秒以上
    遅くなったみたいです」
    • 「先週waitを10秒伸ばしたところだよね。どうなってるんだ。開発チーム
    に問い合わせしてみよう」
    ソフトウェアテスト自動化カンファレンス2020
    13

    View Slide

  14. いかがでしたか?
    ソフトウェアテスト自動化カンファレンス2020
    14

    View Slide

  15. 状況の整理
    • 事象
    • 検索結果画面で合計金額を確認するテストがFailした
    • Fail時のスクリーンショットを見る限りは、最初は表示されていた
    • 対処
    • ある日:実行し直す (コード修正なし)
    • 翌日:実行し直す (コード修正なし)
    • 1週間後:max waitを10s伸ばす
    • 2週間後:開発チームに問い合わせる
    ソフトウェアテスト自動化カンファレンス2020
    15

    View Slide

  16. 神様視点での考察
    1. 原因調査したことで、仕様確認が行えた
    2. もっと早く確認できていれば、対処が早かったの
    では
    1. 3回再実行を行った
    2. Max waitを10s伸ばした
    ソフトウェアテスト自動化カンファレンス2020
    16

    View Slide

  17. Flakyの難しいところ、落とし穴
    • 難しいところ
    1. テストケースに明示的に書かれていないことに対して、
    追い求めるべきなのか
    2. 許容して良い範囲がどこまでか判断しづらい
    3. 他の作業がある中で、調査時間を十分に割けるのか
    • 落とし穴
    1. Failすることに慣れてしまう
    2. PassさせてOKにしたことにしたい誘惑
    3. Flakyの調査で時間を無駄にしている
    ソフトウェアテスト自動化カンファレンス2020
    17

    View Slide

  18. 取り組んでいる工夫
    • Flakyが発生したときのルールを決める
    • 例) 別のビルドで2回Flakyが発生したら、開発チームに確認する
    • 怪しいところに時間計測ロジックを埋め込んでみる
    • timeライブラリ @python
    • 実行記録を調査結果付きで残す
    • 本体ビルドver, 日付, テストケース, 実行結果
    • Flakyの原因、タグ(フィルタ用)
    ソフトウェアテスト自動化カンファレンス2020
    18

    View Slide

  19. Flakyを事前に防ぐ取り組み (中級者以上向け)
    • 時間がかかる処理はTATの仕様を確認し、実装する️ ⌚
    • アプリ連携
    • DB処理
    • バッチ処理
    • DL処理
    • 開発のチケットを把握しておく️ ⌚ ⌚
    • 影響しそうな変更を知ることができる
    • テストアーキテクチャを見直す️️️ ⌚ ⌚ ⌚
    • APIテストやパフォーマンステストで検知できていたほうが良い
    • E2Eレベルでパフォーマンス観点は無視してよいとみなせるのであれば、
    FailならRetryさせてFlakyを防ぐという戦略もOK
    ソフトウェアテスト自動化カンファレンス2020
    19

    View Slide

  20. 推しの本紹介 [2]
    • 筆者が全員に読んで欲しい章
    • 1章: テストのピラミッド
    • 8章: ピラミッドを登る
    • 8.6 不安定なテストの扱い方
    1. テストを書き直す
    2. テストをピラミッドの下の層へ移動させる
    3. 価値のないテストとみなし、
    テストを止める
    20
    ソフトウェアテスト自動化カンファレンス2020

    View Slide

  21. まとめ
    1. Flakyに手を打たず放置すると、時間の浪費とエンジニアのモチ
    ベーションも下がってしまう事がわかった
    2. Flakyになる原因を検知しやすくするために、できそうな工夫を紹

    3. 最初からFlakyを減らすための取り組みを紹介
    ソフトウェアテスト自動化カンファレンス2020
    21

    View Slide

  22. 宣伝
    • テスト自動化お悩み相談やってます
    • Discordなり、 Twitter DMでお気軽にどうぞ
    ソフトウェアテスト自動化カンファレンス2020
    22

    View Slide

  23. おまけ
    • あなたの自動テストは信頼できますか?
    • 開発の進捗状況を把握したり、システムを発展
    させたり、早期に欠陥を捕捉したりするため
    に、プログラマー、顧客、テスターたちが書い
    た自動テストを信頼している
    ソフトウェアテスト自動化カンファレンス2020
    23

    View Slide

  24. 参考文献
    ソフトウェアテスト自動化カンファレンス2020
    24
    No. Slide # ページ名 URL
    1 5 Advances in Continuous
    Integration Testing @Google
    (PDF, JaSST ‘18 Tokyo)
    http://jasst.jp/symposium/jasst18tokyo/pdf/A1.pd
    f
    2 5 初めての自動テスト
    ―Webシステムのための自動テ
    スト基礎 (Jonathan Rasmusson
    著、玉川 紘子 訳)
    https://www.oreilly.co.jp/books/9784873118161/
    3 10-13 テスト自動化学習サイト
    HOTEL PLANISPHERE
    https://hotel.testplanisphere.dev/ja/
    4 4 テスト自動化研究会ー本会につ
    いて
    https://sites.google.com/site/testautomationresea
    rch/about

    View Slide