From Fragile to Agile: Automating the fight against Flaky Tests
Bài tóm tắt Reddit 2024 3. Quy mô lớn Độ khó: Trung bình
Reddit · 2024 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc
Bối cảnh
- Project iOS của Reddit có hơn 20.000 test unit/snapshot và 2.500 UI test (2024), tăng nhanh trong hai năm; flaky test tăng theo.
- Tác hại theo bài: không biết lỗi là thật hay báo giả, mỏi cảnh báo nên bỏ qua cả lỗi thật, mất niềm tin vào test, chẩn đoán CI tốn công, build lại tốn tiền hạ tầng.
Thay đổi chính
- Bước đầu: retry tới 3 lần. CI trông ổn hơn ngay, nhưng không biết test nào flaky và flaky đến đâu. Rồi tắt tay theo báo cáo của người dùng; không scale với số test.
- Flaky Test Quarantine Service (FTQS), theo vòng Quan sát → Nhận diện → Sửa → Đánh giá:
- Quan sát: Test Metrics Database ghi mỗi lần chạy của mỗi test (class, case, giờ bắt đầu, trạng thái, branch, commit SHA), parse từ
.xcresultvà API BrowserStack. - Nhận diện bằng SQL theo cửa sổ thời gian (ví dụ 3 ngày gần nhất): test hỏng lặp lại trên develop/main (vốn đã phải qua trước khi merge), test vừa qua vừa trượt trên cùng commit, tỉ lệ lần chạy flaky trên tổng.
- Ngắn hạn: đưa test flaky vào danh sách skip trong cấu hình build Bazel; FTQS tự mở PR và thêm team sở hữu làm reviewer. Đánh đổi được nói rõ: mất coverage tạm thời.
- Dài hạn: tự tạo ticket Jira giao chủ test (test do team tính năng sở hữu theo shift-left), kèm lịch sử chạy và hướng dẫn sửa. Nguyên nhân hay gặp: phụ thuộc thứ tự không xác định, thiếu mock, phụ thuộc thời gian chờ UI.
- Đánh giá: số lần hỏng trên main, tỉ lệ kết quả khác nhau trên cùng commit, tỉ lệ workflow hỏng vì test, thời gian PR từ tạo tới merge, số ticket mở/đóng và số test đang cách ly.
- Quan sát: Test Metrics Database ghi mỗi lần chạy của mỗi test (class, case, giờ bắt đầu, trạng thái, branch, commit SHA), parse từ
Vì sao
- So sánh 6 tháng trước/sau (theo Reddit): workflow hỏng do test giảm 8,92%, số lần chạy flaky giảm 65,7%; mở rộng sang UI test thì độ ổn định tăng 9,75% theo tuần.
- Theo bài, FTQS vẫn là phản ứng sau; đang thử chạy test mới nhiều lần ngay ở PR và một Test Orchestration Service tự quyết test nào bị loại trước khi chạy.
Bài học cho SWE
- Retry che triệu chứng nhưng xoá luôn tín hiệu; phải ghi lịch sử từng lần chạy thì mới biết test nào flaky.
- "Khác kết quả trên cùng commit" là định nghĩa flaky đo được bằng máy; cách ly tự động cần đi kèm chủ sở hữu và hạn sửa, không thì coverage mất vĩnh viễn.
Liên quan
Được nhắc tới trong
Chủ đề (1)
Công ty (1)
Bài tóm tắt (4)