Yapay zekâ ile yazılan Python kodunu kontrol etmek için önce koddan bağımsız olarak beklenen davranışı tanımla, ardından normal ve sınır durumlarını test et. Kodu çalıştırmadan sonucu tahmin edip gerçek sonuçla karşılaştır, açıklanamayan farkı daha küçük bir örnekle izole et ve doğruluktan ayrı olarak yan etkileri incele. Böylece yalnızca kodun çalışıp çalışmadığını değil, görevi doğru ve güvenli biçimde yerine getirip getirmediğini de değerlendirebilirsin.
Bu süreç beş aşamada ilerler: problemi yeniden yazmak, test verilerini hazırlamak, beklenen çıktıyı önceden tahmin etmek, gerçek sonucu karşılaştırmak ve farkı izole etmek. Yapay zekâ tarafından üretilen kod otomatik olarak hatalı değildir; ancak kodun hata vermeden çalışması da tek başına doğruluk kanıtı sayılmaz.
Yapay zekâ ile yazılan Python kodu nasıl kontrol edilir?
Kontrole doğrudan kod satırlarını inceleyerek değil, problemin tanımını yazarak başlamak daha sağlıklı bir çerçeve sunar. Hangi verinin alınacağını, hangi sonucun üretileceğini, hangi koşulların geçerli olduğunu ve geçersiz bir girişte ne olması gerektiğini netleştir. Bu tanım koddan bağımsız olmalıdır. Böylece yapay zekânın önerdiği çözümü, kendi içinde tutarlı görünen bir metin olarak değil, belirli bir görevi yerine getirmesi gereken bir araç olarak değerlendirirsin.
Ardından normal girişlerin yanında sınır durumlarını da içeren örnekler hazırla. Boş veri, tek elemanlı veri, tekrar eden değerler, negatif sayılar veya beklenmeyen girişler, problemin yapısına uygunsa test planına eklenebilir. Kodu çalıştırmadan önce her örnek için beklenen sonucu tahmin et ve çalıştırma sonrasında gerçek sonuçla karşılaştır.
Bir fark ortaya çıkarsa tüm kodu aynı anda değiştirmek yerine problemi küçült. Daha az veri kullan, tek bir işlevi incele veya sonucu etkileyen tek bir koşula odaklan. Doğruluk kontrolü tamamlandıktan sonra kodun yan etkilerini ayrıca değerlendir. Dosya değiştirme, veriyi kalıcı olarak güncelleme, gereksiz çıktı üretme veya dış bir kaynağa istek gönderme gibi davranışlar, kod doğru sonuç verse bile ayrı bir inceleme gerektirir.
Beklenen çıktıyı koddan önce yaz: Beş aşamalı kontrol yöntemi

Aşağıdaki yöntem, yapay zekâdan alınan kodu incelerken tahmin ile gözlemi birbirinden ayırır. Her aşamanın sonunda kısa bir kontrol notu tutmak, hangi noktada ayrışma başladığını görmeyi kolaylaştırır.
- Problemi yeniden yazmak: Görevi kendi cümlelerinle açıkla. Girdilerin türünü, beklenen çıktıyı, kısıtları ve hatalı ya da eksik girişlerdeki davranışı belirt. Kontrol notu: Amaç, giriş, çıktı, kısıt ve hata davranışı başlıklarını doldur.
- Normal ve sınır durumlarını içeren örnek veri oluşturmak: Olağan bir örneğin yanında problemin sınırlarını zorlayan veriler seç. Boş veri, tek değer, tekrar eden değer veya negatif değer gibi durumları yalnızca problemle ilgiliyse kullan. Kontrol notu: Her test için girdiyi ve bu girdide beklenen sonucu kaydet.
- Kodu çalıştırmadan beklenen çıktıyı tahmin etmek: Kodun sonucunu önceden yaz. Tahminini, kodun amacına ve belirlediğin kurallara dayandır; çalıştırma sonucuna göre sonradan değiştirme. Kontrol notu: Test adı, beklenen çıktı ve tahmininin kısa gerekçesini yaz.
- Testi çalıştırıp gerçek sonucu tahminle karşılaştırmak: Kodu çalıştırdıktan sonra yalnızca çıktıya değil, hata mesajlarına, veri türüne ve beklenmeyen ek davranışlara da bak. Kontrol notu: Beklenen sonucu, gerçek sonucu ve aralarındaki farkı aynı yerde karşılaştır.
- Açıklanamayan sonucu izole etmek: Farkı bulduğunda daha küçük bir veriyle yeniden dene. Gerekirse incelemeyi tek bir işleve veya sonucu etkileyen tek bir koşula indir. Kontrol notu: İlk ayrışmanın hangi küçük örnekte, hangi işlevde veya hangi koşulda ortaya çıktığını kaydet.
Python kodunda doğruluk hangi testlerle incelenir?
Python kodunun doğruluğu, yalnızca normal bir örnekte beklenen sonucu üretip üretmediğine bakılarak anlaşılmaz. Her kontrol için kullanılacak test verisini ve testin yanıtlaması gereken soruyu önceden belirlemek gerekir. Böylece yapay zekânın ürettiği kod, varsayımlarla değil gözlemlenebilir sonuçlarla değerlendirilir.
Veri türleri ve döngü sınırları
Test verisi: Kodun beklediği türde değerler, kabul etmemesi gereken türler ve boş değerler kullanılabilir. Döngüler için başlangıç değeri, başlangıçtan hemen sonraki değer, son sınır ve sınırın bir üstündeki değer ayrı ayrı denenmelidir. Yanıtlanacak soru: Kod doğru veri türünü işliyor mu ve döngü gerekli elemanların tamamını, yalnızca gerekli elemanları mı ele alıyor?
Liste sınırları ve değer çeşitliliği
Test verisi: Boş liste, tek elemanlı liste, normal değerler içeren liste, tekrarlı değerler ve negatif değerler kullanılmalıdır. Yanıtlanacak soru: Kod boş veya küçük bir listede çökmeden tanımlı bir sonuç üretiyor mu? Tekrarlı değerleri yanlış sayıyor mu? Negatif değerleri sıfır ya da hata gibi yorumlamadan doğru biçimde işliyor mu?
Kullanıcı girdisinin incelenmesi
Test verisi: Boş giriş, yalnızca boşluklardan oluşan giriş, beklenmeyen türde değer ve biçimi hatalı metin denenmelidir. Örneğin sayı beklenen yerde harf, tarih beklenen yerde geçersiz bir biçim kullanılabilir. Yanıtlanacak soru: Program geçersiz girdiyi fark ediyor mu, kullanıcıya anlaşılır bir yönlendirme sunuyor mu ve hatalı değeri geçerliymiş gibi kullanıyor mu?
Dosya işlemleri ve istisna davranışı
Test verisi: Bulunamayan dosya, boş dosya ve beklenen biçime uymayan içerik kullanılmalıdır. Yanıtlanacak soru: Kod her durumda ne yapacağını belirlemiş mi? Beklenen hatalar uygun biçimde ele alınmalı, hata sessizce gizlenmemelidir. Örneğin except: pass ile devam etmek yerine hangi hatanın beklendiği, kullanıcıya ne gösterileceği ve programın devam edip etmeyeceği önceden tanımlanmalıdır.
Kodun doğruluğu ile güvenliği neden ayrı kontrol edilir?

Bir kod beklenen sonucu üretebilir, ancak bunu istenmeyen bir dosyayı değiştirerek, dışarıya veri göndererek veya kullanıcı girdisini denetimsiz biçimde kullanarak yapabilir. Doğruluk kontrolü “sonuç doğru mu?” sorusuna, güvenlik kontrolü ise “kod bunu hangi kaynaklara ve hangi yan etkilerle erişerek yaptı?” sorusuna odaklanır.
İnceleme sırasında şu alanları ayrı ayrı değerlendir:
- Dosya işlemleri: Kod hangi dosyaları okuyor, yazıyor veya siliyor? Dosya yolu doğrudan kullanıcı girdisinden mi geliyor?
- Komut çalıştırma: Kullanıcıdan alınan metin bir komuta doğrudan ekleniyor mu?
- Dış kaynaklar: Kod dışarıdan veri alıyor mu, aldığı verinin biçimini ve kaynağını kontrol ediyor mu?
- Hata ve istisnalar: Hata mesajı gereksiz ayrıntı açığa çıkarıyor mu, yoksa hatayı tamamen gizleyerek teşhisi zorlaştırıyor mu?
Son kontrolde şu soruların her birine açık yanıt ver: Kod hangi kaynaklara erişiyor? Hangi işlemleri gerçekten yapıyor? Kullanıcı girdisi komut veya dosya yolu olarak doğrudan kullanılıyor mu? Hata durumunda ne oluyor? Dış kaynağa ihtiyaç duyuluyor mu?
Liste içindeki en yüksek değeri bulan Python kodu nasıl test edilir?
Bir kodun doğruluğu, tek bir örnekte beklenen sonucu vermesiyle anlaşılmaz. Önce beklenen sonuçları yazmak, ardından ilk eleman, son eleman, negatif değer, tekrar eden değer ve boş liste gibi durumları ayrı ayrı denemek gerekir.
def en_buyugu_hata(sayilar):
en_buyuk = 0
for i in range(1, len(sayilar) - 1):
if sayilar[i] > en_buyuk:
en_buyuk = sayilar[i]
return en_buyuk
Bu sürüm iki döngü sınırı hatası içerir. Döngü ilk elemandan değil, ikinci elemandan başlar. range fonksiyonunun bitiş değeri dahil olmadığı için son eleman da incelenmez. Ayrıca başlangıç değerinin 0 olması, tüm sayılar negatif olduğunda yanlış sonuç üretir.
| Girdi | Hatalı sürümün sonucu | Beklenen sonuç | Teşhis |
|---|---|---|---|
[3, 7, 2] |
7 | 7 | İlk test tesadüfen geçer, çünkü incelenen orta eleman en büyük değerdir. |
[9, 2, 1] |
2 | 9 | İlk eleman atlandığı için sonuç yanlıştır. |
[-8, -3, -5] |
0 | -3 | 0 başlangıcı, listedeki negatif değerlerin tamamından büyüktür. |
[4] |
0 | 4 | Döngü çalışmaz ve tek eleman değerlendirilmez. |
[5, 5, 2] |
5 | 5 | Sonuç doğru görünür, ancak ilk ve son eleman yine güvenilir biçimde test edilmemiştir. |
[] |
0 | ValueError |
Boş liste için açık bir davranış tanımlanmamıştır. |
def en_buyugu(sayilar):
if not sayilar:
raise ValueError("Liste boş olamaz.")
en_buyuk = sayilar[0]
for sayi in sayilar[1:]:
if sayi > en_buyuk:
en_buyuk = sayi
return en_buyuk
print(en_buyugu([-8, -3, -5]))
print(en_buyugu([4]))
Düzeltilmiş sürüm, ilk elemanı başlangıç değeri kabul eder ve kalan elemanları bununla karşılaştırır. Böylece negatif sayılar da doğru değerlendirilir. Boş liste için tanımlı davranış ValueError istisnasıdır.
Beklenen çıktı: İlk çağrı için -3, ikinci çağrı için 4. Diğer test girdileri de tabloda belirtilen beklenen sonuçları üretmelidir. Python öğrenirken bu tür sınır durumlarını birlikte incelemek için birebir Python dersleri kapsamında problem tanımından test sonuçlarına kadar adım adım çalışabilirsin.
Kodu teslim etmeden önce mini teşhis akışı ve kontrol listesi
Beklenmeyen bir sonuç aldığında kodu rastgele değiştirmek yerine şu teşhis akışını uygula:
- Başarısız girdiyi sabitle ve değiştirmeden sakla.
- Beklenen sonuç ile gerçek sonucu yan yana yaz.
- Hatanın sürdüğü en küçük başarısız örneği oluştur.
- Ara değerlerde ilk ayrışmanın hangi noktada başladığını bul.
- İlgili satırı veya işlevi diğer kodlardan izole et.
- Düzeltmeyi normal girdiler ve sınır durumlarıyla yeniden çalıştır.
- Dosya okuma, dosya yazma ve komut çalıştırma gibi yan etkileri tekrar incele.
- Problem tanımı yazıldı mı?
- Beklenen çıktı koddan önce belirlendi mi?
- Farklı veri türleri ve sınır durumları denendi mi?
- Döngü sınırları incelendi mi?
- Kullanıcı girdisi ve istisnalar test edildi mi?
- Dosya ve komut yan etkileri kontrol edildi mi?
- Her açıklanamayan bölüm izole edildi mi?
Python ve diğer birebir programların genel yapısını incelemek için birebir yazılım programlarını ve bu programlarda kişiye özel ilerleme yaklaşımını karşılaştırabilirsin.
Sık Sorulan Sorular
Yapay zekânın ürettiği Python kodunu sadece çalıştırmak neden yeterli değildir?
Çalışan bir örnek, kodun tüm girdilerde doğru sonuç vereceğini göstermez. Özellikle boş listeler, negatif değerler, tekrar eden değerler ve beklenmeyen kullanıcı girdileri ayrı ayrı test edilmelidir.
Kod doğru sonuç veriyor görünse bile hangi güvenlik kontrolleri yapılmalıdır?
Kullanıcı girdisinin nasıl işlendiğini, dosya okuyup yazmadığını, komut çalıştırıp çalıştırmadığını ve dış kaynaktan veri alıp almadığını kontrol et. Gereksiz yetkileri ve hata mesajlarında hassas bilgi açığa çıkıp çıkmadığını da incele.
Boş liste, tek elemanlı liste ve negatif değerler neden özellikle test edilmelidir?
Bu girdiler başlangıç değerleri ve döngü sınırlarıyla ilgili hataları görünür hâle getirir. Normal bir listedeki başarılı sonuç, bu özel durumların doğru ele alındığını kanıtlamaz.
Yapay zekâdan gelen kodun açıklanamayan bir bölümünü nasıl izole edebilirim?
Önce yalnızca hatayı üreten en küçük girdiyi bırak. Ardından ilgili işlevi ayrı çalıştır, ara değerleri incele ve ilgisiz satırları geçici olarak çıkar. Böylece ilk farklı sonucun hangi işlemde oluştuğunu daha kolay görebilirsin.
Yapay zekâ kod yazma sürecini hızlandırabilir, ancak beklenen çıktıyı tanımlamak, testleri yürütmek ve sonucu açıklayabilmek kodu kullanan kişinin sorumluluğundadır.