İçeriğe geç
academia.sh

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.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat