Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
E2Eテストのflakyと向き合う / stac2020
Search
ぱいん
December 05, 2020
Technology
2
5.8k
E2Eテストのflakyと向き合う / stac2020
ぱいん
December 05, 2020
Tweet
Share
More Decks by ぱいん
See All by ぱいん
テストについて相談を受けたときに いつもしていること (公開用) #テストラジオ
pineapplecandy
0
91
カジュアル面談って、もっとカジュアルに していいの / informal session #jasstnano
pineapplecandy
0
230
アジャイルQA2年生が、過去の自分に伝えたいこと #テストラジオ
pineapplecandy
0
200
PO,SMに送るテスト自動化の8原則に5箇条を添えて / scrumniigata2023
pineapplecandy
2
1.7k
システムテスト自動化スクリプトのレビュー観点を挙げてみたの
pineapplecandy
0
440
しくじり先生ーアジャイルテスト自動化立ち上げ迷走記 #D3QA / Failure teaches success in automated testing development
pineapplecandy
1
3.3k
これからシステムテスト自動化を始める組織のための勉強会(公開用)
pineapplecandy
2
2.8k
#WACATE 2019夏_夜の分科会_情報交換会_公開用
pineapplecandy
0
1.3k
#オンライン飲み会 経験ベースで語るテストエンジニアのための英語術 Ver.0.190113
pineapplecandy
0
1k
Other Decks in Technology
See All in Technology
歴史あるRuby on Railsでデッドコードを見つけ、 消す方法@yabaibuki.dev #3
ayumu838
0
720
MTDDC Meetup TOKYO 2024 運用フェーズに突入したウェブサイト。年々コスト増えていませんか?
kurashige
1
120
コンパウンド戦略に向けた技術選定とリアーキテクチャ
kworkdev
PRO
1
3.5k
次のコンテナセキュリティの時代 - User Namespace With a Pod / CloudNative Days Winter 2024
pfn
PRO
4
350
AWS re:Invent 2024 予選落ちのBedrockアプデをまとめて解説!
minorun365
PRO
2
200
Will multimodal language processing change the world?
keio_smilab
PRO
1
170
A Tour of Anti-patterns for Functional Programming
guvalif
0
2.3k
専門領域に特化したチームの挑戦
leveragestech
0
170
Mastering Quickfix
daisuzu
2
440
Entra ID の基礎(Japan Microsoft 365 コミュニティ カンファレンス 2024)
murachiakira
3
1.3k
実践/先取り「入門 Kubernetes Validating/Mutating Admission Policy」 / CloudNative Days Winter 2024
pfn
PRO
0
110
Android 15 でウィジェットピッカーのプレビュー画像をGlanceで魅せたい/nikkei-tech-talk-27-1
nikkei_engineer_recruiting
0
110
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
Designing the Hi-DPI Web
ddemaree
280
34k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Gamification - CAS2011
davidbonilla
80
5k
Docker and Python
trallard
40
3.1k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
What's in a price? How to price your products and services
michaelherold
243
12k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
1
200
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
93
17k
A Modern Web Designer's Workflow
chriscoyier
693
190k
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