---
title: 'Kod Biçimi ve Otomasyon'
source: 'https://academia.sh/tr/kurslar/kod-inceleme/kod-bicimi-ve-otomasyon'
course: 'Kod İnceleme ve Ekip Süreci'
language: tr
updated: '2026-08-17T18:10:45+00:00'
license: 'CC BY-SA 4.0'
---

# Kod Biçimi ve Otomasyon

Biçim ekseni bir araca devredildiğinde insanın bulgusu 22'den 15'e, bulgunun biçim payı 0,318'den 0,000'a iner; toplam beş eksen zaten kapsanmışsa değişmez, üç inceleyenlik bir kurulda 15'ten 22'ye çıkar.

Önceki dersin tablosunda en pahalı kapanış biçim ekseninindi: kapatıldığında **7** kusur
kaçıyor ve bulunan **15**'e iniyordu. Aynı eksen, ilk dersin sınıf dağılımında da en kalabalık
sınıftı ve orada bir not düşülmüştü — bu sınıfın görülmesi en az bilgi isteyen sınıf olduğu.

İki özelliğin bir arada bulunması bu ekseni ötekilerden ayırıyor ve bir soru açıyor: **bu
eksen bir insanın okumasını gerektiriyor mu.** Ders o soruyu ölçer. Biçim ekseni bir araca
devredilir ve üç şey sayılır: toplam bulunanın ne olduğu, insanın kendi bulgusunun ne kadar
küçüldüğü ve o bulgunun hangi sınıflardan oluştuğu.

## Biçim Ekseni Ne Arar

Biçim ekseni kodun **görünüşüne** bakar: girinti genişliği ve tutarlılığı, satır uzunluğu,
boşluk yerleşimi, ayraçların konumu, içe aktarma sırası, adların büyük ve küçük harf düzeni,
sondaki boşluklar, dosya sonu satırı.

Bu listede olmayan bir şey var ve ayrım kursun içinde durur: **adın seçimi** biçim ekseninin
işi değildir. Bir adın anlamlı olup olmadığı bir yargıdır ve gerçekleştirim ekseninde okunur;
o adın hangi harf düzeniyle yazıldığı bir kuraldır ve biçim ekseninde okunur. Adlandırmanın
kendisi Temiz Kod kursunun konusudur ve burada tekrarlanmıyor.

Ayrımın ölçüme giren yanı tek cümleyle kurulur: **biçim kusurunun doğruluğunu belirleyen şey
bir yargı değil, yazılabilir bir kuraldır.** Yazılabilen kural uygulanabilir, uygulanabilen
kural da devredilebilir. Öteki dört eksenin hiçbiri bu özelliği taşımaz: bir imzanın
sözleşmeyi bozup bozmadığı, bir gövdenin doğru olup olmadığı, bir iddianın anlamlı olup
olmadığı ve bir metnin kodla çelişip çelişmediği kural değil yargı gerektirir.

## Kararın Kendisi ve Kararın Uygulanması

Biçim tartışması iki ayrı iştir ve karıştırılmaları en çok tur harcayan durumdur.

**Birinci iş kararın kendisidir:** hangi girinti genişliği, hangi satır uzunluğu, hangi
sıralama. Bu bir kez verilir ve bir metne yazılır. Karar tek başına doğru ya da yanlış
değildir; değeri tutarlılığındadır.

**İkinci iş kararın uygulanmasıdır:** her değişiklikte kuralın gerçekten uygulanıp
uygulanmadığına bakmak. Bu iş her değişiklikte yeniden yapılır ve hiçbir yargı içermez;
kuralın metni ile kodun metni karşılaştırılır.

Devredilen şey ikinci iştir. Bir **biçimlendirici**, kuralı koda uygular; bir **otomatik
denetleyici**, uygulanmadığı yerleri bildirir. İkisi de bir araç sınıfıdır ve kararı vermez —
kendilerine verilmiş kuralı yürütürler. Bu araçların hatta nasıl bağlandığı Sürekli Tümleştirme
ve Teslimat kursunun, ön yüz projelerinde nasıl kurulduğu Frontend Kalitesi kursunun konusudur
ve burada tekrarlanmıyor. Bu dersin ölçtüğü tek şey **devretme sonrasında incelemede ne
kaldığıdır.**

Ayrımın atlanması pratikte tek bir belirti verir: aynı biçim konusu değişiklikten değişikliğe
yeniden tartışılır. Tartışılan şey görünüşte kodun bir satırıdır, gerçekte ise hiç yazılmamış
bir karardır. Kural bir metne yazılana kadar her inceleme o kararı yeniden vermek zorunda
kalır ve verilen karar hiçbir yerde birikmez.

Kuralın yazılması bu yüzden aracın kurulmasından önce gelir ve ondan bağımsızdır. Yazılı bir
kural, araç olmadan da tartışmayı bitirir: bulgu artık bir tercih değil, bir metne yapılan
atıftır. Araç bunun üstüne yalnız yürütmeyi ekler. Sıranın tersi işlemez — kuralı olmayan bir
depoya araç kurmak kararı araca aldırmak olur ve tartışma kodun satırından aracın ayarına
taşınıp orada sürer.

```text
# ogretilen inceleme notu ornegi , calistirilmamistir

devredilmeden once
  bicim   Girinti bu dosyada iki ayri genislikte kullanilmis.
  bicim   Satir uzunlugu dort yerde sinirin uzerinde.
  bicim   Ice aktarma sirasi dosyanin geri kalanindan farkli.

devredildikten sonra
  (bicim ekseninde inceleme notu yok; kural araca yazilmis durumda)
  arayuz  Genel islevin ikinci parametresi zorunlu hale gelmis.
  test    Testin tek iddiasi cagrinin hata firlatmadigi.
```

Bu blok bir örnektir ve çalıştırılmaz; dersin sayıları yalnız ölçüm bloğundan gelir.

## Aracın İki Farkı

Ölçüme giren araç iki noktada inceleyenden ayrılır.

**Tek eksenlidir.** Yalnız biçim sınıfına bakar ve öteki dört sınıftan hiçbir şey bulmaz.
Kural yazılabilen tek eksen odur; yargı gerektiren eksenlerde aracın bir karşılığı yoktur.

**Dikkati yoktur.** İnceleyen bir turda sınırlı sayıda öbek okur; araç değişikliğin tamamını
okur ve bu sınır ona uygulanmaz. Bu dersin ölçeğinde iki sınır çakışıyor — değişiklik 12
öbek, dikkat de 12 öbek — bu yüzden fark sayıya yansımıyor. Farkın koşulu buna rağmen bellidir
ve bu konunun dışındadır.

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

- **IE39** — Ortak kurgu değişmez: 600 satır, 12 öbek, 24 kusur, dikkat 12 öbek. Sınıf listesi
  ve dağılım değişmez.
- **IE40** — Araç yalnız biçim sınıfındaki kusurları bulur ve hepsini bulur; öbek sınırı ona
  uygulanmaz.
- **IE41** — Araç yanlış bulgu üretmez. Kurgu, aracın kural dışı bir şeyi kusur saymasını
  içermez; ölçüm bu yüzden aracın lehinedir ve bu açıkça yazılır.
- **IE42** — "Araçsız" sütunda insan beş eksenin tamamını taşıyabilir; "araçlı" sütunda hiçbir
  inceleyen biçim ekseni taşımaz.
- **IE43** — İnceleyen sayısı iki rejimde de aynı tutulur; devretme kurula kişi eklemez ve
  kuruldan kişi çıkarmaz.
- **IE44** — Araç bir okuma sayılmaz ve inceleyen sütununa girmez; bulgusu ayrı bir sütunda
  durur.
- **IE45** — Devretmenin bedeli — kuralın yazılması, aracın kurulması, hattın bağlanması —
  ölçümde yoktur. Ölçülen tek şey bulunan ve kaçan kusurdur.
- **IE46** — Oran, insanın bulgusundaki biçim kusurunun insanın toplam bulgusuna bölümüdür.
  Çözünürlük kusur düzeyinde **1/24 = 0,042**.

## Ölçüm

```python
"""Kod bicimi ve otomasyon: bicim ekseni araca devredilince ne degisir.

Bolum 1 - ayni kurullar aracsiz ve aracli; insanin buldugu ve toplam bulunan.
Bolum 2 - insanin bulgusunun sinif dagilimi iki rejimde.
"""
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 bicimlendirici(d):
    """Arac sinifi: yalniz bicim ekseninde bakar, dikkat siniri yoktur."""
    return {k["no"] for k in d["kusurlar"] if k["sinif"] == "bicim"}


TAM = set(EKSENLER)
INSAN = TAM - {"bicim"}
d = degisiklik(600)
arac = bicimlendirici(d)

KURULLAR = {
    "tek inceleyen": ([TAM], [INSAN]),
    "üç inceleyen, ayrı eksen": ([{"arayuz"}, {"gerceklestirim"},
                                  {"test", "belge"}],
                                 [{"arayuz"}, {"gerceklestirim"},
                                  {"test", "belge"}]),
    "üç inceleyen, aynı eksen": ([{"gerceklestirim"}] * 3,
                                 [{"gerceklestirim"}] * 3),
    "beş inceleyen, beş eksen": ([{e} for e in EKSENLER],
                                 [{e} for e in sorted(INSAN)] + [INSAN]),
}
print(f"{'kurul':<26s} {'araçsız bulunan':>15s} {'araçlı: insan':>13s} "
      f"{'araç':>4s} {'toplam':>6s} {'kaçan':>5s}")
for ad, (a, b) in KURULLAR.items():
    yalin = kurul(d, a)
    insan = kurul(d, b)
    toplam = insan | arac
    kacan = [k for k in d["kusurlar"] if k["no"] not in toplam]
    print(f"{ad:<26s} {len(yalin):15d} {len(insan):13d} {len(arac):4d} "
          f"{len(toplam):6d} {len(kacan):5d}")

print()
print(f"{'rejim':<22s} {'insanın bulgusu':>15s} "
      f"{'biçim payı':>10s} {'oran':>5s}")
for ad, eksenler in (("biçim insanda", TAM), ("biçim araçta", INSAN)):
    b = incele(d, eksenler)
    bicim = sum(1 for k in d["kusurlar"]
                if k["no"] in b and k["sinif"] == "bicim")
    print(f"{ad:<22s} {len(b):15d} {bicim:10d} {bicim / len(b):5.3f}")
kalan = sorted({k["sinif"] for k in d["kusurlar"]
                if k["no"] in incele(d, INSAN)})
print("biçim araçtayken insanın bulgusunun sınıfları: " + ", ".join(kalan))
toplam = incele(d, INSAN) | arac
kacan = [k for k in d["kusurlar"] if k["no"] not in toplam]
print(f"insan artı araç: bulunan {len(toplam)}, kaçan {len(kacan)}, "
      f"hiçbir eksenin aramadığı "
      f"{sum(1 for k in kacan if k['sinif'] == YAZILMAYAN)}")
```

```
kurul                      araçsız bulunan araçlı: insan araç toplam kaçan
tek inceleyen                           22            15    7     22     2
üç inceleyen, ayrı eksen                15            15    7     22     2
üç inceleyen, aynı eksen                 6             6    7     13    11
beş inceleyen, beş eksen                22            15    7     22     2

rejim                  insanın bulgusu biçim payı  oran
biçim insanda                       22          7 0.318
biçim araçta                        15          0 0.000
biçim araçtayken insanın bulgusunun sınıfları: arayuz, belge, gerceklestirim, test
insan artı araç: bulunan 22, kaçan 2, hiçbir eksenin aramadığı 2
```

## Araç Toplamı Ne Zaman Değiştirir

Üst tablonun ilk ve son satırı aynı şeyi söylüyor: **22 ve 22.** Beş eksenin tamamı zaten
insanlar tarafından kapsanıyorsa aracın toplam bulunana katkısı **0**'dır. Araç, kimsenin
bakmadığı bir yere bakmıyor.

İkinci satır tersini gösteriyor. Üç inceleyen dört ekseni kapsıyordu — arayüz, gerçekleştirim,
test, belge — ve araçsız **15** buluyordu. Biçim ekseni araca verilince toplam **22**'ye
çıkıyor. Kurula kimse eklenmedi, kimse çıkarılmadı; kapsanmayan tek eksen kapsandı ve karşılığı
**7** kusur oldu. **Üç kişilik bir kurul, beş kişilik bir kurulun sayısına eşitlendi.**

Üçüncü satır aynı kuralı en dar kurulda tekrarlıyor. Üç inceleyen aynı eksene bakıyordu ve
**6** buluyordu; araç **13**'e çıkarıyor. Kaçan hâlâ **11** ve bunun **9**'u insanların
bakmadığı üç eksenden geliyor. Araç bir ekseni kapatıyor, ötekileri kapatmıyor.

Örüntü tek cümlede toplanıyor: **aracın katkısı, insanların kapsamadığı eksen kadardır.**
Bu, kursun ikinci iddiasının araç tarafındaki karşılığıdır. Araç da kişi gibi davranıyor —
sayıyı büyüten şey onun varlığı değil, kapsadığı eksenin daha önce kapsanmamış olması.

Aracın katkısının **ne zaman** gerçekleştiği tabloda görünmüyor ama incelemeyi değiştiriyor.
Araç, değişiklik gönderildiği anda çalışır ve bulduğu yedi kusur inceleme başlamadan kapanmış
olur. İnceleyen o yedi kusuru hiç görmez: inceleme metninde yer almazlar, bir not yazılmaz,
bir yanıt beklenmez. Toplam aynı kalan satırlarda bile incelemenin **konusu** küçülür ve
küçülen kısım tam olarak yargı gerektirmeyen kısımdır.

Son sütun dört satırda da altıncı sınıfı taşıyor. Araçlı en iyi durumda kaçan **2**'dir ve
ikisi de eksik gereksinim sınıfındandır. **Otomasyon bulunanın tavanını 22'den yukarı
çıkarmıyor.** Araç yazılana bakar, tıpkı inceleme gibi; yazılmamış olanı o da göremez.

## Dikkat Nereye Kayıyor

Alt tablo aynı devretmeye insanın tarafından bakıyor ve buradaki sayılar toplamın sabit
kaldığı satırlarda bile değişiyor.

Biçim insandayken tek inceleyenin bulgusu **22** kusur ve bunun **7**'si biçim sınıfından;
oran **0,318**. Biçim araçtayken insanın bulgusu **15**'e iniyor ve biçim payı **0**;
oran **0,000**. İnsanın bulgusunun sınıfları geriye dört tane kalıyor: arayüz, belge,
gerçekleştirim, test.

Değişen şey toplam değil, **incelemenin içeriğidir.** Devretmeden önce bir incelemenin
bulgularının yaklaşık üçte biri kural kusurudur; sonra sıfırı. Geriye kalan her bulgu yargı
gerektiren bir eksendendir. İnceleme metninde tartışılan şey de aynı oranda değişir: kuralın
uygulanması artık tartışma konusu değildir, çünkü kararı veren metin bir kez yazılmıştır ve
uygulaması yürütülmektedir.

Burada dürüst bir sınır var ve yazılması gerekiyor. Bu ölçekte serbest kalan okumanın sayısal
bir getirisi **yoktur**: değişiklik 12 öbek, dikkat de 12 öbek, yani insanın okuması zaten
tükenmiyordu. Biçim ekseninden boşalan dikkat başka bir eksene aktarılsa da tabloda bir sayı
değişmez, çünkü öteki eksenler zaten eksiksiz okunuyordu.

Serbest kalan dikkatin karşılığının görünmesi için tek bir koşul gerekir: **okunacak şeyin
dikkatten büyük olması.** Bu kurguda öyle bir durum henüz kurulmadı ve bu konunun değişkeni
değil.

## Aracın Lehine Kurulmuş İki Varsayım

Ölçüm aracı iki noktada gerçekte olabileceğinden güçlü tutuyor ve ikisi de sonucun
okunmasını etkiliyor.

**Araç biçim sınıfının tamamını buluyor.** Bir biçimlendirici yalnız kendisine yazılmış
kuralları uygular; kural kümesinin dışında kalan bir biçim kusuru — deponun geri kalanından
farklı bir dosya düzeni, tutarsız bir kısaltma biçimi — araca görünmez ve insanda kalır.
Ölçümde böyle bir artık yoktur; olsaydı "biçim payı 0,000" satırı sıfırdan büyük çıkardı.

**Araç yanlış bulgu üretmiyor.** Kural kümesi ile deponun geri kalanı uyuşmadığında araç,
kusur olmayan yerleri de bildirir. Bu bulgular incelemeye girmez ama zaman harcatır ve kuralın
yeniden yazılmasını gerektirir. Ölçüm bu maliyeti içermiyor.

İki varsayım da bilerek kondu. Amaç, aracın **en iyi durumunda bile** toplamın **22**'de
kaldığını göstermektir: tavanı belirleyen şey aracın niteliği değil, eksen listesinin
kendisidir.

## Özet

- Biçim ekseni kodun görünüşüne bakar ve öteki dört eksenden bir noktada ayrılır: doğruluğunu
  belirleyen şey bir yargı değil, **yazılabilir bir kuraldır**. Adın seçimi bu eksende değil,
  adın harf düzeni bu eksendedir.
- Biçim tartışması iki iştir: **kararın kendisi** bir kez verilir ve bir metne yazılır,
  **kararın uygulanması** her değişiklikte yinelenir. Araca devredilen ikincisidir.
- Aracın toplam bulunana katkısı, insanların kapsamadığı eksen kadardır: beş eksen zaten
  kapsanıyorsa **0**, üç inceleyenlik bir kurulda **15**'ten **22**'ye, aynı eksene bakan
  üç inceleyende **6**'dan **13**'e.
- Otomasyon tavanı yükseltmez: araçlı en iyi durumda kaçan **2**'dir ve ikisi de eksik
  gereksinim sınıfındandır. Araç da yazılana bakar.
- Devretme, toplam sabit kalan durumlarda bile incelemenin içeriğini değiştirir: insanın
  bulgusu **22**'den **15**'e, biçim payı **0,318**'den **0,000**'a iner ve geriye yalnız
  yargı gerektiren dört eksen kalır.
- Bu ölçekte serbest kalan dikkatin sayısal getirisi **0**'dır, çünkü değişiklik dikkatten
  büyük değildir.

## Sonraki Adım

Bu konunun altı dersi tek bir değişkeni oynattı: **bakılan eksen.** Eksen sayısını artırmak
bulunanı **6**'dan **15**'e, oradan **22**'ye çıkardı; eksen kapatmak sınıf büyüklüğü kadar
kusur kaybettirdi; kişi eklemek hiçbir şey değiştirmedi. Bütün bu ölçümlerin ortak bir sessiz
kabulü vardı ve son ders onu açıkça söyledi: **değişiklik her zaman dikkat kadardı**, yani
okunacak şey okunabiliyordu.

Sonraki konu o kabulü kaldırır. Bakılan eksen sabit tutulur ve bu kez **bakılacak şey** büyür.
Soru şudur: eksen çeşitliliğinin kazandırdığı kusurlar, değişiklik okunabilir olmaktan
çıktığında yerinde kalır mı, yoksa bulunan oran eksenlerden bağımsız olarak mı çöker.
