19 puan yazan GN⁺ 2026-03-12 | 2 yorum | WhatsApp'ta paylaş
  • Yapay zeka kod yazma ajanları, geliştirici uyurken bile kod üretip branch'e değişiklikleri yansıtıyor; ancak sonuçların doğruluğunu ve güvenilirliğini doğrulamak zor
  • Yapay zekanın yazdığı kodu yine aynı yapay zeka test ederse bir kendi kendini tebrik makinesine dönüşüyor ve ilk niyetten farklı yanlış anlamaları yakalayamıyor
  • TDD'nin temel ilkesini ödünç alarak, kod yazmadan önce önce kabul kriterlerini yazıp ajanın buna göre implemente etmesini ve ardından ayrı doğrulama yapılmasını sağlıyor
  • Doğrulama aracı olarak Claude Code'un headless modu (claude -p) ile Playwright MCP birleştirilerek 4 aşamalı bir pipeline kuruluyor; ayrı bir backend gerekmiyor
  • Ajan çıktısına güvenmek için işe başlamadan önce "tamamlandı"nın tanımını netleştirmek gerekiyor; bu, prompt yazmaktan daha zor ama zorunlu bir süreç

Otonom ajanlarda kod doğrulama sorunu

  • Gastown gibi yapay zeka araçlarıyla ajanlar saatler boyunca kod yazıp branch'e değişiklikler yansıtıyor, ancak ortaya çıkan sonucun gerçekten doğru olup olmadığını anlayacak güvenilir bir doğrulama yöntemi yok
  • Son 6 ayda 100'den fazla mühendise Claude Code atölyesi verildiğinde, her ekipte aynı sorunun görüldüğü ortaya çıktı
  • Claude'u günlük PR süreçlerinde kullanan ekiplerde haftalık merge edilen PR sayısı 10'dan 40-50'ye çıktı; bu da kod incelemeye çok daha fazla zaman harcanmasına yol açtı
  • Sistem ne kadar otonom çalışırsa sorun o kadar büyüyor — bir noktadan sonra diff incelemek yerine deploy'u izleyip sorun çıkmamasını umuyorsunuz ve hataları ancak deploy sonrasında fark ediyorsunuz

Mevcut çözümlerin sınırları

  • Daha fazla reviewer işe almak çözüm değil; hız yetişmiyor ve kıdemli mühendislerin bütün gün yapay zeka tarafından üretilmiş kod okuması verimsiz
  • Claude kendi yazdığı kodun testlerini de yazarsa, sistem kullanıcının gerçekte ne istediğini değil, Claude'un istediğini sandığı şeyi doğrulamış olur
    • Regresyon hatalarını yakalayabilir ama asıl yanlış anlamayı (misunderstanding) tespit edemez
  • Aynı yapay zekayı hem yazım hem doğrulama için kullanmak onu bir "kendi kendini tebrik makinesi (self-congratulation machine)" haline getirir
  • Kod incelemesinin asıl amacı, orijinal yazardan farklı ikinci bir göz sağlamaktır; yapay zekalar arası çapraz inceleme ise aynı kaynaktan geldiği için aynı şeyleri kaçırır

TDD'nin doğru yakaladığı temel nokta

  • TDD'nin ilkesi: önce test yaz, sonra kodu yaz, test geçince dur (daha fazlasını implemente etme)
  • Çoğu ekibin TDD yapmamasının sebebi, kodun ne yapması gerektiğini önceden düşünmenin zaman alması
  • Yapay zeka hız sorununu çözdüğü için bu mazeret ortadan kalkıyor — artık yavaş olan kısım kodun doğru olup olmadığına karar vermek
  • Unit test yerine, özelliğin ne yapması gerektiğini düz metinle anlatmak daha kolay
    • Örnek: "Kullanıcı e-posta ve parola ile kimlik doğrular. Geçersiz kimlik bilgileri verildiğinde 'Invalid email or password' gösterilir. Başarılı olursa /dashboard'a gider. Session token 24 saat sonra sona erer"
  • Bu kriterler kod editörü açılmadan yazılabilir; ajan implemente eder, başka bir sistem de doğrular

Gerçek uygulama örnekleri

  • Frontend değişikliği

    • Spec dosyası temel alınarak kabul kriterleri (Acceptance Criteria) oluşturulur
      • AC-1: Geçerli kimlik bilgileriyle /login açıldığında /dashboard'a redirect edilir ve session cookie ayarlanır
      • AC-2: Yanlış parola girildiğinde tam olarak "Invalid email or password" gösterilir ve /login sayfasında kalınır
      • AC-3: Alanlar boşsa submit butonu devre dışı olur veya inline hata gösterilir
      • AC-4: 5 başarısız denemeden sonra giriş 60 saniye engellenir ve bekleme süresi mesajı gösterilir
    • Her kriter net biçimde geçti/kaldı olarak değerlendirilebilir
    • Ajan özelliği kurduktan sonra, Playwright browser agent her AC için doğrulama yapar, ekran görüntüsü alır ve kriter bazında değerlendirme raporu üretir
    • Bir şey başarısız olursa, hangi kriterin başarısız olduğu ve tarayıcıda tam olarak ne görüldüğü açıkça anlaşılır
  • Backend değişikliği

    • Aynı pattern tarayıcı olmadan uygulanır
    • Gözlemlenebilir API davranışı (status code, response header, error message) tanımlanır ve curl komutları ile doğrulanır
  • Sınırlar

    • Spec'in kendisindeki yanlış anlamayı yakalayamaz — spec baştan yanlışsa doğrulamayı geçse bile özellik yine yanlış olabilir
    • Playwright'ın yakalayabildikleri: entegrasyon hataları, render bug'ları, gerçek tarayıcıda bozulan davranışlar
    • Bu, "doğrulanmış doğruluk" kadar geniş bir iddia değildir; ama kod incelemesinin istikrarlı biçimde yakalayabildiğinden daha fazlasını yakalar
  • İş akışı özeti

    • Prompt'tan önce kabul kriterlerini yazajan kriterlere göre implemente etsindoğrulamayı çalıştıryalnızca başarısız olanları incele (diff değil, başarısızlık incelemesi)

Nasıl kuruluyor: 4 aşamalı pipeline

  • Claude Skill ile implemente edilmiş (github.com/opslane/verify); claude -p (Claude Code headless modu) ve Playwright MCP kullanıyor
  • Ayrı bir custom backend ya da ek API key gerekmiyor; yalnızca mevcut Claude OAuth token kullanılıyor
  • 1. aşama: Pre-flight

    • Saf bash, LLM çağrısı yok
    • Geliştirme sunucusunun çalışıp çalışmadığını, kimlik doğrulama session'ının geçerliliğini ve spec dosyasının varlığını kontrol eder
    • Token harcamadan önce hızlıca fail eder
  • 2. aşama: Planner

    • Bir kez Opus çağrılır
    • Spec'i ve değişen dosyaları okuyup, her doğrulama için ne gerektiğine ve nasıl çalıştırılacağına karar verir
    • Kodu okuyarak doğru selector'ları bulduğu için class name tahmin etmez
  • 3. aşama: Browser Agents

    • Her AC için bir kez Sonnet çağrılır, hepsi paralel çalışır
    • 5 AC varsa 5 ajan bağımsız olarak gezinir ve ekran görüntüsü alır
    • Sonnet, Opus'a kıyasla 3-4 kat daha ucuzdur ve tıklama tabanlı işlerde eşdeğer performans sunar
  • 4. aşama: Judge

    • Son bir Opus çağrısı, tüm kanıtları okuyup her kriter için şu sonucu döndürür: pass, fail veya needs-human-review
  • Kurulum

    • Claude Code plugin'i olarak kurulabilir: /plugin marketplace add opslane/verify
    • Ya da repo clone edilip özelleştirilebilir — her aşama, net girdilere ve yapılandırılmış çıktılara sahip tek bir claude -p çağrısıdır
    • Model değiştirilebilir, aşama eklenebilir, --dangerously-skip-permissions seçeneğiyle CI entegrasyonu yapılabilir

Temel ders

  • Asıl nokta şu: "Tamamlanmış"ın tanımını önceden yazmazsanız sonuca güvenemezsiniz"
  • Kabul kriterleri yazmak prompt yazmaktan daha zordur; ama edge case'leri önceden düşünmeye zorlayarak kaliteyi artırır
  • Mühendislerin TDD'ye direnmesinin sebebiyle aynı şekilde, başta daha yavaş hissettirdiği için buna da direnç gösterilir
    • Kabul kriterleri olmadan yapılabilen tek şey çıktıyı okuyup doğru olmasını ummaktır
  • Bu, yapay zeka odaklı geliştirme ortamında güvenilirlik sağlamak için zorunlu bir süreçtir

2 yorum

 
github88 2026-03-13

Ne kadar TDD uygularsan uygula, LLM'in testleri manipüle edip geçecek hale getirdiği şu anki seviyede insan incelemesi kesinlikle gerekli..

 
GN⁺ 2026-03-12
Hacker News yorumları
  • Bu aralar çıkan LLM framework’leri sanki geliştirmeyi daha da zor ve pahalı hale getiriyor
    Varsayılan ayarlarla bile epey yol alınabiliyorken, modellerin sürekli değiştiği bir ortamda sayısız wrapper ve harness yapmak verimsiz geliyor
    Gece boyunca çalıştırıp para yakan bu yaklaşımın ileride PHP meme’leri gibi alay konusu olarak kalacağını düşünüyorum

    • Ama AI patlamasında kürek satan taraftaysan durum farklı
      Yazıya göre “son 6 ayda 100’den fazla mühendise Claude Code atölyesi verildi”
    • Rakiplerin codebase’lerinde AI agent’ları olabildiğince çok kullanmasını isterim
      Gece gündüz çalıştırıp sonunda AI şirketi iflas ettiğinde, geriye de sadece %80’i AI tarafından yazılmış spagetti kod kaldığında kimin güleceğini görürüz
    • PHP ile dalga geçilecek bir şey yok. Hâlâ en iyi projelerimin bazılarında PHP kullandım
      Bugünün full-stack JS/TS ortamından ziyade, 15 yıl önce PHP ile yaptıklarımın daha iyi olduğunu bile düşünüyorum
    • Eski anti-PHP meme’lerinin ne kadar saçma olduğu şimdi daha net görünüyor
      PHP hâlâ yaşıyor ve gelişiyor. LLM tooling de sonunda bu şekilde temel araçlardan biri olacak
    • Bu sadece işin artması değil, rollerin birleşmesi
      BA, PO, QA, SWE arasındaki sınırlar bulanıklaşıyor. Artık iş ve geliştirme arasında duran hibrit roller ortaya çıkıyor
  • İnsanlar bugünlerde sanki sırf agent kullanmış olmak için kullanıyor
    Ben yazı yazma ve review için sadece iki tane çalıştırıyorum, buna rağmen 5–7 kat verimlilik gayet mümkün
    Spec incelemeye daha çok zaman ayırıyorum, coding işini agent 10–30 dakikada bitirdiği için acele etmeye gerek kalmıyor

    • “Gece boyunca çalışan agent” fikrini pek anlamıyorum. Claude çoğu işi 5–20 dakikada bitiriyor
      Yarın da iş devam edecek, o yüzden gece boyu çalıştırmanın özel bir anlamı yok
    • Ben de başta birden çok agent’ı paralel çalıştırdım ama sonunda dizin bazında odaklanmanın çok daha verimli olduğunu gördüm
    • SWE’nin yaptığı işlerin önemli bir kısmı artık AI tarafından brute force ile çözülebiliyor
      Müşteri açısından bakınca bug’ın Hindistan’dan mı, San Francisco’dan mı, AI’dan mı geldiğinin pek farkı yok
    • Ben de sadece iki agent çalıştırıyorum ve çok fazla ince ayar yapıyorum
      Bu, son dönemde moda olan “agent orkestrası” yaklaşımına göre çok daha kontrollü bir yöntem
    • En önemli aşamanın spec doğrulaması olduğunu düşünüyorum
      Bu yüzden Claude’un spec’e gerçekten uyup uymadığını kontrol etmek için verify skill’i kendim yaptım
  • Claude’a red-green-refactor kalıbını kullandırınca test kalitesi belirgin biçimde artıyor
    Hatta red/green/refactor alt agent’ları oluşturup birbirlerini doğrulatınca oldukça iyi çalışıyor
    Buradaki ana nokta, context’leri birbirine karıştırmamak

    • Ama refactoring ilerledikçe testler çoğu zaman işe yaramaz hale geliyor ya da eksiliyor
      Reward hacking gerçekten var ve buna karşı savunma geliştirmek zor
    • Red/green TDD yaptırsan bile, başarısız olmayacak testler yazıp “zaten çözülmüş” diyerek geçebiliyor
      Bu rehbere baksanız da kötü test sorunu hâlâ büyük
    • Ben Outside-in TDD yaklaşımını Claude Code’a tamamen uyguladım
      Sonuçlar iyi olduğu için ilkeleri ve örnekleri ve starter repo’yu paylaştım
    • green/red/refactor kalıbının nasıl uygulandığını daha ayrıntılı öğrenmek isterim. Referans materyal olsa iyi olur
    • Bu yaklaşım PR review’da da etkili
      Yazan ile doğrulayanı ayırmak önemli; aynı model olsa bile context ayrılınca kalite yükseliyor
  • Mevcut LLM context sınırları yüzünden gerçek agent’lar hâlâ mümkün değil
    500 satırı aşan kodlarda hata oranı hızla artıyor, 200 satır civarı sınır gibi
    Sonuçta LLM, ancak hesap makinesi gibi tekrar tekrar kullanılan bir araç konumunda

  • Ben bu olguya “Test Theatre” diyorum
    Bununla ilgili yazıyı burada yazdım. Özellikle kaçınılması gereken bir şey

    • Agent bazen 100 satır kod için 600 satır test yazıyor ama bunların çoğu anlamsız testler
      İyi testler tasarım kalıplarını ve bağımlılıkları doğrulamalı, ayrıca debugging’e yardımcı olmalı
    • Property testing kullanınca çok daha iyi sonuç alınıyor
      Örneğin Schemathesis ile kullanıcı izinlerini veya 5xx yanıtlarını otomatik doğruluyorum
    • Test Theatre tam isabet bir ifade. Testler geçse bile gerçekte hiçbir şeyi kanıtlamıyorlar
    • En iyi yöntem Outside-in TDD + mutation testing’i zorunlu kılmak
      Bununla ilgili POC’yi buraya koydum
    • Aslında bu tür biçimsel testler eskiden beri vardı. Çoğu, doğrudan implementasyonun kendisini test ediyor
  • Son zamanlarda agent orchestration denemeleri yapıyorum
    Kilit nokta LLM çağrılarını azaltıp bunları deterministik script pipeline’larıyla birbirine bağlamak
    Ayrıntıları bu yazıda anlattım

    • Ben de benzer biçimde script merkezli orchestration deniyorum
      Şu deney notunda olduğu gibi, asıl önemli olan LLM değil script’ler
  • Ben iş operasyonları için 6 agent çalıştırıyorum
    Pazar araştırması, içerik yazımı, video senaryosu gibi çeşitli rolleri üstleniyorlar
    “Gece boyunca çalıştırmak” biraz abartılı bir fikir; pratikte işe yarayan şey net hedefler ve dar kapsam
    Asıl darboğaz yürütme değil, context yönetimi

    • İlginç bir yaklaşım. Ne tür bir ürün geliştirdiğini ve Reddit tabanlı araştırmanın hâlâ işe yarayıp yaramadığını merak ediyorum
  • Bu kişinin gerçekte ne yaptığını pek anlamıyorum
    LinkedIn’de sadece Claude ile ilgili yazılar görüyorum

    • Doğrulanamayan kodu production’a almak ciddi bir risk
      Ciddi bir iş yapan hiçbir şirket için kabul edilebilir değil
    • Sektördeki 25 yıllık deneyimime göre bu kadar hızla koda ihtiyaç duyan bir şirket hiç görmedim
      Sonunda kod boşta kalıyor, çünkü asıl mesele onu nasıl satacağını bulmak oluyor
  • Bu, sadece test yazan birini işe alınca ortaya çıkan sorunla aynı
    Sonuçta sadece “kod, yazıldığı şekilde çalışıyor”u doğrulamış oluyorsun
    Asıl önemli olan net bir spec tanımı

    • Sonradan yazılan testler çoğu zaman totolojik doğrulamadan ibaret
      Diğer mühendislik alanları bu hatayı tekrar etmiyor ama yazılımda bunun bu kadar yaygın olması şaşırtıcı
    • Testlerin gerçek değeri regression’ı önlemekte
      İlk sürüm yanlış olsa bile, sonradan davranışın değişmemesini garanti ediyor
    • Testlerin amacı sonuçta mock doğrulaması
    • Önce spec’i tanımlayıp sonra ona göre doğrulamak asıl mesele
      Birçok danışmanlık şirketi acceptance criteria tabanlı doğrulama ile çalışıyor
  • Bugünkü AI artık geliştirmeye yardımcı olan bir araç değil, geliştiricinin yerini alacak bir seviyeye geldi
    Kod üzerinde artık kontrol ya da doğrulama kuramıyor olmamız ciddi bir sorun
    Bu, yeni bir geliştirme yöntemi değil; anlamanın yerine güvene dayanan dinsel bir dönüşüm gibi hissettiriyor

    • Ben anlamadığım kodu asla deploy etmem
      Özerklik düşük olsa bile, yalnızca doğrulanabilir kodu merge ederim
    • Ya da kod güvenliğini sağlamak için formal methods gibi araçlara yönelmek gerekir