Ders 11 / 17
Politika, Standart ve Yordam
Belge hiyerarşisinin kanıt üretimi ekseninde ayrılması: 26 belgenin yalnız 10'unun denetimde kanıt üretmesi ve 9'unun ölçülebilir eşik taşımaması, 15 gereksinim zincirinin 9'unun tam olması ve 11'inin kanıtlanabilmesi, politikasız iki zincirin kayıt üreten yordamı sayesinde kanıtlanabilir kalması, eksik halkaları tamamlamanın 104 adam-günü kanıt kazandırırken 14 adam-günü yalnız görünüşü düzeltmesi ve belge sayısı ile kanıt üretimi sıralamalarının ayrışması.
İçindekiler
Önceki dersin son iki tablosunda ölçülen her şey bir belgeye dayanıyordu: envanter bir belgedir, saklama süresi bir belgede yazar, talep akışının adımları bir belgede tanımlıdır. Buraya kadar belgeler tek bir kütle gibi ele alındı. Denetim açısından ise aralarında keskin bir fark vardır ve bu ders o farkı ölçer.
Belge hiyerarşisi üç düzeylidir. Politika niyeti ve sorumluluğu bildirir; kimin neyi sahiplendiğini söyler, ölçülebilir bir eşik vermez. Standart eşiği verir: bir sayı, bir süre, bir yapılandırma değeri. Yordam adım adım bir işi tanımlar ve her koşumunda bir kayıt üretir. Kanıt yalnız son düzeyden çıkar. Bir mimari kuralı koşturulabilir bir denetime çevirmenin bedeli M20/K04’te ölçülmüştü; buradaki soru başkadır — denetçi karşısında hangi belge düzeyi bir kalem olarak sayılır, hangisi yalnız okunup geçilir.
- CE33. Belge kümesi 26 kalemdir ve sekiz konu alanına dağılmıştır. Belgeler, kayıt sayıları ve yaşlar kurgudur.
- CE34. Her belgenin bir düzeyi (politika, standart, yordam), ölçülebilir eşik taşıyıp taşımadığı, dönemde ürettiği kayıt sayısı ve son güncellemeden bu yana geçen gün sayısı vardır.
- CE35. Bir gereksinim, üç düzeyi birbirine bağlayan bir zincir olarak yazılır: politika → standart → yordam. Boş hücre eksik halkadır.
- CE36. Kanıt kuralı: bir gereksinim ancak kayıt üreten bir yordamı varsa denetimde kanıtlanabilir sayılır. Politika ve standart tek başına kanıt değildir.
- CE37. Eksik halkayı üretmenin maliyeti düzeye göre değişir: politika 3, standart 8, yordam 15, yordamın kayıt akışı 10 adam-gün (kurgu).
- CE38. Bir yordam birden çok zincirde geçebilir; o zaman kayıt kalemi de paylaşılır.
// belge/hiyerarsi.mjs — politika, standart ve yordam duzeylerinin kanit uretimi ekseninde ayrimi. // MODELDIR: bolgesel olcum agi (kurgu); belgeler, kayit sayilari ve yaslar kurgudur. export const satir = (s) => s.trim().split("\n").map((l) => l.trim().split("|")); export const gen = (B) => (...h) => h.map((v, j) => (j ? String(v).padStart(B[j]) : String(v).padEnd(B[0]))).join(""); // kod | duzey | alan | olculebilir esik | donemde urettigi kayit | son guncellemeden bu yana gun export const BELGE = Object.fromEntries(satir(` P1|politika|erisim|hayir|0|420 P2|politika|veri|hayir|0|180 P3|politika|degisiklik|hayir|0|900 P4|politika|olay|hayir|0|150 P5|politika|tedarik|hayir|0|640 P6|politika|farkindalik|hayir|0|300 S1|standart|erisim|evet|0|120 S2|standart|erisim|evet|0|540 S3|standart|veri|evet|0|90 S4|standart|veri|hayir|0|380 S5|standart|degisiklik|evet|0|75 S6|standart|olay|evet|0|200 S7|standart|tedarik|hayir|0|700 S8|standart|sureklilik|evet|0|260 S9|standart|farkindalik|evet|0|340 Y1|yordam|erisim|evet|240|60 Y2|yordam|erisim|evet|48|110 Y3|yordam|veri|evet|365|30 Y4|yordam|veri|evet|30|45 Y5|yordam|degisiklik|evet|310|20 Y6|yordam|olay|evet|18|95 Y7|yordam|olay|hayir|0|410 Y8|yordam|tedarik|evet|3|280 Y9|yordam|sureklilik|evet|4|150 Y10|yordam|farkindalik|evet|4|85 Y11|yordam|varlik|evet|12|40`) .map(([kod, duzey, alan, esik, kayit, yas]) => [kod, { kod, duzey, alan, esik: esik === "evet", kayit: +kayit, yas: +yas }])); // gereksinim | politika | standart | yordam (bos hucre eksik halkadir) export const ZINCIR = satir(` Z01 erisim onayi|P1|S1|Y1 Z02 ayricalikli erisim|P1|S2|Y2 Z03 kimlik dogrulama kurallari|P1|S2| Z04 veri siniflandirma|P2|S3|Y3 Z05 silme talebi|P2|S4|Y4 Z06 saklama suresi|P2|S3|Y3 Z07 degisiklik onayi|P3|S5|Y5 Z08 olay bildirimi|P4|S6|Y6 Z09 olay sonrasi inceleme|P4|S6|Y7 Z10 tedarikci degerlendirme|P5|S7|Y8 Z11 tedarikciden cikis|P5|| Z12 sureklilik tatbikati||S8|Y9 Z13 farkindalik egitimi|P6|S9|Y10 Z14 varlik envanteri|||Y11 Z15 kayitlarin butunlugu|||`) .map(([ad, p, s, y]) => ({ ad, kod: ad.split(" ")[0], p, s, y })); export const DUZEY = ["politika", "standart", "yordam"]; // Kanit kurali: bir gereksinim ancak kayit ureten bir yordamla kanitlanabilir. export const kanitli = (z) => Boolean(z.y) && BELGE[z.y].kayit > 0; export const kopus = (z) => !z.p ? "politika yok" : !z.s ? "standart yok" : !z.y ? "yordam yok" : BELGE[z.y].kayit === 0 ? "kayit uretmiyor" : "tam"; if (import.meta.url === `file://${process.argv[1]}`) { const hepsi = Object.values(BELGE); console.log(`model: ${hepsi.length} belge, ${ZINCIR.length} gereksinim zinciri, ` + `${new Set(hepsi.map((b) => b.alan)).size} konu alani`); const y = gen([12, 8, 11, 14, 14, 13]); console.log("\n" + y("duzey", "belge", "esikli", "kayit uretir", "donem kaydi", "ort yas gun")); for (const d of DUZEY) { const k = hepsi.filter((b) => b.duzey === d); console.log(y(d, k.length, k.filter((b) => b.esik).length, k.filter((b) => b.kayit > 0).length, k.reduce((a, b) => a + b.kayit, 0), (k.reduce((a, b) => a + b.yas, 0) / k.length).toFixed(0))); } console.log(`toplam ${hepsi.length} belgenin ${hepsi.filter((b) => b.kayit > 0).length} ` + `tanesi denetimde kanit uretiyor; ${hepsi.filter((b) => !b.esik).length} tanesi ` + `olculebilir esik tasimiyor`); const z = gen([18, 10, 12, 40]); console.log("\n" + z("zincir durumu", "sayi", "yuzde", "gereksinimler")); const DURUM = ["tam", "kayit uretmiyor", "yordam yok", "standart yok", "politika yok"]; for (const d of DURUM) { const k = ZINCIR.filter((x) => kopus(x) === d); console.log(z(d, k.length, (100 * k.length / ZINCIR.length).toFixed(0), k.map((x) => x.kod).join(" ") || "-")); } console.log(`\nkanitlanabilir gereksinim ${ZINCIR.filter(kanitli).length}/${ZINCIR.length}; ` + `politikasi olan ${ZINCIR.filter((x) => x.p).length}, standardi olan ` + `${ZINCIR.filter((x) => x.s).length}, yordami olan ${ZINCIR.filter((x) => x.y).length}`); const eski = ZINCIR.filter((x) => x.p && x.y && BELGE[x.p].yas > BELGE[x.y].yas + 180); console.log(`politikasi yordamindan 180 gunden fazla eski olan zincir ${eski.length}: ` + `${eski.map((x) => `${x.kod} (${BELGE[x.p].yas}/${BELGE[x.y].yas} gun)`).join(", ")}`); }
model: 26 belge, 15 gereksinim zinciri, 8 konu alani duzey belge esikli kayit uretir donem kaydi ort yas gun politika 6 0 0 0 432 standart 9 7 0 0 301 yordam 11 10 10 1034 120 toplam 26 belgenin 10 tanesi denetimde kanit uretiyor; 9 tanesi olculebilir esik tasimiyor zincir durumu sayi yuzde gereksinimler tam 9 60 Z01 Z02 Z04 Z05 Z06 Z07 Z08 Z10 Z13 kayit uretmiyor 1 7 Z09 yordam yok 1 7 Z03 standart yok 1 7 Z11 politika yok 3 20 Z12 Z14 Z15 kanitlanabilir gereksinim 11/15; politikasi olan 12, standardi olan 12, yordami olan 12 politikasi yordamindan 180 gunden fazla eski olan zincir 5: Z01 (420/60 gun), Z02 (420/110 gun), Z07 (900/20 gun), Z10 (640/280 gun), Z13 (300/85 gun)
Birinci tablo hiyerarşiyi düzey düzey ayırıyor ve üç sütunu birden okumak gerekiyor. Altı politikanın hiçbiri ölçülebilir eşik taşımıyor ve hiçbiri kayıt üretmiyor; dokuz standardın yedisi eşik taşıyor ama yine hiçbiri kayıt üretmiyor; on bir yordamın onu hem eşik taşıyor hem kayıt üretiyor ve dönemde 1.034 kalem çıkarıyor. Yirmi altı belgenin onu denetimde kanıt üretiyor. Kalan on altısı denetim dosyasına konabilir, okunur, kabul edilir — ama bir işin yapıldığını göstermez, yalnız yapılması gerektiğini söyler.
Yaş sütunu bunun neden böyle olduğunu açıklıyor. Politikaların ortalama yaşı 432 gün, standartların 301, yordamların 120. Sıralamanın yönü rastlantı değildir: kayıt üreten belge her koşumunda gerçeklikle karşılaşır ve tutmadığında değişir; hiç kayıt üretmeyen belge kendiliğinden hiçbir baskıya uğramaz. Son satır bunun keskin biçimini veriyor — beş zincirde politika, kendi yordamından 180 günden fazla eskidir; değişiklik alanında politika 900, yordam 20 günlüktür. Bu zincirlerde iki belge aynı işi farklı biçimde anlatıyor olabilir ve çelişki yalnız okuyan biri fark ederse görünür.
İkinci tablo zincirleri koşturuyor. On beş gereksinimin dokuzu tam zincirdir. Kalan altı zincirin koptuğu yer birbirinden çok farklıdır ve dört ayrı sonuç doğurur: Z09’un yordamı vardır ama kayıt üretmez, Z03’ün standardı vardır yordamı yoktur, Z11’in yalnız politikası vardır, Z12, Z14 ve Z15’in politikası yoktur.
Son satırdan önceki sayı bu dersin ana ayrımını veriyor: kanıtlanabilir gereksinim 11’dir, tam zincir ise 9. Aradaki iki gereksinim — süreklilik tatbikatı ve varlık envanteri — politikasızdır, ama kayıt üreten bir yordamları vardır. Denetimde bu ikisi kanıtlanır. Yani kanıt üretimi hiyerarşinin üst düzeylerine bağlı değildir; kayıt üreten bir yordam, üzerinde hiçbir politika olmasa da bir işin yapıldığını gösterir. Bunun tersi doğru değildir: on iki zincirin politikası vardır ama politikaların hiçbiri tek başına hiçbir gereksinimi kanıtlamaz.
Eksik Halkanın Bedeli
// belge/tamamlama.mjs — kopuk halkayi tamamlamanin bedeli ve alan basina kanit uretimi. import { BELGE, ZINCIR, DUZEY, gen, kanitli, kopus } from "./hiyerarsi.mjs"; // Eksik halkayi uretmenin maliyeti (adam-gun, kurgu) const GUN = { politika: 3, standart: 8, yordam: 15, kayit: 10 }; const eksikler = (z) => [...(!z.p ? ["politika"] : []), ...(!z.s ? ["standart"] : []), ...(!z.y ? ["yordam", "kayit"] : BELGE[z.y].kayit === 0 ? ["kayit"] : [])]; const maliyet = (z) => eksikler(z).reduce((a, e) => a + GUN[e], 0); const eksikZincir = ZINCIR.filter((z) => eksikler(z).length > 0); const y = gen([31, 32, 7, 15, 14]); console.log(`${eksikZincir.length} zincirde eksik halka var; kanitlanabilir gereksinim ` + `${ZINCIR.filter(kanitli).length}/${ZINCIR.length}`); console.log("\n" + y("gereksinim", "eksik halka", "gun", "kanit kazanci", "gun / kazanc")); for (const z of [...eksikZincir].sort((a, b) => maliyet(a) - maliyet(b))) { const kazanc = kanitli(z) ? 0 : 1; console.log(y(z.ad, eksikler(z).join("+"), maliyet(z), kazanc, kazanc ? maliyet(z) : "kazanc yok")); } const kanitsiz = eksikZincir.filter((z) => !kanitli(z)); const gorunus = eksikZincir.filter((z) => kanitli(z)); console.log(`\nkanit kazandiran ${kanitsiz.length} zincirin toplam bedeli ` + `${kanitsiz.reduce((a, z) => a + maliyet(z), 0)} adam-gun; hicbir kanit kazandirmayan ` + `${gorunus.length} zincirin bedeli ${gorunus.reduce((a, z) => a + maliyet(z), 0)} adam-gun`); console.log(`ucuzdan pahaliya siralama: ` + `${[...eksikZincir].sort((a, b) => maliyet(a) - maliyet(b)).map((z) => z.kod).join(" < ")}`); console.log(`kanit kazancina gore siralama: ` + `${[...eksikZincir].sort((a, b) => (kanitli(a) ? 1 : 0) - (kanitli(b) ? 1 : 0) || maliyet(a) - maliyet(b)).map((z) => z.kod).join(" < ")}`); // Alan basina belge sayisi ile kanit uretimi const alanlar = [...new Set(Object.values(BELGE).map((b) => b.alan))]; const belgeSay = (a) => Object.values(BELGE).filter((b) => b.alan === a); const z2 = gen([13, 9, 12, 13, 13, 12]); console.log("\n" + z2("konu alani", "belge", ...DUZEY, "donem kaydi")); for (const a of alanlar) { const k = belgeSay(a); console.log(z2(a, k.length, ...DUZEY.map((d) => k.filter((b) => b.duzey === d).length), k.reduce((x, b) => x + b.kayit, 0))); } const sB = [...alanlar].sort((a, b) => belgeSay(b).length - belgeSay(a).length || a.localeCompare(b)); const sK = [...alanlar].sort((a, b) => belgeSay(b).reduce((x, i) => x + i.kayit, 0) - belgeSay(a).reduce((x, i) => x + i.kayit, 0) || a.localeCompare(b)); console.log(`\nbelge sayisina gore ilk uc : ${sB.slice(0, 3).join(", ")}`); console.log(`kanit uretimine gore ilk uc: ${sK.slice(0, 3).join(", ")}`); console.log(`ortak: ${sK.slice(0, 3).filter((a) => sB.slice(0, 3).includes(a)).length}/3; ` + `tek belgeli varlik alani ${belgeSay("varlik").reduce((x, b) => x + b.kayit, 0)} kayit, ` + `dort belgeli olay alani ${belgeSay("olay").reduce((x, b) => x + b.kayit, 0)} kayit uretiyor`); console.log(`kopus noktalari: ` + `${eksikZincir.map((z) => `${z.kod} ${kopus(z)}`).join("; ")}`);
6 zincirde eksik halka var; kanitlanabilir gereksinim 11/15 gereksinim eksik halka gun kanit kazanci gun / kazanc Z12 sureklilik tatbikati politika 3 0 kazanc yok Z09 olay sonrasi inceleme kayit 10 1 10 Z14 varlik envanteri politika+standart 11 0 kazanc yok Z03 kimlik dogrulama kurallari yordam+kayit 25 1 25 Z11 tedarikciden cikis standart+yordam+kayit 33 1 33 Z15 kayitlarin butunlugu politika+standart+yordam+kayit 36 1 36 kanit kazandiran 4 zincirin toplam bedeli 104 adam-gun; hicbir kanit kazandirmayan 2 zincirin bedeli 14 adam-gun ucuzdan pahaliya siralama: Z12 < Z09 < Z14 < Z03 < Z11 < Z15 kanit kazancina gore siralama: Z09 < Z03 < Z11 < Z15 < Z12 < Z14 konu alani belge politika standart yordam donem kaydi erisim 5 1 2 2 288 veri 5 1 2 2 395 degisiklik 3 1 1 1 310 olay 4 1 1 2 18 tedarik 3 1 1 1 3 farkindalik 3 1 1 1 4 sureklilik 2 0 1 1 4 varlik 1 0 0 1 12 belge sayisina gore ilk uc : erisim, veri, olay kanit uretimine gore ilk uc: veri, degisiklik, erisim ortak: 2/3; tek belgeli varlik alani 12 kayit, dort belgeli olay alani 18 kayit uretiyor kopus noktalari: Z03 yordam yok; Z09 kayit uretmiyor; Z11 standart yok; Z12 politika yok; Z14 politika yok; Z15 politika yok
Birinci tablo, ucuzdan pahalıya dizildiğinde en yukarıda iki tuzak taşıyor. Süreklilik tatbikatı 3 adam-günde, varlık envanteri 11 adam-günde “tam zincir” hâline gelir; ikisi de hiçbir yeni kanıt üretmez, çünkü ikisi de zaten kanıtlanabilir durumdadır. Toplam 14 adam-gün, denetim raporundaki tablo görüntüsünü düzeltir ve denetimde gösterilen kalem sayısını değiştirmez. Buna karşılık olay sonrası incelemenin kayıt akışını kurmak 10 adam-gündür ve kanıtlanamayan bir gereksinimi kanıtlanabilir yapar.
İki sıralama tam olarak burada ayrışıyor. Ucuzdan pahalıya sıra Z12 ile başlıyor; kanıt kazancına göre sıra Z09 ile başlıyor ve Z12 ile Z14 en sona düşüyor. Eksik halkaları düzeye bakarak tamamlamak — “önce politikaları yazalım, hiyerarşi tamamlansın” — 14 adam-günü yalnız görünüşe harcamak demektir. Kanıt kazandıran dört zincirin toplam bedeli 104 adam-gündür ve bunun 36’sı tek bir zincire, hiçbir düzeyi olmayan kayıt bütünlüğüne gider.
Son tablo aynı ayrışmayı konu alanı düzeyinde gösteriyor. Belge sayısına göre ilk üç erişim, veri ve olay alanlarıdır; kanıt üretimine göre ilk üç veri, değişiklik ve erişimdir. Olay alanı dört belge taşıyor ve dönemde 18 kayıt üretiyor; varlık alanının tek bir belgesi var ve 12 kayıt üretiyor. Bir alanda kaç belge olduğu, o alanda ne kadar kanıt üretildiği hakkında bilgi vermiyor. Belge sayımı bir çaba ölçüsüdür; kayıt sayımı bir sonuç ölçüsüdür ve bu iki sayı arasında yapısal bir bağ yoktur.
Özet
- Belge hiyerarşisi üç düzeylidir: politika niyeti bildirir, standart ölçülebilir bir eşik verir, yordam koşumunda kayıt üretir. Denetimde kanıt yalnız son düzeyden çıkar.
- Yirmi altı belgenin onu kanıt üretiyor; altı politikanın hiçbiri eşik taşımıyor ya da kayıt üretmiyor, dokuz standardın yedisi eşik taşıyor ama hiçbiri kayıt üretmiyor.
- Kayıt üreten belge daha tazedir: politikaların ortalama yaşı 432, yordamların 120 gündür. Beş zincirde politika kendi yordamından 180 günden fazla eskidir.
- Kanıtlanabilir gereksinim 11, tam zincir 9’dur: iki gereksinim politikasız olduğu hâlde kayıt üreten yordamı sayesinde kanıtlanır. Bunun tersi doğru değildir — hiçbir politika tek başına bir gereksinimi kanıtlamaz.
- Eksik halkaları düzeye göre tamamlamak yanıltır: 14 adam-gün iki zinciri “tam” gösterir ve hiçbir yeni kanıt üretmez; kanıt kazandıran dört zincirin bedeli 104 adam-gündür ve en ucuzu 10 gündür.
- Bir konu alanındaki belge sayısı, o alanın kanıt üretimi hakkında bilgi vermiyor: dört belgeli olay alanı 18, tek belgeli varlık alanı 12 kayıt üretiyor.
Sonraki Adım
Bu dersin bütün sayıları bir kabule dayanıyor: zincirin dolu olduğu söylenen hücreleri gerçekten doludur, kayıt üretiyor denen yordam gerçekten üretiyordur, 900 günlük politika hâlâ geçerlidir. Bu kabulün kaynağı bellidir — tabloyu dolduran, belgeleri yazan ve kayıtların üretildiğini bildiren taraf aynı taraftır. Beş ders boyunca ölçülen her şey kurumun kendi beyanı üzerinde koşturuldu.
Sonraki ders konuyu kapatır ve bu kabulü kaldırır: aynı kişi hem kontrolü kurup hem denetlerse kaç bulgu hiç görünmez, kuran ile denetleyeni ayırmak kaç kalemi ortaya çıkarır ve bu ayrımın kendisi kaç kalem ek iş getirir. Bağımsız güvence bir sıfat değil, sayılabilir bir düzenlemedir.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.