---
title: 'Kod İncelemenin Amacı'
source: 'https://academia.sh/tr/kurslar/kod-inceleme/kod-incelemenin-amaci'
course: 'Kod İnceleme ve Ekip Süreci'
language: tr
updated: '2026-08-17T18:10:45+00:00'
license: 'CC BY-SA 4.0'
---

# Kod İncelemenin Amacı

Aynı değişiklikte üç inceleyen aynı eksende 6, üç inceleyen ayrı eksende 15, tek inceleyen beş eksende 22 kusur bulur; beş inceleyen beş eksende yine 22 bulur ve iki eksik gereksinim kusuru dört yapılandırmanın dördünde de kaçar.

İleri Git kursu on iki ders boyunca tek bir birimle çalıştı: bir işlemin dokunduğu nesne
sayısı. Yeniden yazma 5640 nesneye dokunuyordu, ikili arama on bir adımda bitiyordu, bir
kanca engeli erken ya da geç koyuyordu. Kapanış bu sayıların yanıtlamadığı soruyu bıraktı:
**araç tarihçeyi değiştirir, kararı insan verir.** Bir dönüşümün bedelini bilmek, o
dönüşümün yapılıp yapılmayacağını söylemez.

Bu kurs kararın verildiği yere bakar ve ölçülen birim değişir. Orada sayılan **aracın
dokunduğu nesneydi**; burada sayılan **insanın baktığı yer** — ve baktığı yerin dışında
kalan. Sorunun kendisi de değişir: bir değişikliği kaç kişinin okuduğu değil, o okumanın
neyi bulduğu ve neyi bulamadığı sorulur.

## İncelemenin Üç İşi

**Kod inceleme (code review)**, bir değişikliğin birleştirilmeden önce onu yazmayan biri
tarafından okunması ve okunanın kayda geçirilmesidir. Üç işi vardır ve üçü aynı şey
değildir.

Birincisi **hata bulmadır**: gönderilen değişiklikte doğru olmayan bir şeyi, birleştirilmeden
önce görmek. İkincisi **bilgi yaymadır**: değişikliği yalnız yazanın bilmesini engellemek;
okuyan kişi o kodun ikinci sahibi olur. Üçüncüsü **tasarım hizalamadır**: değişikliğin
deponun geri kalanıyla aynı yönde durup durmadığına bakmak.

Bu kursun ölçtüğü şey birincisidir, çünkü sayılabilen odur. Ama üçü birbirinden bağımsız
değildir: bir sonraki bölümde kurulan **inceleme ekseni (review axis)** kavramı üçüne birden
uygulanır. Kimin hangi eksene baktığı hem bulunan hatayı hem yayılan bilgiyi hem de
hizalamanın hangi düzeyde yapıldığını belirler.

Değişiklik isteğinin mekaniği — öneri, tartışma, birleştirme döngüsü — Dallanma ve İşbirliği
kursunda kuruldu ve orada inceleme ekseni açıkça buraya bırakıldı; burada tekrarlanmaz.
Güvenlik gözüyle okuma Güvenli Kodlama kursunun konusudur ve bu kursun eksen listesinde
güvenlik yoktur. Ekip yapısının ve karar hakkının kurumsal tartışması Süreç, Ekip ve Teslimat
kursundadır. Burada kalan tek şey incelemenin kendi sayılarıdır.

## İki Sınır: Eksen ve Dikkat

Bir inceleyen sınırsız değildir. İki sınırla çalışır ve kursun bütün ölçümleri bu ikisinin
üzerine kurulur.

**Ekseni:** bir okuma her şeye birden bakmaz. Arayüze bakan göz imzayı, adlandırmayı ve
sözleşmeyi arar; gerçekleştirime bakan göz döngü sınırını ve kenar durumu arar; teste bakan
göz iddianın gerçekten bir şey doğrulayıp doğrulamadığına bakar. Aynı satırın üzerinden geçen
iki göz iki ayrı kusur görür, çünkü ikisi ayrı şey aramaktadır. Bu kurs beş eksen tanımlar:
**arayüz, gerçekleştirim, test, belge, biçim.**

**Dikkati:** bir inceleyen bir turda sınırlı miktarda metin okur. Okuma birimi **öbek
(chunk)** olarak adlandırılır ve bir öbek elli satırdır. Bir turda gerçekten okunan öbek
sayısı sabittir; değişiklik bundan büyükse geri kalanı okunmaz. Bu dersin ölçümünde
değişiklik tam olarak dikkat kadardır, yani **bu derste hiçbir kusur okunmadığı için
kaçmaz.** Kaçan her kusurun tek bir nedeni olacaktır: bakılmayan eksen.

## Beş Eksen Ne Arar

Eksenler soyut değildir; her biri belirli bir soruyu sorar ve bulgusunu belirli bir biçimde
yazar. Aşağıdaki notlar aynı değişikliğe beş ayrı eksenden bakan beş okumanın ürünüdür.

```text
# ogretilen inceleme notu ornegi , calistirilmamistir

arayuz          Genel islevin ikinci parametresi zorunlu hale gelmis; onceki
                imzayla cagiran kod artik derlenmiyor. Varsayilan deger
                verilirse sozlesme korunur.
gerceklestirim  Dongu, liste bos oldugunda son elemani okuyor; bos girdi
                icin bir erken donus gerekiyor.
test            Testin tek iddiasi cagrinin hata firlatmadigi; donen degeri
                dogrulayan bir iddia yok.
belge           Islevin anlattigi davranis degismis, aciklama satiri eski
                davranisi tarif ediyor.
bicim           Girinti bu dosyada iki ayri genislikte kullanilmis.
```

Bu blok bir örnektir ve çalıştırılmaz; bu dersin sayıları yalnız ölçüm bloğundan gelir.
Notların ortak bir yanı var: **beşi de değişikliğin bir yerini gösteriyor ve ne yapılırsa
kapanacağını söylüyor.** Hiçbiri kişiden söz etmiyor. Bu, kurs boyunca korunan sınırdır —
inceleme yazanı değil, gönderilen değişikliği okur.

İkinci ortak yanları, hiçbirinin ötekinin yerine geçememesidir. Arayüz notu imzaya bakmadan
yazılamaz; biçim notunu yazan göz döngü sınırını aramıyordur. Aynı dosyanın aynı satır
aralığında duran iki kusur, ayrı eksenlerde olduğu için ayrı okumalar gerektirir. Ölçümün
tablosu bu bağımsızlığın sayısal karşılığıdır.

Bilgi yayma ve tasarım hizalama da aynı bağımlılığı taşır. Bir değişikliği yalnız biçim
ekseninden okuyan kişi o kodun ikinci sahibi olmaz; girintiyi öğrenir, davranışı öğrenmez.
Aynı biçimde, tasarım hizalaması yalnız arayüz ve gerçekleştirim eksenlerinden görülebilir.
Eksen seçimi bu yüzden incelemenin üç işini birden belirler.

## Yazılmamış Olanın Kusuru

Beş eksenin dışında altıncı bir kusur sınıfı vardır ve kurgunun en önemli parçası budur:
**eksik gereksinim (unwritten requirement)**. Bu, değişikliğin içindeki yanlış bir satır
değildir; **olması gerekip de hiç yazılmamış** olandır.

Bir arayüz kusuru için imzaya bakılır, bir test kusuru için iddiaya bakılır. Yazılmamış bir
gereksinim için bakılacak bir yer yoktur, çünkü o gereksinim değişikliğin içinde bir metin
olarak bulunmaz. İnceleme **gönderilene** bakar; gönderilmemiş olanın yokluğunu göremez. Bu
bir dikkat sorunu da değildir: eksen listesinde o sınıf yoktur.

## Ölçümün Kurgusu

Ölçüm bir değişiklik ve içine serpilmiş **24 kusur** üzerine kurulur. Her kusur altı sınıftan
birine aittir. Kâhin kurgunun kendisidir: kusurları biz yerleştirdiğimiz için hangisinin
hangi öbekte ve hangi sınıfta olduğu bilinir. Dört yapılandırma aynı değişikliğe bakar ve her
biri için **bulunan** ile **kaçan** birlikte yazılır.

- **IE1** — Değişiklik 600 satırdır, yani 12 öbektir; dikkat de 12 öbektir. Değişikliğin
  tamamı okunur ve bu ders boyunca okunmamış öbek yoktur.
- **IE2** — 24 kusur altı sınıfa kurgu tarafından dağıtılır; sınıf listesi ve dağılım kursun
  sabitidir ve hiçbir derste değiştirilmez.
- **IE3** — Bir inceleyen yalnız kendi eksenlerindeki kusuru görür. Eksen dışındaki bir kusur,
  satırın üzerinden geçilmiş olsa bile bulunmaz.
- **IE4** — Birden çok inceleyenin bulgusu birleşimdir: aynı kusuru iki kişi bulursa bir kez
  sayılır. Yapılandırmalar arasındaki fark bu yüzden **kişi sayısı değil, kapsanan eksen
  kümesidir.**
- **IE5** — Aynı eksene bakan iki inceleyen aynı kümeyi bulur. Kurgu, ikinci kişinin birinciyi
  tamamladığı bir bulma payı içermez; bu kasıtlı bir yalınlaştırmadır ve ölçümün sonucunu
  şuraya bağlar: eksen çeşitliliği.
- **IE6** — Altıncı sınıf hiçbir eksenin arama listesinde değildir. Bu bir eksiklik değil,
  tanımdır.
- **IE7** — Ölçümde tur, bekleme ve geri bildirim yazımı yoktur; bunlar sonraki konuların
  değişkenleridir. Burada tek bir turun tek bir okuması sayılır.
- **IE8** — 24 kusurluk bir kümede ölçülebilen en küçük fark **1/24**, yani **0,042**'dir.
  Bundan küçük bir fark bu kümeyle savunulamaz.

## Ölçüm

```python
"""Kod incelemenin amaci: bakan kisi sayisi mi, bakilan eksen sayisi mi.

Bolum 1 - degisiklik ve kusurlarin sinif dagilimi.
Bolum 2 - dort yapilandirma: bulunan, kacan, hicbir eksenin aramadigi kacan.
"""
TOHUM = 20260815
EKSENLER = ("arayuz", "gerceklestirim", "test", "belge", "bicim")
YAZILMAYAN = "eksik gereksinim"      # hicbir eksende aranmaz
SINIFLAR = EKSENLER + (YAZILMAYAN,)
DIKKAT = 12                          # bir turda gercekten okunan obek
OBEK = 50                            # satir


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):
    """Bir inceleyen: yalniz kendi ekseninde ve yalniz okudugu obekte gorur."""
    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


TAM = set(EKSENLER)
ATAMALAR = {
    "tek inceleyen, tüm eksenler": [TAM],
    "üç inceleyen, aynı eksen": [{"gerceklestirim"}] * 3,
    "üç inceleyen, ayrı eksen": [{"arayuz"}, {"gerceklestirim"},
                                 {"test", "belge"}],
    "beş inceleyen, beş eksen": [{e} for e in EKSENLER],
}

d = degisiklik(600)
dagilim = {s: sum(1 for k in d["kusurlar"] if k["sinif"] == s) for s in SINIFLAR}
print(f"değişiklik {d['satir']} satır, {d['obek']} öbek, "
      f"kusur {len(d['kusurlar'])}, dikkat {DIKKAT} öbek")
print("sınıf dağılımı: " + ", ".join(f"{s} {n}" for s, n in dagilim.items()))
print()
print(f"{'atama':<28s} {'eksen':>5s} {'inceleyen':>9s} {'bulunan':>7s} "
      f"{'kaçan':>5s} {'yazılmayan kaçan':>16s}")
for ad, atama in ATAMALAR.items():
    b = kurul(d, atama)
    kacan = [k for k in d["kusurlar"] if k["no"] not in b]
    yaz = sum(1 for k in kacan if k["sinif"] == YAZILMAYAN)
    eksen = len(set().union(*atama))
    print(f"{ad:<28s} {eksen:5d} {len(atama):9d} {len(b):7d} "
          f"{len(kacan):5d} {yaz:16d}")
```

```
değişiklik 600 satır, 12 öbek, kusur 24, dikkat 12 öbek
sınıf dağılımı: arayuz 3, gerceklestirim 6, test 3, belge 3, bicim 7, eksik gereksinim 2

atama                        eksen inceleyen bulunan kaçan yazılmayan kaçan
tek inceleyen, tüm eksenler      5         1      22     2                2
üç inceleyen, aynı eksen         1         3       6    18                2
üç inceleyen, ayrı eksen         4         3      15     9                2
beş inceleyen, beş eksen         5         5      22     2                2
```

## Sayı İnceleyen Sayısını İzlemiyor

Tablonun iki sütunu yan yana duruyor ve **bulunan** sütunu ikisinden yalnız birini izliyor.

**İnceleyen sayısı 1, 3, 3, 5**; bulunan kusur **22, 6, 15, 22**. Aralarında hiçbir düzenli
ilişki yok: bir kişi 22 buluyor, üç kişi 6 buluyor, beş kişi yine 22 buluyor.

**Eksen sayısı 5, 1, 4, 5**; bulunan kusur **22, 6, 15, 22**. Bu sütun bulunanı satır satır
açıklıyor. Beş eksen 22 veriyor, dört eksen 15, tek eksen 6. Kursun ölçü ekseni buradan
çıkar: **bir incelemenin sayısı bakan kişi sayısı değil, bakılan eksen sayısıdır.**

İkinci ve dördüncü satır bunu tek başına söylüyor. **Üç inceleyen aynı eksende 6** kusur
buluyor; üçü de gerçekleştirime bakıyor ve gerçekleştirim sınıfında 6 kusur var. İkinci ve
üçüncü kişi birinciye tek bir kusur eklemiyor, çünkü aynı şeyi arıyorlar. Buna karşılık **tek
inceleyen beş eksene bakınca 22** buluyor ve **beş inceleyen beş eksene dağılınca yine 22**.
Beş kişiyle bir kişi arasında **0** fark var. İkinci iddia budur: **inceleyen eklemek kusur
bulmaz; eksen eklemek bulur.**

Üçüncü satır aradaki ara değeri veriyor. Üç inceleyen dört ekseni kapsıyor — biri arayüze,
biri gerçekleştirime, biri hem teste hem belgeye bakıyor — ve **15** kusur çıkıyor. Kaçan 9
kusurun **7**'si biçim sınıfındandır; o eksene kimse bakmıyor. Bu, kişi eklemenin değil eksen
eklemenin işe yaradığının en somut kanıtıdır: aynı üç kişi, ekseni dağıtınca 6 yerine 15
buluyor. Fark **9** kusurdur ve kümenin çözünürlüğünün yirmi katından fazladır.

## Dağılımın Kendisi Bir Sonuç

Çıktının ikinci satırı ölçümden önce gelen bir bilgidir ama kendi başına okunmayı hak eder:
**biçim 7, gerçekleştirim 6, arayüz 3, test 3, belge 3, eksik gereksinim 2.**

En kalabalık sınıf biçimdir ve 24 kusurun **7**'sini, yani **0,292**'sini tutar. Bir
incelemede en çok not düşülen şeyin neden çoğu zaman biçim olduğunu bu sayı açıklıyor: biçim
kusuru hem sayıca fazladır hem de görülmesi en az bilgi ister. Ardından **gerçekleştirim**
gelir, **6** kusurla, ve bu sınıf tam tersidir — görülmesi kodun ne yaptığını anlamayı
gerektirir.

Kalan üç eksen — arayüz, test, belge — **3**'er kusur taşır ve toplamları **9**'dur. Üçü
birden biçim ile gerçekleştirimin toplamından azdır; buna karşılık üçü de ayrı bir okuma
isteyen sınıflardır ve hiçbiri ötekinin yan ürünü olarak bulunmaz.

Dağılımın pratik sonucu ilerideki derslerin konusudur. Bir inceleme dikkatini kalabalık ama
ucuz sınıfa harcarsa, pahalı sınıflara kalan pay küçülür; toplam bulunan sayısı bunu
göstermez, ancak sınıf başına ayrıştırma gösterir. Bu kursta her ölçümde **bulunan ve kaçan**
birlikte yazılmasının ve kaçanların sınıfının ayrıca sayılmasının nedeni budur.

## Dördünde de Kaçan İki Kusur

Son sütun dört satırda da aynı değeri veriyor: **2**.

Bu iki kusur eksik gereksinim sınıfındandır ve yapılandırma ne olursa olsun kaçıyor. Tek
inceleyen beş eksene baksa da kaçıyor, beş inceleyen beş eksene dağılsa da kaçıyor. Kaçan
sayısı **2**'ye kadar iniyor ve orada duruyor — çünkü kalan iki kusur için bakılacak bir yer
üretilmemiş.

Buradan **dördüncü okuma** çıkar: **hiçbir eksen yazılmayanı görmez.** Eksen eklemek bulunanı
22'ye kadar çıkarır; 24'e çıkarmaz. İncelemeye daha çok kişi koymak, daha çok eksen dağıtmak
ya da aynı değişikliği ikinci kez okutmak bu iki kusuru bulmaz. Bunlar ancak inceleme
dışındaki bir yerde — gereksinimin yazıldığı yerde — yakalanır.

İki kusurun yakalanabileceği yer bellidir ve incelemenin öncesindedir: gereksinimin
yazıldığı, kabul ölçütünün belirlendiği ve değişikliğin kapsamının kararlaştırıldığı yer.
Oraya konan tek bir cümle, incelemenin hiçbir eksenle bulamadığı bir kusuru ortadan
kaldırabilir. Bu yüzden bu kursun sayıları bir incelemenin ne kadar iyi olduğunu değil,
**neyi hiç göremeyeceğini** de söylüyor.

Bu, incelemenin bir kusuru değil, sınırının tanımıdır. Bir incelemenin "hiçbir şey bulmadım"
demesi, değişikliğin doğru olduğu anlamına gelmez; **gönderilenin içinde, bakılan eksenlerde
bir şey bulunmadığı** anlamına gelir. Bu cümlenin üç koşulu vardır ve üçü de tabloda ayrı
sütun olarak durur.

## Özet

- İncelemenin üç işi vardır — hata bulma, bilgi yayma, tasarım hizalama — ve üçünü birden
  belirleyen şey kimin **hangi eksene** baktığıdır.
- Bir inceleyen iki sınırla çalışır: **ekseni** yalnız aradığı sınıfı görmesini, **dikkati**
  bir turda okuduğu öbek sayısını sınırlar. Bu derste değişiklik dikkat kadardır, bu yüzden
  kaçan her kusurun nedeni tek başına eksendir.
- Aynı değişiklikte üç inceleyen aynı eksende **6**, üç inceleyen ayrı eksende **15**, tek
  inceleyen beş eksende **22** kusur bulur; beş inceleyen beş eksende yine **22** bulur.
  **İnceleyen eklemek kusur bulmaz, eksen eklemek bulur.**
- İki **eksik gereksinim** kusuru dört yapılandırmanın **dördünde de** kaçar; eksen listesinde
  o sınıf yoktur ve inceleme gönderilmemiş olanın yokluğunu göremez.
- Sınıf dağılımı eşit değildir: biçim **7**, gerçekleştirim **6**, arayüz, test ve belge
  **3**'er kusur taşır. En kalabalık sınıf, görülmesi en az bilgi isteyen sınıftır.
- Bulunan sayı en iyi durumda **22/24**'te durur; kalan **2** kusur incelemenin değil,
  gereksinimin yazıldığı yerin sorunudur.

## Sonraki Adım

Tablonun tek eksenli satırı 6 kusur veriyordu ve o eksen gerçekleştirimdi. Beş eksenin her
biri kendi payını taşıyor ve paylar birbirinden ayrı: bir eksenin bulduğu kusuru başka bir
eksen bulmuyor. Sonraki ders bu ayrılığı ilk eksende, **arayüz** ekseninde ölçer: genel bir
arayüzün sözleşmesini bozan bir değişikliği inceleme nasıl fark eder, o bulguyu kaç eksen
görebilir, ve arayüze bakan inceleyenin yerine başka bir eksene bakan biri konursa kaç kusur
kaybedilir.
