Ders 09 / 17
Sektörel Uyumluluk Gereksinimleri
Uyumluluk gereksinimlerinin veri türüne bağlanması ve kapsam daraltmanın kontrol tarafındaki karşılığı: 16 sistem ve 4 veri türünde tür başına ek kontrollerin ayrı ayrı toplandığında 29, birleşimde 20 çıkması, 9 çok türlü sistemin 129 kontrol yükü taşıması, bir türü bütün sistemlerden kaldırmanın 4 ve 3 kontrol düşürmesine karşılık kısmen kaldırmanın hiç kontrol düşürmemesi, artık kontrollerin geri gelmesi ve üç ayrı ölçünün dört eylemi üç farklı sırayla dizmesi.
İçindekiler
Önceki dersin matrisi gereksinimleri kaynaklarından bağımsız aldı: her satır bir cümleydi. Oysa bir gereksinim listesinin uzunluğunu belirleyen şey çoğu zaman kurumun ne yaptığı değil, hangi veriye dokunduğudur. Aynı mimariyi taşıyan iki sistemden biri ödeme kartı verisi işliyorsa, öteki işlemiyorsa, ikisinin kontrol listesi eşit olmaz.
Bu ders gereksinimi veri türüne bağlar. Türler burada veri türü olarak anılır — ödeme kartı verisi, sağlık verisi, kişisel veri, ölçüm verisi — ve hiçbir düzenleme, kurum ya da sektör birliği adı yazılmaz. Ölçülecek üç şey vardır: bir tür kaç ek kontrol getiriyor, aynı sistemde iki tür birden bulunduğunda listeler nasıl birikiyor, ve kapsamı daraltmanın en sert biçimi — veriyi hiç tutmamak — kaç kontrolü gerçekten ortadan kaldırıyor.
- CE21. Envanter kurgu bölgesel ölçüm ağından alınmış 16 sistemdir. Sistemler, veri türleri ve kontrol sayıları kurgudur.
- CE22. Dört veri türü vardır ve her tür bir ek kontrol kümesi getirir. Kümeler kesişir: bir kontrol birden çok türde geçebilir.
- CE23. Bir sistemin kontrol listesi, taşıdığı türlerin kontrol kümelerinin birleşimidir; aynı kontrol iki türden geliyorsa bir kez sayılır.
- CE24. Her kontrol dönemde belirli sayıda kanıt kalemi üretir ve bunu her sistem için ayrı üretir; toplam kanıt hacmi sistem-kontrol çiftleri üzerinden toplanır.
- CE25. Bir kontrol ancak taşıyan hiçbir sistem kalmadığında ortadan kalkar. Türü bazı sistemlerden kaldırmak kontrol listesini kısaltmaz.
- CE26. Veriyi kaldırmanın artık kontrolü olabilir: veriyi dışarı taşıyan sınırın kendisi ya da devredilen tarafın değerlendirilmesi yeni bir kontrol olarak geri gelir.
// sektor/veri.mjs — sektorel uyumluluk gereksinimleri veri turune baglanir. // MODELDIR: bolgesel olcum agi (kurgu); sistemler, kontroller ve sayilar 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 | kontrol | donemde uretilen kanit kalemi export const KONTROL = Object.fromEntries(satir(` C01|beklemede sifreleme|365 C02|aktarimda sifreleme|365 C03|ag bolutleme|12 C04|belirtec sinirinin dogrulanmasi|52 C05|erisim kaydi|365 C06|ayricalikli erisim onayi|48 C07|saklama suresi kosumu|365 C08|silme istegi akisi|30 C09|veri envanteri tazeleme|4 C10|veri akis haritasi|2 C11|riza kaydi|120 C12|amac sinirlama incelemesi|4 C13|ozel nitelikli veriye ek erisim onayi|24 C14|personel gizlilik taahhudu|1 C15|ek farkindalik egitimi|2 C16|saticinin degerlendirilmesi|3 C17|donemsel sizma testi|1 C18|gunluk butunlugu|365 C19|olcum dogrulugu mutabakati|12 C20|test verisi maskeleme|12`) .map(([kod, ad, kalem]) => [kod, { kod, ad, kalem: +kalem }])); // Veri turu | o turun getirdigi ek kontroller. Duzenleme adi yazilmaz; tur adi yazilir. export const TUR = Object.fromEntries(satir(` odeme-karti|C01 C02 C03 C04 C05 C06 C16 C17 C20 saglik|C01 C05 C07 C11 C12 C13 C14 C15 kisisel|C01 C02 C05 C07 C08 C09 C10 C11 C12 olcum|C05 C18 C19`).map(([t, k]) => [t, k.split(" ")])); // sistem | tasidigi veri turleri export const SISTEM = satir(` fatura-uygulamasi|odeme-karti kisisel fatura-veritabani|odeme-karti kisisel odeme-gecidi-baglantisi|odeme-karti abone-portali|kisisel cagri-merkezi-kaydi|kisisel saglik saha-ekip-uygulamasi|kisisel saglik is-sagligi-kaydi|saglik toplayici-servis|olcum dogrulayici-servis|olcum saha-sayac-agi|olcum raporlama-ambari|odeme-karti kisisel olcum yedek-deposu|odeme-karti kisisel saglik olcum gunluk-toplama-hatti|kisisel olcum kimlik-saglayici|kisisel arsiv-deposu|kisisel saglik test-ortami|odeme-karti kisisel`).map(([ad, t]) => ({ ad, tur: t.split(" ") })); export const kontrolleri = (turler) => new Set(turler.flatMap((t) => TUR[t])); export const gereken = (sistemler) => kontrolleri([...new Set(sistemler.flatMap((s) => s.tur))]); if (import.meta.url === `file://${process.argv[1]}`) { const turAd = Object.keys(TUR); console.log(`model: ${SISTEM.length} sistem, ${turAd.length} veri turu, ` + `${Object.keys(KONTROL).length} kontrol`); const y = gen([13, 9, 11, 10, 12, 14]); console.log("\n" + y("veri turu", "sistem", "ek kontrol", "ozgun", "paylasilan", "kanit kalemi")); for (const t of turAd) { const s = SISTEM.filter((x) => x.tur.includes(t)); const ozgun = TUR[t].filter((k) => !turAd.some((o) => o !== t && TUR[o].includes(k))); console.log(y(t, s.length, TUR[t].length, ozgun.length, TUR[t].length - ozgun.length, TUR[t].reduce((a, k) => a + KONTROL[k].kalem, 0))); } const topla = turAd.reduce((a, t) => a + TUR[t].length, 0); const birlesim = gereken(SISTEM); console.log(`\ntur basina kontroller ayri ayri toplandiginda ${topla}; birlesim ` + `${birlesim.size} — ${topla - birlesim.size} kontrol birden cok turde tekrar ediyor`); const z = gen([25, 8, 11, 14, 12]); console.log("\n" + z("en yuklu sistem", "tur", "kontrol", "kanit kalemi", "tek turde")); const yuklu = [...SISTEM].sort((a, b) => kontrolleri(b.tur).size - kontrolleri(a.tur).size || b.tur.length - a.tur.length).slice(0, 4); for (const s of yuklu) { const k = [...kontrolleri(s.tur)]; const tek = k.filter((x) => s.tur.filter((t) => TUR[t].includes(x)).length === 1).length; console.log(z(s.ad, s.tur.length, k.length, k.reduce((a, x) => a + KONTROL[x].kalem, 0), tek)); } const cok = SISTEM.filter((s) => s.tur.length > 1); console.log(`\ncok turlu sistem ${cok.length}/${SISTEM.length}; bunlarin kontrol yuku ` + `${cok.reduce((a, s) => a + kontrolleri(s.tur).size, 0)} kalem, tek turlu ` + `${SISTEM.length - cok.length} sistemin yuku ` + `${SISTEM.filter((s) => s.tur.length === 1).reduce((a, s) => a + TUR[s.tur[0]].length, 0)}`); }
model: 16 sistem, 4 veri turu, 20 kontrol veri turu sistem ek kontrol ozgun paylasilan kanit kalemi odeme-karti 6 9 6 3 1223 saglik 5 8 3 5 1246 kisisel 11 9 3 6 1620 olcum 6 3 2 1 742 tur basina kontroller ayri ayri toplandiginda 29; birlesim 20 — 9 kontrol birden cok turde tekrar ediyor en yuklu sistem tur kontrol kanit kalemi tek turde yedek-deposu 4 20 2152 14 raporlama-ambari 3 17 2125 14 fatura-uygulamasi 2 15 1748 12 fatura-veritabani 2 15 1748 12 cok turlu sistem 9/16; bunlarin kontrol yuku 129 kalem, tek turlu 7 sistemin yuku 44
İlk tablonun okunacak yeri dördüncü ve beşinci sütunlardır. Ödeme kartı verisi dokuz ek kontrol getiriyor ve bunların altısı yalnız o türe özgüdür; sağlık verisi sekiz kontrol getiriyor ama yalnız üçü özgündür, beşi başka türlerle paylaşılır. Bu, uyum çalışmasının en çok yanlış hesaplanan kalemidir: türler ayrı ayrı toplandığında 29 kontrol çıkıyor, birleşim ise 20’dir. Dokuz kontrol birden çok türde tekrar ediyor, yani ikinci veri türünü almanın kontrol maliyeti birincisinden düşüktür. Beklemede şifreleme üç türde birden geçer; bir kez kurulup üç yükümlülüğe birden yanıt verir.
Paylaşımın ters yüzü de sayılmalıdır. Bir kontrol birden çok türden geliyorsa, o kontrolü gevşetmenin bedeli de birden çok yükümlülüğe yayılır: erişim kaydı dört türün dördünde birden geçiyor, dolayısıyla tek bir kayıt akışının bozulması dört ayrı gereksinimi aynı anda kanıtsız bırakır. Önceki dersin kaldıraç ölçüsü burada veri türü tarafından yeniden üretiliyor — ortak kontrol hem tasarrufun hem kırılganlığın kaynağıdır.
İkinci tablo bu birikimi sistem düzeyinde gösteriyor. Yedek deposu dört türü birden taşıdığı için yirmi kontrolün tamamını üzerine alıyor; envanterdeki hiçbir sistem bu kadar yük taşımıyor ve yedek deposu kendi başına hiçbir iş yapmıyor — yalnız başka sistemlerin verisini tutuyor. Raporlama ambarı ve test ortamı da aynı sınıftandır. Veri türü listeleri bu üç yerde birikiyor, çünkü üçü de veriyi kaynağından bağımsız topluyor. Son satır aynı şeyi toplu olarak söylüyor: dokuz çok türlü sistem 129 kontrol yükü taşırken, yedi tek türlü sistem 44 taşıyor.
Veriyi Hiç Tutmamak
Kontrol listesini kısaltmanın en sert yolu veriyi hiç tutmamaktır: türü sistemden çıkarmak, dışarıya devretmek ya da tanımlayıcıları kaldıracak biçimde toplulaştırmak. Aşağıdaki dosya dört eylemi aynı envanterde koşturuyor ve her birinin gerçekten kaç kontrolü düşürdüğünü sayıyor.
// sektor/daraltma.mjs — veriyi hic tutmamanin kac kontrolu ortadan kaldirdigi. import { KONTROL, TUR, SISTEM, kontrolleri, gereken, gen } from "./veri.mjs"; // Bir sistemin donemde urettigi kanit kalemi: tasidigi turlerin kontrolleri const hacim = (kume) => kume.reduce((a, s) => a + [...kontrolleri(s.tur)].reduce((x, k) => x + KONTROL[k].kalem, 0), 0); // eylem | kaldirilan veri turu | dokunulan sistemler ("*" = tumu) | artik kontrol | gun const EYLEM = [ ["belirtec ve gecidin devri", "odeme-karti", "*", ["C04", "C16"], 30], ["saglik kaydinin devri", "saglik", "*", ["C16"], 14], ["raporda toplulastirma", "kisisel", ["raporlama-ambari", "yedek-deposu", "test-ortami", "arsiv-deposu"], ["C09"], 20], ["olcumun sahada ozetlenmesi", "olcum", ["raporlama-ambari", "yedek-deposu", "gunluk-toplama-hatti"], [], 10], ]; const ONCE_K = gereken(SISTEM), ONCE_H = hacim(SISTEM); const uygula = (tur, hedef, artik) => { const yeni = SISTEM.map((s) => (hedef === "*" || hedef.includes(s.ad)) ? { ...s, tur: s.tur.filter((t) => t !== tur) } : s); const k = gereken(yeni); for (const a of artik) k.add(a); return { yeni, k }; }; console.log(`baslangic: ${ONCE_K.size} kontrol, donemde ${ONCE_H.toLocaleString("tr-TR")} ` + `kanit kalemi, ${SISTEM.length} sistem`); const y = gen([28, 10, 10, 9, 14, 7, 12]); console.log("\n" + y("eylem", "sistem", "kontrol", "kalkan", "kanit kalemi", "gun", "kalem / gun")); const sonuc = []; for (const [ad, tur, hedef, artik, gun] of EYLEM) { const { yeni, k } = uygula(tur, hedef, artik); const h = hacim(yeni) + artik.reduce((a, x) => a + KONTROL[x].kalem, 0); const dokunulan = SISTEM.filter((s) => (hedef === "*" || hedef.includes(s.ad)) && s.tur.includes(tur)).length; sonuc.push({ ad, kalkan: ONCE_K.size - k.size, dusen: ONCE_H - h, gun }); console.log(y(ad, dokunulan, k.size, ONCE_K.size - k.size, h.toLocaleString("tr-TR"), gun, ((ONCE_H - h) / gun).toFixed(0))); } const sira = (f) => [...sonuc].sort((a, b) => f(b) - f(a)).map((s) => s.ad); const sK = sira((s) => s.kalkan), sH = sira((s) => s.dusen), sV = sira((s) => s.dusen / s.gun); console.log(`\nkalkan kontrole gore : ${sK.join(" > ")}`); console.log(`dusen kaleme gore : ${sH.join(" > ")}`); console.log(`birim gune gore : ${sV.join(" > ")}`); // Turu butun sistemlerden kaldirmakla kismen kaldirmak arasindaki fark const kismi = sonuc.filter((s) => s.kalkan === 0); console.log(`\nturu butun sistemlerden kaldiran ${sonuc.length - kismi.length} eylem kontrol ` + `dusuruyor; kismen kaldiran ${kismi.length} eylem hic kontrol dusurmuyor ama ` + `${kismi.reduce((a, s) => a + s.dusen, 0).toLocaleString("tr-TR")} kanit kalemi eksiltiyor`); const artik = ["C04", "C16"]; const ikisi = uygula("odeme-karti", "*", artik).yeni .map((s) => ({ ...s, tur: s.tur.filter((t) => t !== "saglik") })); const kIki = gereken(ikisi); for (const a of artik) kIki.add(a); console.log(`iki turu birden kaldirmak: ${ONCE_K.size} kontrolun ${ONCE_K.size - kIki.size} ` + `tanesi ortadan kalkiyor, ${kIki.size} tanesi kaliyor; artik kontrol olarak ` + `${artik.map((k) => KONTROL[k].ad).join(" ve ")} geri geliyor`); console.log(`kalan ${kIki.size} kontrolun ${TUR["kisisel"].length} tanesi kisisel veri ` + `turunden geliyor; donemdeki kanit kalemi ` + `${[...kIki].reduce((a, k) => a + KONTROL[k].kalem, 0).toLocaleString("tr-TR")}`);
baslangic: 20 kontrol, donemde 24.394 kanit kalemi, 16 sistem eylem sistem kontrol kalkan kanit kalemi gun kalem / gun belirtec ve gecidin devri 6 16 4 22.586 30 60 saglik kaydinin devri 5 17 3 23.043 14 97 raporda toplulastirma 4 20 0 22.911 20 74 olcumun sahada ozetlenmesi 3 20 0 23.263 10 113 kalkan kontrole gore : belirtec ve gecidin devri > saglik kaydinin devri > raporda toplulastirma > olcumun sahada ozetlenmesi dusen kaleme gore : belirtec ve gecidin devri > raporda toplulastirma > saglik kaydinin devri > olcumun sahada ozetlenmesi birim gune gore : olcumun sahada ozetlenmesi > saglik kaydinin devri > raporda toplulastirma > belirtec ve gecidin devri turu butun sistemlerden kaldiran 2 eylem kontrol dusuruyor; kismen kaldiran 2 eylem hic kontrol dusurmuyor ama 2.614 kanit kalemi eksiltiyor iki turu birden kaldirmak: 20 kontrolun 7 tanesi ortadan kalkiyor, 13 tanesi kaliyor; artik kontrol olarak belirtec sinirinin dogrulanmasi ve saticinin degerlendirilmesi geri geliyor kalan 13 kontrolun 9 tanesi kisisel veri turunden geliyor; donemdeki kanit kalemi 2.052
Dördüncü sütun dersin sert sonucudur. Kişisel veriyi dört sistemden ve ölçüm verisini üç sistemden kaldıran eylemler hiçbir kontrolü ortadan kaldırmıyor. Nedeni CE25’tir: bir kontrol ancak onu gerektiren hiçbir sistem kalmadığında düşer; kişisel veri on bir sistemde geçtiği için dördünden çıkarmak listeyi kısaltmaz. Bu iki eylem yine de işe yarıyor — 2.614 kanıt kalemi eksiltiyorlar — ama kazandıkları şey kontrol listesi değil, kanıt hacmidir. İki farklı kazanç ve iki farklı karar; ikisini tek başlıkta toplamak, “veriyi azalttık, uyum yükümüz düştü” gibi ölçülemeyen bir cümle üretir.
Türü bütün sistemlerden kaldıran iki eylem gerçekten kontrol düşürüyor: ödeme kartı verisi dört, sağlık verisi üç. Ama düşen sayı türün getirdiği sayıdan azdır. Ödeme kartı verisi dokuz kontrol getirmişti; kaldırıldığında altı özgün kontrol düşüyor, ardından ikisi artık kontrol olarak geri geliyor — veriyi dışarıda tutan belirteç sınırının doğrulanması ve devredilen tarafın değerlendirilmesi. Veriyi devretmek yükümlülüğü sıfırlamaz; onu sınırın kendisine taşır.
Üç sıralama üç farklı liste veriyor ve hiçbiri yanlış değildir. Kalkan kontrole göre belirteç eylemi birincidir; birim güne göre en son sıradadır ve ölçümün sahada özetlenmesi öne geçer. Otuz günlük bir çabayla dört kontrol düşürmek ile on günlük bir çabayla hiç kontrol düşürmeyip 1.131 kanıt kalemi eksiltmek arasındaki seçim, kurumun neyi darlık olarak yaşadığına bağlıdır: denetim listesinin uzunluğu mu, yoksa kanıt derleme emeği mi. Son satır sınırı yazıyor — iki türü birden kaldırdıktan sonra bile yirmi kontrolün on üçü ayakta kalır ve dokuzu kişisel veri türünden gelir.
Özet
- Uyumluluk gereksinimlerinin bir bölümü kurumun ne yaptığından değil, hangi veri türüne dokunduğundan doğar; dört tür sırasıyla 9, 8, 9 ve 3 ek kontrol getiriyor.
- Türler ayrı ayrı toplandığında 29, birleşimde 20 kontrol çıkıyor: dokuz kontrol birden çok türde tekrar ettiği için ikinci veri türünün kontrol maliyeti birincisinden düşüktür.
- Kontrol yükü, veriyi kaynağından bağımsız toplayan sistemlerde birikiyor: yedek deposu dört türü birden taşıdığı için yirmi kontrolün tamamını üzerine alıyor; dokuz çok türlü sistemin yükü 129, yedi tek türlü sistemin yükü 44.
- Bir kontrol ancak onu gerektiren hiçbir sistem kalmadığında düşer: kişisel veriyi dört, ölçüm verisini üç sistemden kaldırmak hiçbir kontrolü ortadan kaldırmıyor, yalnız 2.614 kanıt kalemi eksiltiyor.
- Türü bütünüyle kaldırmak dört ve üç kontrol düşürüyor, ama artık kontroller geri geliyor: veriyi devretmek yükümlülüğü sıfırlamaz, sınırın kendisine taşır. İki tür birden kaldırıldığında yirmi kontrolün on üçü ayakta kalıyor.
- Kalkan kontrol, düşen kanıt kalemi ve birim güne düşen kazanç üç farklı sıralama üretiyor; en çok kontrol düşüren eylem birim çabada sonuncudur.
Sonraki Adım
Bu dersin dört türünden biri diğerlerinden farklı davrandı: kişisel veri on bir sistemde geçiyor, hiçbir daraltmayla ortadan kalkmıyor ve kaldırma denemelerinden sonra bile kalan on üç kontrolün dokuzunu tek başına taşıyor. Nedeni yalnız yaygınlığı değildir. Öteki türlerde yükümlülük veriyi tutan tarafa yazılır; kişisel veride yükümlülüğün bir bölümü verisi tutulan kişiye bir hak olarak verilir ve o hak istendiği anda kullanılır.
Sonraki ders bu hakları kalem olarak sayar: kaç ayrı talep türü var, bir talep karşılanırken kaç sistemde arama yapılıyor, envanterde olmayan bir sistem yüzünden kaç talep eksik yanıtlanıyor. İşleme ilkeleri de aynı biçimde ele alınır — her ilke bir kontrole ve bir kanıt kalemine bağlanır.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.