İçeriğe geç
academia.sh

Ders 06 / 15

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.

İçindekiler

Ö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.

# 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

"""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.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat