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
2
5.8k
E2Eテストのflakyと向き合う / stac2020
ぱいん
December 05, 2020
Tweet
Share
More Decks by ぱいん
See All by ぱいん
テストについて相談を受けたときに いつもしていること (公開用) #テストラジオ
pineapplecandy
0
330
カジュアル面談って、もっとカジュアルに していいの / informal session #jasstnano
pineapplecandy
0
240
アジャイルQA2年生が、過去の自分に伝えたいこと #テストラジオ
pineapplecandy
0
200
PO,SMに送るテスト自動化の8原則に5箇条を添えて / scrumniigata2023
pineapplecandy
2
1.7k
システムテスト自動化スクリプトのレビュー観点を挙げてみたの
pineapplecandy
0
450
しくじり先生ーアジャイルテスト自動化立ち上げ迷走記 #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
日本版とグローバル版のモバイルアプリ統合の開発の裏側と今後の展望
miichan
1
130
第3回Snowflake女子会_LT登壇資料(合成データ)_Taro_CCCMK
tarotaro0129
0
190
GitHub Copilot のテクニック集/GitHub Copilot Techniques
rayuron
37
14k
継続的にアウトカムを生み出し ビジネスにつなげる、 戦略と運営に対するタイミーのQUEST(探求)
zigorou
0
590
【re:Invent 2024 アプデ】 Prompt Routing の紹介
champ
0
150
MLOps の現場から
asei
6
650
スタートアップで取り組んでいるAzureとMicrosoft 365のセキュリティ対策/How to Improve Azure and Microsoft 365 Security at Startup
yuj1osm
0
220
祝!Iceberg祭開幕!re:Invent 2024データレイク関連アップデート10分総ざらい
kniino
3
300
TSKaigi 2024 の登壇から広がったコミュニティ活動について
tsukuha
0
160
10分で学ぶKubernetesコンテナセキュリティ/10min-k8s-container-sec
mochizuki875
3
350
Microsoft Azure全冠になってみた ~アレを使い倒した者が試験を制す!?~/Obtained all Microsoft Azure certifications Those who use "that" to the full will win the exam! ?
yuj1osm
2
110
多領域インシデントマネジメントへの挑戦:ハードウェアとソフトウェアの融合が生む課題/Challenge to multidisciplinary incident management: Issues created by the fusion of hardware and software
bitkey
PRO
2
110
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
48
2.2k
Documentation Writing (for coders)
carmenintech
66
4.5k
Thoughts on Productivity
jonyablonski
67
4.4k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
28
900
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
Building Adaptive Systems
keathley
38
2.3k
4 Signs Your Business is Dying
shpigford
181
21k
We Have a Design System, Now What?
morganepeng
51
7.3k
How to Ace a Technical Interview
jacobian
276
23k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
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