Bir Testin Size Yalan Söyleyebileceği Dört Yol
Kaynak: dev.to

İçindekiler 3 başlık
Yeşil Ama Değersiz Testler: Doğrulama Neden Yanıltıcı Olabilir?#
Yapay zeka destekli kodlama süreçlerinde kodun büyük kısmını bir AI ajanı yazdığında, testlerin "yeşil" yanması her zaman sistemin doğru çalıştığı anlamına gelmez. Geçmişteki herhangi bir tarihteki durumunu okuyabilen bir şarap mahzeni uygulaması (The Cellar) geliştirilirken, iki haftalık süreç sonunda bir geliştirici ve bir AI ajanı ile yaklaşık 530 test yazıldı. Ancak projedeki dört gerçek hatadan üçü, doğrudan o özellik için tasarlanmış tüm kontrollerin gözünden kaçtı.
Sorun sadece eksik testler değildi; yeşil veya kırmızı yanan ama gerçekte hiçbir anlam ifade etmeyen kontrollerdi. Laboratuvar bilimcileri bunu uzun süredir iki temel kavramla açıklar:
- Pozitif kontrol: Yönteminizin, aranan etki mevcut olduğunda bunu gerçekten tespit edebildiğinin kanıtı.
- Negatif kontrol: Ortada bir etki yokken sistemin sessiz kaldığının kanıtı.
Testlerin söylediği dört yalandan her biri, eksik bir kontrole veya yanlış yere odaklanmış bir kontrole dayanır. Bu durum özellikle AI Test Stratejileri kapsamında dikkat edilmesi gereken kritik bir doğrulama problemidir.
1. Birinci Yalan: Başarısız Olamayan Test (Pozitif Kontrol Eksikliği)#
Uygulama, bir şarabın içim aralığını tarihli iddialardan (claims) çözümler. İddialar bir ajan tarafından önerilebilir ancak bir insan tarafından kabul edilmelidir; önerilen bir iddia kabul edilene kadar hiçbir şeyi değiştirmemelidir. Bu kural tüm inceleme iş akışının temel taşı olduğu için bir testle korundu: Mahzeni oluştur, önerilen bir iddiayı enjekte et ve 542 şişe durumunun tamamının bayt düzeyinde aynı kaldığını doğrula. Sonuç: Yeşil.
Ancak bu test kuralı değil, sadece test verisini (fixture) ölçüyordu. Sistem çözümleme yaparken önce en yüksek yetki kademesini, ardından o kademedeki en güncel iddiayı seçiyordu:
- Mevcut İddia: Kişisel kademe, 2024 tarihli — Kazanır.
- Test Edilen İddia: Kişisel kademe, 2019 tarihli — Güncellikten kaybeder.
Her iki iddia da aynı kademede olduğu için, test edilen iddia önerilmiş de olsa kabul edilmiş de olsa güncellikten dolayı zaten kaybediyordu. Kaynak koddan inceleme durumu filtresini tamamen silseniz bile test geçmeye devam ediyordu. Bu hatayı yakalayan şey, farklı bir nedenle yazılan eşlikçi bir doğrulama oldu: "Kabul etme işlemi en az bir durumu değiştirmelidir." Bu test başarısız olunca ilk testin anlamsız olduğu ortaya çıktı.
Yazılım Geliştirme İçin Pratik Çıkarımlar#
Test paketinin geri kalanında yapılan denetim, aynı yapıda iki sorun daha ortaya çıkardı. Örneğin, belirli bir dönemde açılan şişenin "kaçırılmış fırsat" sayılmamasını kontrol eden bir testte, şişeyi dışlayan iki ayrı mekanizma vardı. Bu yüzden test edilen koşul koddan silinse bile hiçbir test kırmızıya dönmüyordu. Sistemde "şimdi" (now) kavramının sabit bir saat yerine bir parametre olduğu fark edilerek ("Haziran 2024 itibarıyla o yıl neyi kaçırmıştım?") izole bir test senaryosu oluşturuldu. Tüm bu düzeltmeler mutasyon testi ile doğrulandı:
- Eşleştirilmiş Doğrulamalar Kullanın: Bir $X$ değişkeninin veya durumunun "etkisiz" olduğunu doğrulayan her test, $X$ etkinleştirildiğinde etkinin gerçekten var olduğunu gösteren eşlikçi bir doğrulamaya ihtiyaç duyar.
- Test Verisini Değil, Kuralı Test Edin: Eşlikçi doğrulama olmadan $X$'in etkisiz olduğunu değil, yalnızca test verinizin (fixture) etkisiz olduğunu test etmiş olursunuz.
- Mutasyon ile Doğrulayın: İlgili iş kuralını koddan sildiğinizde testiniz hâlâ yeşil kalıyorsa, o test size yalan söylüyordur.
Kaynak ve atıf
Bu yazı, dev.to üzerinde yayımlanan içerikten yararlanılarak Edumints tarafından yapay zekâ desteğiyle Türkçe hazırlandı. Ayrıntılar ve yazarların kendi anlatımı için orijinaline bakabilirsin:
- dev.to/kenwalger/four-ways-a-test-can-lie-to-you-2ibf