---
title: 'Güvenlik Şampiyonları'
source: 'https://academia.sh/tr/kurslar/guvenli-yasam-dongusu/guvenlik-sampiyonlari'
course: 'Güvenli Geliştirme Yaşam Döngüsü'
language: tr
updated: '2026-08-17T18:06:43+00:00'
license: 'CC BY-SA 4.0'
---

# Güvenlik Şampiyonları

Beş ekibin haftalık 35 incelemesi üzerinde güvenlik yetkinliğinin dağılımı ölçülür: merkezî ekip tek başına 16 incelemeyi kapsar ve 19'u güvenlik gözü olmadan geçer, dört şampiyonla kapsam doyar. Bir şampiyon ortalama 0,86 ekibe yeter ve her ekipte bir şampiyon olsa bile haftada 6 inceleme merkeze kalır; beşinci şampiyon eklendiğinde uzmanlık isteyen kalemlerin yakalanması 2'den 1'e düşer, çünkü merkez o incelemeleri artık görmez.

Önceki üç ders sırasıyla denetimleri aşamalara dağıttı, aşama başına maliyeti hesapladı ve
gereksinimleri sınanabilir biçime çevirdi. Üçü de bir kişiyi çağırdı ama adını hiç koymadı:
tasarım oturumunda gözlenemez bir yüklemi fark eden, statik çözümlemenin doksan uyarısından altı
gerçek kalemi ayıran, kötüye kullanım senaryosunu yürüten kişi. Bu kişinin her ekipte hazır
bulunduğu varsayıldı.

Bu ders o varsayımı ölçer. **Güvenlik şampiyonu** (security champion), kendi ekibinin içinde
çalışan ve zamanının bir bölümünü güvenlik incelemesine ayıran bir geliştiricidir; merkezî bir
güvenlik ekibinin alternatifi değil, kapasitesinin uzantısıdır. Ölçülecek üç şey vardır: kaç
incelemede güvenlik gözü var, kaçı bekliyor ve bir şampiyonun kapasitesi kaç ekibe yetiyor.

- **DY17.** Ekipler, geliştirici sayıları ve haftalık inceleme sayıları kurgusaldır; toplam
  inceleme yükü önceki derslerin değişiklik akışıyla uyumludur.
- **DY18.** Bir şampiyon yalnız **kendi ekibinin** incelemesine bakar; bağlam bilgisi
  aktarılamayan bir kaynaktır. Merkezî uzman herhangi bir ekibe bakabilir ve kapasitesi ortak
  havuzdadır.
- **DY19.** Kalem zorluğu üç düzeydir: 1 kontrol listesiyle, 2 eğitimli gözle, 3 uzmanlıkla
  görülür. Şampiyon en çok 2. düzeyi yakalar; 3. düzey merkezî uzmanın işidir.
- **DY20.** Bir kalem ancak güvenlik gözü olan bir incelemede yakalanır. Kapsanmayan incelemeden
  geçen kalem, önceki derslerin diliyle geç akışa düşer.
- **DY21.** Eskalasyon oranı, şampiyonun göremediği bir kalemi yine de merkeze ilettiği durumların
  payıdır ve model değeridir. Sıfır olduğunda şampiyon modelinin derinlik tavanı görünür hâle gelir.

## Kapsanan ve Kapsanmayan İnceleme

Model ekipleri inceleme yüküyle sıralar ve iki kapasite kaynağını ayırır: şampiyonların kendi
ekiplerinde harcadığı zaman ile merkezî ekibin ortak havuzu.

```js
// ekip.mjs — bes ekip, inceleme yuku ve guvenlik yetkinliginin dagilimi (model)
// satir: ekip | gelistirici | haftalik inceleme
export const EKIP = `
  abone-portali    6  10
  sayac-toplama    5   8
  faturalama       4   6
  saha-uygulamasi  4   5
  ortak-kitaplik   3   6`
  .trim().split('\n').map((r) => {
    const [ad, g, i] = r.trim().split(/\s+/);
    return { ad, gelistirici: +g, inceleme: +i };
  });
export const SAMPIYON_PAY = 0.2;   // sampiyonun kendi zamanindan ayirdigi oran
export const SAMPIYON_INCELEME = 6; // bu payla haftada bakabildigi inceleme sayisi
export const MERKEZ_KISI = 2, MERKEZ_INCELEME = 8; // merkezi guvenlik ekibi
// Kalem zorlugu: 1 kontrol listesiyle, 2 egitimli gozle, 3 uzmanlikla gorulur.
// Dagilim onceki derslerin 23 kalemlik kumesi uzerine modellenmistir.
export const ZORLUK = [[1, 11], [2, 7], [3, 5]];
export const SAMPIYON_DERINLIK = 2; // sampiyonun yakalayabildigi en yuksek zorluk
export const TOPLAM_INCELEME = EKIP.reduce((s, e) => s + e.inceleme, 0);
export const TOPLAM_GELISTIRICI = EKIP.reduce((s, e) => s + e.gelistirici, 0);
```

```js
// kosum1.mjs — sampiyon sayisi arttikca guvenlik gozu olan inceleme ve bekleyen inceleme
import { EKIP, SAMPIYON_PAY, SAMPIYON_INCELEME, MERKEZ_KISI, MERKEZ_INCELEME,
  TOPLAM_INCELEME, TOPLAM_GELISTIRICI } from './ekip.mjs';

const merkez = MERKEZ_KISI * MERKEZ_INCELEME;
// Sampiyon yalniz kendi ekibinin incelemesine bakar; merkez havuzdan herhangi bir ekibe.
const sirali = [...EKIP].sort((a, b) => b.inceleme - a.inceleme);
console.log(`${EKIP.length} ekip, ${TOPLAM_GELISTIRICI} gelistirici, ` +
  `${TOPLAM_INCELEME} inceleme/hafta; merkez ${merkez} inceleme/hafta`);
console.log('\nsampiyon  sampiyon kapsami  merkez kullanilan  bosta merkez  kapsanan  bekleyen  kisi-esdeger');
for (let s = 0; s <= EKIP.length; s++) {
  const kaps = sirali.slice(0, s).reduce((a, e) => a + Math.min(e.inceleme, SAMPIYON_INCELEME), 0);
  const kalan = TOPLAM_INCELEME - kaps, kullanilan = Math.min(kalan, merkez);
  const esdeger = (s * SAMPIYON_PAY + MERKEZ_KISI).toFixed(1);
  console.log(String(s).padEnd(10) + String(kaps).padEnd(18) + String(kullanilan).padEnd(19) +
    String(merkez - kullanilan).padEnd(14) + String(kaps + kullanilan).padEnd(10) +
    String(kalan - kullanilan).padEnd(10) + esdeger);
}

console.log('\nbir sampiyon kendi ekibine yetiyor mu');
console.log('ekip             inceleme  sampiyon kapasitesi  acik  merkeze kalan %');
for (const e of sirali)
  console.log(e.ad.padEnd(17) + String(e.inceleme).padEnd(10) +
    String(SAMPIYON_INCELEME).padEnd(21) +
    String(Math.max(0, e.inceleme - SAMPIYON_INCELEME)).padEnd(6) +
    ((Math.max(0, e.inceleme - SAMPIYON_INCELEME) / e.inceleme) * 100).toFixed(0));
const acik = sirali.reduce((a, e) => a + Math.max(0, e.inceleme - SAMPIYON_INCELEME), 0);
console.log(`her ekipte bir sampiyon olsa bile ${acik} inceleme/hafta merkeze kalir; ` +
  `bir sampiyon ortalama ${(SAMPIYON_INCELEME / (TOPLAM_INCELEME / EKIP.length)).toFixed(2)} ekibe yeter`);
```

```
5 ekip, 22 gelistirici, 35 inceleme/hafta; merkez 16 inceleme/hafta

sampiyon  sampiyon kapsami  merkez kullanilan  bosta merkez  kapsanan  bekleyen  kisi-esdeger
0         0                 16                 0             16        19        2.0
1         6                 16                 0             22        13        2.2
2         12                16                 0             28        7         2.4
3         18                16                 0             34        1         2.6
4         24                11                 5             35        0         2.8
5         29                6                  10            35        0         3.0

bir sampiyon kendi ekibine yetiyor mu
ekip             inceleme  sampiyon kapasitesi  acik  merkeze kalan %
abone-portali    10        6                    4     40
sayac-toplama    8         6                    2     25
faturalama       6         6                    0     0
ortak-kitaplik   6         6                    0     0
saha-uygulamasi  5         6                    0     0
her ekipte bir sampiyon olsa bile 6 inceleme/hafta merkeze kalir; bir sampiyon ortalama 0.86 ekibe yeter
```

Sıfırıncı satır başlangıç durumunu veriyor: iki kişilik merkezî ekip haftada 16 incelemeye
bakabiliyor, 19 inceleme güvenlik gözü olmadan geçiyor. Kapsanan oran yüzde 46'dır ve bu sayı
merkezî ekibin çalışkanlığıyla ilgili değildir — 35 incelemeye 16 kapasite ayrılmıştır.

Şampiyon eklendikçe kapsanan sayı 16'dan 22'ye, 28'e, 34'e çıkıyor ve **dördüncü şampiyonda
doyuyor**. Beşinci şampiyon kapsanan sayıyı hiç değiştirmiyor; yalnız merkezin boşta kalan
kapasitesini 5'ten 10'a çıkarıyor. Kişi eşdeğeri sütunu bedeli veriyor: dört şampiyonla toplam
güvenlik yetkinliği 2,8 tam zamanlı kişiye denk gelir ve bunun 0,8'i yirmi iki geliştiricinin
içinden çıkar. Aynı kapsamı merkezî ekibi büyüterek elde etmek için 35 incelemeye yetecek kadar
uzman gerekirdi; şampiyon modeli, kapsamı yeni kişi almadan doyurmanın yoludur.

## Bir Şampiyon Kaç Ekibe Yetiyor

İkinci tablo yaygın bir tasarım varsayımını sayıyla yanlışlıyor. "Her ekipte bir şampiyon" cümlesi
kapsamın tamamlandığını ima eder; sayılar öyle demiyor. Bir şampiyonun haftalık kapasitesi altı
inceleme, ortalama ekip yükü yedi incelemedir — yani bir şampiyon ortalama **0,86 ekibe** yeter.

Dağılım ortalamadan daha keskindir. Abone portalı haftada on inceleme üretir; şampiyon altısına
bakar, dördü merkeze kalır ve bu, o ekibin incelemelerinin yüzde 40'ıdır. Sayaç toplama servisinde
oran yüzde 25'tir. Küçük üç ekipte açık sıfırdır ve saha uygulamasında şampiyonun bir incelemelik
boş kapasitesi vardır, ama o kapasite başka bir ekibe aktarılamaz — bağlam taşınmaz.

Sonuç şudur: her ekipte bir şampiyon bulunsa bile haftada altı inceleme merkeze kalır. Şampiyon
sayısı kapsamı **ekip sınırında** doyurur, kurum genelinde doyurmaz; kalan yükü karşılayacak bir
merkezî kapasite her durumda gerekir. Kapasitenin ekip yüküne göre dağıtılmaması durumunda ise en
çok inceleme üreten ekip en çok açığı taşır — tabloyu sıralayan sütun budur.

## Derinlik Kapsamla Birlikte Büyümüyor

Kapsanan inceleme sayısı yakalanan kalem sayısı demek değildir. Bir incelemede kimin oturduğu,
hangi zorluktaki kalemin görüleceğini belirler.

```js
// kosum2.mjs — kapsam buyurken derinlik ne oluyor: zorluk 3 kalemler kimin gozunden geciyor
import { EKIP, SAMPIYON_INCELEME, MERKEZ_KISI, MERKEZ_INCELEME, ZORLUK,
  SAMPIYON_DERINLIK, TOPLAM_INCELEME } from './ekip.mjs';

const merkez = MERKEZ_KISI * MERKEZ_INCELEME;
const sirali = [...EKIP].sort((a, b) => b.inceleme - a.inceleme);
const sig = ZORLUK.filter(([z]) => z <= SAMPIYON_DERINLIK).reduce((a, [, n]) => a + n, 0);
const derin = ZORLUK.filter(([z]) => z > SAMPIYON_DERINLIK).reduce((a, [, n]) => a + n, 0);
const ESKALASYON = 0.6; // sampiyonun "emin degilim" deyip merkeze ilettigi derin kalem orani

console.log(`${sig + derin} kalem: sampiyonun gorebildigi ${sig}, uzmanlik isteyen ${derin}`);
console.log('\nsampiyon  sampiyon kapsami  merkez kapsami  sig yakalanan  derin yakalanan  eskalasyonla  toplam');
for (let s = 0; s <= EKIP.length; s++) {
  const kaps = sirali.slice(0, s).reduce((a, e) => a + Math.min(e.inceleme, SAMPIYON_INCELEME), 0);
  const mk = Math.min(TOPLAM_INCELEME - kaps, merkez);
  const sy = Math.round((sig * (kaps + mk)) / TOPLAM_INCELEME);
  const dy = Math.round((derin * mk) / TOPLAM_INCELEME);
  const de = Math.round((derin * (mk + ESKALASYON * kaps)) / TOPLAM_INCELEME);
  console.log(String(s).padEnd(10) + String(kaps).padEnd(18) + String(mk).padEnd(16) +
    String(sy).padEnd(15) + String(dy).padEnd(17) + String(de).padEnd(14) + (sy + de));
}
console.log(`\neskalasyonun merkeze getirdigi ek yuk 5 sampiyonda ` +
  `${(derin * ESKALASYON * 29 / TOPLAM_INCELEME).toFixed(1)} kalem; ` +
  `merkezin bosta kapasitesi ${merkez - 6} inceleme/hafta`);
```

```
23 kalem: sampiyonun gorebildigi 18, uzmanlik isteyen 5

sampiyon  sampiyon kapsami  merkez kapsami  sig yakalanan  derin yakalanan  eskalasyonla  toplam
0         0                 16              8              2                2             10
1         6                 16              11             2                3             14
2         12                16              14             2                3             17
3         18                16              17             2                4             21
4         24                11              18             2                4             22
5         29                6               18             1                3             21

eskalasyonun merkeze getirdigi ek yuk 5 sampiyonda 2.5 kalem; merkezin bosta kapasitesi 10 inceleme/hafta
```

Sığ kalem sütunu beklendiği gibi davranıyor: sekizden on sekize çıkıyor ve dördüncü şampiyonda
tamamlanıyor. Derin kalem sütunu davranmıyor. Merkezî ekip tek başına iki derin kalem yakalıyor ve
bu sayı şampiyon sayısı dörde çıkana kadar **hiç değişmiyor**; beşinci şampiyonda **bire düşüyor**.

Düşüşün nedeni tabloda yan sütunda duruyor. Şampiyonlar 29 incelemeyi kapsadığında merkeze yalnız 6
inceleme kalır; merkezin baktığı inceleme sayısı azaldıkça uzmanlık isteyen kalemleri görme
olasılığı da azalır. Şampiyon o incelemelerde oturmaktadır ama derin kalemi görecek düzeyde
değildir. **Kapsamı büyüten karar, derinliği küçültmüştür.** Toplam sütunu bunu tek sayıyla veriyor:
en iyi sonuç dört şampiyonda 22 kalem, beş şampiyonda 21 kalemdir.

Son sütun karşı önlemi ölçüyor. Şampiyonun göremediği bir kalemi yine de merkeze iletebildiği bir
**eskalasyon yolu** varsa derin kalem sayısı beş şampiyonda 1'den 3'e çıkar. Bunun bedeli merkeze
gelen 2,5 kalemlik ek yüktür ve merkezin haftada 10 incelemelik boş kapasitesi bunu karşılar.
Şampiyon modelinin işe yaraması yetkinliğin dağıtılmasına değil, **yetersizliğin bildirilebilmesine**
bağlıdır: "emin değilim" diyebilen bir şampiyon, emin olmaya çalışan bir şampiyondan daha çok kalem
yakalatır.

Bir sınırlama yazılmalıdır. Model, şampiyonun derinlik tavanını sabit tutuyor; gerçekte tavan
eğitimle yükselir ve bu ölçümün dışındadır. Ölçülen şey belirli bir tavanla kapsamın nasıl
davrandığıdır; eğitimin katkısı ayrı bir karardır ve kendi bedeli vardır.

## Kapsanmayan İnceleme Ne Oluyor

Kapsanmayan bir incelemenin akıbeti kapasite sorusu değil, kural sorusudur. Güvenlik incelemesi
zorunluysa kapsanmayan değişiklik bekler; zorunlu değilse geçer ve taşıdığı kalem kaçar.

```js
// kosum3.mjs — kapsanmayan inceleme iki ayri kurala baglanabilir: bloklayan ve bloklamayan
import { EKIP, SAMPIYON_INCELEME, MERKEZ_KISI, MERKEZ_INCELEME, ZORLUK,
  SAMPIYON_DERINLIK, TOPLAM_INCELEME } from './ekip.mjs';

const HAFTA = 12, merkez = MERKEZ_KISI * MERKEZ_INCELEME;
const sirali = [...EKIP].sort((a, b) => b.inceleme - a.inceleme);
const sig = ZORLUK.filter(([z]) => z <= SAMPIYON_DERINLIK).reduce((a, [, n]) => a + n, 0);
const derin = ZORLUK.filter(([z]) => z > SAMPIYON_DERINLIK).reduce((a, [, n]) => a + n, 0);

console.log('           acik      bloklayan kural            bloklamayan kural');
console.log('sampiyon  /hafta  bekleyen degisiklik  kacan  bekleyen  kacan kalem');
for (let s = 0; s <= EKIP.length; s++) {
  const kaps = sirali.slice(0, s).reduce((a, e) => a + Math.min(e.inceleme, SAMPIYON_INCELEME), 0);
  const mk = Math.min(TOPLAM_INCELEME - kaps, merkez), acik = TOPLAM_INCELEME - kaps - mk;
  const yakalanan = Math.round((sig * (kaps + mk)) / TOPLAM_INCELEME) +
    Math.round((derin * (mk + 0.6 * kaps)) / TOPLAM_INCELEME);
  console.log(String(s).padEnd(10) + String(acik).padEnd(8) + String(acik * HAFTA).padEnd(21) +
    '0'.padEnd(7) + '0'.padEnd(10) + (sig + derin - yakalanan));
}
console.log('\nbloklayan kuralda hicbir kalem kacmaz, 12 haftada 228 degisiklige kadar beklenir;');
console.log('bloklamayan kuralda hicbir degisiklik beklemez, 13 kaleme kadar gozsuz gecer.');
```

```
           acik      bloklayan kural            bloklamayan kural
sampiyon  /hafta  bekleyen degisiklik  kacan  bekleyen  kacan kalem
0         19      228                  0      0         13
1         13      156                  0      0         9
2         7       84                   0      0         6
3         1       12                   0      0         2
4         0       0                    0      0         1
5         0       0                    0      0         2

bloklayan kuralda hicbir kalem kacmaz, 12 haftada 228 degisiklige kadar beklenir;
bloklamayan kuralda hicbir degisiklik beklemez, 13 kaleme kadar gozsuz gecer.
```

Aynı açık sayısı iki bambaşka sonuç veriyor. Yetkinlik hiç dağıtılmamışken bloklayan kural on iki
haftada **228 değişikliği** bekletir ve hiçbir kalem kaçırmaz; bloklamayan kural hiçbir değişikliği
bekletmez ve **13 kalem** güvenlik gözü görmeden geçer. İlk dersin kapı tablosuyla aynı takas
buradadır, ama bu kez bekletmenin nedeni kapının kapasitesi değil, **inceleyecek yetkinliğin
bulunmamasıdır**.

Kararın yönü şampiyon sayısına bağlıdır. Sıfır ve bir şampiyonda bloklayan kural işletilemez —
biriken 228 ve 156 değişiklik ekipleri durdurur, kural birkaç hafta içinde bir istisna listesine
dönüşür ve fiilen bloklamayan kurala iner. Üçüncü şampiyondan sonra açık haftada bir incelemeye
düşer; on iki haftada 12 değişiklik bekler ve bloklayan kural artık taşınabilir hâle gelir.
**Bloklayan bir kural yetkinlik dağıtılmadan yazılamaz**; yazılırsa uygulanmaz ve uygulanmayan bir
kural, kapsandığı sanılan incelemeleri de kapsamsız bırakır.

Son satır önceki tablonun bulgusunu bir kez daha gösteriyor. Beşinci şampiyonda açık sıfırdır,
bekleyen değişiklik sıfırdır ve her şey kapsanmış görünür; buna rağmen kaçan kalem sayısı dört
şampiyondaki 1'den **2'ye çıkar**. Kapsam sütununa bakan bir ölçüm bu artışı hiç görmez.

## Özet

- 5 ekip haftada 35 inceleme üretiyor; iki kişilik merkezî ekip 16'sını kapsıyor ve 19 inceleme
  güvenlik gözü olmadan geçiyor.
- Şampiyon eklendikçe kapsanan inceleme 16'dan 34'e çıkar ve dördüncü şampiyonda 35'e doyar;
  beşinci şampiyon kapsamı değiştirmez, yalnız merkezin boş kapasitesini 5'ten 10'a çıkarır.
- Bir şampiyonun kapasitesi 6 inceleme, ortalama ekip yükü 7 incelemedir: bir şampiyon 0,86 ekibe
  yeter. Her ekipte bir şampiyon olsa bile haftada 6 inceleme merkeze kalır ve bunun 4'ü tek bir
  ekipten gelir.
- Dört şampiyonlu düzenin bedeli 2,8 kişi eşdeğeridir ve 0,8'i mevcut 22 geliştiricinin içinden
  çıkar; kapsam yeni kişi alınmadan doyar. Kapsanmayan inceleme için bloklayan kural 12 haftada 228
  değişikliği bekletir ve hiç kalem kaçırmaz, bloklamayan kural hiç bekletmez ve 13 kalem kaçırır;
  bloklayan kural ancak üçüncü şampiyondan sonra taşınabilir hâle gelir.
- Uzmanlık isteyen 5 kalemin yakalanması şampiyon sayısıyla artmaz: dört şampiyona kadar 2'de
  sabit kalır, beşinci şampiyonda 1'e düşer, çünkü merkez o incelemeleri artık görmez.
- Eskalasyon yolu derin kalem sayısını beş şampiyonda 1'den 3'e çıkarır; bedeli merkeze gelen 2,5
  kalemlik ek yüktür ve merkezin 10 incelemelik boş kapasitesi bunu karşılar.

## Sonraki Adım

Bu ders yetkinliğin nereye konacağını ölçtü ve dört şampiyonlu bir düzende 23 kalemin 22'sinin
yakalandığını buldu. Yakalanmak bir kalemi kapatmaz. Önceki derslerin hepsi bulunan kalemin
düzeltildiğini varsaydı; sola kaydırmanın 250 saatlik kazancı bile o varsayımın üstünde duruyordu
ve orada bir üst sınır olduğu yazılmıştı. Bulunan kalemi düzeltecek olan aynı yirmi iki
geliştiricidir ve onların zamanı özellik işiyle paylaşılır. Sonraki ders sınırlı geliştirme
kapasitesini kalem kümesine dağıtır: bir sprint kapasitesi kaç kalem alıyor, birim kapasite başına
kaç kalem kapanıyor, sıralama ölçütü değiştiğinde kaç kalem dışarıda kalıyor ve dışarıda kalanların
kümesi ölçüt değiştiğinde ne kadar değişiyor.
