İçeriğe geç
academia.sh

Ders 15 / 18

Çalışma Yordamları

Yordamın kendisi ölçülür: dört yordamın 33 adımı, 6 karar noktası ve 14 otomatikleştirilebilir adımı, aynı 40 olayın yordamsız 203,1 dakikada 113 hata adımıyla, yazılı yordamla 72,8 dakikada 40 hata adımıyla kapanması, iki dönem eskiyen yordamın kapanışı yalnız 83,3 dakikaya taşırken hata adımını 161'e çıkarması ve dört dönem sonra 33 adımın 24'ünün geçersiz olup ilk koşumlarda 384 dakika gecikme üretmesi.

İçindekiler

Nöbet düzeni “kim” ve “ne zaman” sorularını yanıtladı, sınıflandırma “hangi düzeyde” sorusunu ekledi. Doğru kişi doğru anda uyandığında elinde tek bir soru kalır: hangi adımla.

Çalışma yordamı, yinelenen bir müdahalenin adım adım yazılmış hâlidir. M20/K05 İşletim Devri dersi yazılmamış yordamın devir üzerindeki bedelini saydı; burada yordam yazılıdır ve ölçülen yordamın kendisidir: kaç adım, kaç karar noktası, kaçı makineye verilebilir, ve yazıldıktan bir süre sonra kaçı hâlâ doğru.

Yordam Bir Belge Değil, Bir Adım Dizisi

Örnek yine kursun kurgu bölgesel ölçüm ağıdır: su sayacı okuma toplayıcı, doğrulayıcı, faturalama ve iş emri servisleri. Ağ da yordamlar da kurgudur; gerçek bir yordam metni ya da koşum geçmişi yoktur.

OY13: Dört yinelenen müdahale için birer yordam yazılır; adım türü gözle, doğrula, müdahale ya da karardır ve karar noktası hiçbir koşulda otomatikleştirilemez. OY14: Her adım bir dayanağa bağlıdır — gösterge adı, seri adı, eşik değeri, dosya yolu, bayrak adı, kuyruk adı, kimlik alanı, sürüm etiketi. Dayanak değişirse o dayanağa bağlı her adım geçersizdir. OY15: Yordamsız koşumda adımı bulmak süreyi 2,8 katına çıkarır ve adım başına hata olasılığı 0,34’tür; yazılı yordamla 0,08. Hatalı adımın düzeltilmesi 9 dakikadır. OY16: Karar noktasında yanlış dal seçme olasılığı 0,18, bedeli 12 dakikadır. OY17: Geçersiz adım ilk koşumda 16 dakika gecikme üretir; sonraki koşumlarda bilindiği için 3 dakikada dolanılır, ama her iki durumda da hata adımı sayılır. OY18: Her dönemde iki dayanak değişir; aynı yordam kümesi 40 olayda koşulur.

// yordam/yordam.mjs — kurgu bolgesel olcum aginin calisma yordami modeli (model): gercek bir
// yordam metni, olay kaydi ya da kosum gecmisi yok. Uretec kendi yazildi, tohum gorunur.

export const SERVIS = ["okuma-toplayici", "dogrulayici", "faturalama", "is-emri"];
export const TUR = ["gozle", "dogrula", "mudahale", "karar"];
// Adimin bagli oldugu sistem gercegi. Bu dayanak degisirse adim gecersiz olur.
export const DAYANAK = ["gosterge-adi", "seri-adi", "esik-degeri", "dosya-yolu", "bayrak-adi",
  "kuyruk-adi", "kimlik-alani", "surum-etiketi"];

export const KESIF = 2.8;        // yordamsiz kosumda adimi bulmanin sure carpani
export const HATA = { yok: 0.34, var: 0.08 };   // adim basina hata olasiligi
export const DUZELT = 9;         // hatali adimin duzeltilmesi (dakika)
export const YANLIS_DAL = 0.18;  // karar noktasinda yanlis dal secme olasiligi
export const DAL_CEZA = 12;      // yanlis dalin bedeli (dakika)
export const ILK_CEZA = 16;      // gecersiz adim ilk kosumda: denenir, tutmaz, elle bulunur
export const SONRAKI_CEZA = 3;   // ayni adim sonraki kosumlarda: bilinir, dolanilir
export const DEGISIM = 2;        // her donemde sistemde degisen dayanak sayisi

export function uretec(tohum) {
  let x = tohum >>> 0 || 1;
  return () => { x ^= x << 13; x >>>= 0; x ^= x >>> 17; x ^= x << 5; x >>>= 0;
    return x / 4294967296; };
}
const sec = (r, a) => a[Math.floor(r() * a.length)];

// Her servis icin bir yordam: 6-10 adim. Otomatiklestirilebilirlik adimin turune baglidir;
// karar noktasi hicbir kosulda otomatiklestirilemez.
export function yordamlar(tohum) {
  const r = uretec(tohum);
  return SERVIS.map((servis) => {
    const adet = 6 + Math.floor(r() * 5);
    const adim = [];
    for (let i = 0; i < adet; i++) {
      const u = r();
      const tur = u < 0.22 ? "gozle" : u < 0.52 ? "dogrula" : u < 0.82 ? "mudahale" : "karar";
      const otomatik = tur === "karar" ? false
        : r() < (tur === "mudahale" ? 0.40 : 0.75);
      adim.push({ tur, otomatik, dakika: 2 + Math.floor(r() * 11),
        dayanak: sec(r, DAYANAK) });
    }
    return { servis, adim };
  });
}

// mod: "yok" yordamsiz, "var" yazili yordamla, "oto" otomatiklestirilebilir adimlar makinede.
// gecersiz: gecersiz dayanaklar. gorulen: daha once bir kosumda ortaya cikmis gecersiz adimlar;
// gecersiz adim yalnizca ILK kosumda tam bedelini uretir, sonrakilerde dolanilir.
export function kos(y, mod, r, gecersiz = new Set(), gorulen = new Set()) {
  let dakika = 0, hataAdim = 0, ilkGecikme = 0, atlanan = 0;
  for (const [i, a] of y.adim.entries()) {
    const oto = mod === "oto" && a.otomatik;
    if (oto) { atlanan++; } else { dakika += a.dakika * (mod === "yok" ? KESIF : 1); }
    if (gecersiz.has(a.dayanak)) {      // yordam sistemin gerisinde kaldi
      const anahtar = `${y.servis}:${i}`;
      if (gorulen.has(anahtar)) { dakika += SONRAKI_CEZA; hataAdim++; continue; }
      gorulen.add(anahtar);
      dakika += ILK_CEZA; ilkGecikme += ILK_CEZA; hataAdim++;
      continue;
    }
    if (oto) continue;                  // makinede kosan adim yanilmaz
    if (r() < HATA[mod === "yok" ? "yok" : "var"]) { dakika += DUZELT; hataAdim++; }
    if (a.tur === "karar" && r() < YANLIS_DAL) { dakika += DAL_CEZA; hataAdim++; }
  }
  return { dakika, hataAdim, ilkGecikme, atlanan };
}

// Eskime: her donemde DEGISIM dayanak degisir. Degisen dayanaga bagli her adim gecersizdir.
export function eskit(tohum, donem) {
  const r = uretec(tohum), g = new Set();
  for (let d = 0; d < donem; d++)
    for (let i = 0; i < DEGISIM; i++) g.add(sec(r, DAYANAK));
  return g;
}
// yordam/olc.mjs — yordamin kendisi: adim, karar noktasi, otomatiklestirme ve eskime.
import { yordamlar, kos, eskit, uretec, TUR, DAYANAK, DEGISIM } from "./yordam.mjs";

const TOHUM = 20261107;
const yaz = (g, ...s) => console.log(s.map((v, i) =>
  (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join(""));
const s1 = (x) => x.toFixed(1);
const say = (a, f) => a.filter(f).length;

const Y = yordamlar(TOHUM);
const tumAdim = Y.flatMap((y) => y.adim);
const KOSUM = 40;                      // ayni yordam kumesi 40 olayda kosulur

// Ayni olay kumesini bir bicimde kosar. Her kosum ayni tohumdan baslar, boylece bicimler
// arasindaki fark bicimden gelir, cekilislerden degil.
const dene = (mod, gecersiz) => {
  const r = uretec(TOHUM + 7), gorulen = new Set(), kayit = [];
  for (let i = 0; i < KOSUM; i++) kayit.push(kos(Y[i % Y.length], mod, r, gecersiz, gorulen));
  const t = (f) => kayit.reduce((a, x) => a + f(x), 0);
  return { dakika: t((x) => x.dakika) / KOSUM, hata: t((x) => x.hataAdim),
    ilk: t((x) => x.ilkGecikme), atlanan: t((x) => x.atlanan) };
};

const E = [-16, 7, 12, 15, 10, 11];
console.log(`tohum ${TOHUM}: ${Y.length} yordam, ${tumAdim.length} adim, ${KOSUM} kosum`);
console.log("\n1. yordam envanteri");
yaz(E, "yordam", "adim", "karar nok.", "otomatik adim", "dakika", "dayanak");
for (const y of Y)
  yaz(E, y.servis, y.adim.length, say(y.adim, (a) => a.tur === "karar"),
    say(y.adim, (a) => a.otomatik), y.adim.reduce((a, x) => a + x.dakika, 0),
    new Set(y.adim.map((a) => a.dayanak)).size);
yaz(E, "toplam", tumAdim.length, say(tumAdim, (a) => a.tur === "karar"),
  say(tumAdim, (a) => a.otomatik), tumAdim.reduce((a, x) => a + x.dakika, 0),
  new Set(tumAdim.map((a) => a.dayanak)).size);
console.log("adim turu: " + TUR.map((t) => `${t} ${say(tumAdim, (a) => a.tur === t)}`).join(", "));

const g2 = eskit(TOHUM + 3, 2);        // iki donem eskimis yordam
const M = [-22, 17, 14, 16, 16];
console.log("\n2. ayni 40 olay uc kosum biciminde (taze yordam / iki donem eskimis)");
yaz(M, "bicim", "ort kapanis dk", "hata adimi", "makinede adim", "yordamsiza gore");
const taze = {}, eski = {};
for (const [ad, b] of [["yordamsiz", "yok"], ["yazili yordamla", "var"],
  ["otomatiklestirilmis", "oto"]]) {
  taze[b] = dene(b, new Set());
  eski[b] = b === "yok" ? taze[b] : dene(b, g2);
  const pay = (x) => `%${((x.dakika / taze.yok.dakika) * 100).toFixed(0)}`;
  yaz(M, ad, `${s1(taze[b].dakika)} / ${s1(eski[b].dakika)}`,
    `${taze[b].hata} / ${eski[b].hata}`, `${taze[b].atlanan} / ${eski[b].atlanan}`,
    `${pay(taze[b])} / ${pay(eski[b])}`);
}

const D = [-8, 15, 15, 19, 16, 13];
console.log(`\n3. yordamin eskimesi (yazili yordam, donem basina ${DEGISIM} degisim)`);
yaz(D, "donem", "gecersiz day.", "gecersiz adim", "ilk kosum gecikme", "ort kapanis dk",
  "hata adimi");
for (const donem of [0, 1, 2, 3, 4]) {
  const g = eskit(TOHUM + 3, donem);
  const r = dene("var", g);
  yaz(D, donem, `${g.size}/${DAYANAK.length}`,
    `${say(tumAdim, (a) => g.has(a.dayanak))}/${tumAdim.length}`,
    `${r.ilk} dk`, s1(r.dakika), r.hata);
}

const Q = [-38, 20, 8];
console.log("\n4. yordamin yanitladigi soru kumesi");
yaz(Q, "soru", "veri", "yanit");
const SORU = [
  ["bu olay daha once oldu mu", "yordam dizini", true],
  ["hangi adimla kapanir", "yordam metni", true],
  ["kac adim, kac karar noktasi", "yordam metni", true],
  ["hangi adim makineye verilebilir", "adim turu", true],
  ["yordam en son ne zaman kosuldu", "kosum kaydi", true],
  ["bu adim hala gecerli mi", "-", false],
  ["karar noktasinda dogru dal hangisi", "-", false],
  ["kac adim artik gecersiz", "-", false]];
for (const [q, d, y] of SORU) yaz(Q, q, d, y ? "evet" : "hayir");
console.log(`${SORU.length} sorudan ${say(SORU, (x) => x[2])} tanesi yordamdan yanitlanir, ` +
  `${say(SORU, (x) => !x[2])} tanesi yordam kosulmadan yanitlanamaz`);
tohum 20261107: 4 yordam, 33 adim, 40 kosum

1. yordam envanteri
yordam             adim  karar nok.  otomatik adim    dakika    dayanak
okuma-toplayici       6           2              2        47          3
dogrulayici           9           1              5        64          5
faturalama           10           0              5        86          6
is-emri               8           3              2        56          5
toplam               33           6             14       253          8
adim turu: gozle 7, dogrula 8, mudahale 12, karar 6

2. ayni 40 olay uc kosum biciminde (taze yordam / iki donem eskimis)
bicim                    ort kapanis dk    hata adimi   makinede adim yordamsiza gore
yordamsiz                 203.1 / 203.1     113 / 113           0 / 0     %100 / %100
yazili yordamla             72.8 / 83.3      40 / 161           0 / 0       %36 / %41
otomatiklestirilmis         37.5 / 49.8      25 / 154       140 / 140       %18 / %24

3. yordamin eskimesi (yazili yordam, donem basina 2 degisim)
donem     gecersiz day.  gecersiz adim  ilk kosum gecikme  ort kapanis dk   hata adimi
0                   0/8           0/33               0 dk            72.8           40
1                   2/8          10/33             160 dk            80.6          126
2                   3/8          14/33             224 dk            83.3          161
3                   5/8          20/33             320 dk            88.1          214
4                   6/8          24/33             384 dk            91.6          251

4. yordamin yanitladigi soru kumesi
soru                                                  veri   yanit
bu olay daha once oldu mu                    yordam dizini    evet
hangi adimla kapanir                          yordam metni    evet
kac adim, kac karar noktasi                   yordam metni    evet
hangi adim makineye verilebilir                  adim turu    evet
yordam en son ne zaman kosuldu                 kosum kaydi    evet
bu adim hala gecerli mi                                  -   hayir
karar noktasinda dogru dal hangisi                       -   hayir
kac adim artik gecersiz                                  -   hayir
8 sorudan 5 tanesi yordamdan yanitlanir, 3 tanesi yordam kosulmadan yanitlanamaz

Sayılar ölçüm sınıfındadır; girdileri OY13–OY18 varsayımlarıdır. Dört yordam 33 adım, 6 karar noktası ve 253 dakikalık nominal süre taşır. Envanter tek başına iki şeyi söyler. faturalama en uzun yordamdır (10 adım, 86 dakika) ama hiç karar noktası yoktur — baştan sona düz koşar. is-emri yalnız 8 adımdır, ama 3 karar noktası taşır: kısa yordam kolay yordam değildir.

Yordamsız, Yordamla, Makineyle

İkinci tablonun sol yarısı aynı 40 olayı üç biçimde kapatır. Yordamsız koşumda ortalama kapanış 203,1 dakika ve 113 hata adımıdır; adımı bulmak süreyi katlar ve her bulunan adım yanılabilir. Yazılı yordam kapanışı 72,8 dakikaya, yani yordamsızın %36’sına indirir ve hata adımını 113’ten 40’a düşürür. Kazanç iki kaynaklıdır ve ayrılabilir: keşif çarpanının kalkması süreyi, hata olasılığının 0,34’ten 0,08’e inmesi yanılmayı azaltır.

Otomatikleştirme üçüncü sırayı alır. 33 adımın 14’ü makineye verilebilir (%42) ve 40 koşumda toplam 140 adım makinede koşar; kapanış 37,5 dakikaya, yordamsızın %18’ine iner, hata adımı 25’e düşer. Bu tavan tesadüf değildir: kalan 19 adımın 6’sı karar noktasıdır ve varsayım gereği otomatikleştirilemez. Yordamın otomatikleştirilemeyen çekirdeği, sayılabilen bir büyüklüktür — burada altı karar.

Yordamın Eskimesi

Üçüncü tablo yordamı olduğu yerde bırakıp sistemi değiştirir. Bir dönemde iki dayanak değişir ve 33 adımın 10’u geçersiz olur; dört dönem sonra sekiz dayanağın altısı değişmiş, geçersiz adım 24’e çıkmıştır. Geçersiz adımın ilk koşumdaki bedeli doğrudan okunur: birinci dönemde 160, dördüncü dönemde 384 dakika.

Asıl bulgu iki sütunun farklı hızda bozulmasıdır. Ortalama kapanış 72,8’den 91,6 dakikaya çıkar — dört dönemde yalnız %26. Hata adımı ise 40’tan 251’e, altı katına çıkar. Nedeni varsayımın içindedir: geçersiz adım ilk koşumda 16 dakika yer, sonraki koşumlarda 3 dakikada dolanılır, ama her seferinde bir hata adımı olarak kalır. Eskiyen yordam yavaşlamaz, güvenilmez hâle gelir; saati izleyen bir ölçüm bunu göremez.

İkinci tablonun sağ yarısı bunu keskinleştirir. İki dönem eskimiş yordam kapanışı yalnız 72,8’den 83,3 dakikaya taşır ve hâlâ yordamsızdan çok hızlıdır (%41’e karşı %100). Ama hata adımı 161’dir — yordamsız koşumun 113 hata adımından fazla. Eskimiş yordam koşanı hızlandırırken yanlış adıma daha çok kez sokar.

Otomatikleştirme bu bozulmayı durdurmaz. Makineye verilen adım da aynı dayanağa bağlıdır: iki dönem sonra otomatikleştirilmiş biçimin hata adımı 25’ten 154’e çıkar, yani yazılı yordamın 161’iyle neredeyse aynı yerdedir. Kapanış 37,5’ten 49,8 dakikaya çıkar. Otomatikleştirme adımı hızlandırır, adımın dayanağını doğrulamaz.

Yordamın Bilmediği

Dördüncü tablo sekiz sorunun beşinin yordamdan yanıtlandığını gösterir: olayın daha önce olup olmadığı, hangi adımla kapanacağı, kaç adım ve kaç karar noktası olduğu, hangi adımın makineye verilebileceği, yordamın en son ne zaman koşulduğu. Yanıtsız üçü tek bir eksikliğe indirgenir — yordam kendi geçerliliğini bilmez. “Bu adım hâlâ geçerli mi”, “karar noktasında doğru dal hangisi” ve “kaç adım artık geçersiz” soruları ancak yordam koşulduğunda, yani bir olayın ortasında yanıtlanır. Üçüncü tablodaki 160 ile 384 dakika arasındaki gecikme, bu üç sorunun faturasıdır.

Özet

  • Dört yordam 33 adım, 6 karar noktası ve 253 dakikalık nominal süre taşır; adımların 14’ü (%42) makineye verilebilir. En uzun yordamda hiç karar noktası yok, 8 adımlık yordamda üç tane var.
  • Aynı 40 olay yordamsız 203,1 dakikada ve 113 hata adımıyla, yazılı yordamla 72,8 dakikada (%36) ve 40 hata adımıyla kapanır.
  • Otomatikleştirme kapanışı 37,5 dakikaya (%18) ve hata adımını 25’e indirir; tavanı belirleyen şey otomatikleştirilemeyen 6 karar noktasıdır.
  • Bir dönemde iki dayanak değişince 33 adımın 10’u, dört dönem sonra 24’ü geçersiz olur; geçersiz adımların ilk koşumda ürettiği gecikme 160’tan 384 dakikaya çıkar.
  • Eskime süreyi ve güveni farklı hızda bozar: kapanış 72,8’den 91,6 dakikaya (%26) çıkarken hata adımı 40’tan 251’e (altı katı) çıkar.
  • İki dönem eskimiş yordam yordamsızdan hâlâ iki kattan fazla hızlıdır (83,3’e karşı 203,1 dakika) ama yordamsızdan çok yanılır (161’e karşı 113 hata adımı); otomatikleştirme bunu değiştirmez (154).

Sonraki Adım

Yordam bir olayın nasıl kapanacağını yazar, neden açıldığını yazmaz. Üçüncü tablodaki geçersiz adımlar da kendiliğinden düzelmez; birinin onları görüp yordamı güncellemesi gerekir. Sonraki ders olay kapandıktan sonrasına bakar: olayın suçsuz biçimde incelenmesi, incelemeden çıkan eylem maddelerinin izlenmesi ve kapanmayan maddenin aynı olayı yeniden üretmesi.

İ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