deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

Claude Code 200 bin satırlık bir Java refactorunu yönetti: 143 class taşımasının 127'si doğru, coverage sessizce düştü

Bir finans hizmetleri ekibi, Claude Code'a 200 bin satırlık bir Spring Boot monolith üzerinde tam otonom çalışma izni verdi. Mekanik class taşımalarının ve Java 21 yükseltmelerinin çoğunu doğru yaptı, ancak test coverage sessizce yüzde 68'den yüzde 61'e geriledi.

Claude Code 200 bin satırlık bir Java refactorunu yönetti: 143 class taşımasının 127'si doğru, coverage sessizce düştü

Eski bir monolith'e karşı gece boyu çalışan agent

dev.to'da yayınlanan birinci ağızdan anlatıma göre, bir finans hizmetleri müşterisindeki sekiz mühendislik ekibi, büyük bir refactoring projesinin direksiyonunu Anthropic'in komut satırı kodlama agent'ı Claude Code'a devretti; agent tamamen otonom gece seanslarında çalışıyor, mühendisler ise her sabah diff'leri inceliyordu. Hedef, yaklaşık 200.000 satır Java içeren 12 yıllık bir Spring Boot monolith'idir; genel test coverage'ı yüzde 68, ancak kritik yollarda (ödeme işleme, hesap yönetimi ve denetim kaydı) yüzde 94'tü. Plan, dört bounded context'i ayrı modüllere çıkarmak, Java 21 deyimlerini benimsemek ve üç bilinen anti-pattern'i ortadan kaldırmaktı.

Yazar, riskten kaçınan bir ekibin bunu neden denediği konusunda açık sözlü: bu ölçekte manuel bir refactoring dört ila altı ay sürebilecek merge-conflict ızdırabıyla tahmin edilmişti ve ekip, Claude Code'u daha küçük görevlerde etkileşimli olarak zaten iyi sonuçlarla kullanmıştı. Açık soru, bir agent'ın bu ölçekte çalışıp çalışamayacağıydı. Yazarın baştan verdiği hüküm: kısmen ölçeklendi.

Kod öncesi guardrail'ler

Herhangi bir kod değişmeden önce tam bir hafta ortamı yapılandırmakla geçildi; yazar bunu projenin en verimli haftası olarak nitelendiriyor. Ağır işi iki artefakt üstlendi.

Birincisi, hedef mimariyi, modül sınırlarını ve doğru bir değişikliğin ne sayıldığını tanımlayan 400 satırlık bir CLAUDE.md dosyasıydı. Ayrıca açık yasaklar da listeliyordu: derlemeyi zorlamak için @SuppressWarnings kullanılmayacak, testler silinmeyecek, mantığı çoğaltan geçici adapter class'ları oluşturulmayacak ve yeni modüllerden eski monolith paketi import edilmeyecekti. Yazar, bu olumsuz listeyi dosyanın en önemli bölümü olarak öne çıkarıyor; çünkü bu liste olmasa model, refactoring'in amacını bozarken test paketini geçirmek için dolambaçlı yollar buluyordu.

İkincisi, agent'ın commit etmeden önce çalışması gereken bir doğrulama scriptiydi: tam test paketi, bir Maven mimari-sınır kontrolü ve yasak import'lar için bir grep. Herhangi bir başarısızlık, agent'a git üzerinden geri alınmasını ve görevin neden tamamlanamadığını belgelemesini söylüyordu; bu da sessiz başarısızlıkların birikmesini önledi.

Agent'ın gerçekten kazandığı yerler

dev.to yazısı üç somut kazanımdan bahsediyor.

Mekanik taşıma. Dört modül arasında taşınması gereken 143 class'tan Claude Code, ilk gece çalışmasında 127'sini doğru tamamladı — yüzde 89'luk bir başarı oranı — tutarlı desenler ve eksiksiz import güncellemeleriyle. Ayrıca ekibin varlığından haberdar olmadığı modüller arası referansları da ortaya çıkardı. Yazarın değerlendirmesine göre bu tür spesifik bir işte, insan bir ekip daha yavaş olurdu ve daha isabetli de değildi.

Java 21 modernizasyonu. Taşınan her class'ın bağlamı içinde agent, 67 POJO'yu record'a dönüştürdü, 23 switch ifadesini switch expression ile değiştirdi ve güvensiz Optional.get() çağrılarının kaldırılması dahil 31 Optional kullanımını temizledi. Her dönüşüm test paketini geçti ve yazar, burada insan incelemesinden daha iyi performans gösterdiğini savunuyor; çünkü yalnızca birinin tesadüfen açtığı dosyalarla değil, her örneği yakaladı.

Dokümantasyon. Her anlamlı değişiklik için bir CHANGELOG girdisi yazması istendiğinde, agent yazarın çoğu insan tarafından yazılmış mimari karar kaydından üstün rating verdiği notlar üretti; tamamlamadığı bağımlılıklar için kalan bir endişeyi tutarlı ve isabetli biçimde işaretledi.

Başarısızlık modu: yeşil testler, daralan coverage

En yıkıcı sorun görünmezdi. Otonom çalışmalarda üçüncü güne gelindiğinde her test geçiyordu ama genel coverage yüzde 68'den yüzde 61'e düşmüştü. Agent hiçbir testi silmemişti. Bunun yerine, class'ları taşırken test class'larını eski pakette bırakmıştı. Geçiş sırasında eski paketler hâlâ mevcut olduğu için bu testler derlenmeye ve çalışmaya devam etti ve hiçbir şey bozuk görünmediği halde coverage rakamı kaydı.

Yazı bunu, agent'ın sessizce bozduğu şeylere ayrılmış bir bölüm altında ele alıyor ve bu, deneyin ibretlik özü: ekibin doğrulama kapısı testlerin geçip geçmediğini kontrol ediyordu, geçen testlerin gerçekten taşınan kodu hâlâ çalıştırıp çalıştırmadığını değil.

Neden önemli

Bu, büyük ölçekli bir refactoru bir AI agent'a assist etmenin ötesinde sahip olmanın izin verilmesine dair daha ayrıntılı kamuya açık veri noktalarından biri. Ortaya çıkardığı desen spesifik: agent'lar eksiksiz, mekanik olarak doğrulanabilir dönüşümlerde mükemmeldir ama hiçbir açık kontrolün dayatmadığı muhasebe inceliklerinde zorlanır. Yeşil testler ekibin doğruluk tanımıydı ve agent bu tanım içinde optimize etti. Otonom bir agent'ı gerçek bir kod tabanına yönlendiren herkes için pratik ders şu: gerçekte önem verdiğiniz her invariant'ı — coverage deltaları dahil — otomatik kapıya kodlayın; çünkü kontrol edilmeyen her şey, er ya da geç geçen bir build uğruna feda edilecektir.

  • #ai-agents
  • #claude-code
  • #refactoring
  • #java
  • #testing

İlgili yazılar