Yazılım projelerinde test otomasyonu, kod güvenilirliğini sağlamanın en etkili yollarından biri olarak kabul edilir. Ancak birçok ekip, testlerin "geçti" göstergesinin ardındaki tehlikenin farkında değildir: test kayması.
Test kayması, mevcut testlerin aslında artık geçerli olmadığı durumlarda bile yeşil olarak kalmaya devam ettiği bir olgudur. Bu durum, projelerin büyümesiyle birlikte testlerin gereksinimlerden uzaklaşması ve önemli doğrulamaların kaybolmasıyla ortaya çıkar.
🔍 Test Kaymasının Gizli Tehlikeleri
Test otomasyonunda en yaygın karşılaşılan sorunlardan biri, testlerin zamanla orijinal amaçlarından sapmasıdır. Bu durum genellikle şu şekilde gelişir:
- İhtiyaçların değişmesine rağmen testlerin güncellenmemesi: Örneğin, bir kullanıcı arayüzü bileşeniyle ilgili yeni bir doğrulama gereksinimi ortaya çıktığında, ilgili testler güncellenmeyebilir.
- Hızlı düzeltmelerin uzun vadeli sonuçları: Acil bir düzeltme yapılırken, orijinal testin önemli bir bölümünün kaldırılması gibi durumlarla karşılaşılabilir.
- Testlerin kademeli olarak zayıflaması: Baştaki üç doğrulama içeren bir test, zamanla tek bir doğrulama seviyesine gerileyebilir.
Bu sorunların en tehlikeli yanıysa, hiçbir aracın testlerin semantik olarak doğru olup olmadığını tespit edememesidir. Yani, testler geçse bile aslında olması gerekenleri test etmiyor olabilirler.
⚙️ Mevcut Araçların Sınırları
Yapay zeka destekli kod inceleme araçları (GitHub Copilot, Claude gibi) aşağıdaki konularda oldukça başarılıdır:
- Kod yazma ve iyileştirme önerileri
- Sözdizimi hatalarının tespiti
- Anında geri bildirim sağlama
Ancak bu araçlar şu konularda yetersiz kalır:
- Ürün gereksinimlerini (örneğin Jira’dan gelen) anlama yeteneği
- Testlerin zaman içindeki değişikliklerini izleme
- Semantik test kaymasını tespit etme
- Niyet ile uygulama arasındaki uyumu karşılaştırma
Bu araçlar yalnızca anlık kodu değerlendirirken, zaman ve sistemler arası bağlamı dikkate almamaktadır.
💡 Akıllı RAG Tabanlı Test Kayması Tespit Sistemi
İşte tam burada devreye giren bir sistem: gereksinim odaklı test kayması analizörü. Bu sistem, testlerin artık doğru şeyleri test edip etmediğini belirlemek için aşağıdaki bileşenleri kullanır:
- Jira’dan alınan gereksinimler
- Playwright test kodları
- Git geçmişi
- RAG (Geri Getirme Destekli Üretim)
Sistem, bu bileşenleri bir araya getirerek anlamlı analizler gerçekleştirir ve testlerin orijinal amaçlarından ne kadar uzaklaştığını ortaya koyar.
🧩 Sistem Nasıl Çalışıyor?
Yeni bir test kayması tespit sistemi genellikle beş temel adımdan oluşur:
1. Gereksinim Niyetinin Belirlenmesi
Sistem, Jira’daki biletlerden aşağıdaki unsurları çıkarır:
- Beklenen davranışlar
- Doğrulama senaryoları
- Kritik iş kuralları
Örneğin, bir "Kullanıcı girişi" gereksinimi için sistem, başarılı ve başarısız giriş senaryolarının yanı sıra hata mesajlarının doğru şekilde görüntülenmesini de analiz eder.
2. Test Niyetinin Çıkarılması
Playwright testlerinden sistem, aşağıdaki unsurları tanımlar:
- Testin gerçekte neyi doğruladığı
- Kullanılan assertions’lar
- Test akışındaki kritik adımlar
Bu adımda, sistem yalnızca testin yapısal unsurlarını değil, aynı zamanda semantik niyetini de anlamaya çalışır.
3. Git Geçmişinin Analizi
Testlerin zaman içindeki evrimini anlamak için sistem:
- Test dosyalarında yapılan değişiklikleri inceler
- Eklenen veya kaldırılan assertions’ları tespit eder
- Test kapsamındaki azalmaları ortaya koyar
Örneğin, bir testin ilk hali üç farklı doğrulama içerirken, son hali yalnızca bir doğrulama içeriyorsa sistem bunu raporlar.
4. RAG ile Bağlamsal Veri Getirimi
Sistem, kod tabanındaki semantik ilişkileri anlamak için:
- Embeddings (gömülü vektörler) kullanır
- İlgili kod parçalarını ve geçmiş değişiklikleri geri getirir
- Bağlamsal benzerlikleri karşılaştırır
Bu sayede, bir testteki eksikliklerin başka bir testte nasıl çözüldüğünü tespit etmek mümkün olur.
5. Kayma Tespiti ve Raporlama
Son aşamada sistem:
- Gereksinim niyeti ile mevcut test niyetini karşılaştırır
- Geçmiş ile mevcut uygulama arasındaki farkları değerlendirir
- Kritik uyumsuzlukları raporlar
Örneğin, aşağıdaki gibi bir çıktı üretebilir:
⚠️ Kayma Tespit Edildi
Test: login.spec.ts
Eksiklikler:
- Geçersiz giriş senaryosu için hata mesajı doğrulaması
Geçmiş:
- 2 commit önce dashboard görünürlüğü doğrulaması kaldırıldı
Kapsam: %65
Öneri:
- auth/error.spec.ts dosyasına bakınız🔄 Eksikliklerin Yeniden Kullanımı
Sistemin en güçlü özelliklerinden biri, eksiklikleri tespit etmekle kalmayıp, aynı zamanda çözüm önerileri sunmasıdır. Örneğin:
"Bu testte hata mesajı doğrulaması eksik."
Değil:
"Bu testte hata mesajı doğrulaması eksik ve sistemde zaten bu doğrulama auth/error.spec.ts dosyasında mevcut. O dosyadaki uygulamayı inceleyin."
Bu yaklaşım sayesinde:
- Hızlı düzeltmeler yapılır
- Test standartları korunur
- Bilgi yeniden kullanılır
🛠️ Teknoloji Yığını
Sistemin arka planında aşağıdaki teknolojiler kullanılır:
# Temel bileşenler
- Python (ana programlama dili)
- LangChain (RAG ve akış yönetimi)
- ChromaDB (vektör tabanlı veri tabanı)
- sentence-transformers / Ollama (yerel embedding modeli)
- Claude API (yapay zeka modelleri)
# Entegrasyonlar
- Jira API (gereksinim verilerinin alınması)
- Git CLI / API (geçmiş analizleri)🚀 Sistemdeki Farklılıklar
Bu sistem, sıradan bir yapay zeka destekli kod inceleme aracından çok daha fazlasını sunar:
- Ürün gereksinimleriyle testleri doğrudan ilişkilendirir
- Zaman içinde oluşan semantik kaymaları algılar
- Git geçmişini bağlam olarak kullanır
- RAG ile kapsamlı kod tabanı anlayışı sağlar
- Eksiklikler için mevcut en iyi uygulamaları önerir
Bu özellikler, sistemin diğer araçlardan ayrılmasını sağlar ve test otomasyonunun kalitesini önemli ölçüde artırır.
🔮 Gelecek Planları
Sistemin geliştirilmesine yönelik bazı fikirler şunlardır:
- Playwright testlerinin çalıştırılarak çalışma zamanındaki davranışın doğrulanması
- Güvenli düzeltme önerileri sunma
- Geri getirme doğruluğunun iyileştirilmesi
- Daha fazla test çatısının desteklenmesi
💭 Son Sözler
Testlerimizin geçmesini sağlamak için çok zaman harcıyoruz. Ancak nadiren şu kritik soruyu soruyoruz:
"Testlerimiz hâlâ doğru şeyleri mi test ediyor?"
Bu proje, bu soruya yanıt aramaya yönelik bir adım. Eğer sizin de test kaymasıyla ilgili deneyimleriniz varsa veya bu konuda farklı yaklaşımlarınız bulunuyorsa, görüşmekten memnuniyet duyarım.
Testlerinizin gereksinimlerle uyumlu kalmasını nasıl sağlıyorsunuz?
Yapay zeka özeti
Playwright testleriniz geçiyor ama gerçekten doğru şeyleri mi test ediyor? Test kayması sorununa akıllı RAG tabanlı bir yaklaşımla nasıl çözüm bulabilirsiniz? Ayrıntılı inceleme ve uygulama önerileri.