Ana içeriğe geç

Flaky Test

Kararsız test

Okunuşu
fleyki test
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/flaky-test

Kısaca

Flaky test, koda hiçbir değişiklik yapılmadan bazen geçen bazen başarısız olan ve sonuçlarına güvenmeyi zorlaştıran otomatik bir testtir.

Flaky test nedir?

Flaky test, ne kod ne de test değişmiş olsa bile farklı çalıştırmalarda farklı sonuçlar verir. Dokuz kez geçip onuncuda başarısız olabilir; bu da bir başarısızlığın gerçek bir hataya mı yoksa yalnızca şanssızlığa mı işaret ettiğini anlamayı zorlaştırır.

Kararsızlık genellikle belirsizlikten (nondeterminism) kaynaklanır; yani testteki bir şey her çalıştırmada aynı değildir. Yaygın nedenler arasında asenkron koddaki zamanlama sorunları ve yarış koşulları (race condition), bazen çok kısa kalan sabit sleep çağrıları, birbirinin artık verisine ya da çalışma sırasına bağlı testler, gerçek ağ çağrıları, rastgele değerler ve geçerli tarih ya da saat dilimi sayılabilir. Uçtan uca testler tarayıcıları, ağları ve pek çok hareketli parçayı içerdiği için özellikle kararsızlığa yatkındır.

Flaky test, rastgele çalan bir duman dedektörüne benzer: birkaç yanlış alarmdan sonra gerçek bir yangın çıksa bile insanlar tepki vermeyi bırakır. Hatları rastgele başarısız olan ekiplerde de aynısı olur; geliştiriciler yeniden çalıştır düğmesine tıklamayı öğrenir ve gerçek hatalar gözden kaçar.

Çözüm, rastgeleliğin kaynağını bulup ortadan kaldırmaktır: sabit bir süre yerine belirli bir koşulu bekleyin, her testten önce veriyi sıfırlayın, saati ve harici servisleri mock'layın ve rastgele sayı üreteçlerine sabit bir seed verin. Pek çok ekip, incelerken kararsız bir testi geçici olarak zorunlu test takımının dışına taşıyarak karantinaya alır. Otomatik yeniden denemeler belirtiyi gizleyebilir, ama nedeni çözmez.

Önemli noktalar

  • Flaky test, kod değişmeden rastgele geçer ve başarısız olur.
  • Yaygın nedenler zamanlama sorunları, paylaşılan durum, test sırası, ağ çağrıları ve tarihlerdir.
  • Flaky testler tüm test takımına olan güveni aşındırır.
  • Otomatik yeniden denemelere güvenmek yerine asıl nedeni düzeltin.

Örnek

Zamanlamaya bağlı flaky bir testi düzeltmekjavascript
// Flaky: assumes the data always arrives within 100 ms
test("shows the user's name", async () => {
  loadUser();
  await sleep(100);
  expect(getPageText()).toContain("Ada");
});

// Stable: waits for the actual condition, up to a timeout
test("shows the user's name", async () => {
  loadUser();
  await waitFor(() => expect(getPageText()).toContain("Ada"));
});

Sık sorulan sorular

Flaky testlere ne sebep olur?

En yaygın nedenler asenkron koddaki zamanlama sorunları, veriyi paylaşan ya da çalışma sırasına bağlı testler, gerçek ağlara ya da servislere yapılan çağrılar ve rastgele değerlere veya geçerli zamana bağımlılıktır. Her çalıştırmada aynı olmayan herhangi bir şey bir testi kararsız hâle getirebilir.

Flaky testleri sadece yeniden denemek yeterli mi?

Yeniden denemeler kısa vadede hattın akmasını sağlayabilir, ancak sorunu gizler ve kodunuzdaki gerçek aralıklı hataları maskeleyebilir. Flaky testleri takip edin, gerekirse karantinaya alın ve asıl nedeni düzeltin.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar