- Airbnb, yaklaşık 3.500 Enzyme tabanlı test dosyasını React Testing Library (RTL)'ye otomatik olarak migrate etmeyi başardı
- Başta 1,5 yıl süreceği öngörülen işi LLM ve otomasyon pipeline'ı ile yalnızca 6 haftada 3,5K test dosyasını güncelleyerek tamamladı
- Otomatik doğrulama, retry döngüleri, dinamik prompt'lar ve büyük ölçekli context kurgusuyla yüksek otomasyon başarı oranı sağlandı
- Sonuçta tüm dosyaların %97'si otomatik dönüştürüldü, kalanlar manuel son rötuşlarla %100 tamamlandı
- Bu deneyim temel alınarak daha karmaşık migrasyon işleri ve LLM tabanlı geliştirme araçlarını genişletme planları yapılıyor
Airbnb'nin LLM tabanlı büyük ölçekli test migrasyonu
Arka plan
- Airbnb, 2020'den beri yeni testlerde React Testing Library (RTL) kullanarak Enzyme'dan geçişi başlattı
- Enzyme'ın iç implementasyona derinlemesine erişen yaklaşımı, modern React felsefesiyle uyuşmadığı için kademeli olarak kaldırılması gerekliliği ortaya çıktı
- Basitçe kaldırmak, test coverage boşluklarına yol açacağından, niyeti ve coverage'ı koruyarak dönüşüm yapılması gerekiyordu
Migrasyon stratejisi
1. Aşama tabanlı doğrulama ve refactoring
- Dosyalar, her aşamadaki doğrulamayı geçtiğinde bir sonraki aşamaya ilerleyen durum tabanlı bir pipeline olarak kurgulandı
- Başarısızlık durumunda düzeltme denemesi için LLM çağrıldı; aşamalar örneğin
enzyme kaldırma → jest düzeltmeleri → lint/tsc geçişi → tamamlandı olarak işaretleme şeklindeydi
- Yüzlerce dosya paralel işlenebildi; basit dosyalar hızlıca tamamlanırken, karmaşık dosyalar kademeli olarak çözüldü
2. Retry döngüleri ve dinamik prompt'lar
- Başarısız olan aşamalar maksimum deneme sayısına kadar tekrar çalıştırıldı
- Her denemede, hata mesajları ve düzeltilmiş dosya prompt'a eklenerek LLM'e geri bildirim verildi
- Basit ile orta zorluktaki dosyaların büyük kısmı 10 denemeden az sürede başarıya ulaştı
3. Prompt context'ini genişletme
- Karmaşık dosyalar basit retry ile çözülemediğinden, zengin context sağlama yaklaşımına geçildi
- En fazla 100 bin token'a kadar yapılandırıldı; dahil edilen öğeler:
- İlgili component'in source code'u
- Mevcut Enzyme testleri
- Yakındaki testler ve örnekler (few-shot prompting)
- Ekip içi stil ve ortak pattern'ler
- Buradaki kritik nokta, iyi ve ilgili dosyaları seçmekti; prompt cümlelerinin kendisinden çok, "içine ne koyduğunuz" daha önemliydi
4. %75'ten %97'ye çıkarmak: sistematik iyileştirme
- Otomasyonla %75 dönüşümden sonra, kalan %25 içinde 900 dosya başarısız durumda kaldı
- Sorun analizi ve iyileştirme döngüsü tekrarlandı:
- Başarısız dosyalardaki ortak sorunları toplama
- Temsili örnekleri seçme (5~10 adet)
- Prompt/script iyileştirmeleri
- Örnekler üzerinde test uygulayıp ardından tamamını yeniden deneme
- 4 gün süren yinelemeli çalışmayla otomasyon tamamlama oranı %97'ye ulaştı
Kalan %3 manuel işlendi
- 100'den fazla retry'a rağmen başarısız olan bazı dosyalar, otomatik refactoring çıktısı temel alınarak manuel olarak düzeltildi
- Bu da otomasyon sayesinde minimum çabayla nihai olarak tamamlandı
Sonuçlar ve etki
- Otomasyonun ilk çalıştırılmasında 4 saat içinde migrasyonun %75'i tamamlandı
- 4 günlük yinelemeli iyileştirmeyle %97 otomasyon tamamlandı
- Kalan manuel işlemler dahil toplam 6 hafta içinde geçiş çalışması %100 tamamlandı
- Test niyeti ve coverage korunurken Enzyme tamamen kaldırıldı
- LLM API maliyeti ve mühendislik kaynakları dahil edildiğinde bile manuel çalışmaya kıyasla son derece verimli bir yaklaşım olduğu görüldü
Sonraki adımlar
- Bu deneyime dayanarak LLM ile daha büyük ölçekli kod dönüşümü otomasyonuna başlanıyor
- Karmaşık refactoring, yapısal değişiklikler gibi alanlarda da uygulanabilirliği araştırılıyor
Henüz yorum yok.