---
title: 'Anlaşmazlık Çözümü'
source: 'https://academia.sh/tr/kurslar/kod-inceleme/anlasmazlik-cozumu'
course: 'Kod İnceleme ve Ekip Süreci'
language: tr
updated: '2026-08-17T18:10:46+00:00'
license: 'CC BY-SA 4.0'
---

# Anlaşmazlık Çözümü

Yirmi iki bulgunun altısı tasarım anlaşmazlığına döndüğünde kural yokluğu 6 inceleme turu ve 36 birim bekleme üretip 8 kusuru kodda bırakır; ölçüte bağlama 3 tur ve 18 birimle kodda yalnız 2 bırakır.

Önceki ders inceleme notunun yazımını ölçtü ve tek bir kaynak buldu: notta olmayan bilgi,
sonraki inceleme turunda geri isteniyordu. Eyleme dönük yazım 2 inceleme turunda kapanıyor,
kapanma ölçütü olmayan yazım 4 turda. Ölçümün varsayımı şuydu — yeterince alışveriş
yapıldığında not kapanır.

Bu varsayım her notta doğru değildir. Kimi bulguda eksik olan bilgi değil, **karardır**:
aynı kod öğesi hakkında iki tasarım savunulur, ikisi de çalışır, ikisinin de testi geçer.
Böyle bir notta alışveriş sayısını artırmak kapanmaya yaklaştırmaz; aynı iki gerekçe her
inceleme turunda yeniden yazılır. Bu dersin sorusu şudur: kararsız kalan bir bulgu kaç
inceleme turu taşınır, ve onu karara bağlayan kural beklemeye ne ekler.

## Anlaşmazlık ile Eksik Bilgi Ayrımı

İki not birbirine benzer görünür ama farklı davranır ve ayrım mekanik olarak yapılabilir.
Sınama tek sorudur: **notu kapatacak bilgi taraflardan birinde var mı?**

Varsa not eksik bilgi notudur. Yazan boş girdi durumunda ne olması gerektiğini biliyordur ya
da inceleyen imzanın neden bozulduğunu biliyordur; bilgi bir alışverişle karşıya geçer ve not
kapanır. Önceki dersin bütün ölçümü bu sınıftaydı.

Yoksa not bir **tasarım anlaşmazlığıdır**. Eksik olan şey kimsenin sahip olmadığı bir
bilgidir: hangi tasarımın daha iyi olduğu, mevcut ölçütlerle belirlenemiyordur. Böyle bir
notta alışveriş bilgi taşımaz, yalnız gerekçeleri tekrarlar. Ölçüm bu tekrarın maliyetini
sayacak.

Anlaşmazlığın hangi eksenlerde çıktığı da rastgele değildir. Biçim ekseni bir araca
devredildiğinde tartışma kalmaz; testin bir durumu kapsayıp kapsamadığı ya da belgede bir
satırın bulunup bulunmadığı gözlemle çözülür. Anlaşmazlık asıl olarak **arayüz** ve
**gerçekleştirim** eksenlerinde çıkar, çünkü bu iki eksende birden çok savunulabilir çözüm
vardır. Ölçüm anlaşmazlıkları yalnız bu iki sınıftan seçiyor.

Kurumsal karar alma düzenleri, yetki dağılımı ve ekip yapısı bu dersin konusu değildir;
onlar **Süreç, Ekip ve Teslimat** kursunda kuruldu. Burada ölçülen şey incelemenin kendi
sayılarıdır: inceleme turu, bekleme ve kodda kalan kusur.

## Dört Karara Bağlama Kuralı

Ölçüm aynı 22 bulguyu dört kuralla işletiyor. Kurallar birbirinin yerine geçer; ekip
bunlardan birini önceden seçer ve anlaşmazlık çıktığında uygular.

**Kural yok.** Anlaşmazlık her inceleme turunda yeniden tartışılır. Tartışmanın bir bitiş
düzeneği olmadığı için değişikliğin açık kalabildiği en çok inceleme turu dolar ve
anlaşmazlıklar açık kalır.

**Ölçüte bağlama.** Tartışma yazılı bir ölçüte götürülür: arayüz sözleşmesindeki bir kural,
ölçülmüş bir sayı, bir testin geçip geçmemesi. Ölçüt tarafların tercihinden bağımsızdır ve
karar ondan çıkar.

**Sahibin kararı.** Kod sahipliği tanımlıysa, ölçütle çözülemeyen anlaşmazlıkta kararı sahip
verir. Karar tek alışverişte gelir ama sahip incelemenin içinde değildir; sürece dahil
edilmesi ek bekleme yükler.

**Ayrı iş öğesine ayırma.** Anlaşmazlık bu değişiklikten çıkarılır ve kendi iş öğesine
taşınır. Değişiklik hemen kapanır; tasarım tartışması sürer ve kusur bu değişiklikte
düzeltilmez.

```text
# ogretilen ornek not , calistirilmamistir , olcum degildir

anlaşmazlık
  Aynı işlev için iki tasarım savunuluyor: seçenekleri tek bir sözlük
  parametresinde toplamak ya da ayrı adlandırılmış parametreler bırakmak.
  İki yazım da çalışıyor ve iki yazımın da testi geçiyor.

ölçüte bağlanmış hâli
  Karar ölçütü, arayüz sözleşmesindeki geriye dönük uyumluluk kuralıdır:
  yeni seçenek eklendiğinde eski çağrılar değişmeden çalışmalıdır. Sözlük
  parametresi bu kuralı sağlıyor, ayrı parametreler her eklemede imzayı
  değiştiriyor. Not, sözlük parametresi seçilip belgeye yazıldığında kapanır.
```

Örnek, ölçüte bağlamanın ne yaptığını gösteriyor: tartışmayı bitiren şey tarafların ikna
olması değil, **kararı verecek yerin değişmesidir.** Karar artık nottan değil, sözleşmeden
çıkıyor ve not önceki dersin sınamasından geçen bir kapanma ölçütü kazanıyor.

Ölçümün varsayımları:

- **IK13** — Yapılandırma sabittir: tek inceleyici, beş eksen, 600 satır, dikkat 12 öbek.
  Bulunan 22, kaçan 2 ve kaçanların ikisi de **eksik gereksinim** sınıfındadır. Karara
  bağlama kuralı bu sayıları değiştirmez.
- **IK14** — Anlaşmazlık yalnız **arayüz** ve **gerçekleştirim** sınıflarındaki bulgularda
  çıkabilir. Bu sınıflarda bulunan 9 notun hangilerinin anlaşmazlığa döndüğü `uretec` ile
  seçilir.
- **IK15** — Anlaşmazlık olmayan not eyleme dönük yazılmıştır ve **2** alışverişte kapanır.
  Önceki dersin en iyi rejimi bu derste taban kabul edilir.
- **IK16** — Kural yokken anlaşmazlık hiç kapanmaz: her inceleme turunda yeniden tartışılır.
  Ölçüte bağlama ve sahibin kararı **3** alışverişte kapatır; ayrı iş öğesine ayırma **2**
  alışverişte kapatır ama kusuru koddan çıkarmaz.
- **IK17** — Bir inceleme turu beklemeye **6 birim** ekler. Sahibin kararı ayrıca **6 birim**
  sahip beklemesi ekler: sahip incelemenin dışındadır ve sıraya girmesi gerekir.
- **IK18** — Bir değişiklik en çok **6 inceleme turu** açık kalabilir. Bu sınırda hâlâ açık
  olan notların kusurları kodda kalır.
- **IK19** — Kümenin çözünürlüğü 24 kusurda **1/24 = 0,042**'dir; bekleme birim başına
  ölçülür ve bir inceleme turundan küçük fark bu kümeyle savunulamaz.

## Ölçüm

```python
"""Anlasmazlik cozumu: ayni 22 bulgu, dort karara baglama kurali.

Bolum 1 - anlasmazlik hangi bulgularda cikiyor.
Bolum 2 - her kural kac inceleme turu, ne kadar bekleme ve kodda ne birakiyor.
"""
TOHUM = 20260815
EKSENLER = ("arayuz", "gerceklestirim", "test", "belge", "bicim")
YAZILMAYAN = "eksik gereksinim"
SINIFLAR = EKSENLER + (YAZILMAYAN,)
DIKKAT = 12
OBEK = 50
TUR_BEKLEME = 6      # bir inceleme turunun beklemeye ekledigi birim
KAPAK = 6            # bir degisikligin acik kalabildigi en cok inceleme turu
TARTISILIR = ("arayuz", "gerceklestirim")   # anlasmazlik cikabilen siniflar
EYLEME_DONUK = 2     # anlasmazlik olmayan notun kapanma alisverisi
# alisveris None ise anlasmazlik her turda yeniden tartisilir ve kapanmaz.
KURALLAR = {
    "kural yok": {"alisveris": None, "sahip": 0, "erteler": False},
    "ölçüte bağlama": {"alisveris": 3, "sahip": 0, "erteler": False},
    "sahibin kararı": {"alisveris": 3, "sahip": TUR_BEKLEME, "erteler": False},
    "ayrı iş öğesi": {"alisveris": 2, "sahip": 0, "erteler": True},
}


def uretec(tohum):
    d = tohum % 2147483646 + 1

    def r(n):
        nonlocal d
        d = (d * 48271) % 2147483647
        return d % n
    return r


def degisiklik(satir, kusur_sayisi=24, tohum=TOHUM):
    r, kusurlar = uretec(tohum), []
    obek_sayisi = max(1, satir // OBEK)
    for i in range(kusur_sayisi):
        kusurlar.append({"no": i + 1, "sinif": SINIFLAR[r(6)],
                         "obek": r(obek_sayisi)})
    return {"satir": satir, "obek": obek_sayisi, "kusurlar": kusurlar}


def incele(d, eksenler, dikkat=DIKKAT):
    okunan = set(range(min(dikkat, d["obek"])))
    return {k["no"] for k in d["kusurlar"]
            if k["sinif"] in eksenler and k["obek"] in okunan}


def dongu(gereken, kapak=KAPAK, tur_basina_bekleme=TUR_BEKLEME):
    """Her inceleme turu acik notlarin bir alisverisini tuketir."""
    acik, tur, bekleme, not_turu = list(gereken), 0, 0, 0
    while acik and tur < kapak:
        tur += 1
        bekleme += tur_basina_bekleme
        not_turu += len(acik)
        acik = [g - 1 for g in acik if g > 1]
    return tur, bekleme, not_turu, len(acik)


TAM = set(EKSENLER)
d = degisiklik(600)
bulunan = [k for k in d["kusurlar"] if k["no"] in incele(d, TAM)]
kacan = [k for k in d["kusurlar"] if k not in bulunan]
r = uretec(TOHUM)
for k in bulunan:
    k["anlasmazlik"] = k["sinif"] in TARTISILIR and r(2) == 0
anl = [k for k in bulunan if k["anlasmazlik"]]

print(f"bulunan {len(bulunan)}, kaçan {len(kacan)}, bunun yazılmayan sınıfı "
      f"{sum(1 for k in kacan if k['sinif'] == YAZILMAYAN)}")
print(f"tartışılır sınıfta bulunan "
      f"{sum(1 for k in bulunan if k['sinif'] in TARTISILIR)}"
      f", anlaşmazlığa dönen {len(anl)}")
print("anlaşmazlık sınıfları: " +
      ", ".join(f"{s} {sum(1 for k in anl if k['sinif'] == s)}"
                for s in TARTISILIR))
print()
print(f"{'kural':<16s} {'tur':>4s} {'bekleme':>8s} {'not-turu':>9s} "
      f"{'anlaşmazlık not-turu':>21s} {'kapanan':>8s} {'ertelenen':>10s} "
      f"{'kodda kalan':>12s}")
for ad, kural in KURALLAR.items():
    gereken = [kural["alisveris"] or KAPAK + 1 if k["anlasmazlik"]
               else EYLEME_DONUK for k in bulunan]
    tur, bekleme, nt, acik = dongu(gereken)
    anl_nt = sum(min(g, tur) for g, k in zip(gereken, bulunan)
                 if k["anlasmazlik"])
    ertelenen = len(anl) if kural["erteler"] else 0
    kapanan = len(bulunan) - acik - ertelenen
    print(f"{ad:<16s} {tur:4d} {bekleme + kural['sahip']:8d} {nt:9d} "
          f"{anl_nt:21d} {kapanan:8d} {ertelenen:10d} "
          f"{acik + ertelenen + len(kacan):12d}")
```

```
bulunan 22, kaçan 2, bunun yazılmayan sınıfı 2
tartışılır sınıfta bulunan 9, anlaşmazlığa dönen 6
anlaşmazlık sınıfları: arayuz 1, gerceklestirim 5

kural             tur  bekleme  not-turu  anlaşmazlık not-turu  kapanan  ertelenen  kodda kalan
kural yok           6       36        68                    36       16          0            8
ölçüte bağlama      3       18        50                    18       22          0            2
sahibin kararı      3       24        50                    18       22          0            2
ayrı iş öğesi       2       12        44                    12       16          6            8
```

## Kararsız Bulgunun Taşıdığı

Yirmi iki bulgunun **9**'u tartışılır sınıftadır ve bunların **6**'sı anlaşmazlığa dönüyor:
arayüzde 1, gerçekleştirimde 5. Kalan 16 not eksik bilgi notudur ve önceki dersin taban
rejiminde, 2 alışverişte kapanır.

Kural yokken tablo çöküyor. Süreç **6 inceleme turuna** ve **36 birim beklemeye** çıkıyor;
sonunda **16** not kapanıyor, **6** anlaşmazlık açık kalıyor ve kodda kalan kusur **8**
oluyor. Sekizin **2**'si hiçbir eksenin aramadığı sınıftır — eksik gereksinim, incelemenin
göremeyeceği kusur. Kalan **6**'sı görüldü, yazıldı, tartışıldı ve **karara
bağlanmadığı için** kodda kaldı.

Anlaşmazlık not-turu sütunu maliyetin nereden geldiğini tek sayıda veriyor: **36**. Altı
anlaşmazlığın her biri altı inceleme turu boyunca açık kaldı; 6 × 6 = 36. Toplam yükün
**68**'inin 36'sı, yani yarıdan fazlası, hiçbir şey üretmeyen tekrardır. Eksik bilgi
notlarının hepsi ikinci turda kapanmıştı; üçüncü turdan altıncı tura kadar geçen dört tur
yalnız altı anlaşmazlık için harcandı.

Buradaki sayı çifti tanıdıktır. Ortak kurgunun en kötü eksen yapılandırması da **6 inceleme
turu / 36 bekleme** üretiyordu. İki farklı neden, aynı fatura: orada dar bir eksen listesi
yüzünden kusurlar ilk turda görülemiyordu, burada görülen kusurlar karara bağlanamıyor. Her
iki durumda da inceleme turu sayısını uzatan şey, **ilk turda kapanmayan işin miktarıdır.**

Bu eşleşme ölçütlerin okunmasıyla ilgili bir uyarı da veriyor. Dışarıdan bakıldığında iki
süreç aynı iki sayıyı gösteriyor; sayıların hangisinin eksen darlığından, hangisinin karara
bağlanmamış tartışmadan geldiği tablonun kendisinde yazılı değildir. Aynı fatura, iki ayrı
düzeltme gerektirir.

## Karara Bağlamanın İki Yolu

Ölçüte bağlama en dengeli satırdır: **3 inceleme turu**, **18 birim bekleme**, **22 kapanan**
ve kodda kalan **2**. İkisi de eksik gereksinim, yani incelemenin ulaşamayacağı sınıf. Bu
kural, incelemenin bulabildiği her şeyi teslim eden tek kuraldır.

Bedeli kural yokluğuna göre negatiftir: 36 birimden 18 birime iner. Karara bağlama kuralı
beklemeyi **artırmıyor**, azaltıyor. Ölçümün en pratik sonucu budur — anlaşmazlık çözümü bir
ek süreç değil, sürecin en pahalı kalemini ortadan kaldıran şeydir.

Sahibin kararı aynı sonucu veriyor: **22 kapanan**, kodda kalan **2**. Aradaki fark bekleme
sütununda: **24** birim, ölçüte bağlamadan **6** birim fazla. Fark tam olarak bir inceleme
turudur ve nedeni yapısaldır — sahip incelemenin içinde değildir, dahil edilmesi gerekir. Bu
kural ölçütün olmadığı ya da ölçütlerin çeliştiği anlaşmazlıklar için ayrılırsa fazladan 6
birim yalnız gereken yerde ödenir.

## Hangi Ölçüt Bağlar

Ölçüte bağlamanın işe yaraması ölçütün bir niteliğine dayanır: **tarafların tercihinden
bağımsız olması ve önceden yazılmış olması.** İki koşuldan biri eksikse tartışma ölçüt
tartışmasına dönüşür ve tablodaki 18 birim geri gelmez.

Bağlayan ölçütler bellidir. **Arayüz sözleşmesi** geriye dönük uyumluluk sorularını kapatır;
sözleşmenin ne söylediği tartışma sırasında değil, önceden yazılmıştır. **Ölçülmüş bir sayı**
başarım anlaşmazlıklarını kapatır: iki tasarımın hangisinin daha hızlı olduğu bir tercih
değil, bir ölçüm sonucudur. **Bir testin geçip geçmemesi** davranış anlaşmazlıklarını
kapatır. **Belgede yazılı bir kural** — adlandırma düzeni, katman sınırı, bağımlılık yönü —
yapısal anlaşmazlıkları kapatır.

Bağlamayan ölçütler de bellidir ve hepsinin ortak yanı, tartışma anında üretilmiş olmalarıdır:
kişisel alışkanlık, "daha temiz" ya da "daha okunur" gibi ölçülemeyen sıfatlar, ve başka bir
yerde şöyle yapıldığı gözlemi. Temiz kod ilkeleri **Temiz Kod** kursunda kuruldu ve orada bir
kural listesidir; bir anlaşmazlığı kapatabilmeleri için o listenin ekipte yazılı ve
bağlayıcı olması gerekir. Yazılı değilse ölçüt değil, ikinci bir tercihtir.

Buradan pratik bir sonuç çıkar: ölçüt tartışma sırasında değil, **tartışmadan önce** yazılır.
Ölçümdeki 36 birimlik fatura, ölçütün eksikliğinin faturasıdır — ve o eksiklik incelemenin
içinde giderilemez.

## Erteleme Bir Karardır

Ayrı iş öğesine ayırma tablonun en hızlı satırıdır: **2 inceleme turu**, **12 birim
bekleme**, toplam yük **44** not-turu. Bu sayılar tesadüf değildir; anlaşmazlıkların
tartışılmadığı bir süreç, önceki dersin eyleme dönük rejimiyle aynı sayıları verir.

Ödenen bedel sağdaki iki sütunda: **6 ertelenen** ve kodda kalan **8** kusur. Ertelenen
notlar kaybolmuş değildir, kendi iş öğelerinde durur; ama o değişiklik birleştiğinde kod, 6
kusuru üzerinde taşır. Kodda kalan sayısı bakımından erteleme ile kural yokluğu **aynı
sonucu** veriyor: ikisinde de 8. Fark, ertelemenin bunu **24 birim daha az beklemeyle** ve
bir kayıt bırakarak yapmasıdır.

Bu yüzden erteleme bir kaçış değil, bir karardır — ama ancak kaydı gerçekten tutulduğunda.
İş öğesi açılmadan yapılan erteleme, ölçümde kural yokluğuyla aynı yere düşer: 6 kusur kodda,
kaydı hiçbir yerde. Ertelemenin sınırı da buradan çıkar: anlaşmazlığın kendisi ertelenebilir,
ama anlaşmazlığın altındaki kusur bir hataysa ertelenemez. Tasarımın hangi biçimde
yazılacağı bekleyebilir; boş girdide sıfıra bölünmesi bekleyemez.

## Özet

- Tasarım anlaşmazlığı eksik bilgi notundan mekanik olarak ayrılır: notu kapatacak bilgi
  taraflardan birinde varsa not eksik bilgi notudur, yoksa anlaşmazlıktır.
- Anlaşmazlık **arayüz** ve **gerçekleştirim** eksenlerinde çıkar; ölçümde tartışılır
  sınıftaki 9 bulgunun **6**'sı anlaşmazlığa dönüyor.
- Kural yokken süreç **6 inceleme turu / 36 birim bekleme** tutar, **16** not kapanır ve
  kodda **8** kusur kalır. Toplam yükün **68** not-turunun **36**'sı yalnız altı
  anlaşmazlığın tekrarıdır.
- Ölçüte bağlama **3 tur / 18 birim** ile **22** notun hepsini kapatır; kodda kalan **2**,
  hiçbir eksenin aramadığı **eksik gereksinim** sınıfıdır. Sahibin kararı aynı sonucu verir
  ama sahip incelemenin dışında olduğu için **24** birim tutar.
- Ayrı iş öğesine ayırma en hızlı satırdır (**2 tur / 12 birim**) ama kodda **8** kusur
  bırakır — kural yokluğuyla aynı sayı, çok daha az beklemeyle ve bir kayıtla.

## Sonraki Adım

Üç ders üç ayrı nedenle aynı iki sayıyı üretti: inceleme turu ve bekleme. Değişiklik boyutu
okunan öbeği belirledi, not yazımı kapanma hızını, karara bağlama kuralı ise kapanıp
kapanmayacağını. Sonraki ders bu iki sayıyı doğrudan ölçüt olarak alıyor: eksen atamasının
kendisi inceleme turu ve bekleme üzerinde ne yapıyor, inceleme kuyruğunun sağlığı nasıl
okunur, ve bu ölçütlerin neden kişi başına raporlanmadığı.
