Ders 08 / 10
Tasarım Çerçevesinin Sütunları
Bir karar kümesinin beş sütunda puanlanması ve sütunlar arası gerilimin sayılması: kaç kararın bir sütunu yükseltirken başkasını düşürdüğü, en gergin sütun çiftinin hangisi olduğu, hiçbir kararın iyileştirmediği sütunun çıkarılması ve devredilen kararların sütun profili ile çıkışta taşınamayan payı.
İçindekiler
İlk iki ders coğrafyayı iki ayrı eksende ölçtü ve her ikisi de aynı yapıda bitti: bir karar bir sayıyı yükseltti, başka bir sayıyı düşürdü. Üç alana yayılmak ayakta kalan kalemi yükseltti, kirayı ve eşzamanlı yazma süresini bozdu. Üç kenar konumu gecikmeyi düşürdü, günde on binden fazla bayat yanıt üretti. Bu iki gözlem tek başına birer anekdottur; bir karar defterine dönüşmeleri için aynı ölçütlerle ve aynı biçimde yazılmaları gerekir.
Kiralanan altyapıyı değerlendirmek için kullanılan tasarım çerçeveleri tam olarak bunu yapar. Bir kararı iyi ya da kötü diye değil, beş ayrı sütunda ayrı ayrı puanlar: işletim, güvenlik, güvenilirlik, başarım ve maliyet. Çerçevenin adı bu derste geçmez; ölçülen şey ad değil, sütunların birbirini nasıl kısıtladığıdır. Aynı biçimde bir gerilim matrisi önceki bir kursta nitelik ölçütleri için kurulmuştu; yöntem aynıdır, oradaki sayılar buraya taşınmaz.
Beş Sütun ve Karar Kümesi
- BC13. Sütunlar tür adıyla anılır: işletim, güvenlik, güvenilirlik, başarım, maliyet.
- BC14. Karar kümesi bu kursta ve önceki iki derste alınmış 12 karardan oluşur; hepsi coğrafya, dayanıklılık ya da kiralama kararıdır.
- BC15. Puanlar -2 ile +2 arasında bir varsayımdır, ölçülmüş değer değildir; anlamlı olan sıralama ve işarettir, mutlak büyüklük değil.
- BC16. Bir karar, uygulanması sağlayıcının işlettiği bir hizmeti kiralamayı gerektiriyorsa devir sayılır.
- BC17. Çıkış sınıfı üç değerlidir:
tanim(yazılıp başka bir kiralamada aynen kurulabilir),kismi,yok. - BC18. Kararlar birbirinden bağımsız puanlanır. Gerçek kümelerde birbirlerini etkilerler; bu, modelin bilinen sınırıdır.
// cerceve/model.mjs — karar kumesi ve sutun puanlari MODELIDIR. Sutunlar tur adiyla anilir; // puanlar bu dersin varsayimidir, olculmus degerler degil. Gercek bir urun ya da katalog yoktur. export const SUTUN = ["isletim", "guvenlik", "guvenilirlik", "basarim", "maliyet"]; // ad, [isletim, guvenlik, guvenilirlik, basarim, maliyet] (-2..+2), devir?, cikista tasinan export const KARAR = [ ["uc-alana-yayilma", [-1, 0, 2, 0, -1], false, "tanim"], ["ikinci-bolgede-tam-kopya", [-2, 0, 2, 1, -2], false, "tanim"], ["bolgeler-arasi-eszamanli-yazma", [-1, 0, 2, -2, -1], false, "tanim"], ["uc-kenar-konumu", [-1, 1, 1, 2, -1], true, "kismi"], ["abone-ozeti-onbellegi", [0, 0, 1, 2, 0], true, "tanim"], ["yonetilen-iliskisel-veritabani", [2, 1, 1, -1, -2], true, "kismi"], ["islev-calistirma-ortami", [2, 0, 1, -1, -1], true, "yok"], ["saglayici-anahtar-yonetimi", [1, 2, 0, -1, -1], true, "yok"], ["ortam-basina-ayri-kiralama", [-2, 2, 1, 0, -1], true, "tanim"], ["otomatik-yamalama-devri", [2, 2, -1, 0, 0], true, "yok"], ["tekil-yazma-ucu", [1, 0, -2, 1, 0], false, "tanim"], ["ham-okumayi-nesne-deposunda-tutma", [1, 0, 1, -1, -1], true, "kismi"], ]; export const puan = (k, s) => k[1][SUTUN.indexOf(s)]; export const yukselten = (s) => KARAR.filter((k) => puan(k, s) > 0); export const dusuren = (s) => KARAR.filter((k) => puan(k, s) < 0); export const toplam = (s) => KARAR.reduce((a, k) => a + puan(k, s), 0); // gerilim: bir karar i sutununu yukseltirken j sutununu dusuruyorsa hucre bir artar export function gerilim(i, j) { return KARAR.filter((k) => puan(k, i) > 0 && puan(k, j) < 0).length; } export const gergin = (k) => k[1].some((p) => p > 0) && k[1].some((p) => p < 0);
Sütunlar Arası Gerilim
// cerceve/puan.mjs — sutun toplamlari ve sutunlar arasi gerilim matrisi import { SUTUN, KARAR, puan, yukselten, dusuren, toplam, gerilim, gergin } from "./model.mjs"; const s = (x, n) => String(x).padStart(n); console.log(`${KARAR.length} karar, ${SUTUN.length} sutun; puanlar -2..+2 araligindadir (varsayim).`); console.log(); console.log("karar | isl | guv | gvn | bas | mal | net | gergin"); console.log("----------------------------------|-----|-----|-----|-----|-----|-----|-------"); for (const k of KARAR) { const net = k[1].reduce((a, b) => a + b, 0); console.log(`${k[0].padEnd(33)} |${k[1].map((p) => s(p, 4)).join(" |")} | ${s(net, 3)} | ` + `${gergin(k) ? "evet" : "hayir"}`); } console.log(); console.log("sutun | toplam | yukselten karar | dusuren karar | en yuksek | en dusuk"); console.log("-------------|--------|-----------------|---------------|-----------|---------"); for (const t of SUTUN) { const p = KARAR.map((k) => puan(k, t)); console.log(`${t.padEnd(12)} | ${s(toplam(t), 6)} | ${s(yukselten(t).length, 15)} | ` + `${s(dusuren(t).length, 13)} | ${s(Math.max(...p), 9)} | ${s(Math.min(...p), 8)}`); } console.log(); console.log("yukselen \\ dusen | isletim | guvenlik | guvenilirlik | basarim | maliyet | satir"); console.log("-----------------|---------|----------|--------------|---------|---------|------"); for (const i of SUTUN) { const h = SUTUN.map((j) => (i === j ? "-" : String(gerilim(i, j)))); const satir = SUTUN.filter((j) => j !== i).reduce((a, j) => a + gerilim(i, j), 0); console.log(`${i.padEnd(16)} | ${s(h[0], 7)} | ${s(h[1], 8)} | ${s(h[2], 12)} | ` + `${s(h[3], 7)} | ${s(h[4], 7)} | ${s(satir, 5)}`); } const hicYukselmeyen = SUTUN.filter((t) => yukselten(t).length === 0); const cift = []; for (const i of SUTUN) for (const j of SUTUN) if (i !== j) cift.push([i, j, gerilim(i, j)]); cift.sort((a, b) => b[2] - a[2]); console.log(); console.log(`gergin karar ${KARAR.filter(gergin).length}/${KARAR.length}; ` + `hicbir sutunu dusurmeyen karar ${KARAR.filter((k) => !k[1].some((p) => p < 0)).length}.`); console.log(`hicbir kararin iyilestirmedigi sutun: ${hicYukselmeyen.join(", ") || "yok"}.`); console.log(`en gergin cift: ${cift[0][0]} yukselirken ${cift[0][1]} dusuyor — ${cift[0][2]} karar.`);
12 karar, 5 sutun; puanlar -2..+2 araligindadir (varsayim). karar | isl | guv | gvn | bas | mal | net | gergin ----------------------------------|-----|-----|-----|-----|-----|-----|------- uc-alana-yayilma | -1 | 0 | 2 | 0 | -1 | 0 | evet ikinci-bolgede-tam-kopya | -2 | 0 | 2 | 1 | -2 | -1 | evet bolgeler-arasi-eszamanli-yazma | -1 | 0 | 2 | -2 | -1 | -2 | evet uc-kenar-konumu | -1 | 1 | 1 | 2 | -1 | 2 | evet abone-ozeti-onbellegi | 0 | 0 | 1 | 2 | 0 | 3 | hayir yonetilen-iliskisel-veritabani | 2 | 1 | 1 | -1 | -2 | 1 | evet islev-calistirma-ortami | 2 | 0 | 1 | -1 | -1 | 1 | evet saglayici-anahtar-yonetimi | 1 | 2 | 0 | -1 | -1 | 1 | evet ortam-basina-ayri-kiralama | -2 | 2 | 1 | 0 | -1 | 0 | evet otomatik-yamalama-devri | 2 | 2 | -1 | 0 | 0 | 3 | evet tekil-yazma-ucu | 1 | 0 | -2 | 1 | 0 | 0 | evet ham-okumayi-nesne-deposunda-tutma | 1 | 0 | 1 | -1 | -1 | 0 | evet sutun | toplam | yukselten karar | dusuren karar | en yuksek | en dusuk -------------|--------|-----------------|---------------|-----------|--------- isletim | 2 | 6 | 5 | 2 | -2 guvenlik | 8 | 5 | 0 | 2 | 0 guvenilirlik | 9 | 9 | 2 | 2 | -2 basarim | 0 | 4 | 5 | 2 | -2 maliyet | -11 | 0 | 9 | 0 | -2 yukselen \ dusen | isletim | guvenlik | guvenilirlik | basarim | maliyet | satir -----------------|---------|----------|--------------|---------|---------|------ isletim | - | 0 | 2 | 4 | 4 | 10 guvenlik | 2 | - | 1 | 2 | 4 | 9 guvenilirlik | 5 | 0 | - | 4 | 8 | 17 basarim | 2 | 0 | 1 | - | 2 | 5 maliyet | 0 | 0 | 0 | 0 | - | 0 gergin karar 11/12; hicbir sutunu dusurmeyen karar 1. hicbir kararin iyilestirmedigi sutun: maliyet. en gergin cift: guvenilirlik yukselirken maliyet dusuyor — 8 karar.
Birinci tablonun son sütunu bu dersin ilk sayısıdır: 12 kararın 11’i gergindir, yani en az bir sütunu yükseltirken en az bir sütunu düşürür. Hiçbir sütunu düşürmeyen tek karar abone özeti önbelleğidir ve o bile ikinci derste bir bedelle geldi — bayat yanıtla. Sütun puanlaması bedeli görmediyse, bedel yoktur demek değildir; ölçüt kümesinin dışında kalmıştır demektir.
İkinci tablo sütunları tek başlarına özetliyor. Güvenilirlik 9 kararla yükseliyor ve toplam +9 ile en yüksek sütun. Maliyet ise 0 karar tarafından yükseltiliyor, 9 karar tarafından düşürülüyor ve toplamı -11. Bu, kararların kötü seçildiğini göstermez; kümenin bileşiminin bir sonucudur. Bu ders coğrafya ve dayanıklılık kararlarını topladı ve bunların hiçbiri maliyeti yükseltmez — maliyeti yükselten kararlar başka bir türden gelir ve henüz ölçülmedi. Güvenlik sütununun 0 düşüren karar göstermesi de aynı biçimde okunur: bu küme güvenliği bozan bir karar içermiyor, güvenlik bozulamaz değil.
Üçüncü tablo asıl ölçüdür. Satır bir sütunu yükselten kararları, sütun onların düşürdüğü ölçütü sayar. Güvenilirlik satırı 17 ile açık ara en gergin satır: güvenilirliği yükselten kararlar 8 kararda maliyeti, 5 kararda işletimi, 4 kararda başarımı düşürüyor. En gergin çift güvenilirlik ile maliyettir ve 8 karar bu çifti taşır. Maliyet satırının bütünüyle sıfır olması ise ikinci tablonun aynı bulgusunun matris biçimidir: maliyeti yükselten bir karar olmadığı için maliyetin başka bir sütunu düşürdüğü bir hücre de yok.
Matrisin işe yaradığı yer bir sıralama değil, hangi çiftin açıkça karara bağlanması gerektiği listesidir. Güvenilirlik–maliyet hücresi 8 ile dolu olduğu için o çift bir kez konuşulup bir üst sınıra bağlanmadığında, sekiz ayrı kararda sekiz ayrı ve birbirini bilmeyen ödünleşme yapılır. Buna karşılık güvenilirlik–güvenlik hücresi 0’dır: güvenilirliği yükselten dokuz kararın hiçbiri güvenliği düşürmüyor, dolayısıyla o çift için ayrı bir ödünleşme kuralı yazmaya gerek yok. Boş hücreler dolu hücreler kadar bilgi taşır.
Devredilen Kararın Sütun Profili
Gerilim matrisi kararları sütunlara böldü; ikinci kesit onları kime ait olduklarına böler. Bir karar sağlayıcının işlettiği bir hizmeti kiralamayı gerektiriyorsa devredilmiştir.
// cerceve/devir.mjs — sutun profilinin devredilen ve elde kalan kararlara gore ayrilmasi import { SUTUN, KARAR, puan } from "./model.mjs"; const s = (x, n) => String(x).padStart(n); const y = (x) => x.toFixed(2); const CIKIS = { tanim: 2, kismi: 1, yok: 0 }; const grup = { devir: KARAR.filter((k) => k[2]), kendi: KARAR.filter((k) => !k[2]) }; console.log("grup | karar | isletim | guvenlik | guvenilirlik | basarim | maliyet | cikis puani"); console.log("------|-------|---------|----------|--------------|---------|---------|------------"); for (const [ad, g] of Object.entries(grup)) { const ort = SUTUN.map((t) => g.reduce((a, k) => a + puan(k, t), 0) / g.length); const cikis = g.reduce((a, k) => a + CIKIS[k[3]], 0) / (2 * g.length); console.log(`${ad.padEnd(5)} | ${s(g.length, 5)} | ${s(y(ort[0]), 7)} | ${s(y(ort[1]), 8)} | ` + `${s(y(ort[2]), 12)} | ${s(y(ort[3]), 7)} | ${s(y(ort[4]), 7)} | ${s(`%${y(100 * cikis)}`, 11)}`); } console.log(); console.log("grup | cikista tanim | kismi | yok | tasinmayan karar"); console.log("------|---------------|-------|-----|-----------------"); for (const [ad, g] of Object.entries(grup)) { const say = (t) => g.filter((k) => k[3] === t).length; console.log(`${ad.padEnd(5)} | ${s(say("tanim"), 13)} | ${s(say("kismi"), 5)} | ` + `${s(say("yok"), 3)} | ${s(`${say("kismi") + say("yok")}/${g.length}`, 16)}`); } const devirGuv = grup.devir.reduce((a, k) => a + puan(k, "guvenlik") + puan(k, "isletim"), 0); const kendiGuv = grup.kendi.reduce((a, k) => a + puan(k, "guvenlik") + puan(k, "isletim"), 0); console.log(); console.log(`devredilen ${grup.devir.length} karar isletim + guvenlik toplaminda ${devirGuv}, ` + `elde kalan ${grup.kendi.length} karar ${kendiGuv}.`); console.log(`devredilen ${grup.devir.length} karardan cikista tanim olarak tasinamayan ` + `${grup.devir.filter((k) => k[3] !== "tanim").length}; elde kalan ${grup.kendi.length} karardan ` + `${grup.kendi.filter((k) => k[3] !== "tanim").length}.`);
grup | karar | isletim | guvenlik | guvenilirlik | basarim | maliyet | cikis puani ------|-------|---------|----------|--------------|---------|---------|------------ devir | 8 | 0.63 | 1.00 | 0.63 | 0.00 | -0.88 | %43.75 kendi | 4 | -0.75 | 0.00 | 1.00 | 0.00 | -1.00 | %100.00 grup | cikista tanim | kismi | yok | tasinmayan karar ------|---------------|-------|-----|----------------- devir | 2 | 3 | 3 | 6/8 kendi | 4 | 0 | 0 | 0/4 devredilen 8 karar isletim + guvenlik toplaminda 13, elde kalan 4 karar -3. devredilen 8 karardan cikista tanim olarak tasinamayan 6; elde kalan 4 karardan 0.
Devir ile elde kalan arasındaki fark iki sütunda toplanıyor. İşletimde devredilen kararlar ortalama +0,63, elde kalanlar -0,75; güvenlikte +1,00 ve 0,00. İkisinin toplamı 13’e karşı -3 demektir: kiralamanın karşılığı bu iki sütunda ödenir. Güvenilirlikte ise sıralama tersine dönüyor — elde kalan kararlar ortalama +1,00, devredilenler +0,63. Güvenilirliği en çok yükselten kararlar kimseye devredilemeyen kararlardır: alanlara yayılmak, ikinci bölgede kopya tutmak, yazmayı eşzamanlı yapmak.
Son tablo çıkış sütununu veriyor ve bu dersin en keskin karşıtlığı burada. Elde kalan 4 kararın 4’ü çıkışta tanım olarak taşınır: kaç alan, hangi bölge, hangi yazma düzeni — hepsi yazılabilir bir cümledir ve başka bir kiralamada aynen kurulabilir. Devredilen 8 kararın yalnız 2’si taşınır; 6’sı kısmi ya da hiç taşınmaz. Çıkış puanı yüzde 100’e karşı yüzde 43,75. Kiralama işletim ve güvenlik sütunlarını yükseltirken çıkış sütununu yarıdan aşağı indiriyor ve bu altıncı sütun çerçevenin beş sütununda hiç görünmüyor.
Özet
- Çerçeve bir kararı iyi ya da kötü diye değil beş sütunda ayrı ayrı puanlar: işletim, güvenlik, güvenilirlik, başarım, maliyet. Ölçülen şey ad değil, sütunların birbirini kısıtlamasıdır.
- 12 kararın 11’i gergindir; hiçbir sütunu düşürmeyen tek karar vardır ve onun bedeli de sütunların dışında kalmıştır.
- Maliyeti yükselten karar 0, düşüren 9; hiçbir kararın iyileştirmediği sütun maliyettir. Bu, kümenin coğrafya ve dayanıklılık kararlarından oluşmasının sonucudur.
- En gergin çift güvenilirlik ile maliyettir: 8 karar güvenilirliği yükseltirken maliyeti düşürür. Güvenilirlik satırı 17 ile en gergin satırdır.
- Devredilen 8 karar işletim ve güvenlikte ortalama +0,63 ve +1,00, elde kalan 4 karar -0,75 ve 0,00; güvenilirlikte sıralama tersine döner (+1,00’e karşı +0,63).
- Çıkışta elde kalan kararların 4/4’ü tanım olarak taşınır, devredilenlerin yalnız 2/8’i: çıkış puanı yüzde 100’e karşı yüzde 43,75.
Sonraki Adım
Bu ders maliyeti bir sütun olarak saydı ve o sütunun tuhaf bir özelliği çıktı: on iki kararın hiçbiri onu yükseltmiyor. Bunun nedeni kararların kötülüğü değil, kümenin bileşimidir — coğrafya ve dayanıklılık kararları maliyeti ödeyen taraftır, kazanan taraf değil. Maliyet sütununu yükselten kararlar başka bir yerden gelir ve şimdiye kadar tek bir tanesi bile ölçülmedi: aynı kapasitenin hangi koşulla kiralandığı. Aynı makine, aynı saat, aynı iş; ama kapasite anında istenip anında bırakılabiliyorsa bir fiyat, uzun süreli bir taahhüde bağlanıyorsa başka bir fiyat, sağlayıcı geri isteyebiliyorsa üçüncü bir fiyat taşır. Sonraki ders üç modeli aynı yük profilinde koşturup toplam maliyeti, geri alınan kapasite yüzünden yeniden koşan işi ve kullanılmayan taahhüdü birlikte sayar; yük profili değiştikçe kazanan modelin de değiştiğini gösterir.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.