WY · BÖLÜM 07 · FÖY 131
YAZ-131 · Yazılım & Teknik · ~2 dk

Yeni Fonksiyona Kenar Durum Birim Test İskeleti

Fonksiyonun kenar durumlarını tek tek gezen, doldurmaya hazır bir test iskeleti alırsın: hangi girdilerin test edilmesi gerektiğini sıfırdan düşünmek yerine listeyi gözden geçirip onaylarsın, bir de test yazarken çıkan olası hatalar not düşülür.

Kanca

Fonksiyonu yazdın, mutlu yolda çalıştı, commit ettin. Test yazmayı "sonra" diye erteledin; ama boş liste, null, sınır değeri gibi durumları kimse saymadı ve o hatayı prod'da ilk öğrenen sen olmak istemezsin.

Hamle — Claude / ChatGPT (ikisi de çalışır)
Prompt — kopyala & yapıştır
Sana yeni yazılmış bir fonksiyon vereceğim. Görevin bunun birim test iskeletini çıkarmak. Amaç mutlu yolu doğrulamak değil, gözden kaçan kenar durumlarını yakalamak.

Kurallar:
1. Önce fonksiyonu oku. Dilini ve test çatısını (pytest, JUnit, Jest, xUnit gibi) koddan tespit et. Tespit edemezsen tahmin yürütme; en üste "EKSIK: test çatısı belirtilmedi" yaz ve fonksiyonun diline uygun genel bir iskelet ver.
2. Kenar durumlarını çıkar. En az şunları tara: boş veya null girdi; sıfır, negatif ve çok büyük değerler; sınır değerleri (0, 1, üst limit ve üst limitin bir fazlası); yanlış tip; boş koleksiyon ve tek elemanlı koleksiyon; tekrarlı eleman; boşluk ve özel karakter içeren metin; dış bağımlılık (ağ, veritabanı, saat, rastgelelik) hata verdiğinde; çağrılar arası paylaşılan durum sızıntısı.
3. Sadece bu fonksiyonda gerçekten mümkün olan durumları al. Fonksiyonla ilgisi olmayanı listeleme.
4. Her durum için bir test iskeleti yaz: durumu anlatan açık bir isim, hazırlık satırları, fonksiyon çağrısı ve beklenen sonucu kontrol eden doğrulama satırı.
5. Bir durumda beklenen davranış koddan net anlaşılmıyorsa doğrulamayı uydurma. O satıra yorum olarak "TODO netleştir: beklenen davranış belirsiz" yaz.
6. En sona "Riskli gördüklerim" başlığı ekle; test yazarken fark ettiğin en fazla 3 olası hatayı tek cümleyle yaz.

Fonksiyon:
[FONKSİYONU BURAYA YAPIŞTIR]
Çıktı

Fonksiyonun kenar durumlarını tek tek gezen, doldurmaya hazır bir test iskeleti alırsın: hangi girdilerin test edilmesi gerektiğini sıfırdan düşünmek yerine listeyi gözden geçirip onaylarsın, bir de test yazarken çıkan olası hatalar not düşülür. Birkaç dakika.

Kariyer çentiği

Testli kod gönderen ve hatayı gözden geçirmede değil kendi masasında yakalayan kişi olarak görünürsün.

Sınır

AI sadece kodda yazanı görür, fonksiyonun ne yapması gerektiğini bilmez; gerçek beklenen değerleri ve iş kuralını sen doldurmalısın ve fonksiyonda gerçek anahtar veya müşteri verisi gömülüyse yapıştırmadan önce temizle.

Örnek — bu prompt ne üretir?
Örnek girdi
def sepet_indirimi(kalemler, kupon=None):
    # sepetteki kalemleri toplar, kademe indirimi + kupon uygular
    toplam = 0
    for k in kalemler:
        toplam += k["fiyat"] * k["adet"]

    if toplam > 1000:
        toplam = toplam * 0.9
    elif toplam > 500:
        toplam = toplam * 0.95

    if kupon == "ILKALISVERIS":
        toplam = toplam - 50

    return round(toplam, 2)
Çıktı

EKSIK: test çatısı belirtilmedi — kodda bir test çatısı içe aktarılmamış. Aşağıdaki iskelet, dile uygun genel bir seçim olarak pytest ile yazıldı.

Tespit

  • Dil: Python 3
  • Fonksiyon: sepet_indirimi(kalemler, kupon=None)

Kenar durumları ve test iskeleti

```python

import pytest

from modul import sepet_indirimi

def test_bos_sepet_sifir_doner():

assert sepet_indirimi([]) == 0

def test_kalemler_none_typeerror():

# None üzerinde döngü TypeError fırlatmalı

with pytest.raises(TypeError):

sepet_indirimi(None)

def test_eksik_adet_anahtari_keyerror():

with pytest.raises(KeyError):

sepet_indirimi([{"fiyat": 100}]) # 'adet' yok

def test_500_siniri_indirim_yok():

# tam 500: '> 500' False → indirim uygulanmaz

assert sepet_indirimi([{"fiyat": 500, "adet": 1}]) == 500

def test_501_yuzde5():

assert sepet_indirimi([{"fiyat": 501, "adet": 1}]) == 475.95

def test_1000_siniri_yuzde5():

# tam 1000: '> 1000' False → yalnız %5

assert sepet_indirimi([{"fiyat": 1000, "adet": 1}]) == 950.0

def test_1001_yuzde10():

assert sepet_indirimi([{"fiyat": 1001, "adet": 1}]) == 900.9

def test_negatif_fiyat():

# TODO netleştir: negatif fiyat kabul edilmeli mi, koddan belli değil

assert sepet_indirimi([{"fiyat": -100, "adet": 1}]) == -100

def test_kupon_toplami_negatife_dusurebilir():

# TODO netleştir: kupon sonrası negatif toplam engellenmeli mi

assert sepet_indirimi([{"fiyat": 10, "adet": 1}], kupon="ILKALISVERIS") == -40

def test_bilinmeyen_kupon_etkisiz():

assert sepet_indirimi([{"fiyat": 100, "adet": 1}], kupon="GECERSIZ") == 100

def test_fiyat_yanlis_tip_string():

with pytest.raises(TypeError):

sepet_indirimi([{"fiyat": "abc", "adet": 2}])

```

Riskli gördüklerim

  1. 500 ve 1000 tam sınır değerlerinde > kullanıldığı için indirim bir kademe geç başlıyor; iş kuralı >= bekliyorsa hata tam burada.
  2. Kupon toplamı negatife düşürebilir; alt sınır (0) kontrolü yok.
  3. Eksik fiyat/adet anahtarı ya da string fiyat, dışarıdan gelen veride doğrulanmadan KeyError/TypeError'a dönüşüyor.

ÜRETİM: TEM 2026 · CLAUDE Bu kayıt eşlenmiş örnek girdi ve çıktı içerir. Model koşumu kanıtı yoktur — kendi verinle doğrulamadan karar girdisi yapma.

Kendi verinle çalıştır
Verini aşağıya yapıştır; prompt seninkiyle birleşip çalıştırmaya hazır tek bloğa dönüşsün. Sonra tek dokunuşla Claude ya da ChatGPT'de aç.
Hazır prompt — verini bekliyor
Sana yeni yazılmış bir fonksiyon vereceğim. Görevin bunun birim test iskeletini çıkarmak. Amaç mutlu yolu doğrulamak değil, gözden kaçan kenar durumlarını yakalamak.

Kurallar:
1. Önce fonksiyonu oku. Dilini ve test çatısını (pytest, JUnit, Jest, xUnit gibi) koddan tespit et. Tespit edemezsen tahmin yürütme; en üste "EKSIK: test çatısı belirtilmedi" yaz ve fonksiyonun diline uygun genel bir iskelet ver.
2. Kenar durumlarını çıkar. En az şunları tara: boş veya null girdi; sıfır, negatif ve çok büyük değerler; sınır değerleri (0, 1, üst limit ve üst limitin bir fazlası); yanlış tip; boş koleksiyon ve tek elemanlı koleksiyon; tekrarlı eleman; boşluk ve özel karakter içeren metin; dış bağımlılık (ağ, veritabanı, saat, rastgelelik) hata verdiğinde; çağrılar arası paylaşılan durum sızıntısı.
3. Sadece bu fonksiyonda gerçekten mümkün olan durumları al. Fonksiyonla ilgisi olmayanı listeleme.
4. Her durum için bir test iskeleti yaz: durumu anlatan açık bir isim, hazırlık satırları, fonksiyon çağrısı ve beklenen sonucu kontrol eden doğrulama satırı.
5. Bir durumda beklenen davranış koddan net anlaşılmıyorsa doğrulamayı uydurma. O satıra yorum olarak "TODO netleştir: beklenen davranış belirsiz" yaz.
6. En sona "Riskli gördüklerim" başlığı ekle; test yazarken fark ettiğin en fazla 3 olası hatayı tek cümleyle yaz.

Fonksiyon:
[FONKSİYONU BURAYA YAPIŞTIR]

Yapıştırdığın veri tarayıcından çıkmaz — WhiteYaka'ya gönderilmez. Prompt panoya kopyalanır; açılan sohbete Ctrl/⌘ + V ile yapıştırırsın.

i Bu föy örnek girdi ve çıktı içerir; yapısal doğrulama ve ölçütlü prompt koşumu henüz kaydedilmedi.

Bülten kaydı kapalı.

Bu sayfa e-posta adresi toplamaz ve liste kaydı başlatmaz. 160 hamlenin tamamı giriş yapmadan açık.