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

Flakyとその判別方法の解説 #D3QA /FlakyTests

Flakyとその判別方法の解説 #D3QA /FlakyTests

■John Micco氏の基調講演資料
http://jasst.jp/symposium/jasst18tokyo/pdf/A1.pdf

■JaSST'18 Tokyoの開催レポート(公式)
http://jasst.jp/symposium/jasst18tokyo/report.html

■本スライドの元となったブログ記事
http://nihonbuson.hatenadiary.jp/entry/2018/03/10/110000

■#JaSST '18 TokyoのMicco氏のチュートリアルを復習し、少しデータで遊んでみる
http://www.kzsuzuki.com/entry/flakyTest

以下の勉強会で発表しました。
https://d-cube.connpass.com/event/83288/

nihonbuson

March 28, 2018
Tweet

More Decks by nihonbuson

Other Decks in Technology

Transcript

  1. はじめに • 今回の発表は、John Micco氏の発表を イベント参加者が勝手にまとめたものです。 – 一応、John Micco氏から許可は貰っています。 • John

    Micco氏の基調講演資料はこちら – http://jasst.jp/symposium/jasst18tokyo/pdf/A1.pdf • JaSST'18 Tokyoの開催レポート(公式)はこちら – http://jasst.jp/symposium/jasst18tokyo/report.html
  2. はじめに • 私はJohn Micco氏の発表を日本で3回聴講 – ICST2017 (ソフトウェアテストの国際カンファレンス) – JaSST'18 Tokyo(テストシンポジウム)

    基調講演 – JaSST'18 Tokyo チュートリアル • これらの内容から、今回は以下の2つに絞って紹介 – Googleの自動テストについて – Flakyについて • イベント記事はこちら(今回の発表内容も含む) – http://nihonbuson.hatenadiary.jp/entry/2018/03/10/110000 この記事が長いので スライドを作成することに…
  3. Googleの自動テスト • 自動テストは2種類ある – Presubmit Testing と Postsubmit Testing •

    継続的に420万件のテストケースが実行されている。 • 1日に1億5千万のテストケースが動いている。 • 全ての結果はDBに保存している。 • ほぼすべてのテストが自動化されている – 手動なのは、UXと多言語対応のみ P2 P2
  4. 理想的な自動テスト • その1…テストが失敗した瞬間に原因のコードが分かる – テストとプロダクトコードが1:1なUnitテストはまさにこれ – 影響が大きなプロダクトコードが存在(ライブラリとか) • その2…コミットが入るたびに、全テストが流れる –

    リソースの問題で実現できない • その3…コミットが入るたびに、影響がある        失敗するテストだけが流れる – 「影響がありそう」「失敗する可能性が高い」テストなら 見つけられるかも
  5. Googleでのテスト結果分析 • 成功→失敗の遷移の84%はFlakyテストが原因だった – これが厄介 • 全体のテストの1.23%で不具合を発見した。 • 以下の場合に破損する可能性が高くなる –

    ファイルが頻繁に変更される – 3人以上の開発者がファイル変更に関わっている • ペアプロ、モブプロの人数ではなく、別案件での人数 – 特定の人、自動テストが関わっている – 特定の言語が関わっている P34 P34
  6. Flaky Testsの定義 • 以下の2パターンが存在する – 1. テストが失敗したが、そのまま(コード変更せずに) リトライしたら成功した • 例えば、タイムアウトが5秒で、約4.9秒かかるページ遷移など

    – 2. テストが成功(失敗)したが、次のタイミングで もう一度テストを実行したら失敗(成功)した。 • おそらく、John Micco氏は、このどちらも Flaky Testsと表現しているようだ。 • どちらにせよ、このFlaky Testsを見極めることが大切
  7. チュートリアルの概要 • GoogleのテストケースをBigQueryを用いて実行。 • チュートリアルで使用したSQLなどは 以下のサイトにあります。 – https://github.com/jmicco/JaSST_tutorial • チュートリアル資料は未公開

    • 資料には                 の文字が! – 私「Micco, これって公開しちゃまずいもの?」 – Micco「すまん、テンプレのままだったわ。公開OKさ!」 P2 P2
  8. 対象データ • 対象データは以下の通り – シンプルなデータ • 1万件のテストケース • 340万件のテスト結果 –

    Fullデータ • 143万件のテストケース • 5億件のテスト結果 P2,3 P2,3 testcase_id pullrequest_id 読み替えるなら、
  9. テスト結果の分類 • テスト結果を以下のように分類している。 – PASSED…テスト成功 – FAILED_TO_BUILD…ビルド失敗 – FAILED…テスト失敗 –

    INTERNAL_ERROR…テスト開始準備が失敗 – PENDING…実行開始しようとしたができなかった – ABORTED_BY_TOOL…開始後15分超過で強制終了 – FLAKY…テスト失敗後、リトライしたら成功 • 失敗の責任者を明確にしている。 インフラの 責任 開発の 責任 P6 P6
  10. 2. Flakyではないテストを特定する (結果) • 横軸…同じパターンのテストケース数 • 縦軸…1ヶ月で遷移が発生した回数 • 赤…Flaky 5000ケース

    以上が 同じパターン →ライブラリの 修正が影響? 2ケースで 20以上の遷移が まったく同じ パターン →Flakyでない 縦軸に接して いるデータは 同じパターンが 存在せず P15 P15
  11. おわりに • Googleは、シンプルな内容を愚直に実施 – 特殊なことはしていない • ここまで分析できる前提として、 自動テストによる大量なテストと そのテスト結果をDBに保存、の2つの取り組みが存在 –

    地道なテスト文化を作り上げたからこそ • そのデータを分析することで、Flakyの判別にも活用 • Flakyの判別などを基に、 さらにリソースを省略したテスト実施を考えている。
  12. 参考文献 • JaSST'18 Tokyo基調講演 「Advances in Continuous Integration Testing @Google」

    – http://jasst.jp/symposium/jasst18tokyo/pdf/A1.pdf • GoogleのJohn Micco氏によるFlakyなテストと その判別方法の解説 #JaSST – http://nihonbuson.hatenadiary.jp/entry/2018/03/10/110000 • #JaSST '18 TokyoのMicco氏のチュートリアルを 復習し、少しデータで遊んでみる – http://www.kzsuzuki.com/entry/flakyTest