---
title: 'Kanıt Otomasyonu'
source: 'https://academia.sh/tr/kurslar/uygulama-tespit-ve-uyumluluk/kanit-otomasyonu'
course: 'Tespit, Müdahale ve Uyumluluk'
language: tr
updated: '2026-08-17T18:06:41+00:00'
license: 'CC BY-SA 4.0'
---

# Kanıt Otomasyonu

Yirmi dört denetim kanıtı kalemi hatta yerleştirilir: elle dokunulan kalem 24'ten 9'a, yıllık derleme yükü 213 saatten 96,2 saate iner, 170 saatlik kurulum 1,46 yılda karşılanır ve altı kalem hiçbir koşulda otomatikleşmez. Bedel karşı sütunda çıkar: dönem başına kanıt kaydı 24'ten 72.401'e, 3.017 kata yükselir, incelenen oran yüzde 100'den yüzde 0,63'e düşer ve kişisel veri türü taşıyan altı kalem 90 günlük saklama penceresi yüzünden dönemin yalnız yüzde 24,7'sini cevaplar.

Önceki ders yirmi altı denetim maddesini ekibin on sekiz pratiğiyle eşleştirdi ve üç iş türü
ayırdı. Bunlardan ikisi ölçülemedi: dokuz kontrolün karşılığında hiçbir pratik yok, beşinin
karşılığı da başka bir katmanda. Geriye ölçülebilir olan on yedi kontrol kaldı — on biri makinece
okunabilir iz bırakıyor, altısı yalnız bir belge bırakıyor.

Bu ders o on yedi kontrolün kanıtını izler. Sorulan şey pratiğin var olup olmadığı değil,
**kanıtın nerede üretildiğidir.** Bir pratiğin koşması ile o pratiğin koştuğunun kanıtlanabilmesi
iki ayrı iştir ve ikincisi çoğunlukla dönem sonunda, elle yapılır. Ölçü birimi de buradan çıkar:
**elle dokunulan kalem sayısı** ve o kalemlerin yıllık derleme yükü.

## Kanıt Kalemi Kümesi

**UY7.** Kanıt kalemi kümesi 24'tür ve önceki dersin karşılığı çıkan 17 kontrolüne bağlanır;
küme kurgu bölgesel ölçüm ağına aittir ve **modeldir**. **UY8.** Her kalemin bir **türü** vardır:
**iz** bir sistemde kendiliğinden oluşan kayıttır, **karar** bir kişinin gerekçesidir, **toplantı**
bir tatbikat ya da toplantı tutanağıdır. **UY9.** Elle derlenen kanıt derleme günü üretilir ve
hangi aralığı kapsadığı kaydın üstünde yazmaz; hatta üretilen kanıt bir dönem damgası taşır — bu
ayrım modelin varsayımıdır. **UY10.** Dakikalar dönem başına **veri olarak** verilmiştir,
ölçülmemiştir; derleme yılda üç kez yapılır ve bu da kurgudur.

```js
// kanit/kalem.mjs — denetim kaniti kalemleri MODELDIR: kurgu bolgesel olcum agi, bir donem.
// Kalemler onceki dersin karsiligi cikan 17 kontroluna baglanir; sayilar kurgudur.
export const gen = (B) => (...h) => h.map((v, j) =>
  (j ? String(v).padStart(B[j]) : String(v).padEnd(B[0]))).join("");

// kod|kontrol|tur|kaynak|elle dakika|donemde uretilen kayit|kisisel veri
export const KALEM = `
  K01|IC-01|iz|hat|120|312|yok|bagimlilik envanteri
  K02|IC-01|iz|hat|90|312|yok|koken bilgisi
  K03|IC-02|iz|kosum|150|8640|var|kisa omurlu kimlik verilisi
  K04|IC-02|karar|kosum|240|24|var|erisim gozden gecirme karari
  K05|IC-04|iz|kosum|180|54000|var|uygulama denetim kaydi
  K06|IC-05|iz|kosum|100|960|yok|uyari kurali tetiklenmesi
  K07|IC-06|toplanti|elle|300|2|yok|olay mudahale tatbikat raporu
  K08|IC-06|karar|elle|120|6|yok|rol atama karari
  K09|IC-07|toplanti|elle|360|2|yok|kurtarma hedefi olcum raporu
  K10|IC-08|iz|hat|110|312|yok|imaj tarama raporu
  K11|YS-05|toplanti|elle|180|4|yok|yonetim gozden gecirme tutanagi
  K12|DK-01|iz|depo|130|486|yok|degisiklik onay kaydi
  K13|DK-01|karar|depo|90|18|yok|acil degisiklik gerekcesi
  K14|DK-02|iz|kosum|140|420|var|uretim erisimi verilisi
  K15|DK-03|toplanti|elle|300|2|yok|geri yukleme tatbikat raporu
  K16|DK-04|karar|kosum|280|24|var|ayricalikli erisim gozden gecirmesi
  K17|DK-05|iz|depo|120|486|yok|kod incelemesi onayi
  K18|DK-05|iz|depo|80|486|yok|dal koruma kural durumu
  K19|DK-06|iz|hat|160|312|yok|acik tarama sonucu
  K20|DK-06|iz|hat|140|312|yok|statik cozumleme sonucu
  K21|SG-01|iz|kosum|150|1440|yok|bolut kurali durumu
  K22|SG-01|iz|kosum|130|1440|yok|kabul denetleyicisi red kaydi
  K23|SG-02|karar|elle|420|1|var|veri siniflandirma tablosu
  K24|SG-04|iz|kosum|170|2400|var|veri sahibi talebi izi
`.trim().split("\n").map((l) => {
  const [kod, kontrol, tur, kaynak, dk, kayit, kisisel, ad] = l.trim().split("|");
  return { kod, kontrol, tur, kaynak, dk: +dk, kayit: +kayit, kisisel, ad };
});

export const TUR = ["iz", "karar", "toplanti"];
export const DERLEME = 3;                 // yilda uc kez kanit derlemesi (kurgu)
export const KURULUM = { hat: 6, depo: 8, kosum: 12, elle: 0 };   // kalem basina kisi-saat

if (import.meta.url === `file://${process.argv[1]}`) {
  const y = gen([12, 8, 10, 12, 14, 16]);
  console.log(y("kalem turu", "kalem", "sistemde", "elle", "donem dakika", "donem kaydi"));
  for (const t of TUR) {
    const k = KALEM.filter((x) => x.tur === t);
    console.log(y(t, k.length, k.filter((x) => x.kaynak !== "elle").length,
      k.filter((x) => x.kaynak === "elle").length,
      k.reduce((a, x) => a + x.dk, 0), k.reduce((a, x) => a + x.kayit, 0)));
  }
  const dk = KALEM.reduce((a, x) => a + x.dk, 0);
  console.log(y("TOPLAM", KALEM.length, KALEM.filter((x) => x.kaynak !== "elle").length,
    KALEM.filter((x) => x.kaynak === "elle").length, dk,
    KALEM.reduce((a, x) => a + x.kayit, 0)));
  console.log(`\nbaslangic durumu: ${KALEM.length} kalemin ${KALEM.length}'u elle derleniyor`);
  console.log(`derleme basina ${(dk / 60).toFixed(1)} saat, yilda ${DERLEME} derleme -> ` +
    `${(DERLEME * dk / 60).toFixed(1)} saat`);
  console.log(`kisisel veri turu tasiyan kalem ` +
    `${KALEM.filter((x) => x.kisisel === "var").length}/${KALEM.length}`);
}
```

```
kalem turu     kalem  sistemde        elle  donem dakika     donem kaydi
iz                15        15           0          1970           72318
karar              5         3           2          1150              73
toplanti           4         0           4          1140              10
TOPLAM            24        18           6          4260           72401

baslangic durumu: 24 kalemin 24'u elle derleniyor
derleme basina 71.0 saat, yilda 3 derleme -> 213.0 saat
kisisel veri turu tasiyan kalem 7/24
```

Tablonun ikinci ve üçüncü sütunu bu dersin asıl gerilimini kuruyor. Yirmi dört kalemin **on
sekizi** zaten bir sistemde oluşuyor — hatta, depoda ya da koşumda. Buna karşın başlangıç
durumunda **yirmi dördünün de** kanıtı elle derleniyor. Kayıt sistemde vardır ve dönem sonunda bir
kişi onu dışa aktarır, bir dizine koyar, bir tabloya işler. Aradaki fark bir mühendislik açığı
değil, bir bağlantı açığıdır: kaydın var olması, denetimin sorduğu biçimde durduğu anlamına gelmez.

Kalem sayısının kontrol sayısından fazla olması da bir bilgidir: on yedi kontrol yirmi dört kalem
istiyor. Bazı maddeler tek kalemle karşılanmaz — kod değişikliğinin ikinci gözden geçtiğini
göstermek hem inceleme onayını hem dal koruma kuralının durumunu ister, çünkü ilki olayın
gerçekleştiğini, ikincisi gerçekleşmemesinin engellendiğini söyler. Kanıt kalemi sayısı kontrol
sayısıyla değil, **kontrolün sorusunun kaç parçadan oluştuğuyla** belirlenir.

Üçüncü satır bunun sınırını da veriyor. Dört toplantı kaleminin hiçbiri bir sistemde oluşmuyor ve
bu, araç eksikliğinden değil, kalemin **doğasından** kaynaklanıyor: bir tatbikatın sonucu bir kişi
tarafından yazılır. Dakika sütunu ise dağılımın dengesiz olduğunu söylüyor — dört toplantı kalemi
1.140 dakika, yani toplam yükün dörtte biri; oysa kalem sayısının altıda biri.

## Üretimi Hatta Yerleştirmek

**UY11.** Karar türü bir kalemin **kaydı** otomatikleşir — kararın verildiği, veren kişi ve zaman
damgası bir sistemden okunur; **gerekçe metni** elle kalır. Kalan elle iş, kalemin dakikasının
0,4 katı sayıldı ve bu oran modelin varsayımıdır. **UY12.** Kurulum bedeli kalem başına kişi-saat
olarak verilmiştir (hat 6, depo 8, koşum 12) ve **veridir**; bakım bedeli modellenmedi, bu da
amorti süresini olduğundan kısa gösterir.

```js
// kanit/otomasyon.mjs — kanit uretimi hatta yerlestirilir: elle toplanan kalem kaca iniyor.
import { KALEM, DERLEME, KURULUM, gen } from "./kalem.mjs";

// Iz turu kalem bir sistemde kendiliginden olusur: hatta uretilir. Karar turunun kaydi
// otomatiklesir, gerekcesi elle kalir (kalemin dakikasinin 0,4 kati). Toplanti otomatiklesmez.
const durum = (k) => k.kaynak === "elle" ? "elle kalir"
  : k.tur === "iz" ? "hatta uretilir"
  : k.tur === "karar" ? "yari otomatik" : "elle kalir";
const kalan = (k) => durum(k) === "hatta uretilir" ? 0
  : durum(k) === "yari otomatik" ? Math.round(0.4 * k.dk) : k.dk;

const DURUM = ["hatta uretilir", "yari otomatik", "elle kalir"];
const y = gen([18, 8, 20, 16]);
console.log(y("otomasyon sonucu", "kalem", "kalan elle dakika", "kurulum saat"));
for (const d of DURUM) {
  const k = KALEM.filter((x) => durum(x) === d);
  console.log(y(d, k.length, k.reduce((a, x) => a + kalan(x), 0),
    k.reduce((a, x) => a + KURULUM[x.kaynak], 0)));
}
const kalanDk = KALEM.reduce((a, x) => a + kalan(x), 0);
const kurulum = KALEM.reduce((a, x) => a + (durum(x) === "elle kalir" ? 0 : KURULUM[x.kaynak]), 0);
console.log(y("TOPLAM", KALEM.length, kalanDk, kurulum));

const oncesi = DERLEME * KALEM.reduce((a, x) => a + x.dk, 0) / 60;
const sonrasi = DERLEME * kalanDk / 60;
const elleKalem = KALEM.filter((x) => durum(x) !== "hatta uretilir");
console.log(`\nelle dokunulan kalem ${KALEM.length} -> ${elleKalem.length} ` +
  `(${KALEM.filter((x) => durum(x) === "elle kalir").length} tam, ` +
  `${KALEM.filter((x) => durum(x) === "yari otomatik").length} kismi)`);
console.log(`yillik derleme yuku ${oncesi.toFixed(1)} -> ${sonrasi.toFixed(1)} saat; ` +
  `kazanc ${(oncesi - sonrasi).toFixed(1)} saat/yil`);
console.log(`kurulum ${kurulum} saat -> amorti ${(kurulum / (oncesi - sonrasi)).toFixed(2)} yil`);
console.log(`hicbir kosulda otomatiklesmeyen kalem: ` +
  KALEM.filter((x) => durum(x) === "elle kalir").map((x) => `${x.kod} ${x.tur}`).join(", "));
```

```
otomasyon sonucu     kalem   kalan elle dakika    kurulum saat
hatta uretilir          15                   0             138
yari otomatik            3                 244              32
elle kalir               6                1680               0
TOPLAM                  24                1924             170

elle dokunulan kalem 24 -> 9 (6 tam, 3 kismi)
yillik derleme yuku 213.0 -> 96.2 saat; kazanc 116.8 saat/yil
kurulum 170 saat -> amorti 1.46 yil
hicbir kosulda otomatiklesmeyen kalem: K07 toplanti, K08 karar, K09 toplanti, K11 toplanti, K15 toplanti, K23 karar
```

Elle dokunulan kalem **24'ten 9'a** iniyor: altısı tam elle, üçü kısmi. Yıllık derleme yükü 213
saatten 96,2 saate düşüyor ve kazanç yılda 116,8 saat. Kurulum 170 saat tutuyor, yani yatırım
**1,46 yılda** karşılanıyor. Bu üç sayı birlikte okunmalıdır: tek başına "otomasyon yükü yarıdan
fazla düşürdü" cümlesi doğrudur ama ilk yılın net bakiyesi eksidir.

Son satır otomasyonun tavanını veriyor. Altı kalem hiçbir koşulda otomatikleşmez ve ikisi karar,
dördü toplantı türündedir. Bu altı kalem kalan elle yükün **1.680 dakikasını**, yani 1.924
dakikanın yüzde 87'sini taşır. Otomasyon yükün büyük kısmını değil, **kalem sayısının** büyük
kısmını aldı; kalan dokuz kalem sayıca az, dakikaca ağırdır. Sıradaki iyileştirmenin nereye
bakacağı bu sütunda yazıyor ve orası bir hat değil, bir toplantı düzenidir.

Kısmi otomatikleşen üç kalem ayrı bir sınıftır ve en çok yanlış anlaşılanıdır. Erişim gözden
geçirme kararı bir sistemde işaretlenir, ama **neden** o erişimin sürdürüldüğü bir cümledir ve o
cümleyi bir hat yazamaz. Kaydın otomatikleşmesi, kararın otomatikleştiği anlamına gelmez;
otomatikleşen şey kararın **var olduğunun** kanıtıdır, içeriğinin değil.

## Otomatik Kanıtın Bedeli

**UY13.** Denetçi bir kalemden en çok 25 kayıt inceler; denetim dönemi 365 gün, kişisel veri türü
taşıyan kanıt kaleminin saklama penceresi 90 gündür. Üçü de **kurgu veridir** ve pencere kararı
kalemin taşıdığı veri türünden gelir.

```js
// kanit/bedel.mjs — otomatik kanitin bedeli: hacim, ornekleme orani ve saklama penceresi.
import { KALEM, gen } from "./kalem.mjs";

const ORNEK = 25, DONEM_GUN = 365, SAKLAMA_GUN = 90;   // ucu de kurgu veridir
const otomatik = (k) => k.kaynak !== "elle" && k.tur !== "toplanti";
const kayit = KALEM.reduce((a, k) => a + k.kayit, 0);
const incelenen = KALEM.reduce((a, k) => a + Math.min(k.kayit, ORNEK), 0);

const y = gen([26, 18, 20]);
console.log(y("kanit hacmi", "derleme oncesi", "hatta uretilirken"));
console.log(y("donem basina kanit kaydi", KALEM.length, kayit));
console.log(y("denetcinin inceledigi", KALEM.length, incelenen));
console.log(y("incelenen oran", "%100", `%${(100 * incelenen / kayit).toFixed(2)}`));

// Kisisel veri turu tasiyan kanit kalemi saklama penceresine tabidir; pencere donemden kisa
// oldugunda kalem donemin yalnizca bir bolumunu cevaplar.
const kisisel = KALEM.filter((k) => otomatik(k) && k.kisisel === "var");
const tam = KALEM.filter((k) => otomatik(k) && k.kisisel === "yok");
const elle = KALEM.filter((k) => !otomatik(k));
const pay = (100 * SAKLAMA_GUN / DONEM_GUN).toFixed(1);
const z = gen([28, 10, 16]);
console.log("\n" + z("kanitin kapsadigi ara", "kalem", "donem payi"));
console.log(z(`donem boyu (${DONEM_GUN} gun)`, tam.length, "%100"));
console.log(z(`son ${SAKLAMA_GUN} gun (saklama kisiti)`, kisisel.length, `%${pay}`));
console.log(z("tek gun (elle derleme)", elle.length, "-"));

console.log(`\nkisisel veri turu tasiyan otomatik kalem: ` +
  kisisel.map((k) => k.kod).join(", "));
console.log(`${KALEM.length} kanit kaleminden ${tam.length} kalem donemin tamamini, ` +
  `${kisisel.length} kalem son ${SAKLAMA_GUN} gunu, ${elle.length} kalem tek gunu cevapliyor`);
console.log(`kanit kaydi ${KALEM.length} -> ${kayit} (${Math.round(kayit / KALEM.length)} kat); ` +
  `incelenen kayit ${incelenen}`);
```

```
kanit hacmi                   derleme oncesi   hatta uretilirken
donem basina kanit kaydi                  24               72401
denetcinin inceledigi                     24                 458
incelenen oran                          %100               %0.63

kanitin kapsadigi ara            kalem      donem payi
donem boyu (365 gun)                12            %100
son 90 gun (saklama kisiti)          6           %24.7
tek gun (elle derleme)               6               -

kisisel veri turu tasiyan otomatik kalem: K03, K04, K05, K14, K16, K24
24 kanit kaleminden 12 kalem donemin tamamini, 6 kalem son 90 gunu, 6 kalem tek gunu cevapliyor
kanit kaydi 24 -> 72401 (3017 kat); incelenen kayit 458
```

İlk tablo ilk bakışta otomasyonun aleyhine okunur: kanıt kaydı 24'ten 72.401'e, **3.017 kata**
çıkıyor ve incelenen oran yüzde 100'den yüzde 0,63'e düşüyor. Bu okuma yanlıştır ve yanlış olma
nedeni kursun ölçüsündedir. Derleme öncesindeki yüzde 100, yirmi dört belgenin tamamının
okunduğunu söyler; o yirmi dört belgenin **hangi aralığı** anlattığını söylemez. Sonraki durumda
incelenen 458 kayıt bir örneklemdir, ama arkasındaki 72.401 kaydın tamamı sorgulanabilir
durumdadır — denetçinin bir sonraki sorusu örneklemi büyütmeyi değil, sorguyu değiştirmeyi
gerektirir. **Daha çok kayıt daha az inceleme demektir; daha az cevap demek zorunda değildir.**

Bu koşullu cümlenin koşulu ikinci tabloda görünüyor. Kişisel veri türü taşıyan altı kalem —
kimlik verilişi, denetim kaydı, üretim erişimi, veri sahibi talebi ve iki gözden geçirme kararı —
90 günlük bir saklama penceresine tabidir. Denetim dönemi 365 gündür. Bu altı kalem dönemin
**yüzde 24,7'sini** cevaplar; dönemin ilk dokuz ayı hakkındaki her soru cevapsızdır ve cevapsız
olduğu ancak soru sorulduğunda anlaşılır. Otomasyon bu kalemleri kanıtsız yapmadı; **kanıtın ömrünü
kanıt üretiminden ayrı bir kısıt haline getirdi.**

Sorgulanabilirlik koşulu da bedava değildir. Hatta üretilen bir kanıt kaydının denetimde işe
yaraması için üç alan taşıması gerekir: hangi kontrole ait olduğu, hangi ana ait olduğu ve
üretildikten sonra değiştirilmediğinin gösterilebilmesi. Bu üç alan kurulum saatinin içindedir ve
üçü de eksik olabilir. Alanları eksik bir otomatik kanıt yığını, elle derlenmiş yirmi dört
belgeden daha az cevap verir — sayısı büyüktür, sorgulanamaz ve hangi dönemi anlattığı yazmaz.
Otomasyonun kazancı hacimden değil, **bu üç alandan** gelir.

Üç satır birlikte okunduğunda tablo şudur: yirmi dört kalemin **on ikisi** dönemin tamamını,
**altısı** son doksan günü, **altısı** tek bir günü cevaplıyor. Otomasyondan önce bu üç sınıf
birbirinden ayırt edilemiyordu, çünkü hepsi aynı biçimde — dönem sonunda derlenmiş bir belge
olarak — duruyordu. Ölçmenin ilk kazancı sayının kendisi değil, **üç sınıfın ayrılmış olmasıdır.**

## Özet

- Yirmi dört kanıt kaleminin on sekizi zaten bir sistemde oluşuyordu, buna karşın yirmi dördünün
  de kanıtı dönem sonunda elle derleniyordu; açık mühendislik değil, bağlantı açığıdır.
- Üretim hatta yerleştirildiğinde elle dokunulan kalem 24'ten 9'a, yıllık derleme yükü 213
  saatten 96,2 saate iner; 170 saatlik kurulum 1,46 yılda karşılanır ve ilk yılın bakiyesi eksidir.
- Altı kalem hiçbir koşulda otomatikleşmez ve kalan elle yükün yüzde 87'sini taşır: otomasyon
  yükün değil, kalem sayısının büyük kısmını aldı.
- Kararın kaydı otomatikleşir, gerekçesi elle kalır; otomatikleşen şey kararın var olduğunun
  kanıtıdır, içeriğinin değil.
- Bedel karşı sütunda çıkar: kanıt kaydı 3.017 kat artar, incelenen oran yüzde 0,63'e iner ve
  kişisel veri türü taşıyan altı kalem 90 günlük saklama penceresi yüzünden dönemin yüzde
  24,7'sini cevaplar.

## Sonraki Adım

Kanıt üretimi hatta yerleşti ve üç sınıf ayrıldı: dönemin tamamını, son doksan günü ve tek günü
cevaplayan kalemler. Bu ölçümlerin hepsi **kanıtın var olup olmadığı** üzerineydi. Denetim
maddelerinin bir bölümü ise varlık değil, **sayı** ister: açık tanımlı süre içinde kapatıldı mı,
kapatılmayanlar ne kadar süredir açık.

Sonraki ders bu iki sayıyı bir uygulama ekibinin ölçeğinde hesaplar — ortalama düzeltme süresi ve
açık yaşı. İkisi aynı bulgu kümesinden çıkar, aynı dönemde ters yönlere gider ve ikisinin de
hesaplanabilmesi kayıtta belirli zaman damgalarının bulunmasına bağlıdır. Damga eksikse kalem
hesaba hiç girmez; girmeyen kalemler rastgele mi seçilir, yoksa hep aynı sınıftan mıdır?
