---
title: 'Sorun Giderme Yöntemi'
source: 'https://academia.sh/tr/kurslar/bt-temelleri/sorun-giderme-yontemi'
course: 'Bilgi Teknolojileri ve Sistem Temelleri'
language: tr
updated: '2026-08-17T18:08:39+00:00'
license: 'CC BY-SA 4.0'
---

# Sorun Giderme Yöntemi

Sorun gidermenin eleme sayısıyla ölçülmesi: 16 olasılık ve 8 test üzerinde bilgi öncelikli sıranın ortalama 3,50 adımda, liste sırasının 5,81 adımda bitirmesi, en kötü adımın 6'ya karşı 8 olması, hiçbir olasılığı elemeyen adımın 0'a karşı 22 çıkması ve iki nedenin hiçbir testle ayrılamaması.

Önceki ders yönetim işlerinin bıraktığı izi saydı ve makine beklendiği gibi çalışırken geçerli olan
bir düzenin ölçüsünü verdi. Makine beklendiği gibi çalışmadığında elde yalnız belirtiler kalır: bir
servis veri alamıyor, bir istek yanıtsız dönüyor, bir iş gecikiyor.

Belirtiden nedene giden yol bir yöntemdir ve yöntem ölçülebilir. Bu ders onu tek bir sayıya bağlar:
bir hipotez sınandığında kaç olasılık eleniyor.

## Yöntem Bir Eleme Sayısıdır

Sorun giderme, tahmin ile deneme arasında bir yerde anlatılır. Ölçülebilir hâle getirmek için üç
şey yazılır.

**Olasılık kümesi.** Belirti görüldüğünde hangi nedenler hâlâ mümkündür. Bu küme yazılmadığında
"neden arıyorum" cümlesi bir sayı taşımaz.

**Test kümesi.** Her test bir hipotezi sınar ve bir sonuç verir. Bir testin gücü, sonucun kaç
olasılığı elediğidir — ve bu sayı **kötü durumda** okunur, çünkü hangi sonucun çıkacağı önceden
bilinmez.

**Sıra.** Testler bir sırayla koşturulur. Aynı test kümesi farklı sıralarla farklı sayıda adımda
bitirir; sıra, ek bir araç almadan kazanılan tek şeydir.

## On Altı Olasılık, Sekiz Test

Örnek, kurgu **bölgesel ölçüm ağı**nda bir belirtidir: şube sunucusundan faturalama servisine veri
gitmiyor. Belirti de neden listesi de kurgudur; aşağıdaki değerlendirme bir **modeldir**, gerçek
bir olay kaydı yoktur.

**DI28:** belirti görüldüğünde 16 neden mümkündür. **DI29:** 8 test vardır; her test her neden için
tek bir sonuç verir ve **aynı sonucu veren nedenler o testle birbirinden ayrılmaz**. **DI30:** bir
test koşturulduğunda aday kümesi, doğru nedenle aynı sonucu veren nedenlere daralır. **DI31:** üç
sıra denenir — `bilgi` kötü durumda en çok eleyen testi seçer, `liste` testleri yazıldıkları sırayla
koşturur, `zayif` kötü durumda en az eleyen testi öne alır. **DI32:** koşum, aday kümesi tek nedene
indiğinde ya da hiçbir test kümeyi daha fazla ayıramadığında durur.

```js
// bt/tani.mjs — bir belirti kumesinde hipotez basina elenen olasilik (model): kurgu olcum agi,
// gercek bir olay kaydi yok. Rastgelelik yok.

// Belirti: sube sunucusundan faturalama servisine veri gitmiyor. Baslangicta 16 olasilik.
export const NEDEN = ["ag-kablosu", "anahtar-uc-durumu", "adres-catismasi", "ad-cozumleme",
  "guvenlik-duvari-kurali", "yonlendirme-tablosu", "hizmet-durmus", "hizmet-yanlis-ucta",
  "sertifika-suresi", "kimlik-bilgisi", "izin-degisikligi", "disk-dolu", "bellek-tukendi",
  "saat-kaymasi", "surum-uyumsuzlugu", "yapilandirma-hatasi"];

// Her test bir hipotezi sinar. Dizideki her karakter, o nedenin testte verecegi sonuctur;
// ayni karakteri veren nedenler o testle birbirinden ayrilamaz.
export const TEST = [
  ["ag-baglantisi", "hheeeeeeeeeeeeee"],
  ["adres-ve-yonlendirme", "eeceeyeeeeeeeeee"],
  ["ad-cozumleme", "eeeheeeeeeeeeeee"],
  ["uc-erisimi", "eeeehekkeeeeeeee"],
  ["hizmet-durumu", "eeeeeedyeeeeeeee"],
  ["kimlik-ve-sertifika", "eeeeeeeeskieeeee"],
  ["kaynak-durumu", "eeeeeeeeeeedbeee"],
  ["saat-surum-yapilandirma", "eeeeeeeeeeeeetsy"],
].map(([ad, s]) => ({ ad, s }));

// Bir testin verilen aday kumesinde birakacagi en buyuk grup: kotu durumda kalan olasilik.
export const enBuyuk = (t, aday) => Math.max(...[...new Set(aday.map((c) => t.s[c]))]
  .map((v) => aday.filter((c) => t.s[c] === v).length));

export const SIRA = {
  // bilgi-oncelikli: kotu durumda en cok eleyen test. Hicbiri elemiyorsa dur.
  bilgi: (aday, kul) => {
    const k = TEST.map((t, i) => i).filter((i) => !kul.has(i));
    if (!k.length) return null;
    const e = k.reduce((a, i) => (enBuyuk(TEST[i], aday) < enBuyuk(TEST[a], aday) ? i : a));
    return enBuyuk(TEST[e], aday) === aday.length ? null : e;
  },
  // liste: testler yazildigi sirayla.
  liste: (aday, kul) => TEST.map((t, i) => i).find((i) => !kul.has(i)) ?? null,
  // zayif: kotu durumda en az eleyen testi one alan sira.
  zayif: (aday, kul) => {
    const k = TEST.map((t, i) => i).filter((i) => !kul.has(i));
    if (!k.length) return null;
    return k.reduce((a, i) => (enBuyuk(TEST[i], aday) > enBuyuk(TEST[a], aday) ? i : a));
  },
};

export function kos(dogru, sira) {
  let aday = NEDEN.map((n, i) => i);
  const kul = new Set();
  let adim = 0, bos = 0;
  while (aday.length > 1) {
    const i = SIRA[sira](aday, kul);
    if (i === null) break;
    kul.add(i);
    const once = aday.length;
    aday = aday.filter((c) => TEST[i].s[c] === TEST[i].s[dogru]);
    adim++;
    if (aday.length === once) bos++;
  }
  return { adim, bos, kalan: aday.length };
}
```

```js
// bt/taniolc.mjs — hipotez basina kac olasilik eleniyor, hangi sira kac adimda bitiriyor.
import { NEDEN, TEST, enBuyuk, SIRA, kos } from "./tani.mjs";

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 HEPSI = NEDEN.map((n, i) => i);
const S = Object.keys(SIRA);
if (TEST.some((t) => t.s.length !== NEDEN.length)) throw new Error("test uzunlugu uyusmuyor");

console.log(`belirti: sube sunucusundan veri gitmiyor; ${NEDEN.length} olasilik, ` +
  `${TEST.length} test`);

const A = [-26, 13, 15, 16];
console.log("\n1. tek basina her testin gucu (16 olasilik uzerinde)");
yaz(A, "test", "sonuc turu", "kotu durumda", "en az elenen");
for (const t of TEST) {
  const b = enBuyuk(t, HEPSI);
  yaz(A, t.ad, new Set(t.s).size, b, NEDEN.length - b);
}

const B = [-38, 10, 10, 10];
console.log("\n2. uc sira, 16 nedenin her biri dogru neden olarak denendiginde");
const R = Object.fromEntries(S.map((s) => [s, HEPSI.map((c) => kos(c, s))]));
yaz(B, "olcu", ...S);
for (const [ad, f] of [["ortalama adim", (r) => (r.reduce((a, x) => a + x.adim, 0) / r.length).toFixed(2)],
  ["en kotu adim", (r) => Math.max(...r.map((x) => x.adim))],
  ["hicbir olasiligi elemeyen adim", (r) => r.reduce((a, x) => a + x.bos, 0)],
  ["tek nedene inen senaryo (16 uzerinden)", (r) => r.filter((x) => x.kalan === 1).length]])
  yaz(B, ad, ...S.map((s) => f(R[s])));

const C = [-38, 10, 10, 10];
console.log("\n3. dort neden icin adim sayisi");
yaz(C, "dogru neden", ...S);
for (const c of [0, 7, 10, 15]) yaz(C, NEDEN[c], ...S.map((s) => kos(c, s).adim));

const D = [-38, 10];
console.log("\n4. yontemin tabani");
const ayrilamaz = HEPSI.filter((c) => HEPSI
  .some((d) => d !== c && TEST.every((t) => t.s[c] === t.s[d])));
yaz(D, "olcu", "deger");
yaz(D, "hicbir testin ayiramadigi neden", ayrilamaz.length);
yaz(D, "bilgi sirasinda ulasilan en kucuk kume", Math.min(...HEPSI.map((c) => kos(c, "bilgi").kalan)));
yaz(D, "bilgi sirasinda kalan en buyuk kume", Math.max(...HEPSI.map((c) => kos(c, "bilgi").kalan)));
console.log(`ayrilamayan nedenler: ${ayrilamaz.map((c) => NEDEN[c]).join(", ")}`);
```

```
belirti: sube sunucusundan veri gitmiyor; 16 olasilik, 8 test

1. tek basina her testin gucu (16 olasilik uzerinde)
test                         sonuc turu   kotu durumda    en az elenen
ag-baglantisi                         2             14               2
adres-ve-yonlendirme                  3             14               2
ad-cozumleme                          2             15               1
uc-erisimi                            3             13               3
hizmet-durumu                         3             14               2
kimlik-ve-sertifika                   4             13               3
kaynak-durumu                         3             14               2
saat-surum-yapilandirma               4             13               3

2. uc sira, 16 nedenin her biri dogru neden olarak denendiginde
olcu                                       bilgi     liste     zayif
ortalama adim                               3.50      5.81      5.81
en kotu adim                                   6         8         8
hicbir olasiligi elemeyen adim                 0        22        12
tek nedene inen senaryo (16 uzerinden)        14        14        14

3. dort neden icin adim sayisi
dogru neden                                bilgi     liste     zayif
ag-kablosu                                     4         8         8
hizmet-yanlis-ucta                             2         5         4
izin-degisikligi                               2         6         7
yapilandirma-hatasi                            3         8         8

4. yontemin tabani
olcu                                       deger
hicbir testin ayiramadigi neden                2
bilgi sirasinda ulasilan en kucuk kume         1
bilgi sirasinda kalan en buyuk kume            2
ayrilamayan nedenler: ag-kablosu, anahtar-uc-durumu
```

Sayılar **ölçüm** sınıfındadır; girdileri DI28–DI32'dir.

## Testler Dengesiz, Bölme Yarı Yarıya Değil

Birinci tablo bir beklentiyi yıkar. Sekiz testin hiçbiri olasılık kümesini ortadan bölmez: kötü
durumda kalan olasılık 13 ile 15 arasındadır, yani en güçlü test bile 16'dan yalnız **3** olasılık
eler. `ad-cozumleme` testinin kötü durumda elediği olasılık **1**'dir.

Nedeni, testlerin sonuç türü sayısındadır. Bir test iki sonuç veriyorsa olasılıkları en fazla ikiye
böler; dört sonuç veriyorsa dörde. Ama bölmenin **eşit** olması gerekmez, ve bu modelde eşit
değildir: her test birkaç nedeni ayırır, kalan on üç ya da on dördü aynı sonuçta bırakır. Bir
sistemde testler doğal olarak dengesizdir, çünkü her test belirli bir katmanı sınar ve o katmanın
dışındaki nedenler testin gözünde birbirinin aynıdır.

Bunun pratik sonucu şudur: **kötü durumda en çok eleyen testi seçmek, ikiye bölmeyi bulmak değil,
en az kötü bölmeyi bulmaktır.** 16 olasılığı ikili aramayla dört adımda bitirme beklentisi bu test
kümesinde karşılanmaz.

## Sıra Ne Değiştiriyor

İkinci tablo üç sırayı on altı nedenin her biri doğru neden alınarak koşturur. Bilgi öncelikli sıra
ortalama **3,50** adımda bitirir; liste sırası ve zayıf sıra **5,81** adımda. En kötü adım bilgi
öncelikli sırada **6**, ötekilerde **8**'dir — sekiz, test sayısının tamamıdır, yani bu iki sıra
kötü durumda bütün testleri koşturur.

Fark yaklaşık **kırk beş dakikalık bir olayda kırk beş dakikalık bir fark** demek değildir; adım
başına maliyet testten teste değişir. Ama sayı yön verir: aynı test kümesi, aynı bilgi ve aynı
araçlarla, yalnız sıra değiştirilerek ortalama adımın üçte birinden fazlası kazanılır.

Üçüncü tablo bunun her nedende geçerli olmadığını gösterir. `hizmet-yanlis-ucta` nedeninde bilgi
öncelikli sıra 2, zayıf sıra 4, liste sırası 5 adımdır. `izin-degisikligi` nedeninde ise zayıf sıra
7, liste sırası 6 adımdır — zayıf sıra liste sırasından **daha kötüdür**. `ag-kablosu` nedeninde
liste ve zayıf sıraların ikisi de 8 adım koşar, bilgi öncelikli sıra 4.

## Sabit Sıra, Uyarlanan Kötü Sıradan Daha Çok Boş Adım Üretir

İkinci tablonun üçüncü satırı dersin en beklenmedik sayısını verir. Hiçbir olasılığı elemeyen adım
sayısı bilgi öncelikli sırada **0**, liste sırasında **22**, zayıf sırada **12**'dir.

Zayıf sıra, kötü durumda en az eleyen testi bile bile öne alır; yine de liste sırasının yarısı kadar
boş adım üretir. Nedeni, ikisi arasındaki gerçek farkın "iyi seçim / kötü seçim" değil,
**uyarlanan / uyarlanmayan** olmasıdır. Zayıf sıra her adımda o anki aday kümesine bakar ve kümeyi
hiç bölmeyen bir test kalmadıysa onu seçmez; liste sırası aday kümesine hiç bakmaz ve sırasıyla,
zaten elenmiş bir katmanı sınayan testleri de koşturur.

Boş adım, sorun gidermenin görünmeyen maliyetidir. Koşulur, zaman alır, bir sonuç üretir ve o sonuç
aday kümesini değiştirmez — ama sonucun kendisi bir bilgi gibi görünür, çünkü "şu da normalmiş"
cümlesi bir ilerleme duygusu verir. **Sayılması gereken şey koşulan test sayısı değil, elenen
olasılık sayısıdır.** Liste sırasının 22 boş adımı, koşan ama hiçbir şey elemeyen 22 sınamadır.

## Eleme Sayısı Tek Ölçü Değil

Model her nedeni eşit olası sayar ve testleri yalnız eleme güçlerine göre sıralar. Bir olayda iki
şey daha vardır ve ikisi de bu tabloda yoktur.

Birincisi **nedenlerin olasılığıdır**. On altı nedenin hepsi aynı sıklıkta görülmez; bir yapılandırma
değişikliğinden hemen sonra ortaya çıkan bir belirtinin arkasında `yapilandirma-hatasi` bulunma
olasılığı ötekilerden yüksektir. Eleme sayısı bunu görmez: en çok eleyen testi seçer, en olası
nedeni sınayan testi değil. İkisi çakışmıyorsa seçim, beklenen adım sayısı ile en kötü adım sayısı
arasında bir tercihtir. Belirtiyi hızla kapatmak beklenen sayıyı, kötü durumu sınırlamak en kötü
sayıyı önemser.

İkincisi **testin maliyetidir**. Modelde her adımın maliyeti eşittir; gerçekte bir test bir komutla
saniyeler içinde, bir başkası saha ekibinin şubeye gitmesiyle saatler içinde biter. Üç olasılık
eleyen pahalı bir test ile iki olasılık eleyen ucuz bir test arasındaki seçim, eleme sayısına
bakılarak yapılamaz. `ag-kablosu` ile `anahtar-uc-durumu` ayrımının yeni bir gözlem istemesi tam
olarak böyle bir kalemdir: ayrımın bedeli bir ziyarettir.

Bu iki ekseni eklemek modeli değiştirmez, **okunmasını** değiştirir. Tablodaki 3,50 sayısı,
adımların eşit maliyetli ve nedenlerin eşit olası olduğu durumda geçerlidir; bu iki varsayım
yazılmadan sayı bir hedefe dönüştürülemez. Ölçümün değeri, hangi varsayımla üretildiği yazıldığında
ortaya çıkar.

## Yöntemin Tabanı

Dördüncü tablo yöntemin nerede durduğunu yazar. On altı nedenin **ikisi** hiçbir testle
ayrılamaz: `ag-kablosu` ile `anahtar-uc-durumu`. İkisi de aynı testte aynı sonucu verir, çünkü
sunucudan bakıldığında ikisinin belirtisi aynıdır.

Bu yüzden üç sıranın da tek nedene indirdiği senaryo sayısı **14/16**'dır. Kalan iki senaryoda
yöntem iki olasılıkla durur ve bu bir eksiklik değil, **test kümesinin çözünürlüğüdür**. Ayrımı
yapmak yeni bir sıra değil, yeni bir test ister — bu modelde sunucunun dışından, bağlantının öteki
ucundan yapılacak bir gözlem.

Bunun bir karar karşılığı vardır. Bir sorun giderme yordamı yazılırken önce test kümesinin
ayıramadığı neden çiftleri çıkarılır; o çiftler için ya yeni bir gözlem eklenir ya da ayrım
yapılmadan uygulanabilecek tek bir düzeltme tanımlanır. Ölçüm ağında `ag-kablosu` ile
`anahtar-uc-durumu` ayrımı yapılmadan da ilerlenebilir: iki neden de saha ekibinin aynı ziyaretinde
görülür. **Ayırt edilemeyen iki neden, düzeltmeleri aynıysa bir sorun değildir.**

## Özet

- Sorun giderme, hipotez başına elenen olasılık sayısıyla ölçülür; bu sayı kötü durumda okunur,
  çünkü hangi sonucun çıkacağı önceden bilinmez.
- Testler dengesizdir: sekiz testin en güçlüsü 16 olasılıktan kötü durumda yalnız 3'ünü eler, en
  zayıfı 1'ini. İkiye bölme beklentisi gerçek test kümelerinde karşılanmaz.
- Bilgi öncelikli sıra ortalama 3,50 adımda, liste ve zayıf sıra 5,81 adımda bitirir; en kötü adım
  6'ya karşı 8'dir. Sıra, yeni bir araç almadan kazanılan tek şeydir.
- Hiçbir olasılığı elemeyen adım sayısı 0, 22 ve 12'dir. Sabit liste sırası, bile bile zayıf
  seçim yapan uyarlanan sıradan iki kat fazla boş adım üretir; belirleyici olan seçimin iyiliği
  değil, aday kümesine bakılıp bakılmamasıdır.
- Eleme sayısı tek ölçü değildir: nedenlerin olasılığı ve testlerin maliyeti tabloda yoktur. 3,50
  sayısı, adımların eşit maliyetli ve nedenlerin eşit olası sayıldığı varsayımıyla geçerlidir.
- İki neden hiçbir testle ayrılamaz; üç sıra da 16 senaryonun 14'ünü tek nedene indirir. Kalan
  ayrım yeni bir sıra değil yeni bir gözlem ister, ve düzeltmeleri aynıysa ayrım gerekmeyebilir.

## Sonraki Adım

Bu konu tek bir makinenin sınırlarını kalem kalem saydı. Donanımın çizdiği sekiz sınır ve ikisinin
envanterin tamamını açması; işletim sistemi ailelerinin aynı istekte 4, 11 ve 12 kalemde ayrışması;
temiz kurulumun bıraktığı 17 riskli kalem ve kapanmayan 5'i; iki izin modelinin 6 istekte ifade
sınırına çarpması; iki yönetim biçiminin aynı 11 denetim izi kalemini bırakması; ve şimdi
belirtiden nedene giden yolun 3,50 adıma inmesi. Makinenin sınırı artık bir sıfat değil, bir
sayıdır.

Bütün bu ölçümlerin sessiz bir varsayımı vardı: sayılan makine **kendi donanımının üzerinde
koşuyor**. Bugün bu makinelerin çoğu için doğru değildir. Şube sunucusunun altında bir katman daha
vardır ve o katmanın sınırı hiç ölçülmedi: hangi kalem konukla konak arasında paylaşılıyor, o
sınırı geçmek kaç kalem istiyor ve sınır düştüğünde kaç kaleme erişiliyor. Sonraki konu
**Sanallaştırma ve Yedeklilik** bu soruyla başlar.
