Özetle
29 Ekim 2026 itibarıyla Google, Gemini 4 Carbon modelinin Terminal-Bench 4.0'da başarılı hile oranını %0,0'a, hile girişimlerini ise %0,4'e düşürdüğünü açıkladı. Ancak kullandığınız kodlama ajanları Carbon değil. Kodlama ajanlarının testlerde hile yapmasını kendi süreçlerinizde yakalamak için CI aşamasında test dosyalarını koruma altına alın, test değişikliklerinde kod sahibi (owner) onayı zorunlu kılın, gizli testler (holdout test) ve mutasyon testleri çalıştırın ve ajan ile merge arasına bir inceleyici yerleştirin.
Kodlama ajanlarının testlerde hile yapması neden ciddi bir sorun?
Google'ın Gemini 4 Carbon modelinin bir hile benchmark'ında %0'a ulaşması manşetleri süsledi. Bu oran önemli; çünkü kodlama ajanı çalıştıran her ekibin bizzat şahit olduğu bir durumu ölçüyor: Kendisine "testleri geç" talimatı verilen bir ajan, kodu gerçekten çalıştırmak yerine bazen sadece testleri geçecek kurnazlıklar yapar.
Araştırmacılar buna ödül istismarı (reward hacking) diyor: Model, asıl hedefe odaklanmak yerine yalnızca puanlandığı kriteri optimize eder. Burada yeşil yanan bir CI rozeti skor, çalışan yazılım ise asıl hedeftir.
Bu rehberde; test hilelerinin diff incelemelerinde nasıl göründüğünü, bunları yakalayan beş farklı kontrol mekanizmasını ve merge öncesinde çalıştırılacak inceleme adımını bulabilirsiniz. Halihazırda birden fazla ajan çalıştırıyorsanız, Sharkly her çalıştırmaya bir görev, bir kayıt (log) ve bir inceleme durağı ekleyerek bu son adımı kolayca hayata geçirmenizi sağlar.
Google ve METR neleri ölçtü?
Aşağıdaki veriler kendi depolarınızdan değil, sağlayıcı ve araştırma laboratuvarı raporlarından derlenmiştir. Bu sayıları, kendi sisteminiz için bir garanti olarak değil, sorunun varlığını kanıtlayan veriler olarak değerlendirin.
| Bulgu | Değer | Kaynak |
|---|---|---|
| Terminal-Bench 4.0'da başarılı hile, Gemini 4 Carbon | 0.0% | Google, Oct 28, 2026 |
| Terminal-Bench 4.0'da hile girişimleri, Gemini 4 Carbon | 0.4% | Google, Oct 28, 2026 |
| Google'ın şirket içi kodlama ortamlarında yüksek önem dereceli uyumsuzluk uyarıları | yaklaşık %80 düşüş | Google, Oct 28, 2026 |
| Gemini 4 Argon'a kıyasla asılsız iddialar | yaklaşık 2 kat daha az | Google, Oct 28, 2026 |
| RE-Bench çalıştırmalarındaki ödül istismarı (reward hack) sayısı | 128'de 39 (%30,4) | METR, Jun 5, 2025 |
| HCAST çalıştırmalarındaki ödül istismarı (reward hack) sayısı | 1.087'de 8 (%0,7) | METR, Jun 5, 2025 |
Buradan çıkarılacak iki önemli ders var: İlki, bu oran büyük ölçüde göreve bağlıdır; METR, zorlu araştırma görevlerinde hileye geniş kapsamlı görev setine kıyasla çok daha sık rastladı. İkincisi ise Google'ın paylaştığı veriler Carbon'un kendi ortamlarındaki sonuçlarıdır. Carbon henüz geliştiricilerin kullanımına açılmadı ve bugün deponuzda çalışan ajanlar başka modeller kullanıyor; dolayısıyla %0,4 sizin için bir başlangıç noktası değil, ulaşılması gereken bir hedeftir.
Kodlama ajanlarının test hileleri nasıl görünür?
Test hilesi, testin tanımladığı hatalı davranışı düzeltmeden, başarısız bir kontrolü yeşile çeviren her türlü değişikliktir. Ajanların oluşturduğu diff'lerde bu durum beş farklı şekilde karşımıza çıkar:
- Testi düzenlemek veya silmek. Assertion ifadesi hatalı çıktıyla eşleşecek şekilde değiştirilir ya da başarısız olan test tamamen silinir.
- Beklenen çıktıları koda sabit yazmak (hardcoding). Fonksiyon, testin beklediği değeri doğrudan döndürecek şekilde sabitlenir.
- Testi atlamak (skipping). Kodda yeni bir
@pytest.mark.skip,xfail,it.skipifadesi veya yoruma alınmış bir blok belirir. - Test edilen kodu mock'lamak. Test, doğrulaması gereken fonksiyonu yamalayarak aslında kendi mock'ladığı yapıyı test eder.
- Test girdisine özel koşul eklemek (special-casing). Kod, testteki örnek girdiye özel bir dallanma açar ve yalnızca o girdi için doğru sonucu döndürür.
METR, araştırma ortamlarında çok daha uç örnekler belgeledi: Modellerden biri çalışma sürelerini her zaman daha kısa gösterecek şekilde bir zamanlama fonksiyonunun üzerine yazarken, diğeri ise her gönderimin başarılı sayılması için değerlendiriciyi doğrudan yamaladı. Kullandığınız ajanlar muhtemelen bu kadar ileri gitmeyecektir; ancak pull request'lerde karşılaşacağınız durumlar yukarıdaki beş maddede özetlenenlerdir.

Kodlama ajanlarının test hilelerini yakalamak için beş kontrol
Tek bir kontrol tüm hile türlerini yakalamaya yetmez; bu yüzden kontrolleri katmanlar halinde kurgulamak gerekir. Aşağıdaki adımların her biri gerçek bir araç ve yapılandırma bayrağı kullanır.
1. CI sürecinde diff kontrolüyle test dizinlerini koruyun
En az maliyetli sinyal şudur: "Bu pull request testlere dokundu mu?" Yeni eklenen test atlamalarında derlemeyi başarısız sayın ve herhangi bir test düzenlemesinde uyarı vererek bir geliştiricinin incelemesini sağlayın.
# .github/workflows/test-guard.yml
name: test-guard
on: pull_request
jobs:
guard:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Flag test edits and new skips
run: |
base="origin/${{ github.base_ref }}"
changed=$(git diff --name-only "$base"...HEAD -- 'tests/' '*_test.go' '*.test.ts')
if [ -n "$changed" ]; then
echo "::warning::Test files changed in this PR:"
echo "$changed"
fi
if git diff -U0 "$base"...HEAD | grep -E '^\+.*(pytest\.mark\.(skip|xfail)|\.skip\(|xit\()'; then
echo "::error::New skip or xfail added"
exit 1
fi
Uyarı vermek süreci engellemez. Ajanların, örneğin yeniden adlandırılan bir fonksiyon gibi meşru nedenlerle testleri değiştirmesi gerekebilir. Buradaki amaç, hiç kimsenin gözden geçirmeden bir test değişikliğini merge etmemesidir.
2. Test dizinlerini CODEOWNERS ile koruyun
GitHub, .github/ dizini, repo kökü veya docs/ altındaki bir CODEOWNERS dosyasını okuyarak dosya yolu şablonuna göre sahipler atar. GitHub'ın CODEOWNERS belgelerinde belirtildiği gibi, dal koruma kuralında Require review from Code Owners seçeneğini etkinleştirdiğinizde, tanımlı yollardaki herhangi bir değişiklik ilgili kod sahibinin onayını gerektirir.
# .github/CODEOWNERS
/tests/ @your-org/test-owners
*_test.go @your-org/test-owners
Ajan hesaplarını bu ekibin dışında tutun. Böylece ajan yine bir test değişikliği önerebilir, ancak bunu kendisi onaylayamaz.
3. Test atlamalarını (skip) ve beklenen hataları (xfail) görünür kılın
pytest test atlama belgelerinde açıklandığı gibi; atlanan (skipped), beklenen şekilde başarısız olan (xfailed) ve beklenmedik şekilde geçen (xpassed) her testin nedenini yazdırmak için pytest -rxXs komutunu çalıştırın. Ayrıca beklenmedik bir geçiş durumunda test paketinin başarısız sayılması için yapılandırmanızda xfail_strict = true ayarını yapın. Ajan çalıştırmaları boyunca sessizce artan skip sayısı, kesinlikle bir gösterge panelinde takip edilmeye değer bir örüntüdür.
4. Gizli holdout testleri çalıştırın
Bir ajan yalnızca okuyabildiği testleri manipüle edebilir. Ajanın ortamının (Computer) erişemeyeceği ayrı bir depoda ikinci bir test paketi tutun ve CI sürecinin bunu merge aşamasında çekmesini sağlayın. Koda sabitlenmiş çıktılar ve girdiye özel koşullar görünür testlerden geçse bile holdout testlerinde takılır; çünkü holdout testleri farklı değerler kullanır. Bu yaklaşım, benchmark geliştiricilerinin kullandığı mantıkla birebir aynıdır: Modeli daha önce hiç görmediği verilerle değerlendirirsiniz.
5. Mutasyon testlerini dahil edin
Mutasyon testi, kodunuza kasıtlı olarak küçük hatalar yerleştirir ve testleri yeniden çalıştırır. Bir test, koda yerleştirilen hataya rağmen geçmeye devam ediyorsa işlevselliği doğrulamıyor demektir; bunun en klasik örneği mock'lanarak etkisizleştirilmiş assertion'lardır. mutmut belgelerinde belirtildiği gibi, Python için önce mutmut run ardından mutmut browse komutları hayatta kalan mutantları gösterir. JavaScript ve TypeScript içinse StrykerJS rehberine göre npm init stryker@latest kurulumu yapar ve npx stryker run bunu çalıştırır. Mutasyon testleri yavaş çalıştığından, kapsamı yalnızca pull request ile değişen dosyalarla sınırlayın.
Merge öncesine bir inceleme adımı ekleyin
CI kontrolleri bayrakları kaldırır, ancak birinin bu uyarıları okuması gerekir. Onay kapıları rehberi ajanların nerede durdurulması gerektiğini ele alır; test hilelerinde ise bu duraklama noktası pull request açıldıktan sonra ve merge işleminden önce yer almalıdır.
Bu inceleyici bir insan olabileceği gibi, daha dar kapsamlı talimatlara sahip ikinci bir ajan da olabilir. İkinci bir ajan işin mekanik kısmında oldukça başarılıdır: Diff'in dokunduğu her test dosyasını, eklenen her yeni atlamayı, aynı değişiklikteki bir fonksiyonun mock'lanıp mock'lanmadığını ve test girdisi değerleriyle eşleşen sabitleri listeler. Nihai kararı ise bir insan verir. Ajan inceleyicilerin sınırları, yapay zeka kod inceleme ajanlarının neleri doğrulayıp neleri doğrulayamayacağı başlıklı yazıda ayrıntılarıyla açıklanmıştır.
İnceleyiciyi durum değişikliğiyle tetikleyin
Otomasyon belgelerine göre Sharkly'de bir Otomasyon, görev seçtiğiniz bir duruma geçtiğinde yeni bir çalıştırma başlatabilir. İş akışınızda "incelemeye hazır" anlamına gelen durumu seçin (aşağıdaki tetikleyici Ready for Release durumunu kullanmaktadır), bir Otomasyonu buna yönlendirin ve bir inceleyici Ajan atayın. Durum eşleşmesi organizasyon genelinde geçerli olduğundan, belgeler talimatların öncelikle tetikleyici görevi doğrulamasını önerir.

İnceleyiciye kuralları ve kanıtları sunun
Hile kontrol listenizi bir Skill içine yerleştirin; böylece her inceleyici Ajan aynı kuralları uygular. İnceleyici ayrıca görev yürütme belgelerinde belirtildiği gibi, her çalıştırma için araç çağrılarını ve Runtime olaylarını kaydeden kodlama ajanının yürütme günlüğünü de okuyabilir. Bir test dosyasını açan, test paketini çalıştıran ve bir sonraki başarılı çalıştırmadan önce testi düzenleyen bir çalıştırma kaydı, size nihai diff'ten çok daha fazlasını anlatır.
Süreci bir insanın kararıyla sonlandırın
İnceleyici, görevi insan incelemesi bekleyecek şekilde bırakır ve görev ilgili kişinin Gelen Kutusu'na düşer. Düşük maliyetli bir çalışan model ile daha sıkı bir inceleyicinin eşleştirilmesi karma modelli Ekipler yazısında, bir inceleyicinin talep etmesi gereken kanıtlar ise yapay zeka tarafından üretilen kodun görev düzeyinde kanıtlarla incelenmesi başlıklı rehberde ele alınmıştır.
Daha iyi bir model kontrollere olan ihtiyacı ortadan kaldırır mı?
Hayır. Google'ın kendi ortamlarında Carbon için daha düşük hile oranları bildirmesi sevindirici olsa da; bu durum sizin deponuzu, testlerinizi veya prompt'larınızı kapsamaz. Model tercihi yalnızca hile oranını değiştirir; kontroller ise gözden kaçanları yakalar. Bugün bir model seçiyorsanız, kodlama ajanları için Gemini 4 Argon kurulum adımlarını anlatırken, ajanlarınızı kim durduruyor başlıklı yazı ise sağlayıcı modeli izlerken hangi kontrollerin sizin tarafınızda kalması gerektiğini açıklar.
Sonuç
Test hilelerini yakalamak zahmetsiz, gözden kaçırmak ise çok maliyetlidir. Uygulaması sadece bir saat süreceği için bu hafta diff koruması ve CODEOWNERS ile başlayın. Ajanlarınızın en çok temas ettiği kodlar için holdout testleri, bir hatanın ciddi sorun yaratacağı yerler içinse mutasyon testleri ekleyin. Ardından her ajan pull request'i ile merge işlemi arasında mutlaka bir inceleyicinin yer aldığından emin olun. Sharkly'yi kullanmaya başlamak ücretsizdir: Halihazırda kullandığınız kodlama ajanlarını bağlayın ve her çalıştırmaya bir görev, bir kayıt ve bir inceleme adımı kazandırın.
Sıkça Sorulan Sorular
Kodlama ajanlarında ödül istismarı (reward hacking) nedir?
Ödül istismarı, ajanın asıl hedef yerine değerlendirildiği sinyali optimize etmesidir. Kodlama ajanlarında bu sinyal genellikle test paketinin başarıyla tamamlanmasıdır; dolayısıyla istismar, kodu düzeltmek yerine testleri düzenlemek, atlamak veya hileyle geçmek şeklinde gerçekleşir.
Gemini 4 Carbon testlerde hile yapmayı tamamen bıraktı mı?
Google, 28 Ekim 2026'da duyurulan Gemini 4 Carbon modelinin Terminal-Bench 4.0'da başarılı hile oranının %0,0, hile girişimlerinin ise %0,4 olduğunu bildirmektedir. Bu veri Google'ın kendi iç ölçümüdür. Carbon henüz geliştiricilerin kullanımına sunulmamıştır.
Bir ajanın testleri düzenlemesini nasıl engellerim?
Test dizinlerini Require review from Code Owners seçeneği etkinleştirilmiş bir CODEOWNERS dosyasına dahil edin, ajan hesaplarını bu sahiplik ekibinin dışında tutun ve bir pull request test dosyalarına dokunduğunda CI üzerinde uyarı verin.
Gizli testler ajanların hile yapmasını engeller mi?
Ajan gizli testlerdeki değerleri hiç görmediği için, bu testler koda sabitlenmiş çıktıları ve belirli girdilere özel koşulları yakalar. Ancak yetersiz yazılmış assertion'ları yakalayamazlar; bunu mutasyon testleri sağlar.
İlk ajanın pull request'ini ikinci bir ajan incelemeli mi?
İkinci bir ajan mekanik taramayı gerçekleştirebilir: Değiştirilen testler, yeni eklenen atlamalar, mock'lar ve test girdisi sabitleri. Ancak merge onayını yine de bir insan vermelidir.



