Yapay Zeka ile Unit Test Yazımı

Kodlamada işin görünen kısmı kadar görünmeyen kısmı da önemli. Evet, çalışıyor olabilir… ama nasıl test edildi? Ne kadar kapsayıcı? Hangi uç durumlar göz önünde bulunduruldu?

Uzun zamandır fark ettiğim bir şey var: Yazılımcılar olarak kodu yazıp çalıştırmayı bir başarı olarak görüyoruz ama test yazımını çoğu zaman geri plana atıyoruz. Oysa sürdürülebilir bir yazılım altyapısı için unit test kültürü vazgeçilmez.

Son dönemde bu konuda en çok dikkatimi çeken konu ise şu: Yapay zeka destekli araçlar artık unit test yazımında ciddi bir rol üstleniyor.


Neden Unit Test Yazımı Zor Geliyor?

  • Zaman alıyor gibi görünüyor
  • Kodun test edilebilir yapıda olmaması
  • Test senaryosu üretme konusunda ilhamsızlık
  • Mock’lama işlemlerinin karmaşıklığı
  • Gerekliliği tam olarak içselleştirilmemiş olması

Ama yapay zeka bu engelleri bir bir ortadan kaldırıyor. Artık IDE’lerdeki AI eklentileri ya da dış kaynak araçlar, var olan fonksiyonlara uygun test senaryoları oluşturabiliyor, mock objeler tanımlıyor ve coverage oranını iyileştiriyor.


Hangi Araçlar ile Neler Yapabiliyoruz?

Aşağıdaki araçlar şu anda AI destekli unit test üretimi konusunda öne çıkıyor:

  • GitHub Copilot: Fonksiyonları anlıyor ve onlara uygun test fonksiyonları önerebiliyor.
  • Codeium: Özellikle JavaScript ve Python projelerinde başarılı test kalıpları sunuyor.
  • Amazon CodeWhisperer: AWS tabanlı projelerde, test kodlarını öneriyor ve veri hazırlığı yapıyor.
  • IntelliTest (Visual Studio + Roslyn): C# projelerinde otomatik test veri setleri ve test class’ları üretimi için çok iyi bir başlangıç noktası.

Ayrıca bazı özel VS Code eklentileri ile, metottaki kontrol bloklarını analiz ederek test edilmesi gereken senaryoları listeliyor ve ona uygun test iskeletlerini oluşturuyorlar.

Örnek Senaryo: C# Projesinde AI ile Test Üretimi

public class KrediHesaplayici
{
    public decimal AylikTaksit(decimal anapara, int ay, double faiz)
    {
        if (ay <= 0 || anapara <= 0 || faiz < 0) throw new ArgumentException();
        return anapara * (decimal)(1 + faiz / 100) / ay;
    }
} 

GitHub Copilot’a veya Codeium’a şu prompt yazıldığında:

Write a unit test in xUnit for the function AylikTaksit

AI şu şekilde cevap veriyor:

[Fact]
public void AylikTaksit_ValidInput_ReturnsExpectedResult()
{
    var hesaplayici = new KrediHesaplayici();
    var sonuc = hesaplayici.AylikTaksit(10000, 10, 12);
    Assert.Equal(1120, Math.Round(sonuc));
}

Ayrıca hata durumları için [Theory] kullanarak sınır testlerini de otomatik öneriyor.


Ne Kazandırıyor?

  • Zaman tasarrufu (özellikle repetitif testlerde)
  • Coverage artışı
  • Yeni başlayan yazılımcılar için öğrenme fırsatı
  • Takım içi test kültürünün gelişmesi
  • Daha güvenli CI/CD süreçleri

Gelecek Ne Getiriyor?

  • AI’ın tüm sınıfları analiz edip test coverage açıklarını önermesi
  • Otomatik test datası üretimi (örneğin faker destekli)
  • Testlerin zamanla optimizasyonu (örneğin redundant testlerin temizlenmesi)
  • Geliştiricinin stiline göre test önerileri (parametrik, mock’lu, vs.)

Son Söz

AI ile unit test yazmak, test kültürünü geliştirmek için dev bir fırsat. Bu sistemler, sadece işleri hızlandırmıyor, aynı zamanda iyi bir yazılım geliştiricinin sorumluluk duygusunu da besliyor.

Kodun sadece çalışması değil, doğru çalıştığının da kanıtlanması gerekiyor. Ve artık bu süreci yalnız yürütmek zorunda değiliz. AI, bu yolda da yanımızda.