Yapay Zeka Destekli Yazılımda Kod Halüsinasyonları, Güvenlik Açıkları ve Teknik Yetkinliğin Erozyonu
ÖZET
Yazılım geliştirme yaşam döngüsüne (SDLC) Büyük Dil Modellerinin (LLM) entegrasyonu, Entegre Geliştirme Ortamının (IDE) ortaya çıkışından bu yana operasyonel kodlamada yaşanan en köklü paradigma değişimini temsil etmektedir. Ancak, insan niyetini deterministik otomasyonla güçlendiren önceki nesil araçların aksine Üretken Yapay Zeka (GenAI), mühendislik süreçlerine doğası gereği olasılıksal bir katman eklemekte ve böylece yeni türden epistemik ve operasyonel riskleri tetiklemektedir. Bu dönüşüm; işlevsel mantığın ve bağımlılıkların halüsinasyonu, kod bakımının zayıflaması ve teknik uzmanlığın aşınması gibi belirtilerle kendisini gösteren çok boyutlu bir krizi ortaya çıkarmaktadır. Geliştiricilerin GenAI kullanımında hız artışı algılamasına rağmen, ince yapay zeka hatalarını düzeltme gerekliliğinin yarattığı bilişsel yükün görev tamamlama sürelerini artırması bu çelişkili dinamiği doğrulamaktadır. Dahası, 200 milyondan fazla kod satırına dayanan boylamsal analizler kod tekrarında (“kopyala/yapıştır”) %48'lik artış ve refactoring faaliyetlerinde keskin bir düşüşolduğunu ortaya koyarak, uzun vadeli sürdürülebilirlikten kısa vadeli hız optimizasyonuna doğru bir kayma yaşandığını göstermektedir. Buna paralel olarak, yapay zeka çıktılarının eleştirel değerlendirme olmaksızın benimsendiği “vibe coding” uygulamaları, özellikle genç geliştiricilerde “yetkinlik illüzyonu” yaratarak beceri edinimi için gerekli geri bildirim döngülerini zayıflatmakta ve mühendislik ekiplerinde epistemik yozlaşma olarak tanımlanan bilgi erozyonuna yol açmaktadır. Son olarak, yapay zeka tarafından oluşturulan kodun yeniden bu modellere eğitim verisi olarak geri akmasıyla ortaya çıkan özyinelemeli eğitim (recursive training) süreçlerinin, modellerde giderek artan bir bozulma yaratacağını ve yazılım güvenilirliğini tehdit eden “bilgi çöküşü” (knowledge collapse) dinamiklerini tetikleyeceği öngörülmektedir. Bu göstergeler bir arada değerlendirildiğinde, GenAI destekli yazılım mühendisliğinin yalnızca üretkenlik metriklerini değil, yazılım ekosisteminin bütünlüğünü, güvenliğini ve mesleki bilgi birikiminin sürdürülebilirliğini tehdit eden sistemik bir meydan okuma oluşturduğu görülmektedir.
1. Giriş: Deterministik Mühendislikten Olasılıksal Tahmine Geçiş ve Metodolojik Halüsinasyon
Yazılım mühendisliği tarihsel olarak kesinlik, determinizm ve formel doğrulama ilkeleri üzerine inşa edilmiştir. Derleyiciler(compiler) ve yorumlayıcılar(interpreter), tanımlı sözdizimsel kurallara bağlı kalarak kodu ya çalıştırır ya da hataya düşer; belirsizlik için tasarlanmış bir boşluk yoktur. Ancak yapay zekanın kod üretim sürecine dahil olmasıyla birlikte bu zeminin istikrarı sarsılmaya başlamıştır. Mühendisler artık deterministik bir aracın çıktısını değil, istatistiksel olasılıklarla çalışan stokastik bir üreticinin önerilerini değerlendirmektedir. Bu durum, yalnızca üretilen kodun değil, kullanılan metodolojilerin, yazılım dillerinin ve “doğru kod yazma” pratiklerinin dahi halüsinatif bir sürece maruz kaldığını göstermektedir.
Bu ortaya çıkan “metodolojik halüsinasyon”, yazılım geliştirme faaliyetlerinin doğrulanmış sonuçlar yerine, yapay zekanın sunduğu hızlı fakat doğrulanmamış çıktılar üzerine inşa edilmesi anlamına gelir. Geliştiriciler, giderek daha fazla üretim hızını doğrulukla, syntactic olarak geçerli görünen çıktıları ise güvenli ve semantik olarak doğru kodla karıştırmaktadır. Böylece yazılım dilleri ve yöntemleri, insan denetimi azaldıkça kendi iç tutarlılığını ve gerçeklikle olan bağını zayıflatan bir sapma eğilimi göstermektedir.
Bu dönüşüm, mevcut literatürde üç kritik risk vektörü altında incelenmektedir:
- Kodun Halüsinasyonu: Yapay zekanın mantıksal tutarsızlıklar, var olmayan kütüphaneler, yanlış API çağrıları veya sözdizimsel olarak geçerli ama semantik olarak hatalı kodlar üretmesi.
- Sürecin Halüsinasyonu (Vibe Coding): Geliştiricilerin, doğrulama ve anlamlandırma süreçlerini devre dışı bırakarak kodu yalnızca “çalışıyormuş gibi hissettirdiği” için kabul etmesi; bu durum öğrenme döngülerini zayıflatarak yetkinlik yanılsaması yaratmaktadır.
- Bilginin Halüsinasyonu (Knowledge Collapse): Modellerin kendi ürettikleri verilerle yeniden eğitilmesi sonucunda, gerçeklikten giderek uzaklaşan, yüksek özgüvenli ancak sistematik olarak yanlış bilgi üretimine yönelmeleri. Bu üç vektör birlikte ele alındığında, GenAI destekli yazılım mühendisliğinin yalnızca operasyonel pratikleri değil, epistemik temelleri de yeniden şekillendiren derin bir dönüşüm yarattığı görülmektedir.
2. Kod Halüsinasyonları: Nasıl ve Neden Oluşuyor?
Yapay zekâ tarafından üretilen kodlardaki güvenilirlik sorununun temelinde, bu sistemleri çalıştıran modellerin mimari özellikleri bulunmaktadır. Büyük Dil Modelleri (LLM’ler), programlama dillerini bir derleyicinin ya da yorumlayıcının sahip olduğu formel semantik ve sözdizimsel kurallar bütünü üzerinden işlemez; bunun yerine, devasa hacimdeki insan yazımı kodlardan türetilen belirteç (token) olasılıklarını öğrenir. Başka bir ifadeyle, bir LLM kod ürettiğinde mantıksal tutarlılığı veya doğruluğu ispatlamaz; yalnızca bağlama en uygun görünen karakter ve kelime dizisini tahmin eder. Bu olasılıksal üretim mekanizması nedeniyle modeller, çoğu zaman sözdizimsel olarak akıcı ancak anlamsal olarak hatalı, mantıksal olarak tutarsız veya hatta olgusal olarak mevcut olmayan yapılar ortaya çıkarabilmektedir. Bu durum, yazılım üretim sürecinde halüsinasyon olarak tanımlanan sistematik bir risk üretmektedir.
2.1.1 İşlevsel ve Mantıksal Halüsinasyonlar
İşlevsel halüsinasyonlar, modelin derlenen ve yüzeysel olarak doğru görünen ancak geliştiricinin niyetini, iş kurallarını veya bağlamsal gereksinimleri ihlal eden kod parçaları üretmesiyle ortaya çıkar. Bu tür hatalar özellikle kritik önem taşır; çünkü çoğu zaman standart “mutlu yol” (happy path) testlerinden başarıyla geçer, böylece sistemdeki kusur geç tespit edilir. Örneğin bir model, klasik bir sıralama algoritmasını sentaktik olarak doğru biçimde üretebilir; ancak null değerleri, uç tamsayıları veya istisnai kenar durumlarını (edge cases) ele almada başarısız olabilir. Bu durumun temel nedeni, modelin eğitim verisinde baskın olan “standart” örüntülerin olasılıksal ağırlığının, belirli bir bağlamın ince gereksinimlerini gölgeleyerek öne çıkmasıdır.
Araştırmalar ayrıca modellerin, sıfırdan yeni dosyalar oluşturmadan ziyade mevcut bir kod tabanı üzerinde kod değişikliği (diff) üretmeye çalıştıklarında daha fazla hata yaptığını göstermektedir. Bu görev türünde model, hem eski durumu korumak hem de yeni durumu doğru biçimde tahmin etmek zorundadır. Bu ikili akıl yürütme gereksinimi, modelin artık var olmayan değişkenlere referans verdiği, eklenmesi gereken yeni bağımlılıkları içe aktarmadığı veya mevcut modüllerle uyumsuz işlevler ürettiği hatalara yol açmaktadır. Sonuç olarak, bu çıktılar test kapsamı ile de uyumsuzluk yaratır; çünkü model, mevcut testlerin neyi doğruladığını “anlamadan” yeni kod üretir. Bu durum, standart testlerin dışına düşen alanlarda regresyonlara, sessiz başarısızlıklara ve beklenmedik yan etkilerin ortaya çıkmasına neden olarak, kullanıcıların “kodların yeterli testlerden geçmediği” yönündeki endişesini doğrulamaktadır.
2.1.2 Kütüphane ve Bağımlılık Halüsinasyonları (Paket Halüsinasyonları)
Halüsinasyonun en tehlikeli ve sinsi biçimi, yapay zekâ modellerinin yazılım bağımlılıklarını tamamen uydurmasıdır. LLM’ler, eğitim verilerindeki örüntülerden hareketle varmış gibi görünen ancak gerçekte hiç mevcut olmayan kütüphaneler, modüller veya API uç noktaları icat etme eğilimindedir. Bu davranış, modellerin tanıdık morfemleri birleştirerek “makul” isimler üretmesine neden olan istatistiksel tamamlama mekanizmasının doğal bir sonucudur. Örneğin pandas ve scikit-learn üzerine yoğun şekilde eğitilmiş bir model, pandas-sklearn-integration gibi bir paketi yalnızca bu belirteçlerin doğal dilde sıkça birlikte geçmesi nedeniyle gerçekmiş gibi önerebilir. Bu tür uydurma bağımlılıklar, yüzeyde makul görünür ve geliştiriciler tarafından hızla benimsenebildiği için özellikle yüksek risklidir.
Popüler 16 kodlama modeli üzerinde gerçekleştirilen kapsamlı bir ampirik analiz, bu davranışın sanılandan çok daha yaygın olduğunu ortaya koymuştur. 576.000 üretilen kod örneğinin incelendiği çalışmada, çıktılarının yaklaşık %20’sinde var olmayan paketlere referanslar tespit edilmiştir. Araştırmacılar toplamda 205.474 benzersiz halüsinasyonlu paket ismi belirlemiş; bu isimlerin yalnızca yazım hataları (typo-squatting) veya bilinen paketlerin varyantları olmadığı, tamamen yeni ve uydurma bağımlılıklar olduğu görülmüştür. Bu durum, saldırganların bu hayali paketleri gerçekmiş gibi kaydedip slopsquatting saldırılarıyla kötü amaçlı yazılım dağıtma potansiyelini artırdığı için ciddi bir güvenlik tehdidi oluşturmaktadır.
2.1.3 Bağlamsal ve “Hayalet” (Ghost) Halüsinasyonlar
Halüsinasyonun daha incelikli bir türü, modelin kod içinde gerçekte var olmayan “hayalet” kısıtlamalar, varsayımlar veya değişkenler üretmesidir. Bu durum, modelin belirli bir değişkenin veya altyapı bileşeninin var olduğunu “farz etmesiyle” ortaya çıkar. Örneğin, bir fonksiyon kapsamında user_id değişkeni argüman olarak alınmadığı hâlde model onu küresel olarak erişilebilirmiş gibi kullanabilir. Benzer şekilde, geliştiricinin altyapısında bulunmayan bir operasyonel bağlam örneğin belirli bir AWS IAM rolünün mevcut olduğu, belirli bir izin politikasının tanımlandığı veya belirli bir çalışma zamanı ortamının sağlandığı halüsinasyon olarak varsayılabilir. Bu tür hatalar özellikle sinsi niteliktedir; çünkü yüzeyde tutarlı görünürler, ancak çalışma zamanında sessiz başarısızlıklara veya güvenlik açıklarına yol açabilirler.
Bu fenomenin temelinde, LLM’lerin eğitim verilerinin çoğunlukla görünmeyen harici bağlamlara dayanan kod parçacıklarından oluşması yatmaktadır. Açıkça belirtilmemiş çevresel varsayımlar (örneğin global konfigürasyonlar, rol tabanlı yetkilendirme, gizli bağımlılıklar, CI/CD boru hatları veya çalışma zamanı çevre değişkenleri) eğitim verilerinde sıklıkla mevcuttur. Model, bu eksik veya örtük bağlamları genelleyemediğinde, kendi içinde tutarlı görünen ancak geliştiricinin gerçek sisteminde hiçbir karşılığı olmayan sahte bağlamlar üretir. Sonuç olarak ortaya çıkan “hayalet varsayımlar”, hem işlevsel tutarlılığı hem de operasyonel güvenilirliği tehdit eden kritik halüsinasyon biçimlerinden biridir.
2.2 “Kendinden Emin” Başarısızlık Mekanizması
Bu tür halüsinasyonların tehlikesi, LLM’lerin üretimlerinde sergiledikleri yüksek güven ivmesi ile daha da büyür. İnsan mühendisler, belirsizliği genellikle yorumlarla, uyarılarla veya açık işaretçilerle (“// TODO: Bu kütüphanenin gerçekten mevcut olup olmadığını doğrula”) belirtirken, LLM’ler aynı belirsizliği kesinlik kisvesi altında sunar. Üretilen kodun doğruluğundan eminmiş gibi davranmaları, halüsinasyonlu çıktıyı doğru çıktıyla aynı otorite tonu içinde üretmelerine neden olur. Bu durum özellikle deneyimi sınırlı geliştiriciler için ciddi bir güven tuzağı yaratır; zira geliştiriciler, modelin kendilerinden daha geniş, daha güncel ya da daha bağlamsal bir bilgi tabanına sahip olduğunu varsayabilirler.
Bu mekanizma, literatürde araştırmacıların Tehlikeli Yetkinlik Vadisi (Valley of Dangerous Competence) olarak tanımladığı olgunun oluşumuna doğrudan katkıda bulunur. Bu evrede model, yapısal bütünlüğü yüksek, sözdizimsel olarak geçerli ve yüzeysel olarak ikna edici, ancak operasyonel açıdan hatalı kod üretir. Bu “kendinden emin yanlışlık”, model bozulmasının veya kullanıcı aşırı güveninin erken dönemlerinde özellikle yıkıcıdır; çünkü bariz anlamsızlıklar yerine neredeyse doğru görünen fakat kritik hatalar içeren çıktılar oluşur. Böylece, ortaya çıkan kodu doğrulamak için daha düşük değil, tersine daha yüksek düzeyde insan uzmanlığı gerekir. Bu, hataların tespit edilmesini güçleştirir ve gömülü riskleri artırır.
3. Güvenlik Krizi: Slopsquatting
Paket halüsinasyonları ile açık kaynaklı yazılım zincirinin kesişimi, son dönemde literatürde giderek daha fazla dikkat çeken yeni bir saldırı vektörünü ortaya çıkarmıştır: Slopsquatting. Terim, “slop” (düşük kaliteli veya doğrulanmamış yapay zeka çıktısı) ile “squatting” (istenen bir kaynağın önceden ele geçirilmesi) kavramlarının birleşiminden türetilmiştir. Bu teknik, saldırganların LLM’lerin belirli paket adlarını halüsinasyon olarak üretme olasılığının istatistiksel dağılımını istismar etmesine dayanır.
Slopsquatting’in temel mantığı şudur: Saldırgan, modelin üretimlerinde sıkça rastlanan ancak gerçekte var olmayan paket adlarını çoğu zaman popüler kütüphane adlarının türevleri, bileşik morfemleri veya doğal dilde birlikte görünme olasılığı yüksek terimler sistematik olarak tespit eder. Ardından bu hayali paket adlarını, PyPI veya npm gibi açık kaynaklı kayıt defterlerinde gerçek paketler olarak kaydeder. Böylece LLM tarafından üretilen halüsinasyonlu bağımlılıklar, geliştiriciler tarafından körü körüne kabul edildiğinde veya otomasyon prosesleri tarafından çözümlendiğinde, saldırganın sağladığı kötü amaçlı paketin indirilmesine yol açar.
Bu yaklaşım, geleneksel typosquatting saldırılarından önemli bir noktada ayrılır: Typosquatting, insan hatasına (yazım yanlışlarına) dayanırken slopsquatting, model hatasına, yani LLM’lerin yapısal halüsinasyon dinamiklerine dayanır. Diğer bir ifadeyle, saldırganlar kullanıcı hatalarını değil, modelin dil istatistiklerini hedef alır. Bu da saldırı yüzeyini yalnızca güvenlik hijyeni zayıf insanlara bağımlı olmaktan çıkarıp, LLM destekli yazılım geliştirme süreçlerinin kendisine taşır.
Slopsquatting, güvenliğin yeni bir paradigma kayması anlamına gelir; çünkü tehdit artık yalnızca geliştiricilerin hatalı paket adlarını manuel olarak girmesiyle değil, LLM’lerin otomatik olarak kötü amaçlı bir kaynakla tam eşleşen hayali isimleri üretmesiyle ortaya çıkar. Bu, hem CI/CD boru hatlarında hem de üretim ortamlarında istemeden kötü amaçlı yüklerin içeri alınması riskini dramatik biçimde artırır.
4. Kod Kalitesinin Düşüşü: Kod Çalkantısı ve Teknik Borç
Anlık güvenlik risklerinin ötesinde, yapay zeka kod üretiminin yaygınlığı, küresel yazılım kod tabanının makroskopik kalitesini yeniden şekillendirmektedir. 2024 ve 2025 verileri rahatsız edici bir eğilime işaret etmektedir: Kod hacmi artarken, kod kalitesi ve bakım kolaylığı (maintainability) hızla düşmektedir.
4.1 GitClear Bulguları: “Sadece Yazılan” (Write-Only) Koda Geçiş
GitClear tarafından 2020 ile 2024 yılları arasında değiştirilen 211 milyon kod satırının kapsamlı bir analizi, bu kalite bozulmasına dair ampirik kanıtlar sunmaktadır. Çalışma, “Kendini Tekrar Etme” (Don’t Repeat Yourself — DRY) ilkesinden uzaklaşılarak, yüksek hacimli, tekrarlayan kod üretimi modeline doğru bir kayma olduğunu vurgulamaktadır.
- Kopyala/Yapıştırın Yükselişi: “Kopyala/yapıştır” olarak sınıflandırılan kod değişikliklerinin yüzdesi 2020'de %8,3 iken 2024'te %12,3'e yükselmiştir. Bu, kod tekrarında yaklaşık %50'lik göreceli bir artışı temsil etmektedir. Tarihte ilk kez, kopyala-yapıştır kod hacmi, yeniden düzenlenen (refactored) kod hacmini aşmıştır.
- Yeniden Düzenlemenin (Refactoring) Çöküşü: Kodun yeniden kullanımını ve yeniden düzenlenmesini temsil eden “taşınan” (moved) satırlar, %24,1'den %9,5'e sert bir düşüş yaşamıştır. Bu, geliştiricilerin mevcut kodu yeni özelliklere uyum sağlayacak şekilde yeniden yapılandırmak yerine, yapay zekayı kullanarak yeni kod blokları eklemeyi tercih ettiklerini göstermektedir. Yeni kod üretmenin kolaylığı, mevcut mantığı yeniden kullanmanın algılanan değerini azaltmaktadır.
- Artan Çalkantı (Churn): “Çalkantı” oranı yazıldıktan sonraki iki hafta içinde değiştirilen veya silinen kod olarak tanımlanır %3,1'den %5,7'ye çıkarak iki katına yaklaşmıştır. Yüksek çalkantı, düşük kaliteli ilk taahhütlerin (commit) klasik bir göstergesidir; geliştiriciler yapay zeka kodunu kabul etmekte, depoya göndermekte (push), kusurlu veya uyumsuz olduğunu fark etmekte ve ardından hızla yamalamaktadır. Bu veriler, “kodların yeterli testlerden geçmediği” yönündeki endişeyi istatistiksel olarak doğrulamaktadır. Yüksek çalkantı oranı, kodun ilk yazıldığında yeterince test edilmediğini, hataların ancak kod tabanına girdikten sonra fark edildiğini göstermektedir.
4.2 Üretkenlik Paradoksu
Kalitedeki bu bozulma, yapay zeka kodlama asistanlarının birincil değer önerisine meydan okumaktadır: Üretkenlik. Geliştiriciler genellikle %20–30'luk bir hızlanma hissettiklerini bildirseler de, nesnel ölçümler farklı bir hikaye anlatmaktadır.
Deneyimli geliştiricileri içeren randomize kontrollü bir çalışma, yapay zeka araçlarını kullananların, kullanmayanlara kıyasla görevleri tamamlamasının %19 daha uzun sürdüğünü bulmuştur. Bu yavaşlamanın birincil nedeni, yapay zeka tarafından üretilen kodun hata ayıklaması (debugging) ve gözden geçirilmesi (review) için harcanan zamandır. Çalışma çarpıcı bir uyumsuzluğu ortaya koymuştur: Daha uzun sürmesine rağmen, yapay zeka destekli geliştiriciler işi daha hızlı bitirdiklerine inanmışlardır.
Bu “Üretkenlik Paradoksu”, yapay zekanın programlamanın yazma (typing) aşamasını hızlandırırken (ki bu nadiren darboğazdır), anlama ve hata ayıklama aşamalarını karmaşıklaştırmasından kaynaklanmaktadır. Üretilen kod genellikle çok sözlüdür (verbose) ve bir insanın yaratacağı sezgisel yapıdan yoksundur, bu da okunmasını ve bakımını zorlaştırır. Yapay zeka kaynaklı şişkinlikle birlikte kod tabanı büyüdükçe, sistemi anlamak için gereken “bilişsel yük” artar ve gelecekteki geliştirme hızını potansiyel olarak yavaşlatır; bu, teknik borcun klasik bir tezahürüdür.
5. İnsan Unsuru: Epistemik Yozlaşma ve “Vibe Coding”
Hatalar ve güvenlik açıkları gibi operasyonel sorunlar, yazılım mühendisliğindeki daha derin, bilişsel bir değişimin semptomlarıdır. “Epistemik faillik”ten (epistemic agency) geliştiricinin kodun neden ve nasıl çalıştığını anladığı durum “epistemik bağımlılığa” (epistemic dependency) geliştiricinin kara kutu bir sürecin denetçisi olarak işlev gördüğü durum doğru bir geçişe tanık oluyoruz.
5.1 “Vibe Coding” ve Anlayışın Soyutlanması
Andrej Karpathy tarafından popülerleştirilen “Vibe Coding” (Hislerle Kodlama) terimi, geliştiricinin üst düzey niyete (“vibe”) odaklandığı ve uygulama detaylarını tamamen yapay zekaya devrettiği bir iş akışını tanımlar. Bu modelde geliştirici, kodu satır satır okumak yerine, “çalışıp çalışmadığını görmek için çalıştırma” (Run-and-See) yöntemine güvenir.
Bu yaklaşım prototipleme (“hafta sonu projeleri”) için hızı artırabilse de, profesyonel yazılım mühendisliği için yıkıcıdır. Kullanıcıların yapay zeka önerilerini doğrulama olmaksızın kabul ettiği eleştirel olmayan kabulü (uncritical acceptance) teşvik eder. Bu davranış, özellikle makine yüksek güvenle iletişim kurduğunda, kişinin kendi yargısı yerine makine çıktılarına güvenme psikolojik eğilimi olan “otomasyon yanlılığı” (automation bias) ile körüklenmektedir.
5.2 Yetkinlik İllüzyonu ve Dunning-Kruger Etkisi
Yapay zeka araçları, genç (junior) geliştiricilerin karmaşık görevler için işlevsel kod üretebilmeleri nedeniyle kendilerini kıdemli (senior) bir seviyede performans gösteriyormuş gibi hissetmelerine neden olan bir “yetkinlik illüzyonu” yaratır. Ancak, bu performans kırılgandır. Uygulama sürecinde zorlanmadıkları için, yapay zeka başarısız olduğunda veya kenar durumlar ortaya çıktığında sistemi ayıklamak (debug) için gereken “örtük bilgiye” (tacit knowledge) sahip değildirler.
Bu fenomen tehlikelidir çünkü risk birikimini maskeler. Genç bir geliştirici, yapay zeka tarafından oluşturulan kodu kullanarak bir mikro hizmeti başarıyla dağıtabilir, ancak bir yarış durumu (race condition) veya halüsinasyonlu bir pakete bağımlılık getirdiğinin farkında olmayabilir. Derleyici veya başarısız bir test tarafından geleneksel olarak sağlanan geri bildirim döngüsü, yapay zekanın kök neden yerine sadece semptomu yamalayan “düzeltmeler” sağlama yeteneği tarafından kısa devre yaptırılır.
5.3 “Genç Geliştiricinin Ölümü” Tartışması
Endüstri şu anda “Genç Geliştiricinin Ölümü” (Death of the Junior Developer) kavramıyla boğuşmaktadır. Bu, şirketlerin gençleri işe almayı bırakacağı anlamına gelmez, ancak genç geliştiricinin rolünün basit görevlerin tekrarlı uygulanması yoluyla öğrenme otomatikleştirildiği anlamına gelir.
Tarihsel olarak, genç geliştiriciler şablon (boilerplate) kod yazarak, basit hataları ayıklayarak ve dokümantasyon okuyarak öğrenirlerdi. Bu “mücadeleler”, kıdemli düzeyde mimari düşünme için gerekli zihinsel modelleri inşa ederdi. Eğer yapay zeka tüm şablon kodları ve basit mantığı hallederse, gençler bu eğitim sahasından mahrum kalır. Karmaşık mimari problemlere, onları yönetecek temel beceriler olmadan “paraşütle” indirilirler. Bu durum, uzun vadeli kritik bir soruyu gündeme getirmektedir: Bugün genç geliştiricileri eğitmezsek, 2030'un kıdemli geliştiricileri (senior developers) nereden gelecek?.
6. Bilgi Çöküşü (Knowledge Collapse): Özyinelemeli Eğitim Tuzağı
Kriz, bireysel geliştiricilerin ötesinde yapay zeka modellerinin kendisine kadar uzanmaktadır. Web, yapay zeka tarafından üretilen kodla doldukça (GitClear tarafından tanımlanan “sadece yazılan” kod eğilimleri nedeniyle), gelecekteki LLM nesilleri kaçınılmaz olarak bu sentetik verilerle eğitilecektir. “Bilginin halüsinasyonu” , burada en literal ve en yıkıcı anlamını bulmaktadır.
6.1 Bilgi Çöküşünün Üç Aşaması
Araştırmalar, modellerin kendi çıktıları üzerinde özyinelemeli olarak (recursively) eğitildiğinde ortaya çıkan dejeneratif bir süreç olan “Model Çöküşü” veya “Bilgi Çöküşü”nü tanımlamaktadır. Bu süreç üç ayrı aşamada gelişir:
- Aşaması A (Bilginin Korunması): Model, eğitim verilerinde kalan insan kaynaklı sinyalden yararlanarak iyi performans gösterir.
- Aşaması B (Tehlikeli Yetkinlik Vadisi): Model, son derece akıcı ve kendinden emin ancak giderek artan oranda olgusal olarak yanlış çıktılar üretir. Bu en tehlikeli evredir, çünkü doğruluğun “hissi” (vibe) kalır, ancak epistemik bütünlük kaybolur. Model, insan çözümlerinin nüansını ve çeşitliliğini kaybederek “ortalama” veya “klişe” kod kalıplarına yakınsamaya başlar.
- Aşaması C (Tutarsızlık): Modelin çıktıları saçmalığa dönüşür veya sistemdeki entropi kaybına benzer şekilde komut kısıtlamalarına tamamen tepkisiz hale gelir.
6.2 Yazılım Ekosistemleri Üzerindeki Etkisi
Yazılım bağlamında bilgi çöküşü, kodlama çözümlerinin homojenleşmesi (tek tipleşmesi) anlamına gelir. Modeller, önceki modeller tarafından üretilen “ortalama” kod üzerinde eğitilirse, yeni, optimize edilmiş veya alana özgü çözümler üretme konusunda daha az yetenekli hale geleceklerdir. Kod tabanları “bej” bir ortalamaya yakınsayacaktır; işlevsel ama verimsiz, şişkin ve yazılım inovasyonunu yönlendiren yaratıcı kıvılcımlardan yoksun. Ayrıca, “sentetik” eğitim setinde bulunan herhangi bir güvenlik açığı (örneğin, yaygın bir SQL injection hatası) güçlenecek ve gelecekteki kodlama araçlarının temeline gömülecektir.
7. Test ve Doğrulama: C.L.E.A.R. Zorunluluğu
Halüsinasyon, slopsquatting ve kalite bozulması riskleri göz önüne alındığında, geleneksel kod inceleme (code review) ve test yöntemleri artık yeterli değildir. Bir “farkı” (diff) gözle kontrol etme pratiği, mükemmel derecede meşru görünen (ancak var olmayan) bir paket adına karşı etkisizdir.
7.1 Standart Kod İncelemesinin Başarısızlığı
Standart kod incelemesi, kodun bir niyeti olan bir insan tarafından yazıldığını varsayar. İnceleyenler mantık hataları veya stil ihlalleri ararlar. Ancak, yapay zeka kodunu incelemek, var olmama (non-existence) ve gizli bağlam (hidden context) kontrolünü gerektirir. İnsan bir yazarın bir kütüphaneyi doğruladığını varsayabilir; ancak yapay zeka yazar (model) böyle bir şey yapmamıştır. Bu “sorumluluk boşluğu”, halüsinasyonların sızmasına izin verir.
Kullanıcının sorgusunda belirttiği “kodların yeterli testlerden geçmediği” durumu, burada operasyonel bir gerçekliğe dönüşür. Geleneksel testler (birim testleri), kodun var olan fonksiyonlarını test eder; kodun çağırdığı kütüphanenin güvenilirliğini veya varlığını test etmezler. Bu nedenle, testler “yeşil” (başarılı) olsa bile, kod bir “halüsinasyon” (güvenlik açığı) barındırabilir.
7.2 C.L.E.A.R. Çerçevesi (Framework)
Bu riskleri azaltmak için endüstri uzmanları, yapay zeka tarafından oluşturulan kodun incelenmesi için özel çerçeveler önermektedir. C.L.E.A.R. Çerçevesi, bu yeni paradigmaya uygun yapılandırılmış bir yaklaşım sunar:
- C — Context Establishment (Bağlam Oluşturma): Koddan önce istemi (prompt) ve gereksinimleri inceleyin. İstem, bir halüsinasyonu tetikleyebilecek bir şey istiyor mu (örneğin, “X için bir kütüphane kullan”)
- L — Layered Examination (Katmanlı İnceleme): Başlangıçta satır satır okumayın. Önce yapıyı ve mimariyi inceleyin. Genel yaklaşım mantıklı mı, yoksa yapay zekanın anlamadığı kısıtlamaları karşılamaya çalışan karmaşık bir “Rube Goldberg” makinesi mi?
- E — Explicit Verification (Açık Doğrulama): En kritik adım, içe aktarılan her paketin ve harici API’nin varlığını doğrulamaktır. Bu, slopsquatting’e karşı birincil savunmadır. İnceleyenler, doğrulanana kadar her import ifadesine potansiyel bir güvenlik ihlali muamelesi yapmalıdır.
- A — Alternative Consideration (Alternatif Değerlendirme): “Neden bu yol?” diye sorun. Yapay zeka genellikle istatistiksel olarak en olası yolu seçer; bu da belirli bir bağlam için en performanslı veya güvenli yol olmayabilir.
- R — Refactoring Recommendations (Yeniden Düzenleme Önerileri): Yapay zeka koduna bir “taslak” muamelesi yapın. GitClear bulgularını dengelemek için, kodun neredeyse her zaman sözlülüğü azaltmak ve bakımı iyileştirmek için yeniden düzenlenmesi gerekir.
7.3 Otomatik Savunma Mekanizmaları
Manuel inceleme, otomatik araçlarla desteklenmelidir.
- SCA (Yazılım Bileşeni Analizi): Araçlar, bilinmeyen veya yeni kaydedilmiş paketleri işaretleyecek şekilde güncellenmelidir. Bir PR’daki paket 30 günden daha yeniyse, yüksek önem dereceli bir uyarı tetiklenmelidir.
- Halüsinasyon Tespit Kıyaslamaları: Organizasyonların yaratıcılık yerine doğruluğa öncelik veren modelleri seçmesine olanak tanımak için HalluCode gibi yeni kıyaslamalar geliştirilmektedir.
- Köken Takibi (Provenance Tracking): Katı Yazılım Malzeme Listesi (SBOM) gereksinimlerinin uygulanması, kod tabanındaki her bileşenin izlenebilir bir kaynağa sahip olmasını sağlar, bu da halüsinasyonlu paketlerin kalıcı olmasını zorlaştırır.
8. Gelecek Öngörüsü ve Stratejik Öneriler
Yazılım mühendisliğinde yapay zeka devrimi kaçınılmazdır, ancak mevcut gidişat tehlikelidir. Sektör, yapay zekayı bir “hız” aracı olarak görmekten vazgeçip, titiz bir sınırlama (containment) gerektiren bir “yetenek” aracı olarak görmeye başlamalıdır.
Yapay zeka gelişmeleriyle birlikte “bilginin halüsinasyonu” ve “yetersiz testler” konusundaki endişeler, mevcut verilerle tam olarak doğrulanmaktadır. Yapay zeka, sadece kodu değil, kodun doğruluğuna dair süreci de halüsinasyona uğratmaktadır.
Stratejik Öneriler:
- Politika: Üretim yazılımları için katı “No Vibe Coding” (Hislerle Kodlamaya Hayır) politikaları uygulayın. Yapay zeka tarafından oluşturulan tüm kodlar izole edilmeli, incelenmeli ve açıkça doğrulanmalıdır.
- Araçlar: CI/CD boru hatlarında, düşük itibar puanına sahip veya yeni kaydedilmiş (örneğin < 30 gün) paketlerin yüklenmesini engelleyen “güvenlik duvarları” konuşlandırın. Bu, slopsquatting’i nötralize eder.
- Eğitim: Mühendislik işe alım ve eğitim süreçlerini “Yapay Zeka Denetimi” (AI Auditing) becerilerine odaklanacak şekilde yeniden icat edin. Genç geliştiriciler sadece kod yazmak için değil, yapay zeka çıktılarını agresif bir şekilde eleştirmek ve doğrulamak için eğitilmelidir. Bu, geleneksel genç geliştirici rolünün “ölümünü”, “Sistem Denetçisi” rolünün doğumuna dönüştürebilir.
- Epistemik Sorumluluk: Mühendislik ekiplerinde, kodun “yazarı” yapay zeka olsa bile, “sorumlusu”nun insan olduğu kültürü pekiştirilmelidir. “Yapay zeka böyle yazdı” savunması, bir kaza durumunda kabul edilemez bir mazeret olarak kodlanmalıdır. Sonuç olarak, yazılım güvenilirliğinin geleceği, yapay zekayı bir kahin olarak değil, işi en üst düzeyde inceleme gerektiren, güvenilmeyen, yüksek hacimli bir yardımcı olarak ele alınmalıdır.
Araştırma esnasında faydalandığım kaynaklar :
- https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/
- https://www.jonas.rs/2025/02/09/report-summary-gitclear-ai-code-quality-research-2025.html
- https://www.gitclear.com/ai_assistant_code_quality_2025_research
- https://www.captechu.edu/blog/ai-driven-threats-in-software-supply-chains
- https://www.mend.io/blog/the-hallucinated-package-attack-slopsquatting/
- https://nmn.gl/blog/ai-and-learning
- https://chatpaper.com/paper/186428
- https://cloud.google.com/discover/what-is-vibe-coding?hl=tr
- https://arxiv.org/html/2404.00971v1
- https://simonwillison.net/2024/Apr/1/diving-deeper-into-ai-package-hallucinations/
- https://www.kusari.dev/learning-center/slopsquatting
- https://cset.georgetown.edu/wp-content/uploads/CSET-Cybersecurity-Risks-of-AI-Generated-Code.pdf
- https://softwarearchitectureinsights.com/articles/the-new-reality-of-software-development-ai-impact-on-code-quality
- https://c3.unu.edu/blog/the-invisible-threat-in-your-code-editor-ais-package-hallucination-problem
- https://arxiv.org/pdf/2404.03502
- https://docs.vibe-coding-framework.com/best-practices/code-review-guidelines
