---
title: 'Güvenlik Borcu'
source: 'https://academia.sh/tr/kurslar/uygulama-tespit-ve-uyumluluk/guvenlik-borcu'
course: 'Tespit, Müdahale ve Uyumluluk'
language: tr
updated: '2026-08-17T18:06:41+00:00'
license: 'CC BY-SA 4.0'
---

# Güvenlik Borcu

Otuz dört kalemlik bir borç defterinin 21'i açık, 13'ü kabul edilmiş risktir; kabullerin yalnız 5'inde geçerlilik süresi, 2'sinde yeniden değerlendirme noktası yazılıdır. Altı sorunun biri tam, dördü kısmi cevaplanır, biri cevapsızdır; kısmi cevapları tam yapmak 26 alan yazmayı gerektirir. Dört dönemlik kuyruk 48 kişi-günü kapasiteyle 209 kişi-günlük defterin 11 kalemini kapatır ve kalan kuyruğun ortalama yaşı 91 günden 360 güne çıkar. Süresi hiç yazılmamış 8 kabul kalemi hiçbir dönemde yeniden sorulmaz; süresi dolmuş 3 kabulden yalnız biri yeniden değerlendirme noktası taşır.

Önceki ders iki ölçütü hesapladı ve ikisinin de ölçülen şeye dokunulmadan iyileştirilebildiğini
gösterdi. En ucuz iyileştirme yaşlı kalemi kabul edilmiş riske çevirmekti: açık yaşı 59,8 günden
23,4 güne indi, düzeltilen kalem sayısı sıfır kaldı. O yedi kalem bir yere gitti ve gittiği yer bu
dersin konusudur.

Kabul edilmiş risk ile açık borç birlikte **güvenlik borcunu** oluşturur. Yazılım Mimarlığı
müfredatında teknik borç ölçülmüştü; o ölçüm burada tekrarlanmaz ve güvenlik borcunu ondan ayıran
tek bir alan vardır: **kabulün bir süresi olur.** Teknik borç kendiliğinden ödenmez ama süresi de
dolmaz; kabul edilmiş bir risk, süresi yazılmadığında borç olmaktan çıkıp kayıt olur.

## Borç Defteri

**UY21.** Borç defteri 34 kalemdir: önceki dersin kapanmamış 21 açık kalemi ve daha önce kabule
çevrilmiş 13 kalem. Küme kurgu bölgesel ölçüm ağının abone portalı ekibine ait bir **modeldir**;
üreteç bu blokta yazılıdır, tohum görünürdür. **UY22.** Her kalemin bir **çabası** (kişi-günü) ve
bir **risk puanı** vardır; ikisi de kurgu veridir. **UY23.** Bir kabul kaleminde üç alan bulunabilir:
adı geçen **sahip**, **geçerlilik süresi** ve **yeniden değerlendirme noktası**. **UY24.** Alanların
dağılımı **veri olarak** verilmiştir: ilk beş kabulde süre, ilk ikisinde yeniden değerlendirme
noktası, ilk altısında sahip yazılıdır.

```js
// borc/defter.mjs — guvenlik borcu defteri MODELDIR: kurgu bolgesel olcum agi, planlama ani.
// Uretec kendi yazilmistir, tohum gorunurdur; defter her kosumda ayni cikar.
export const gen = (B) => (...h) => h.map((v, j) =>
  (j ? String(v).padStart(B[j]) : String(v).padEnd(B[0]))).join("");

export const TOHUM = 41100, N_ACIK = 21, N_KABUL = 13;
let s = TOHUM;
const rnd = () => (s = (Math.imul(s, 1664525) + 1013904223) >>> 0) / 4294967296;

// Kabul kalemlerinin ilk besinde gecerlilik suresi, ilk ikisinde yeniden degerlendirme
// noktasi, ilk altisinda adi gecen sahip yazilidir; kalanlarda alan bostur. Bu dagilim veridir.
const SURE = [90, 120, 180, 180, 365];

export const DEFTER = [];
for (let i = 0; i < N_ACIK + N_KABUL; i++) {
  const kabul = i >= N_ACIK, k = i - N_ACIK;
  DEFTER.push({
    kod: `D${String(i + 1).padStart(2, "0")}`,
    sinif: kabul ? "kabul" : "acik",
    kaynak: rnd() < (kabul ? .75 : .70) ? "hat disi" : "hat",
    risk: 4 + Math.floor(rnd() * 21),                  // 4-24 arasi kurgu risk puani
    caba: 1 + Math.floor(rnd() * 13),                  // kisi-gunu
    yas: kabul ? 40 + Math.floor(rnd() * 380) : 20 + Math.floor(rnd() * 160),
    sure: kabul && k < SURE.length ? SURE[k] : null,
    yeniden: kabul && k < 2,
    sahip: kabul ? k < 6 : true,
  });
}
export const acik = DEFTER.filter((d) => d.sinif === "acik");
export const kabuller = DEFTER.filter((d) => d.sinif === "kabul");
export const doldu = (d) => d.sure !== null && d.yas > d.sure;

if (import.meta.url === `file://${process.argv[1]}`) {
  console.log(`model: ${DEFTER.length} borc kalemi, ${acik.length} acik + ${kabuller.length} kabul edilmis risk`);
  const y = gen([16, 8, 10, 12, 12, 14]);
  console.log("\n" + y("sinif", "kalem", "kisi-gunu", "risk toplam", "suresi var", "suresi dolmus"));
  for (const [ad, k] of [["acik borc", acik], ["kabul edilmis", kabuller]])
    console.log(y(ad, k.length, k.reduce((a, d) => a + d.caba, 0), k.reduce((a, d) => a + d.risk, 0),
      k.filter((d) => d.sure !== null).length, k.filter(doldu).length));

  // Bir borc kalemine sorulacak sorular ve her birinin istedigi alan.
  const SORU = [["kalem acik mi kabul mu", "sinif", DEFTER.length, DEFTER.length],
    ["kabulu kim verdi", "sahip", N_KABUL, kabuller.filter((d) => d.sahip).length],
    ["kabul kac gun gecerli", "sure", N_KABUL, kabuller.filter((d) => d.sure !== null).length],
    ["kabulun suresi doldu mu", "sure+yas", N_KABUL, kabuller.filter((d) => d.sure !== null).length],
    ["yeniden degerlendirme ne zaman", "yeniden nokta", N_KABUL, kabuller.filter((d) => d.yeniden).length],
    ["kalem hangi donemde kapanacak", "kuyruk sirasi", DEFTER.length, 0]];
  const cevap = (t, b) => t === 0 ? "yok" : t === b ? "tam" : "kismi";
  const z = gen([32, 16, 8, 10, 8]);
  console.log("\n" + z("soru", "gereken alan", "taban", "tasiyan", "cevap"));
  for (const [m, a, b, t] of SORU) console.log(z(m, a, b, t, cevap(t, b)));
  const n = (c) => SORU.filter(([, , b, t]) => cevap(t, b) === c).length;
  const yok = (f) => N_KABUL - kabuller.filter(f).length;
  const eksik = yok((d) => d.sahip) + yok((d) => d.sure !== null) + yok((d) => d.yeniden);
  console.log(`\n${SORU.length} sorunun ${n("tam")}'i tam, ${n("kismi")}'i kismi cevaplaniyor, ` +
    `${n("yok")}'i cevapsiz`);
  console.log(`kismi cevaplari tam yapmak icin ${eksik} alan yazilir; suresi dolmus ` +
    `${kabuller.filter(doldu).length} kalemin ${kabuller.filter((d) => doldu(d) && d.yeniden).length}'i ` +
    `yeniden degerlendirme noktasi tasiyor`);
}
```

```
model: 34 borc kalemi, 21 acik + 13 kabul edilmis risk

sinif              kalem kisi-gunu risk toplam  suresi var suresi dolmus
acik borc             21       141         274           0             0
kabul edilmis         13        68         185           5             3

soru                                gereken alan   taban   tasiyan   cevap
kalem acik mi kabul mu                     sinif      34        34     tam
kabulu kim verdi                           sahip      13         6   kismi
kabul kac gun gecerli                       sure      13         5   kismi
kabulun suresi doldu mu                 sure+yas      13         5   kismi
yeniden degerlendirme ne zaman     yeniden nokta      13         2   kismi
kalem hangi donemde kapanacak      kuyruk sirasi      34         0     yok

6 sorunun 1'i tam, 4'i kismi cevaplaniyor, 1'i cevapsiz
kismi cevaplari tam yapmak icin 26 alan yazilir; suresi dolmus 3 kalemin 1'i yeniden degerlendirme noktasi tasiyor
```

İlk tablo defterin iki sınıfını yan yana koyuyor ve asıl bilgi son iki sütunda. Kabul edilmiş 13
kalemin yalnız **beşinde** geçerlilik süresi yazılı; kalan sekizde kabul, sonu olmayan bir karardır.
Süresi yazılı beşin **üçünün** süresi planlama anında zaten dolmuş durumda ve bunu kimse sormadığı
için üçü de defterde kabul olarak duruyor. Risk toplamı sütunu ölçeği veriyor: kabul edilmiş
kalemler defterin risk toplamının **185'ini** taşıyor, açık borç 274'ünü. Kabul, riski kaldırmaz;
yalnız onu ölçütlerin baktığı sütundan çıkarır.

Soru tablosunda altı sorunun **biri** tam cevaplanıyor. Kalan beşi yalnız kabul kalemlerini
ilgilendiriyor; dördü kısmi, biri hiç cevaplanmıyor. Kısmi olanları tam yapmak
**26 alan** yazmayı gerektiriyor — yedi sahip, sekiz süre, on bir yeniden değerlendirme noktası.
Bu, kurstaki en ucuz bedeldir ve bir hat kurulumu ya da ek hacim gerektirmez; yazılacak şey
kararın kendisidir. Son satır bunun karşılığını veriyor: süresi
dolmuş üç kabulden **yalnız biri** kendisini yeniden gündeme getirecek bir nokta taşıyor.

## Kuyruğu Koşturmak

**UY25.** Kapasite dönem başına 12 kişi-günü, dönem 90 gün ve planlama ufku dört dönemdir; üçü de
**kurgu veridir**. Sıralama kuralı birim çabaya düşen risktir ve kapasiteye sığmayan kalem sonraki
döneme kalır. **UY26.** İki koşum karşılaştırılır: kabul edilmiş kalemin hiç geri gelmediği defter
ve süresi dolan kabulün — yeniden değerlendirme noktası varsa — kuyruğa geri girdiği defter.

```js
// borc/kuyruk.mjs — borc sabit kapasiteli bir kuyruk olarak dort donem kosturulur.
import { DEFTER, acik, kabuller, doldu, gen } from "./defter.mjs";

const KAPASITE = 12, DONEM = 4, DONEM_GUN = 90;   // kisi-gunu, donem sayisi, donem uzunlugu

// Siralama birim cabaya dusen risktir; kapasiteye sigmayan kalem sonraki doneme kalir.
// geriDonus acikken: suresi dolan ve yeniden degerlendirme noktasi olan kabul kuyruga girer.
const kosuf = (geriDonus) => {
  const kuyruk = acik.map((d) => ({ ...d })), bekleyen = kabuller.map((d) => ({ ...d }));
  const satir = [];
  for (let t = 1; t <= DONEM; t++) {
    let geri = 0;
    if (geriDonus) for (const d of bekleyen)
      if (!d.donuk && d.yeniden && doldu(d)) { d.donuk = true; kuyruk.push(d); geri++; }
    kuyruk.sort((a, b) => b.risk / b.caba - a.risk / a.caba);
    let kalan = KAPASITE;
    for (const d of kuyruk) if (!d.kapali && d.caba <= kalan) { d.kapali = true; kalan -= d.caba; }
    const acikta = kuyruk.filter((d) => !d.kapali);
    satir.push([t, geri, kuyruk.filter((d) => d.kapali).length, KAPASITE - kalan, acikta.length,
      acikta.reduce((a, d) => a + d.caba, 0),
      Math.round(acikta.reduce((a, d) => a + d.yas, 0) / acikta.length)]);
    for (const d of [...acikta, ...bekleyen.filter((x) => !x.donuk)]) d.yas += DONEM_GUN;
  }
  return { satir, acikta: kuyruk.filter((d) => !d.kapali), bekleyen,
    geri: satir.reduce((a, s) => a + s[1], 0) };
};

const y = gen([8, 10, 10, 12, 10, 14, 10]);
const KOSUM = [["A: kabul geri gelmez", false], ["B: suresi dolan geri gelir", true]];
KOSUM.forEach(([ad, geriDonus], i) => {
  const r = kosuf(geriDonus);
  console.log((i ? "\n" : "") + ad);
  console.log(y("donem", "geri gelen", "kapanan", "harcanan", "kalan", "kalan kisi-gunu", "ort yas"));
  for (const s of r.satir) console.log(y(...s));
  const gizli = r.bekleyen.filter((d) => !d.donuk);
  console.log(`defterde gorunen borc ${r.acikta.length} kalem / ` +
    `${r.acikta.reduce((a, d) => a + d.caba, 0)} kisi-gunu; ` +
    `kuyruga hic girmeyen kabul ${gizli.length} kalem / ` +
    `${gizli.reduce((a, d) => a + d.caba, 0)} kisi-gunu, risk toplami ` +
    `${gizli.reduce((a, d) => a + d.risk, 0)}`);
});

console.log(`\ndort donemde toplam kapasite ${KAPASITE * DONEM} kisi-gunu; defterin tamami ` +
  `${DEFTER.reduce((a, d) => a + d.caba, 0)} kisi-gunu`);
console.log(`planlama aninda suresi dolmus ${kabuller.filter(doldu).length} kabulun ` +
  `${kabuller.filter((d) => doldu(d) && d.yeniden).length} tanesi yeniden degerlendirme noktasi ` +
  `tasiyor; dort donem boyunca kuyruga geri donen kabul ${kosuf(true).geri}`);
console.log(`suresi hic yazilmamis ${kabuller.filter((d) => d.sure === null).length} kalem ` +
  `hicbir donemde yeniden sorulmuyor`);
```

```
A: kabul geri gelmez
donem   geri gelen   kapanan    harcanan     kalankalan kisi-gunu   ort yas
1                0         4          12        17           129        91
2                0         7          12        14           117       175
3                0         9          10        12           107       259
4                0        11          12        10            95       360
defterde gorunen borc 10 kalem / 95 kisi-gunu; kuyruga hic girmeyen kabul 13 kalem / 68 kisi-gunu, risk toplami 185

B: suresi dolan geri gelir
donem   geri gelen   kapanan    harcanan     kalankalan kisi-gunu   ort yas
1                1         4          11        18           133        87
2                1         7          11        16           130       175
3                0         9          12        14           118       260
4                0        11          11        12           107       349
defterde gorunen borc 12 kalem / 107 kisi-gunu; kuyruga hic girmeyen kabul 11 kalem / 57 kisi-gunu, risk toplami 150

dort donemde toplam kapasite 48 kisi-gunu; defterin tamami 209 kisi-gunu
planlama aninda suresi dolmus 3 kabulun 1 tanesi yeniden degerlendirme noktasi tasiyor; dort donem boyunca kuyruga geri donen kabul 2
suresi hic yazilmamis 8 kalem hicbir donemde yeniden sorulmuyor
```

Kuyruk dört dönemde **11 kalem** kapatıyor ve iki koşumda da aynı sayıyı kapatıyor. Kapasite
sabittir: dört dönemde 48 kişi-günü, defterin tamamı ise **209 kişi-günü**. Bu oran planın
sınırını yazıyor — bu kapasiteyle defter kapanmaz, yalnız sıralanır. Üçüncü dönemde harcanan
kapasite 10 kişi-gününde kalıyor, çünkü sıradaki kalem kalan iki güne sığmıyor; **sabit kapasiteli
bir kuyruk kapasitesini tam kullanamaz** ve bu kayıp sıralama kuralının değil kalem boyutunun
sonucudur.

Asıl bilgi son iki sütunda. Kalan kalem sayısı 17'den 10'a düşerken ortalama yaş **91 günden 360
güne** çıkıyor. Kuyruk kısalıyor ve yaşlanıyor: birim çabaya düşen risk kuralı ucuz ve riskli
kalemleri öne alıyor, pahalı kalemler her dönem bir sonrakine devrediyor. Bir borç planının
başarısı kapanan kalem sayısıyla değil, **hiç sıraya gelmeyen kalemin yaşıyla** okunur.

İki koşum arasındaki fark tek satırdır ve dersin cevabıdır. A koşumunda dört dönem sonunda defter
10 kalem ve 95 kişi-günü gösteriyor; kuyruğa hiç girmeyen 13 kabul kalemi 68 kişi-günü ve 185 risk
puanı taşıyor ve hiçbir dönemde sorulmuyor. B koşumunda süresi dolan iki kabul geri geliyor, defter
12 kaleme çıkıyor ve gizli kalan yük 185'ten 150'ye iniyor. **Defterin büyümesi kötüleşme değil,
ölçümün genişlemesidir.** Geri dönen kalem sayısının ikide kalmasının nedeni de bellidir: sekiz
kabulde süre hiç yazılmamıştır ve süresi olmayan bir kabul, hiçbir kuralın geri getiremeyeceği
tek kalem türüdür.

## Özet

- Güvenlik borcu iki sınıftan oluşur ve teknik borçtan tek bir alanla ayrılır: kabulün bir süresi
  vardır. Defterin 34 kaleminin 21'i açık borç, 13'ü kabul edilmiş risktir.
- Kabullerin yalnız 5'inde süre, 2'sinde yeniden değerlendirme noktası, 6'sında adı geçen sahip
  yazılıdır; süresi yazılı beşin üçünün süresi planlama anında zaten dolmuştur.
- Altı sorunun biri tam, dördü kısmi cevaplanır, biri cevapsızdır; kısmi olanları tam yapmanın
  bedeli 26 alandır ve bu bedel hiçbir hat kurulumu ya da ek hacim gerektirmez.
- Dört dönemde 48 kişi-günü kapasite 209 kişi-günlük defterin 11 kalemini kapatır; kalan kuyruk
  17 kalemden 10'a inerken ortalama yaşı 91 günden 360 güne çıkar.
- Süresi ve yeniden değerlendirme noktası yazılmayan kabul defterden kalıcı olarak düşer: 13
  kabulden 11'i hiçbir dönemde yeniden sorulmaz ve 150 risk puanı ölçüm dışında kalır.

## Kurs Kapanışı

Dokuz ders boyunca tek bir soru soruldu: olaydan sonra sorulacak soruların kaçı cevaplanabiliyor ve
cevaplanabilir kılmak neye mal oluyor. Her dersin kendi kalem kümesi, kendi soru kümesi ve kendi
bedel sütunu vardı.

| Ders | Kaç soru | Cevaplanabilen | Cevaplanabilir kılmanın bedeli |
|---|---|---|---|
| Denetim Kaydı Tasarımı | 16 soru | 6 → 13 | 1,45 kat hacim, 65→45 gün saklama, 3 kişisel veri kalemi |
| Uygulamaya Özgü Tespit Senaryoları | 18 kötüye kullanım | 15 → 18 | 173 yanlış uyarı, 30 günde 101 uyandırma |
| Uygulama İhlali Müdahalesi | 12 adım | 5 → 12 kayıttan | 630→151 dakika; kayıtsızken 41 200 abonelik bildirim |
| Kısa Ömürlü İş Yüklerinde İz | 5 soru × 2 000 iş yükü | 6 604 / 10 000 çift | 91 084 ek gönderim, 33 çekirdek-dakika |
| Dış Bildirim Kanalı | 91 benzersiz bildirim | cevapsız 36 → 0, kesin 15 → 20 | 5 alan, 1,45 kat hacim, 20 gün kısa saklama |
| Kontrollerin Mühendislik Karşılığı | 26 kontrol | 11 sorgu, 6 belge | 9 kontrole pratik, 6 belgeye makine izi kurmak |
| Kanıt Otomasyonu | 24 kanıt kalemi | 12 dönem boyu, 6 son 90 gün | 170 saat kurulum, 3 017 kat hacim, yüzde 0,63 inceleme |
| Uygulama Güvenlik Ölçütleri | 8 soru | 5 tam, 1 kısmi | 568 ek durum geçişi kaydı |
| Güvenlik Borcu | 6 soru | 1 tam, 4 kısmi | 26 alan; 209 kişi-günlük borca 48 kişi-günü kapasite |

Bu kurs M25 Uygulama Güvenliği ve DevSecOps müfredatının beşinci ve son kursudur. Beş kursun her
biri aynı kalemi başka bir aşamada yakaladı ve her biri kendi birimiyle saydı.

| Kurs | Ölçü ekseni | Birim |
|---|---|---|
| K01 Güvenli Geliştirme Yaşam Döngüsü | yakalama aşaması ve kat | aşama |
| K02 Güvenli Kodlama | kapsama | dışarıda kalan nokta |
| K03 Güvenlik Otomasyonu ve Tedarik Zinciri | denetimin bulduğu, kaçırdığı ve hattan aldığı süre | bulgu ve dakika |
| K04 Çalışma Zamanı Güvenliği ve Sır Yönetimi | en pahalı aşamada tutmak | kaçırılan ve yanlış kesilen |
| K05 Tespit, Müdahale ve Uyumluluk | sorunun cevaplanabilirliği | cevaplanamayan soru |

Beş kurs boyunca sorulan tek soru şuydu: **bir kalem hangi aşamada yakalandı ve o aşamada kaça mal
oldu.** Güvenlik bir aşama değil, her aşamada farklı fiyatı olan bir karardır; ve en pahalı aşama
her zaman sonuncusudur. Bu kursun defteri bunun son biçimidir — kabul edilmiş bir risk, kalemin
hiçbir aşamada yakalanmamasının kayda geçmiş hâlidir ve süresi yazılmadığında yakalanma ihtimali
de kayıttan düşer.

Müfredatın kuralı bir kez daha yazılır: **bedeli yazılmayan denetim ölçülmemiş sayılır.** Bir
kaydın, bir uyarının, bir kanıt kaleminin ya da bir ölçütün yanına hacmi, dakikası, kişisel veri
kalemi ve kişi-günü yazılmıyorsa o denetim hakkında bilinen tek şey yapıldığıdır — kaça mal olduğu
ve neyi kaçırdığı değil.
