---
title: 'Gerçekleştirim Anlamı'
source: 'https://academia.sh/tr/kurslar/kod-inceleme/gerceklestirim-anlami'
course: 'Kod İnceleme ve Ekip Süreci'
language: tr
updated: '2026-08-17T18:10:45+00:00'
license: 'CC BY-SA 4.0'
---

# Gerçekleştirim Anlamı

Bir eksenin marjinal katkısı hangi eksenlerin zaten açık olduğundan bağımsızdır: gerçekleştirim iki ayrı sırada da 6 kusur ekler ve aynı eksene bir, üç ya da on iki kişi bakması 6 sayısını değiştirmez.

Önceki ders beş eksenin bulduğu kümelerin ayrık olduğunu ölçtü: ikili kesişimlerin toplamı
**0** ve her eksenin bulduğu yalnız o eksende görünüyor. Bundan bir sonuç doğrudan çıkar ama
henüz sınanmadı — eğer paylar ayrıksa, bir eksenin katkısı **hangi eksenlerin zaten açık
olduğundan bağımsız** olmalıdır.

Bu ders o sonucu sınar ve sınamayı en büyük tekil payın sahibi olan eksende, **gerçekleştirim**
ekseninde yapar. Ölçüm iki soru sorar: eksenler farklı sıralarla açıldığında eğri değişir mi,
ve aynı eksene daha çok kişi bakması o eksenin payını büyütür mü.

## Gerçekleştirim Ekseni Ne Sorar

**Gerçekleştirim (implementation)** ekseni, kodun **ne yapması gerektiği** ile **ne yaptığı**
arasındaki farkı arar. Arayüz ekseninden ayrılan yanı buradadır: arayüzde karşılaştırılan iki
metin vardı — imzanın önceki ve sonraki hâli. Gerçekleştirimde karşılaştırmanın bir tarafı
metin değildir. Bir tarafta gövdenin yaptığı iş durur, öteki tarafta okuyanın o gövdenin
yapması gerektiğini düşündüğü iş.

Eksen üç alt soruya ayrılır.

**Doğruluk.** Gövde, adının ve açıklamasının söylediği işi yapıyor mu. Bu soru en çok
görünen kusuru üretir çünkü kodun kendisi delildir: yanlış karşılaştırma yönü, ters çevrilmiş
koşul, yanlış değişkenin döndürülmesi.

**Kenar durum (edge case).** Gövde, alışılmış girdinin dışında da doğru mu. Boş koleksiyon,
tek elemanlı koleksiyon, sınır değerin kendisi, sıfıra bölme, taşma, eşzamanlı erişim. Kenar
durum kavramı Yazılım Kalitesi ve Test müfredatının test derslerinde kuruldu; burada onun
inceleme tarafı ölçülüyor.

**Karmaşıklık.** Gövdenin dallanma sayısı, iç içe geçme derinliği ve tek bir yerde topladığı
sorumluluk. Adlandırma, işlev uzunluğu ve karmaşıklık ölçütlerinin kendisi Temiz Kod kursunda
kuruldu ve burada tekrarlanmıyor. Bu derste bunlar bir **kural listesi** değildir; bir
**inceleme bulgusudur** — incelemenin gördüğü, not düştüğü ve kapanmasını istediği şeydir.
Aradaki fark önemlidir: kural listesi değişikliğe uygulanır, bulgu ise değişikliğin belirli
bir yerini gösterir.

```text
# ogretilen inceleme notu ornegi , calistirilmamistir

dogruluk      Toplam hesaplanirken son eleman disarida kaliyor; ust sinir
              dahil olmali. Ayni girdi icin beklenen deger 15, donen 10.

kenar durum   Liste bos oldugunda ilk eleman okunuyor. Bos girdi icin bir
              erken donus ya da bos degerin acikca ele alinmasi gerekiyor.

karmasiklik   Bu govdede dort ic ice kosul var ve ucuncusu ilk ikisinin
              disinda hicbir durumda calismiyor. Kosul ayri bir yardimci
              islevle disari alinirsa dallanma ikiye iner.
```

Üç notun ortak biçimi şudur: **nerede, ne, hangi koşulda.** Üçü de değişikliğin bir yerini
gösteriyor ve kapanma koşulunu adlandırıyor. Bu blok bir örnektir ve çalıştırılmaz; dersin
sayıları yalnız ölçüm bloğundan gelir.

## Doğruluğun Kâhini Nerede

Arayüz ekseninin karşılaştıracağı iki metin vardı; gerçekleştirim ekseninin bir tarafı
yoktur. Okuyan, kodun **ne yapması gerektiğini** bir yerden çıkarmak zorundadır ve o yer
değişikliğin içinde olmayabilir.

Üç kaynak kullanılabilir. **Değişikliğin açıklaması** niyeti tarif eder; kısa yazıldığında
okuyan niyeti gövdeden çıkarmaya çalışır ve bu döngüseldir — gövdenin doğru olup olmadığı,
yine gövdeye bakılarak karara bağlanamaz. **Testler** beklenen davranışı örnekle verir; ama
testler aynı değişiklikte yazıldıysa gövdeyle aynı yanlış anlayışı paylaşabilirler. **Belge**
davranışı sözle verir ve değişiklikle birlikte güncellenmemişse eski davranışı anlatır.

Üç kaynağın da kusurlu olabileceği açık ve bu bir rastlantı değil: aynı değişiklikte üçü de
aynı elden çıkar. Gerçekleştirim ekseninin pahalı olmasının nedeni budur — okuyan, kodun ne
yapması gerektiğine dair bağımsız bir yargıya sahip olmak zorundadır.

Bunun ölçümdeki karşılığı yoktur ve olmaması bilinçlidir. Kurgu her ekseni eşit maliyette
sayar: eksen açıksa sınıfı bulunur. Gerçek bir incelemede gerçekleştirim ekseni kusur başına
en pahalı eksendir ve biçim ekseni en ucuzu. Tablo bulunan kusuru sayar, harcanan dikkati
saymaz; **iki sayının ayrı olduğu bu kursun son dersine kadar açık tutulur.**

## Katkı Sıraya Bağlı mı

Bir eksenin **marjinal katkısı**, o eksen açıldığında bulunan kusur sayısının ne kadar
arttığıdır. Paylar ayrıksa bu artış her zaman sınıfın büyüklüğü kadar olmalıdır ve açılma
sırası hiçbir şey değiştirmemelidir.

Bunun sınanması gerekir, çünkü sezgi tersini söyler. Bir incelemede eksenler gerçekten sırayla
açılır: okuma bir yerden başlar ve ilerledikçe okuyanın bakışı değişir. Sezgi, ilk açılan
eksenin "kolay" kusurları toplayacağını ve sonrakilere daha az iş kalacağını söyler. Ölçüm bu
sezgiyi iki ayrı sırayla sınar: biri gerçekleştirimden başlar, öteki biçimden.

## Ölçümün Varsayımları

- **IE16** — Ortak kurgu değişmez: 600 satır, 12 öbek, 24 kusur, dikkat 12 öbek. Okunmamış
  öbek yoktur.
- **IE17** — Eğri, tek bir inceleyenin eksen kümesinin adım adım büyütülmesidir. Her adımda
  aynı değişiklik yeniden okunur; okuma bütçesi adım sayısıyla tükenmez.
- **IE18** — Marjinal katkı, o adımdaki kümülatif bulunan sayısından bir önceki adımınkinin
  çıkarılmasıdır.
- **IE19** — İki sıra aynı beş ekseni içerir ve yalnız açılma düzenleri farklıdır; sıra B,
  sıra A'nın tersidir.
- **IE20** — İkinci bölümde aynı eksene bakan inceleyenler birbirinin aynıdır; kurgu, ikinci
  bir okumanın birincinin gözünden kaçanı yakalaması gibi bir pay içermez. Bu yalınlaştırma
  bilerek yapılır ve ölçümün sonucunu tek bir değişkene bağlar.
- **IE21** — "Okuma" sütunu yapılan inceleme sayısıdır; aynı kişinin iki kez okuması ile iki
  kişinin birer kez okuması bu kurguda ayırt edilmez.
- **IE22** — Oran, bulunanın 24'e bölümüdür. Kümenin çözünürlüğü **1/24 = 0,042**'dir.

## Ölçüm

```python
"""Gerceklestirim ekseni: eksen ekleme egrisi ve ayni eksene kisi ekleme.

Bolum 1 - eksenler iki ayri sirayla acilinca kumulatif bulunan ve marjinal.
Bolum 2 - gerceklestirim ekseni acik, kapali ve cok okumayla.
"""
TOHUM = 20260815
EKSENLER = ("arayuz", "gerceklestirim", "test", "belge", "bicim")
YAZILMAYAN = "eksik gereksinim"
SINIFLAR = EKSENLER + (YAZILMAYAN,)
DIKKAT = 12
OBEK = 50


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 kurul(d, atamalar, dikkat=DIKKAT):
    bulunan = set()
    for eksenler in atamalar:
        bulunan |= incele(d, eksenler, dikkat)
    return bulunan


def egri(d, sira):
    """Eksenler tek tek acilir; her adimda kumulatif ve marjinal."""
    acik, satirlar, onceki = set(), [], 0
    for e in sira:
        acik.add(e)
        n = len(incele(d, acik))
        satirlar.append((e, n, n - onceki))
        onceki = n
    return satirlar


TAM = set(EKSENLER)
d = degisiklik(600)
A = egri(d, ("gerceklestirim", "arayuz", "test", "belge", "bicim"))
B = egri(d, ("bicim", "belge", "test", "arayuz", "gerceklestirim"))

print(f"{'adım':>4s} {'sıra A':<15s} {'toplam':>6s} {'marjinal':>8s}  "
      f"{'sıra B':<15s} {'toplam':>6s} {'marjinal':>8s}")
for i, (a, b) in enumerate(zip(A, B), start=1):
    print(f"{i:4d} {a[0]:<15s} {a[1]:6d} {a[2]:8d}  "
          f"{b[0]:<15s} {b[1]:6d} {b[2]:8d}")

print()
DORT = TAM - {"gerceklestirim"}
KURULLAR = {
    "bir inceleyen, gerçekleştirim": [{"gerceklestirim"}],
    "üç inceleyen, gerçekleştirim": [{"gerceklestirim"}] * 3,
    "on iki inceleyen, gerçekleştirim": [{"gerceklestirim"}] * 12,
    "bir inceleyen, dört eksen": [DORT],
    "bir inceleyen, beş eksen": [TAM],
}
print(f"{'kurul':<33s} {'okuma':>5s} {'bulunan':>7s} {'kaçan':>5s} "
      f"{'gerçekleştirim kaçan':>20s} {'oran':>5s}")
for ad, atama in KURULLAR.items():
    b = kurul(d, atama)
    kacan = [k for k in d["kusurlar"] if k["no"] not in b]
    gk = sum(1 for k in kacan if k["sinif"] == "gerceklestirim")
    print(f"{ad:<33s} {len(atama):5d} {len(b):7d} {len(kacan):5d} "
          f"{gk:20d} {len(b) / 24:5.3f}")
```

```
adım sıra A          toplam marjinal  sıra B          toplam marjinal
   1 gerceklestirim       6        6  bicim                7        7
   2 arayuz               9        3  belge               10        3
   3 test                12        3  test                13        3
   4 belge               15        3  arayuz              16        3
   5 bicim               22        7  gerceklestirim      22        6

kurul                             okuma bulunan kaçan gerçekleştirim kaçan  oran
bir inceleyen, gerçekleştirim         1       6    18                    0 0.250
üç inceleyen, gerçekleştirim          3       6    18                    0 0.250
on iki inceleyen, gerçekleştirim     12       6    18                    0 0.250
bir inceleyen, dört eksen             1      16     8                    6 0.667
bir inceleyen, beş eksen              1      22     2                    0 0.917
```

## Eğri Sıradan Bağımsız

Üst tablonun iki yarısı aynı beş ekseni açıyor, biri gerçekleştirimden biri biçimden
başlayarak, ve iki eğri de **22**'de bitiyor.

Marjinal sütunlar ölçümün asıl sonucu. Gerçekleştirim, sıra A'da **ilk** açılan eksen ve
katkısı **6**; sıra B'de **son** açılan eksen ve katkısı yine **6**. Biçim, B'de ilk sırada
**7** ekliyor, A'da son sırada yine **7**. Arayüz, test ve belge her iki sırada da **3**
ekliyor.

Bir eksenin katkısı, ondan önce kaç eksenin açıldığına bakmıyor. "Kolay kusurlar önce
toplanır, sonraya az iş kalır" sezgisi bu kurguda yanlış çıkıyor ve nedeni önceki derste
ölçülmüştü: paylar ayrık olduğu için tüketilecek ortak bir havuz yok. Her eksen kendi
sınıfını getiriyor ve o sınıfı başka hiçbir eksen zaten toplamış olamıyor.

Bağımsızlığın sınırı da bellidir. Bu derste dikkat tükenmiyor, çünkü değişiklik dikkat
kadar. Okuma sırasının önem kazandığı tek durum, okumanın bitmeden kesildiği durumdur: o
zaman hangi eksenin sonraya bırakıldığı doğrudan **hiç bakılmayan eksen** hâline gelir. Bu
konunun ölçümlerinde böyle bir kesilme yoktur.

Bunun doğrudan bir kullanımı var. Bir kurulun bulacağı kusur sayısı, kimin önce baktığına ya
da okumanın hangi dosyadan başladığına bakmadan, yalnız **açık eksenlerin sınıf
büyüklüklerinin toplamı** olarak önceden hesaplanabilir. Sıra bir plan değişkeni değildir;
**kapsam** olan tek değişkendir.

## Aynı Eksene Kişi Eklemek

Alt tablonun ilk üç satırı tek bir sayıyı üç kez veriyor: **6**.

Bir inceleyen gerçekleştirime bakıyor ve **6** buluyor. Üç inceleyen aynı eksene bakıyor,
yine **6**. On iki inceleyen aynı eksene bakıyor, yine **6**. Okuma sayısı bire karşı on iki
oranında arttı ve bulunan kusur **0** arttı. Oran üç satırda da **0,250**'de duruyor.

Bu, kursun ikinci iddiasının en sert biçimidir: **inceleyen eklemek kusur bulmaz.** Buradaki
"bulmaz" mecaz değil, ölçülen sayıdır — on bir fazladan okumanın getirisi sıfırdır. Kurgu
bunu bir yalınlaştırmayla elde ediyor: aynı eksene bakan ikinci okuma birincinin gördüğünü
görür. Gerçek bir incelemede ikinci okumanın küçük bir ek payı olabilir, ama bu payın
büyüklüğü hiçbir zaman **yeni bir eksen açmanın** payı kadar olmaz, çünkü ikinci okuma
tanımı gereği aynı sınıfın içinde arar.

Bu, ikinci okumanın hiçbir işe yaramadığı anlamına gelmiyor; **bulma dışında** bir işe
yaradığı anlamına geliyor. İlk dersin üç işi burada ayrışır: aynı eksene bakan ikinci okuma
kusur bulmaz ama **bilgi yayar** — o kodun ikinci bir okuru olur ve sonraki değişikliklerde
gerçekleştirim ekseninde bakabilecek kişi sayısı artar. Yeni katılan birinin deneyimli birinin
baktığı eksende okuma yapması da aynı sınıfa girer; bu bir öğrenme kararıdır.

Ayrım şurada keskinleşir: **ikinci okuma bir bulma kararıysa ölçülebilir ve getirisi 0'dır;
bir yayma kararıysa bu tabloda ölçülmez.** İkisi birbirinin yerine geçtiğinde sonuç yanlış
olur. Bir kusur kaçtıktan sonra verilen "bir kişi daha baksın" kararı, sayının söylediğine
göre bulma tarafında karşılıksızdır. Karşılığı olan karar, bakılmayan bir ekseni açmaktır.

Son iki satır aynı ölçümün öteki ucunu veriyor. Gerçekleştirim ekseni kapatıldığında, kalan
dört eksene bakan tek bir inceleyen **16** kusur buluyor ve kaçan **8**'in **6**'sı
gerçekleştirim sınıfından. Eksen geri açıldığında bulunan **22**'ye çıkıyor: oran
**0,667**'den **0,917**'ye. Tek bir ekseni açmanın getirisi **6** kusur; on bir fazladan
okumanın getirisi **0**.

## Üç Alt Sorunun Ayrı Ağırlığı

Ölçüm gerçekleştirim sınıfını tek bir sayı olarak veriyor — **6** — ve içindeki üç alt soruyu
ayırmıyor. Bu bir kurgu kararıdır; ama ayrımın pratikte bir sonucu var ve tablonun dışında
kalıyor.

**Doğruluk** kusurunun bir kanıtı vardır: yanlış sonucu üreten bir girdi gösterilebilir.
Bulgu tartışmaya kapalıdır ve kapanması tek bir düzeltmeyle olur.

**Kenar durum** kusurunun kanıtı da bir girdidir, ama o girdinin gerçekten oluşup oluşmadığı
tartışılabilir. Bulgu bu yüzden bazen bir düzeltmeyle değil, bir kararla kapanır: o durumun
kapsam dışı olduğunun yazılı hâle getirilmesiyle.

**Karmaşıklık** kusurunun gösterilebilir bir girdisi yoktur. Bulgu bugünkü bir yanlışı değil,
sonraki değişikliklerin maliyetini işaret eder ve bu yüzden kapanması için ortak bir ölçüt
gerekir. Ölçütün kendisi Temiz Kod kursunun konusudur; incelemede kalan iş, bulguyu
değişikliğin belirli bir yerine bağlamak ve neyin kapanmış sayılacağını yazmaktır.

Üçü de aynı sınıfta sayılır çünkü üçü de aynı eksenin okumasıyla bulunur. Kaç turda
kapandıkları ise ayrı bir değişkendir ve bu konunun ölçümlerine girmez.

## Özet

- Gerçekleştirim ekseni kodun ne yapması gerektiği ile ne yaptığı arasındaki farkı arar ve üç
  alt soruya ayrılır: doğruluk, kenar durum, karmaşıklık.
- Karmaşıklık burada bir kural listesi değil, bir **inceleme bulgusudur**: değişikliğin
  belirli bir yerini gösterir ve kapanma koşulunu adlandırır.
- Bir eksenin marjinal katkısı açılma sırasından bağımsızdır: gerçekleştirim iki sırada da
  **6**, biçim iki sırada da **7**, kalan üç eksen **3**'er kusur ekler ve iki eğri de
  **22**'de biter.
- Bir kurulun bulacağı sayı, açık eksenlerin sınıf büyüklüklerinin toplamıdır; okuma sırası
  bir plan değişkeni değildir.
- Aynı eksene bir, üç ve on iki okuma **6** kusur bulur; oran **0,250**'de sabit kalır. On
  bir fazladan okumanın getirisi **0**, tek bir yeni eksenin getirisi **6** kusurdur.
- Aynı eksendeki ikinci okumanın karşılığı bulmada değil bilgi yaymadadır; ikisi birbirinin
  yerine konduğunda "bir kişi daha baksın" kararı bulma tarafında karşılıksız kalır.

## Sonraki Adım

Buraya kadar iki eksen ölçüldü ve ikisinde de kaçan kusurun nedeni aynıydı: o eksene kimse
bakmıyordu. Ama kaçmanın ikinci bir nedeni daha olabilir — kusurun bulunduğu metnin hiç
okunmamış olması. Bu derste böyle bir kaçış yoktu, çünkü değişiklik dikkat kadardı. Sonraki
ders **test** ekseninde bu ikisini birbirinden ayırır: testin kendisinin taşıdığı kusurlar
okunmuş öbeklerin içinde mi duruyor, aynı öbeği başka eksenlerden okuyan inceleyenler o
kusurun üzerinden kaç kez geçiyor, ve geçtikleri hâlde neden görmüyorlar.
