Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Secret sauce for improving developer experience: tackle flaky tests

Secret sauce for improving developer experience: tackle flaky tests

「開発者体験向上に欠かせない不安定なテスト改善の秘訣」
LINE / LINE Fukuoka SETチーム 金子茉以

2023.03.30
LINE × Launchable - Developer Test安定化と高速化へのアプローチ
https://launchableinc.connpass.com/event/277667/

LINE Developers
PRO

March 30, 2023
Tweet

More Decks by LINE Developers

Other Decks in Technology

Transcript

  1. 2023.3.30
    開発者体験向上に⽋かせない
    不安定なテスト改善の秘訣
    Mai Kaneko

    View Slide

  2. ⾃⼰紹介
    ⽒名 : ⾦⼦茉以(Kaneko Mai)
    会社 : LINE Fukuoka
    所属 : 開発2室 SETチーム
    役割 : Software Engineer in Test
    担当プロジェクト : LINE Creators Market
    https://creator.line.me/ja/
    Twitter : https://twitter.com/maturika_ne

    View Slide

  3. 発表内容
    安定化 ⾼速化

    View Slide

  4. 発表内容
    安定化 ⾼速化
    安定化

    View Slide

  5. 01
    02
    03
    04
    05
    06
    07
    Contents
    LINEのSETがやっていること
    Flaky testとは
    Flaky testあるある
    Flaky testへの対応
    Launchableを使った事例
    Launchableを使った感想
    まとめ

    View Slide

  6. 以前のE2Eテストの実⾏状況
    QA環境 本番環境
    開発環境
    Daily E2E テスト
    (約200テスト
    ケース)
    Daily E2E テスト
    (約80テストケー
    ス)
    開発者へのフィードバックが遅い

    View Slide

  7. 現在のE2Eテスト実⾏状況
    QA環境 本番環境
    開発環境
    Daily E2E テスト
    実⾏
    Daily E2E テスト
    実⾏
    早いフィードバックが可能
    PR毎に
    E2E テスト実⾏

    View Slide

  8. PR-Driven E2Eテスト
    ref. https://speakerdeck.com/line_devday2020/pull-request-driven-e2e-testing-with-kubernetes

    View Slide

  9. 開発者への
    フィードバック
    実⾏頻度
    Flaky testの
    発⾒頻度
    遅い
    1⽇ 1~2回
    低い
    早い
    1⽇ 数⼗回
    ⾼い
    After
    (Daily + PR-Driven)
    Before
    (Daily テストのみ)
    PR-Driven E2Eテスト 導⼊前後⽐較

    View Slide

  10. Flaky test
    Flakyなテスト結果とは、
    同じコードで合格と失敗の両⽅の結果
    を⽰すテストである
    Googleのソフトウェアエンジニアリング ―持続可能なプログラミングを⽀える技術、⽂化、プロセス ⽵辺 靖昭 (監修), Titus Winters (編集), Tom Manshreck (編集), Hyrum Wright
    (編集), 久富⽊ 隆⼀ (翻訳), 2021, P.253, 訳注13より引⽤

    View Slide

  11. Flaky test
    ⾃分が修正した内容とは関係ないテストがCIで落ちて困ったり、イライラすることはありませんか?
    • E2Eテストは外部要因も絡むのでテストが不安定になりがち
    • ロングランしているサービスはユニットテスト数が多くなり、⽐例して不安定なテストも多くなる
    テストコードもテスト対象サービスのコードも変えていないのにもかかわらず、
    ときどき失敗したりする不安定なテストのこと

    View Slide

  12. Flaky testあるある①
    放置されがち
    再現性が低い→エラー状態を作るのが⾯倒→放置されがち
    Flaky testがあるとテスト結果を有効に活⽤できなくなる
    最悪、誰もテスト結果⾒なくなってしまうことも

    View Slide

  13. Flaky testあるある②
    リトライしがち
    テストをリトライする
    →テストが不安定なのかテスト対象サービスが不安定なのか不明
    →サービスのバグを⾒落とす可能性ある

    View Slide

  14. 実際の事例
    E2Eテストが数回に1回失敗したが、
    E2Eテストには問題がなくcache storageの⽅で問題があった
    暗黙のリトライは本当の解決策ではない
    server cache storage
    数回に1回失敗

    View Slide

  15. Flaky testへの対応
    Flaky test
    の発⾒
    膨⼤な時間と労⼒がかかる
    原因調査
    &修正
    どのくらいの
    頻度で発⽣する
    のか調査
    修正確認

    View Slide

  16. Launchable
    Flaky testのスコアを出してくれる

    View Slide

  17. Launchable導⼊後
    Flaky test
    の発⾒
    原因調査
    &修正
    どのくらいの
    頻度で発⽣する
    のか調査
    修正確認
    Flaky test対応の⼤部分はLaunchableにおまかせができる!!

    View Slide

  18. Launchableを使っての感想
    • Flaky test対応楽になった
    • 導⼊簡単
    • Documentわかりやすい
    • CLI (https://github.com/launchableinc/cli) 使いやすい
    • エラーメッセージで何が間違っているのかすぐわかる
    • さまざまなテストフレームワークに対応している
    • サポート⼿厚い
    • 複数のCIを使っているPR-Driven E2Eテストの複雑な環境にも適⽤できた
    • 改善要望を伝えると検討・実現してくれる

    View Slide

  19. まとめ
    • PR-Driven E2EテストによりE2Eテスト実⾏回数が膨⼤に増えた
    • それに伴い、Flaky testが増えた
    • Flaky testは放置されがち、リトライしがちな傾向がある
    • 対応するのは⼤変
    • Launchableを使うことで調査、修正確認などの⼿間が減らせた
    • 今後展望として
    • ユニットテストへの適⽤
    • 他の機能を活⽤し効率的なテスト実⾏を⽬指す

    View Slide

  20. THANK YOU

    View Slide