𝗘𝘃𝗲𝗿𝘆 𝗧𝗲𝘀𝘁 𝗣𝗮𝘀𝘀𝗲𝗱. 𝗧𝗵𝗲 𝗨𝘀𝗲𝗿 𝗦𝘁𝗶𝗹𝗹 𝗖𝗼𝘂𝗹𝗱𝗻'𝘁 𝗣𝗹𝗮𝘆 𝘁𝗵𝗲 𝗚𝗮𝗺𝗲
"API 200 OK döndürüyor!"
İlk mühendislik işimde çalışırken büyük bir sorun gördüm. Kıdemlilerim dashboard'lara bayılıyordu. Yüksek kod kapsamını (code coverage) seviyorlardı. Testler yeşil yanıyorsa ürünün çalıştığını düşünüyorlardı.
Yanılıyorlardı.
Kodun çalışması ile bir insanın ihtiyacı olanı alması farklı şeylerdir. Bir buton, kullanıcıyı bozuk bir ekranda takılı bırakırken aynı zamanda bir başarı kodu döndürebilir.
Uygulamayı çalıştırmadan bu UX çıkmazlarını bulmanın bir yolunu geliştirdim. Buna "iki ajanlı statik walkthrough" (two-agent static walkthrough) diyorum. Bir döngü içinde konuşan iki yapay zeka ajanı kullanıyor.
- Ajan A kullanıcıdır. Bu ajanın belirli bir hedefi vardır. İnatçıdır. Tek bir hatadan sonra pes etmez. Farklı yolları denemeye devam eder.
- Ajan B uygulamadır. Gerçek kaynak koda okuma erişimi vardır. Her kullanıcı eyleminin kod yolunu izler. Kodun tam olarak ne yaptığını raporlar. Dosya ve satır numarasını belirtir. Kodda var olmayan şeyleri hayal edemez.
Bunu bozuk bir yapay zeka mini oyun oluşturucusu üzerinde test ettim. İşte olanlar:
Turn 1: Buton başarısız oldu. Kullanıcı "Generate" butonuna tıkladı. Kod, isteği yeni uç nokta (endpoint) yerine eski ve ölü bir uç noktaya gönderdi. Testler geçti çünkü eski API hâlâ çalışıyordu.
Turn 2: Tıklanamayan boşluk. Kullanıcı sonuca tıklamaya çalıştı. Kod, metni herhangi bir tıklama işleyicisi (click handler) olmayan düz bir kutuya yerleştirmişti. Hiçbir şey olmadı.
Turn 3: Sahte lütuf. Kullanıcı hatayı düzeltmeye çalıştı. Eksik bir ID nedeniyle backend başarısız oldu. Sistem çökmüş olmasına rağmen ekran yeşil bir başarı mesajı gösterdi.
Turn 4: Kesintiye uğramış umut. Kullanıcı kodu manuel olarak kopyalamaya çalıştı. API metni yarıda kesti. Kod bozuktu.
Kullanıcı vazgeçti.
Çoğu birim testi (unit test) sadece bir uç noktanın 200 döndürüp döndürmediğini kontrol eder. Kullanıcının hedefine gerçekten ulaşıp ulaşmadığını kontrol etmezler.
Nasıl kullanılır:
- Kullanıcı ajanını inatçı yapın. Gerçek hatalar ilk hatanın arkasına gizlenir.
- Uygulama ajanını gerçek koda dayandırın. Bu, rol yapmayı gerçek bir hata raporuna dönüştürür.
- Bunu testlerinizin bir tamamlayıcısı olarak kullanın. Mantığınızın gerçekle buluştuğu boşlukları bulur.
Bu yöntem statiktir ve maliyeti düşüktür. Henüz tek bir test fixture'ı bile yazmadan çalışır. "Kod çalışıyor" ifadesini "kullanıcı başarılı oluyor" ifadesine dönüştürür.
Source: https://dev.to/terum/every-test-passed-the-user-still-couldnt-play-the-game-388o
Optional learning community: https://t.me/GyaanSetuAi
