Yapay Zeka Tarafından Üretilen Kodu İnceleme Rehberi
Yapay zeka her pull request'in artan bir kısmını yazıyor. İşte yapay zeka tarafından üretilen kodu etkili bir şekilde inceleme — nelere bakmalı, nelere güvenmeli ve ne zaman yeniden yazmalı.
Kod incelemesi her zaman hataları üretime ulaşmadan yakalamakla ilgili olmuştur. Ancak kod bir insan meslektaş yerine bir yapay zeka asistanı tarafından yazıldığında, incelemenin dinamikleri temelden değişir. Yapay zekanın yaptığı hatalar, bir insanın yaptığı hatalardan farklıdır ve kontrol etmeniz gereken şeyler, bir akran incelemesinde kontrol edeceğiniz şeylerle aynı değildir.
Bu rehber, deneyimli ekiplerin yapay zeka tarafından üretilen kodu inceleme hakkında öğrendiklerini kapsar. Yapay zeka modellerinin tutarlı bir şekilde ürettiği sorun kategorilerine göre düzenlenmiştir, böylece insan yazılımı kod için geliştirilmiş sezginize güvenmek yerine sistematik bir kontrol listesi üzerinden geçebilirsiniz.
Yapay zeka tarafından üretilen kod neden farklı inceleme kriterlerine ihtiyaç duyar
İnsan geliştiricilerin hataları yorgunluk, dikkat dağınıklığı ve bilgi eksiklikleri etrafında kümelenir — yorgun bir geliştirici bir uç durumu kaçırır, dikkati dağılmış biri bir hatayı ele almayı unutur, bir ast anti-kalıp kullanır çünkü daha iyisini bilmez. Yapay zeka modellerinin hataları tamamen farklı eksenlerde kümelenir: halüsinasyon, bağlam körlüğü ve stilistik tutarsızlık.
Null girdileri ele almayan bir fonksiyon yazan bir insan muhtemelen daha iyisini biliyordur ve sadece unutmuştur. Aynı fonksiyonu yazan bir yapay zeka, kod tabanınızda null'ın mümkün olup olmadığını ona açıkça söylemediğiniz sürece gerçekten bilmez. Bu ayrım önemlidir çünkü düzeltme farklıdır: bir insanın bir hatırlatmaya ihtiyacı vardır, ancak yapay zekanın prompt'ta kodlanmış veya incelemede yakalanmış bir kısıtlamaya ihtiyacı vardır.
Bu farkı anlamak, etkili yapay zeka kodu incelemesinin temelidir. Geliştiricinin dikkatli olup olmadığını kontrol etmiyorsunuz. Yapay zekanın doğru kod üretmek için yeterli bağlama sahip olup olmadığını ve çıktısının, göremediği kod tabanınızın örtük kurallarıyla eşleşip eşleşmediğini kontrol ediyorsunuz.
Kontrol listesi 1: Halüsinasyon gören API'ler ve import'lar
Yapay zeka tarafından üretilen koddaki en yaygın tek sorun, var olmayan kütüphanelerin, fonksiyonların veya API'lerin kullanılmasıdır. Yapay zeka modelleri makul görünen kod üretmek için eğitilir ve hiç yayınlanmamış paketler için import'lar ve hiç var olmamış metotları çağırmak için güvenle kod üreteceklerdir. Bu kötü niyetli değildir — modelin eğitim sırasında gördüğü gerçek paketler arasında enterpolasyon yapması ve makul görünen bir köprü icat etmesidir.
// Makul görünen ancak var olmayan bir fonksiyonu import eden yapay zeka kodu
import { renderAsync } from 'react-dom'; // renderAsync mevcut değil
import { optimize } from 'lodash/fp/string'; // Bu yol lodash'te mevcut değil
// Gerçekte ihtiyacınız olan
import { renderToString } from 'react-dom/server';Bunun çözümü basit ama önemlidir: her import'u ve her API çağrısını gerçek dokümantasyona karşı doğrulayın. Kod derlendiği için API'lerin doğru olduğunu varsaymayın — bazı halüsinasyon gören fonksiyonlar, TypeScript denetimini geçen ancak çalışma zamanında başarısız olan makul görünümlü imzalara sahiptir. İnceleme, tanımadığınız herhangi bir import üzerinde hızlı bir mantık kontrolü içermelidir.
Kontrol listesi 2: Eksik hata yönetimi
Yapay zeka modelleri mutlu yolu üretme eğilimindedir. Bir fonksiyonun ana mantığını — döngüyü, dönüşümü, dönüş değerini — yazmada dikkate değer ölçüde iyidirler ve işler ters gittiğinde ne olacağını ele almada dikkate değer ölçüde kötüdürler. Ağ isteklerinde catch blokları eksiktir. Dosya işlemlerinde hata yönetimi yoktur. Async fonksiyonlarda reddetme işleyicileri yoktur.
Bu, yapay zekanın hata yönetimi yazamadığı için değildir. Açıkça isterseniz, yapay zeka kapsamlı try-catch mantığı üretecektir. Sorun, modelin varsayılan davranışının en basit çalışan sürümü yazmak olması ve hata yönetiminin bu varsayılanın parçası olmamasıdır. Her yapay zeka tarafından üretilen kod incelemesi, yalnızca hata yollarına bakan bir geçiş içermelidir.
- Her async fonksiyon bir catch veya reddetme işleyicisine sahip olmalıdır.
- Her harici API çağrısı, ağ hatalarını, zaman aşımlarını ve beklenmeyen yanıt formatlarını ele almalıdır.
- Her veri dönüşümü, null, undefined ve beklenmeyen türleri ele almalıdır.
- Her dosya veya veritabanı işlemi, izin hatalarını ve eksik kaynakları ele almalıdır.
Kullanışlı bir teknik, basit bir test yapmaktır: yapay zeka tarafından üretilen koddan try-catch bloklarını çıkarın ve kalan mantığın hala anlamlı olup olmadığına bakın. Anlamlıysa, yapay zeka muhtemelen hata yönetimi hakkında derinlemesine düşünmemiştir. Mantık, çalışması için hata yönetimine bağlıysa, yapay zeka onu düzgün bir şekilde entegre etmiştir.
Kontrol listesi 3: Stil ve kural uyumsuzlukları
Her kod tabanının yazılı olmayan stil kuralları vardır. Ekip erken dönüşler kullanır, iç içe if'ler değil. Hata mesajları belirli bir formatı takip eder. Değişken adları belirli bir model kullanır. Milyonlarca açık kaynak depoda eğitilen yapay zeka modelleri, tüm bu depoların istatistiksel ortalamasını yansıtan kod üretecektir, kod tabanınızın belirli kurallarını değil.
Sonuç, çalışan ancak yabancı hissettiren koddur. Çevredeki koddan farklı bir adlandırma kuralı, farklı bir modül yapısı veya farklı bir hata yönetimi modeli kullanır. Bu tür bir tutarsızlık hızla birikir — beş farklı örtük stilla yazılmış beş yapay zeka tarafından üretilen fonksiyon, tutarsız hisseden ve bakımı daha zor olan bir kod tabanı oluşturur.
En iyi önlem, prompt'larınıza stil örnekleri eklemektir. Aynı modülden temsili bir fonksiyon yapıştırın ve 'bu stili kullan' deyin. Bu, yapay zekaya eğitim varsayılanını geçersiz kılan somut bir referans verir. İnceleme sırasında, üretilen kodun çevredeki modülü yazan kişi tarafından yazılmış olabileceğini kontrol edin.
Kontrol listesi 4: Aşırı mühendislik ve gereksiz soyutlama
Yapay zeka modellerinin soyutlamaya karşı güçlü bir eğilimi vardır. Basit bir problem verildiğinde, genellikle bir sınıf hiyerarşisi, bir arayüz, bir fabrika ve üç yardımcı fonksiyon üreteceklerdir — oysa tek bir fonksiyon yeterli olurdu. Bu eğilim, iyi yapılandırılmış açık kaynak kütüphanelerini aşırı temsil eden ve basit betikleri ile tek seferlik fonksiyonları yetersiz temsil eden eğitim verilerinden gelir.
Yapay zeka modelleri varsayılan olarak aşırı mühendislik yapar. Sizin incelemeniz varsayılan olarak basitliğe yönelmelidir. Yapay zekanın getirdiği her soyutlama, daha basit bir alternatife karşı varlığını haklı çıkarmalıdır.
İnceleme sırasında kendinize sorun: bu kod bir sınıfa ihtiyaç duyuyor mu, yoksa bir fonksiyon iş görür mü? Bu arayüz birden fazla uygulama tarafından kullanılıyor mu? Bu yardımcıyı çıkarmak, dolaylamayı haklı çıkaracak kadar tekrarı azaltıyor mu? Bunlardan herhangi birinin cevabı hayırsa, yapay zeka muhtemelen aşırı mühendislik yapmıştır ve daha basit sürüm daha iyidir.
Kontrol listesi 5: Güvenlik açıkları
Yapay zeka modelleri, güvenlik açıkları içeren kod üzerinde eğitilir. Bu koddaki kalıpları, güvenlik açığı olanlar da dahil olmak üzere öğrenirler. Modern modeller SQL enjeksiyonu gibi bariz sorunlardan kaçınmada daha iyi olsa da, yine de bir incelemecinin yakalaması gereken ince güvenlik sorunları olan kod üretirler.
- Üretilen kodda sabit kodlanmış sırlar, API anahtarları veya kimlik bilgileri olup olmadığını kontrol edin.
- Kullanıcı girdisinin kullanımdan önce doğrulandığını ve temizlendiğini doğrulayın.
- Korumalı işlemlerde kimlik doğrulama ve yetkilendirme kontrollerinin mevcut olduğunu kontrol edin.
- Üretilen SQL sorgularının string birleştirme değil, parametreli ifadeler kullandığından emin olun.
- Dosya yollarının temizleme olmadan güvenilmeyen girdiden oluşturulmadığını doğrulayın.
Hassas verileri veya kullanıcı girdisini işleyen yapay zeka tarafından üretilen kod için güvenlik odaklı bir inceleme geçişi tartışılmazdır. Yapay zeka, sisteminizin hangi bölümlerinin güvenlik açısından kritik olduğunu siz söylemedikçe bilmez. Şüphe durumunda, birleştirmeden önce üretilen kod üzerinde statik analiz aracı çalıştırın.
Kontrol listesi 6: Mevcut mimariyle tutarlılık
Yapay zeka modelleri her talebi izole olarak görür. Ekibinizin geçen çeyrekte tüm veri çekme işlemleri için React Query kullanmayı kabul ettiğini, API'nin her zaman camelCase anahtarları döndürdüğünü veya projenin belirli bir durum yönetimi modeli kullandığını bilmezler. Ürettikleri kod dahili olarak tutarlı olacak ancak mevcut dosyada görünmeyen mimari kararları ihlal edebilir.
İnsan incelemecinin en çok değer kattığı yer burasıdır. ADR'lerinizde belgelenen kararları, ekip tartışmalarından ortaya çıkan kalıpları ve tek bir dosyada yakalanmayan tasarım kısıtlamalarını bilirsiniz. Yapay zeka tarafından üretilen kodu yalnızca doğruluk ve stile karşı değil, bu görünmez kısıtlamalara karşı da inceleyin.
Sürdürülebilir bir inceleme süreci oluşturmak
Yapay zeka kod tabanınızın daha fazlasını ürettikçe, inceleme sürecinin ölçeklenmesi gerekir. Dört kişilik bir ekibin her yapay zeka tarafından üretilen satırı manuel olarak incelemesi tükenmeye yol açar. Sürdürülebilir yaklaşım, otomatik kontrolleri odaklanmış insan incelemesiyle birleştirir.
Otomatik kontroller, bir insan kodu görmeden önce halüsinasyon gören import'ları, stil ihlallerini, eksik hata yönetimini ve yaygın güvenlik sorunlarını yakalamalıdır. Bu, yapay zekaya özgü incelemeyi daha küçük bir endişe kümesine indirger: mimari tutarlılık, tasarım kararları ve linter'ların tespit edemediği ince sorunlar.
Amaç, yapay zeka tarafından üretilen kodun insan incelemesini ortadan kaldırmak değildir. Araçların otomatik olarak yakalayabildiği sorunları filtreleyerek ve insan dikkatini yalnızca insanların yapabileceği yargılara ayırarak bu incelemeyi olabildiğince verimli kılmaktır. Doğru süreçle, yapay zeka tarafından üretilen kodu incelemek, insan tarafından yazılan kodu incelemekten daha hızlı ve daha güvenilir hale gelir — çünkü yapay zekanın hataları daha öngörülebilirdir.
