AI Kodunu Gözden Geçirmek — Akıcı Görünmek Doğru Olmak Değil
Önce şunu oku: Dil Modeli Nasıl Cevap Üretir — Neden Var Olmayan Bir Metot Uydurur?
30 saniyede özet
Yapay zekânın yazdığı kod düzgün ve kendinden emin görünür, ama bu onu doğru yapmaz. Uydurma bir metodu derleyici, sınır hatasını test, güvenlik açığını tarama aracı, gereksiz karmaşayı insan yakalar.
Asistan “son 30 günün siparişlerini sayfalı getir” isteğine on beş satırlık düzgün bir metot yazdı. Derlendi, yanında yazdığı test de geçti. Her şey yolunda görünüyordu.
-
Bayt: Asistan metodu saniyeler içinde yazdı. Derlendi, testi de geçti!
-
Sen: O zaman hemen yayına alalım.
-
Bayt: Bir dakika. Testi de aynı asistan yazdı...
-
Bayt: Testin hiç sormadığı bir soru var mı acaba?
Neden ayrıca kontrol edilir?
AI kodu okunaklı, tutarlı ve kendinden emindir. Akıcılık doğruluğun bir işareti değildir: yanlış bir satır da aynı özgüvenle yazılır.
Var olmayan bir metodu ya da ayarı kendinden emin bir dille üretmeye hallucinationBir dil modelinin var olmayan bir API'yi, parametreyi ya da kaynağı kendinden emin bir dille üretmesi. Çıktı akıcı olduğu için fark etmek zordur.Sözlükte gör → denir. Derleyici bir kısmını yakalar; yapılandırma dosyaları ve string sorgulardaki uydurmaları yakalamaz.
Kodu kim yazmış olursa olsun, commit eden sorumludur.
Kafam karıştı, daha basit anlat
AI yanlış bir satırı da doğru bir satır kadar kendinden emin yazar. Akıcı görünmesi doğru olduğu anlamına gelmez.
AI'ın önerdiği bir kodu projeye alırken sorumluluk kimdedir?
AI, `orderRepository.findAllByUserIdWithinDays(userId, 30)` diye bir metot çağırdı ama projede böyle bir metot yok. Bu hata türünün adı ve onu yakalayan en ucuz katman ne?
Hangi kontrol neyi görür?
AI'ın yazdığı kod derleniyor ve AI'ın yazdığı testler geçiyor. Kod güvenli mi? Cevabı göster
Bilinmez. Testler yalnızca sordukları soruya cevap verir. String birleştirmeyle kurulmuş bir SQL sorgusu bütün testleri geçip yine de açık bırakır.
Adım adım oku
- Derleyici var olmayan bir metodu hemen yakalar.
- Testler, sordukları soruda beklenenden sapan davranışı yakalar; bir günlük kayma gibi.
- Statik analiz, metne eklenmiş bir SQL parametresi gibi bilinen tehlikeli kalıpları yakalar.
- İnsan incelemesi niyeti ve maliyeti görür: her kayıt için ayrı sorgu ya da gereksiz bir kütüphane.
| Katman | Gördüğü | Göremediği |
|---|---|---|
| Derleme | Uydurma metot, yanlış tip | Mantık, güvenlik |
| Testler | Beklenen davranıştan sapma | Sorulmayan sorular |
| SASTStatic Application Security Testing: kodu çalıştırmadan güvenlik açığı kalıplarını (SQL injection, sabit şifre) arayan analiz. Semgrep, SpotBugs FindSecBugs, CodeQL örnek.Sözlükte gör → / statik analiz | Bilinen tehlikeli kalıplar | Niyet, bağlam |
| İnsan incelemesi | Niyet, maliyet, takas | Yorgunluk, büyük diff |
Kafam karıştı, daha basit anlat
Her kontrol aracı farklı bir şeyi görür. Testler yalnızca sordukları soruya cevap verir, güvenlik açığı gibi sormadıkları şeyleri göremezler.
AI'ın yazdığı kod derleniyor ve AI'ın yazdığı testler geçiyor. Bu neyi kanıtlar?
Her sorunu, onu en güvenilir biçimde yakalayan katmanla eşleştir.
Kendin gör
AI kodunu gözden geçirmek — hangi katman neyi yakalar?
Tohum 682206import org.apache.commons.lang3.StringUtils; // yeni bağımlılıkpublic List<OrderDto> recentOrders(long userId, String status, int page) { var since = LocalDate.now().minusDays(30).atStartOfDay().plusDays(1); var ids = orderRepository.findAllByUserIdWithinDays(userId, 30); try { var sql = "select * from orders where user_id = ? " + "and created_at >= ? " + "and status = '" + status + "'"; var orders = jdbc.query(sql, orderMapper, userId, since); return orders.stream() .map(o -> toDto(o, o.getItems())) // her sipariş için bir sorgu .skip(page * 20L).limit(20) .toList(); } catch (Exception e) { return List.of(); }}- Derlemebekliyor
- Testler (sınır durumlarıyla)bekliyor
- Statik analiz / SASTbekliyor
- İnsan incelemesi (kontrol listesiyle)bekliyor
Şu an ne oldu?
"Kullanıcının son 30 gündeki siparişlerini sayfalı getir"
AI'ın önerdiği metot okunaklı ve kendinden emin görünüyor. İçinde altı farklı türde sorun var.
Görevler0/3
Derlenen kodla beş sorunu yayına çıkaraçık
İpucu
Yalnızca derleyiciye güven.
Testler geçsin ama SQL injection yine de yayına çıksınaçık
İpucu
Testlerin sormadığı bir soruyu hangi katmanlar sorar?
Altı sorunun hiçbiri yayına çıkmasınaçık
İpucu
Her sorunu en az bir katmanın görmesi gerekiyor.
Olay günlüğü (0)
Henüz olay yok. Oynat veya adımla.
- Varsayılanla oynat. Yalnızca derleme: bir sorun yakalandı, beşi yayında.
- Testleri aç. Sınır hatası yakalandı; güvenlik açığı hâlâ geçiyor.
- Statik analizi aç. SQL injection ve yutulan hata yakalandı.
- İnsan incelemesini aç. N+1 ve gereksiz bağımlılık da yakalandı.
AI'ın önerdiği bu sorgu derleniyor ve testlerde çalışıyor. Hangi satır bir güvenlik açığı?
Satır satır: bir öneriyi okumak
Okunaklı, kendinden emin — ve altı sorunlu
import org.apache.commons.lang3.StringUtils;public List<OrderDto> recentOrders(long userId, String status, int page) { var since = LocalDate.now().minusDays(30).atStartOfDay().plusDays(1); try { var sql = "select * from orders where user_id = ? and created_at >= ? " + "and status = '" + status + "'"; return jdbc.query(sql, orderMapper, userId, since).stream() .map(o -> toDto(o, o.getItems())) .skip(page * 20L).limit(20) .toList(); } catch (Exception e) { return List.of(); }}Debug
inceleme Yeni bir kütüphane. Tek bir yardımcı metot için mi? Bakımı, lisansı, adı doğru mu?
Sol/sağ ok tuşlarıyla da gezebilirsin.
Her satırı açıklayabildiğinde kabul et. Açıklayamıyorsan, AI’dan açıklamasını iste ve doğrula.
Aynı okumayı bir bankada deneyelim. Asistan EFT ücretini hesaplayan küçük bir metot önerdi; öneriyi, inceleme notlarını ve son hâlini yan yana görebilirsin.
Derinleş · EFT ücreti: öneriden birleştirilen koda 4 dosya · ~60 satır · ilk okumada atlayabilirsin
Kafam karıştı, daha basit anlat
Bir satırı kendi cümlenle açıklayabiliyorsan kabul et. Açıklayamıyorsan, açıklamasını iste ve söyleneni kendin doğrula.
AI'ın önerdiği değişiklik 600 satır ve 14 dosyaya dokunuyor. En iyi yaklaşım hangisi?
Tuzaklar
Büyük diff’i onaylamak. 600 satırı kimse gerçekten okumaz; parçalara böldür.
AI’a kendi kodunu onaylatmak. Aynı kaynak aynı körlüğü paylaşabilir.
Testi yeşile çeviren “düzeltme”. Beklenen değer değiştiyse hata düzelmedi, kanıtı silindi.
Fark edilmeyen bağımlılık. Her yeni kütüphane bir supply chain riskProjeye eklenen her bağımlılığın getirdiği risk: bakımsız kütüphane, lisans uyumsuzluğu, ele geçirilmiş paket. AI önerileri bağımlılık eklemeyi çok kolaylaştırır.Sözlükte gör →’tir; ayrı bir karar olmalı.
AI bir yardımcı metot için projeye yeni bir kütüphane ekledi. İncelemede neye bakarsın?
Kendini sına
Akıcı ve kendinden emin yazılmış kod büyük ihtimalle doğrudur.
Bir test kırmızıya döndü; AI'dan düzeltmesini istedin ve AI testin beklenen değerini değiştirerek testi yeşile çevirdi. Ne yaparsın?
Aklında kalacak üç şey
- 1 Kodu kimin yazdığı sorumluluğu değiştirmez. Açıklayamadığın bir satırı commit etme.
- 2 Derlenmek ve testleri geçmek, yalnızca testlerin sorduğu sorulara cevap vermektir. Güvenlik ve maliyet sorunları çoğu zaman o soruların dışındadır.
- 3 Her kontrol katmanı farklı bir hata türünü görür. Yapay zekânın kodu da aynı katmanlardan, en az aynı dikkatle geçmelidir.
5 kart sonraki derste seni bekliyor