6 điểm bởi GN⁺ 2025-04-18 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp
  • Airbnb đã tự động di chuyển thành công khoảng 3.500 tệp kiểm thử dựa trên Enzyme sang React Testing Library (RTL)
  • Công việc vốn được ước tính sẽ mất 1,5 năm đã được hoàn thành bằng LLM và pipeline tự động hóa, cập nhật xong 3,5K tệp kiểm thử chỉ trong 6 tuần
  • Đạt tỷ lệ thành công tự động hóa cao nhờ xác thực tự động, vòng lặp thử lại, prompt động và xây dựng ngữ cảnh quy mô lớn
  • Cuối cùng, 97% tổng số tệp được chuyển đổi tự động, phần còn lại được hoàn tất thủ công để đạt 100%
  • Dựa trên kinh nghiệm này, Airbnb đang lên kế hoạch mở rộng sang các tác vụ migration phức tạp hơn và công cụ phát triển dựa trên LLM

Di chuyển kiểm thử quy mô lớn dựa trên LLM tại Airbnb

Bối cảnh

  • Từ năm 2020, Airbnb đã sử dụng React Testing Library (RTL) cho các bài kiểm thử mới và bắt đầu chuyển đổi khỏi Enzyme
  • Do Enzyme dựa vào cách tiếp cận truy cập sâu vào phần triển khai nội bộ, không còn phù hợp với triết lý React hiện đại, nên nhu cầu loại bỏ dần ngày càng rõ ràng
  • Việc chỉ đơn giản loại bỏ Enzyme sẽ tạo ra khoảng trống về độ bao phủ kiểm thử, vì vậy cần một quá trình chuyển đổi vẫn giữ được ý đồ và độ bao phủ

Chiến lược migration

1. Xác thực và refactor theo từng giai đoạn

  • Các tệp được tổ chức trong một pipeline dựa trên trạng thái, chỉ chuyển sang bước tiếp theo khi vượt qua xác thực của bước hiện tại
  • Khi thất bại, hệ thống gọi LLM để thử sửa; ví dụ các bước gồm: xóa Enzyme → chỉnh Jest → vượt qua lint/tsc → đánh dấu hoàn tất
  • Có thể xử lý song song hàng trăm tệp, tệp đơn giản được xử lý nhanh, còn tệp phức tạp được giải quyết dần dần

2. Vòng lặp thử lại và prompt động

  • Các bước thất bại được chạy lặp lại cho đến số lần thử tối đa
  • Ở mỗi lần thử, thông báo lỗi và tệp đã chỉnh sửa được đưa vào prompt để cung cấp phản hồi cho LLM
  • Phần lớn các tệp từ đơn giản đến trung bình đều thành công trong không quá 10 lần thử

3. Mở rộng ngữ cảnh prompt

  • Với các tệp phức tạp, chỉ thử lại đơn thuần là không đủ, nên nhóm đã chuyển sang cách cung cấp ngữ cảnh phong phú hơn
  • Có thể xây dựng ngữ cảnh lên tới 100.000 token, bao gồm:
    • Mã nguồn của component tương ứng
    • Bài kiểm thử Enzyme hiện có
    • Các bài kiểm thử lân cận và ví dụ (few-shot prompting)
    • Style nội bộ của nhóm và các pattern dùng chung
  • Điểm cốt lõi là chọn đúng các tệp liên quan có chất lượng, quan trọng hơn bản thân câu chữ của prompt là “đưa gì vào đó”

4. Nâng từ 75% lên 97%: cải tiến có hệ thống

  • Sau khi tự động hóa đạt 75%, trong 25% còn lại có 900 tệp ở trạng thái thất bại
  • Quy trình lặp phân tích vấn đề và cải tiến:
    1. Thu thập các vấn đề chung của các tệp thất bại
    2. Chọn mẫu đại diện (5~10 tệp)
    3. Cải thiện prompt/script
    4. Áp dụng kiểm thử trên mẫu rồi thử lại toàn bộ
  • Sau 4 ngày lặp đi lặp lại, tỷ lệ hoàn thành tự động hóa đạt 97%

3% còn lại được xử lý thủ công

  • Một số tệp vẫn thất bại ngay cả sau hơn 100 lần thử lại đã được chỉnh sửa thủ công dựa trên kết quả refactor tự động
  • Ngay cả việc này cũng nhờ tự động hóa mà được hoàn thiện với nỗ lực tối thiểu

Kết quả và tác động

  • Ngay lần chạy tự động đầu tiên, 75% quá trình migration đã hoàn tất chỉ trong 4 giờ
  • Sau 4 ngày cải tiến lặp lại, 97% được hoàn tất tự động
  • Tính cả phần xử lý thủ công còn lại, toàn bộ quá trình chuyển đổi đã hoàn thành 100% trong vòng 6 tuần
  • Loại bỏ hoàn toàn Enzyme trong khi vẫn giữ được ý đồ kiểm thử và độ bao phủ
  • Ngay cả khi tính cả chi phí API của LLM và nguồn lực kỹ thuật, đây vẫn là cách tiếp cận hiệu quả hơn nhiều so với làm thủ công

Bước tiếp theo

  • Dựa trên kinh nghiệm lần này, Airbnb đang bắt tay vào tự động hóa các đợt chuyển đổi mã ở quy mô lớn hơn bằng LLM
  • Đồng thời khám phá khả năng áp dụng cho các đợt refactor phức tạp hơn, thay đổi cấu trúc và các tác vụ tương tự

Chưa có bình luận nào.

Chưa có bình luận nào.