Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
E2Eテストのflakyと向き合う / stac2020
Search
ぱいん
December 05, 2020
Technology
6.3k
2
Share
E2Eテストのflakyと向き合う / stac2020
ぱいん
December 05, 2020
More Decks by ぱいん
See All by ぱいん
それでも私が品質保証プロセスを作り続ける理由 #テストラジオ / Why I still continue to create QA process
pineapplecandy
0
420
テストについて相談を受けたときに いつもしていること (公開用) #テストラジオ
pineapplecandy
0
810
カジュアル面談って、もっとカジュアルに していいの / informal session #jasstnano
pineapplecandy
0
360
アジャイルQA2年生が、過去の自分に伝えたいこと #テストラジオ
pineapplecandy
0
300
PO,SMに送るテスト自動化の8原則に5箇条を添えて / scrumniigata2023
pineapplecandy
2
2.1k
システムテスト自動化スクリプトのレビュー観点を挙げてみたの
pineapplecandy
0
620
しくじり先生ーアジャイルテスト自動化立ち上げ迷走記 #D3QA / Failure teaches success in automated testing development
pineapplecandy
1
3.5k
これからシステムテスト自動化を始める組織のための勉強会(公開用)
pineapplecandy
2
3.2k
#WACATE 2019夏_夜の分科会_情報交換会_公開用
pineapplecandy
0
1.4k
Other Decks in Technology
See All in Technology
JJUG CCC 2026 Spring AI時代の開発こそ標準化を武器に! ― 方式・プロセス・プラットフォームの標準化
s27watanabe
2
630
GitHub Copilot CLIでWebアクセシビリティを改善した話
tomokusaba
0
130
Databricks 月刊サービスアップデート 2026年05月号
tyosi1212
0
120
プラットフォームエンジニア ワークショップ/ platform-workshop
databricksjapan
0
140
海外カンファレンス「JavaOne」参加レポート ユーザー系IT企業における目的・成果/JavaOne Report Purpose and Results in the User IT Company
muit
0
110
「使われるデータ基盤」を目指してデータアナリストとワークショップをやった話
jackojacko_
2
940
大学生が本気でDatabricksを活用してDiscordサークルをデータ駆動させてみた
phantomjuju
1
290
個人の発見を、組織の知恵に 〜生成AI活用を"探索"から"組織の仕組み"へ〜
kintotechdev
2
120
OpenClawとHermesAgentでAI新入社員を作った話
takanoriyanada
0
140
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
2.7k
APIテストとは?
nagix
0
160
オンコールの負荷軽減のためのBits Assistant 活用方法 / How to Use Bits Assistant to Reduce the Workload on On-Call Staff
sms_tech
1
340
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
141
7.5k
Documentation Writing (for coders)
carmenintech
77
5.4k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
22k
Mind Mapping
helmedeiros
PRO
1
220
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
350
Designing Powerful Visuals for Engaging Learning
tmiket
1
390
Skip the Path - Find Your Career Trail
mkilby
1
130
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.9k
Transcript
E2Eテストの flakyと向き合う ぱいん @pineapplecandy 2020/12/5 ソフトウェアテスト自動化カンファレンス @オンライン
本発表のゴール 1. flakyとそのメカニズムを理解する 2. flakyを疑似体験する 3. flakyに立ち向かう勇気 • 想定参加者 •
テスト自動化を始めたところ • テストの実行結果の不安定性を解決できていない • 自動テストの課題を見つめ直したい ソフトウェアテスト自動化カンファレンス2020 2
本日の発表のスコープ ソフトウェアテスト自動化カンファレンス2020 3 [4]
自己紹介 • ぱいん • テストアーキテクト@テストベンダー • 今は組込系のテスト自動化テックリード • Web系5年, 組込み系3年くらい
• 一児のパパ New! • 社外活動など • JaSST Review実行委員、JaSST Online実行委員、 SeleniumConf Tokyo Organizer • ソフトウェアテスト系の勉強会に参加したり、 企画したり、発表したり • 趣味 • Twitter • カラオケ 4
テスト自動化におけるflakyとは • 同じコードで成功と失敗の両方が観測できるテスト [1] • JaSST ’18 Tokyoの基調講演 “Advances in
Continuous Integration Testing @Google”以来よく使われる言葉に • 「不安定なテスト」ではなく「不安定なテスト結果」 [2] • テストコードだけが悪いのではない • 考えられる外部要因の例 • サーバ遅延(サーバ、バッチ処理、DBアクセス) • ネットワーク遅延 • システムへの負荷(同時アクセス、割込処理) ソフトウェアテスト自動化カンファレンス2020 5
なぜ自動テストは失敗するのか? 1. テスト対象が期待動作、 期待値と外れている 2. テストコードが誤っている ソフトウェアテスト自動化カンファレンス2020 6 合計金額 ¥3,000
テストコードの期待値: ¥5,000 合計金額 ¥5,000 テストケース: 合計金額が¥5,000と表示されること テストコードの期待値: ¥3,000
なぜ自動テストは失敗するのか? 1. テスト対象が期待動作、 期待値と外れている 2. テストコードが誤っている 3. テストケースに書いていない ことが起きる ソフトウェアテスト自動化カンファレンス2020
7 合計金額 ¥3,000 テストコードの期待値: ¥5,000 合計金額 ¥5,000 テストケース: 合計金額が¥5,000と表示されること テストコードの期待値: ¥3,000 合計金額 ¥5,000 テストケース: 合計金額が¥5,000と表示されること テストコードの期待値: ¥5,000 「表示される」ってすぐに?
Flakyを経験したことありますか? ソフトウェアテスト自動化カンファレンス2020 8 疑似体験してみよう
事例紹介 • Flakyにまつわる事例を紹介します • いつ、何が問題だったか考えてみてください • 正解はありません • [登場人物] •
ぱいん:テスト自動化チームのリーダー(5年目, 27才) • すいか:新卒のテスト自動化エンジニア(2年目, 24才) • [状況] • とある宿泊予約のWebシステムのE2Eテスト自動化 • 毎日デプロイされてくるステージング環境に流す • 実装できたテストから、順次実行 • Failしたら、終了処理でスクリーンショットが取られる ※リアルに限りなく近いフィクションです。 ソフトウェアテスト自動化カンファレンス2020 9
事例 (1/4) ソフトウェアテスト自動化カンファレンス2020 10 • ある日 • 「検索結果画面で合計金額を確認する テストがFailしたんですけど」 •
「エラーのスクショ残ってると思うから見てみて」 • 「見たんですけど、ちゃんと検索結果は表示されていて…」 • 「ん?どういうことだろう?そのテストだけもう一回流してみて くれます?」 • (15分後) • 「Passしました!なんだったんでしょうね…」 • 「通ったしOK, OK, 新しいテストの実装すすめちゃって!」 [3]
事例 (2/4) • 翌日 • 「検索結果画面で合計金額を確認するテストが • Failしたんですけど」 • 「またかー。エラーのスクショ残ってると思うから見てみて」
• 「見たんですけど、ちゃんと検索結果は表示されていて…」 • 「ん?どういうことだろう?そのテストだけもう一回流してみてくれま す?」 • (15分後) • 「Passしました!なんだったんでしょうね…」 • 「Passしたなら、よかったよかった!」 ソフトウェアテスト自動化カンファレンス2020 11
事例 (3/4) • 1週間後 • 「検索結果画面で合計金額を確認するテストが、 先週と同じところでFailしたんですけど。 これ、3度目ですよ」 • 「スクリーンショットみてみた?」
• 「Loadingのぐるぐるが表示された状態でした」 • 「なるほどね、じゃあmax waitを10秒伸ばしちゃえ」 • 「了解です!」 ソフトウェアテスト自動化カンファレンス2020 12
事例 (4/4) • 2週間後 • 「検索結果画面で合計金額を確認するテストが、 先週と同じところでFailしたんですけど」 • 「えー、まじかー。原因見てみて」 •
「4回目なんでもうそろそろ辛いです。サーバのログとかも見てみたん ですけど、どうやら検索結果が表示されるのが先週より10秒以上 遅くなったみたいです」 • 「先週waitを10秒伸ばしたところだよね。どうなってるんだ。開発チーム に問い合わせしてみよう」 ソフトウェアテスト自動化カンファレンス2020 13
いかがでしたか? ソフトウェアテスト自動化カンファレンス2020 14
状況の整理 • 事象 • 検索結果画面で合計金額を確認するテストがFailした • Fail時のスクリーンショットを見る限りは、最初は表示されていた • 対処 •
ある日:実行し直す (コード修正なし) • 翌日:実行し直す (コード修正なし) • 1週間後:max waitを10s伸ばす • 2週間後:開発チームに問い合わせる ソフトウェアテスト自動化カンファレンス2020 15
神様視点での考察 1. 原因調査したことで、仕様確認が行えた 2. もっと早く確認できていれば、対処が早かったの では 1. 3回再実行を行った 2. Max
waitを10s伸ばした ソフトウェアテスト自動化カンファレンス2020 16
Flakyの難しいところ、落とし穴 • 難しいところ 1. テストケースに明示的に書かれていないことに対して、 追い求めるべきなのか 2. 許容して良い範囲がどこまでか判断しづらい 3. 他の作業がある中で、調査時間を十分に割けるのか
• 落とし穴 1. Failすることに慣れてしまう 2. PassさせてOKにしたことにしたい誘惑 3. Flakyの調査で時間を無駄にしている ソフトウェアテスト自動化カンファレンス2020 17
取り組んでいる工夫 • Flakyが発生したときのルールを決める • 例) 別のビルドで2回Flakyが発生したら、開発チームに確認する • 怪しいところに時間計測ロジックを埋め込んでみる • timeライブラリ
@python • 実行記録を調査結果付きで残す • 本体ビルドver, 日付, テストケース, 実行結果 • Flakyの原因、タグ(フィルタ用) ソフトウェアテスト自動化カンファレンス2020 18
Flakyを事前に防ぐ取り組み (中級者以上向け) • 時間がかかる処理はTATの仕様を確認し、実装する️ ⌚ • アプリ連携 • DB処理 •
バッチ処理 • DL処理 • 開発のチケットを把握しておく️ ⌚ ⌚ • 影響しそうな変更を知ることができる • テストアーキテクチャを見直す️️️ ⌚ ⌚ ⌚ • APIテストやパフォーマンステストで検知できていたほうが良い • E2Eレベルでパフォーマンス観点は無視してよいとみなせるのであれば、 FailならRetryさせてFlakyを防ぐという戦略もOK ソフトウェアテスト自動化カンファレンス2020 19
推しの本紹介 [2] • 筆者が全員に読んで欲しい章 • 1章: テストのピラミッド • 8章: ピラミッドを登る
• 8.6 不安定なテストの扱い方 1. テストを書き直す 2. テストをピラミッドの下の層へ移動させる 3. 価値のないテストとみなし、 テストを止める 20 ソフトウェアテスト自動化カンファレンス2020
まとめ 1. Flakyに手を打たず放置すると、時間の浪費とエンジニアのモチ ベーションも下がってしまう事がわかった 2. Flakyになる原因を検知しやすくするために、できそうな工夫を紹 介 3. 最初からFlakyを減らすための取り組みを紹介 ソフトウェアテスト自動化カンファレンス2020
21
宣伝 • テスト自動化お悩み相談やってます • Discordなり、 Twitter DMでお気軽にどうぞ ソフトウェアテスト自動化カンファレンス2020 22
おまけ • あなたの自動テストは信頼できますか? • 開発の進捗状況を把握したり、システムを発展 させたり、早期に欠陥を捕捉したりするため に、プログラマー、顧客、テスターたちが書い た自動テストを信頼している ソフトウェアテスト自動化カンファレンス2020 23
参考文献 ソフトウェアテスト自動化カンファレンス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