İçeriğe geç
academia.sh

Ders 07 / 15

Değişiklik Boyutu

Dikkat 12 öbekte sabittir; aynı 24 kusur 100 satırda 22, 900 satırda 18, 2400 satırda 2 kez bulunur ve 2400 satırın 36 öbeği hiç okunmaz.

İçindekiler

Önceki ders biçim eksenini araca devretti ve dikkatin başka bir eksene kaydığını ölçtü. Konu boyunca kurulan örüntü buydu: eksen sayısını artırmak bulunan kusur sayısını artırdı. Bir inceleyici beş eksene baktığında beş inceleyicinin bulduğunu buluyordu; sayıyı büyüten şey bakan kişi değil, bakılan eksendi.

Bu dersin sorusu ters yönden geliyor. Eksen sayısı sabit kalsın ve bakılacak şey büyüsün. Aynı inceleyici, aynı beş eksen, aynı kusurlar — yalnız değişiklik 100 satır yerine 2400 satır olsun. Eksen çeşitliliği hiç bozulmadığı hâlde bulunan sayısı ne olur?

Dikkat Bir Bütçedir

Ortak kurgunun inceleyicisi iki sınırla çalışıyor. Birincisi ekseni: yalnız baktığı eksenlerdeki kusuru görür. İkincisi dikkati: bir inceleme turunda gerçekten okuduğu öbek sayısı sınırlıdır. Öbek 50 satırdır, dikkat 12 öbektir. Bu, bir oturuşta gerçekten okunan yaklaşık 600 satır demektir.

Dikkatin bir bütçe olması, kurgunun en önemli varsayımıdır ve gözlemle uyumludur. İnceleyen bir değişikliği baştan sona aynı yoğunlukta okumaz; ilk öbekler dikkatli okunur, sonrakiler giderek daha hızlı taranır ve bir yerden sonra okuma yerini onaya bırakır. Kurgu bu azalmayı sertleştirip ikili hâle getiriyor: ilk 12 öbek okunur, gerisi okunmaz. Sertleştirme sayıyı abartmaz, çünkü gerçekte okunmayı bırakan öbekler de tamamen kör değildir — ama örüntüyü görünür kılar.

Buradan çıkan ilk sonuç aritmetiktir. Değişiklik 600 satırın altındaysa öbeklerin hepsi okunur ve dikkat sınırı hiç devreye girmez; sınırlayan tek şey eksen listesidir. Değişiklik 600 satırı aştığındaysa artan her öbek okunmayanlar kümesine gider. Dikkat büyümez; değişiklik büyür.

Aynı Kusur, Dört Boyut

Ölçümü anlamlı kılan kısıt şudur: dört boyutta da aynı 24 kusur vardır. Kurgu kusur sayısını değişiklik boyutuyla birlikte büyütmez. Bu kasıtlıdır. Kusur sayısı da büyüseydi oranın düşmesi şaşırtıcı olmazdı; sabit tutulduğunda düşüşün tek kaynağı kalır — okunmayan öbek.

Sınıf dağılımı da dört boyutta aynıdır: arayüz 3, gerçekleştirim 6, test 3, belge 3, biçim 7 ve eksik gereksinim 2. Altıncı sınıf hiçbir eksenin aramadığı sınıftır: yazılmamış olanın kusuru. İnceleme gönderilen değişikliğin içine bakar; gönderilmemiş olanın yokluğunu göremez. Bu ders o iki kusuru kaçan sütununda ayrıca gösterir, çünkü boyut ne olursa olsun kaçmaya devam ederler ve düşüşün nedeni onlar değildir.

Değişen tek şey satır sayısıdır. Satır sayısı öbek sayısını belirler, öbek sayısı da kusurların dağıldığı alanı. Kusurlar bu alana serpilir; dikkat sabit kaldığı için serpilme alanı büyüdükçe kusurların giderek artan bir bölümü okunmayan öbeklere düşer.

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

  • IK1 — Dört boyut da aynı ortak kurgudan üretilir: 24 kusur, aynı sınıf dağılımı, aynı kâhin. Kusurları biz yerleştirdiğimiz için hangisinin hangi öbekte olduğu bilinir.
  • IK2 — Değişen tek şey satır sayısıdır. Eksen ataması sabittir: tek inceleyici, beş eksenin hepsi. Dikkat sabittir: 12 öbek.
  • IK3 — Okuma öbeğin başından başlar ve dikkat dolunca durur. Okunmayan öbekteki kusur, sınıfı hangi eksende olursa olsun görülmez.
  • IK4 — İkinci ölçümde incele bir başlangıç öbeği alır; bu, dikkat sınırının nereye yerleştiğini değiştirmektir, dikkati büyütmek değildir. Her pencerede yine 12 öbek okunur.
  • IK5 — Bölme kusurları yeniden dağıtmaz. Aynı 2400 satır, aynı 48 öbek, aynı 24 kusur; yalnız okuma dört ayrı pencerede yapılır.
  • IK6 — Kümenin çözünürlüğü 24 kusurda 1/24, yani 0,042’dir; öbek düzeyinde 1/12. Bundan küçük bir fark bu kümeyle savunulamaz.

Ölçüm

"""Degisiklik boyutu: ayni 24 kusur, dort olcek, sabit dikkat.

Bolum 1 - olcek buyudukce okunan obek sabit kalir, bulunan oran duser.
Bolum 2 - ayni 2400 satir dort pencerede okundugunda ne degisir.
"""
TOHUM = 20260815
EKSENLER = ("arayuz", "gerceklestirim", "test", "belge", "bicim")
YAZILMAYAN = "eksik gereksinim"
SINIFLAR = EKSENLER + (YAZILMAYAN,)
DIKKAT = 12          # bir turda gerçekten okunan öbek sayısı
OBEK = 50            # satır
OLCEKLER = (100, 300, 900, 2400)


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, bas=0, dikkat=DIKKAT):
    """Inceleyici bas obeginden baslar ve dikkati kadar obek okur."""
    okunan = set(range(bas, min(bas + dikkat, d["obek"])))
    return {k["no"] for k in d["kusurlar"]
            if k["sinif"] in eksenler and k["obek"] in okunan}


TAM = set(EKSENLER)
d0 = degisiklik(600)
dagilim = {s: sum(1 for k in d0["kusurlar"] if k["sinif"] == s) for s in SINIFLAR}
print("sınıf dağılımı: " + ", ".join(f"{s} {n}" for s, n in dagilim.items()))
print()
print(f"{'satır':>6s} {'öbek':>5s} {'okunan':>7s} {'okunmayan':>10s} "
      f"{'bulunan':>8s} {'kaçan':>6s} {'yazılmayan kaçan':>17s} {'oran':>6s}")
for satir in OLCEKLER:
    d = degisiklik(satir)
    b = incele(d, TAM)
    kacan = [k for k in d["kusurlar"] if k["no"] not in b]
    yaz = sum(1 for k in kacan if k["sinif"] == YAZILMAYAN)
    print(f"{satir:6d} {d['obek']:5d} {min(DIKKAT, d['obek']):7d} "
          f"{max(0, d['obek'] - DIKKAT):10d} {len(b):8d} {len(kacan):6d} "
          f"{yaz:17d} {len(b) / len(d['kusurlar']):6.3f}")

print()
buyuk = degisiklik(2400)
toplam = set()
print(f"{'parça':>6s} {'öbek aralığı':>13s} {'bulunan':>8s}")
for i, bas in enumerate(range(0, buyuk["obek"], DIKKAT)):
    b = incele(buyuk, TAM, bas)
    toplam |= b
    print(f"{i + 1:6d} {f'{bas}-{bas + DIKKAT - 1}':>13s} {len(b):8d}")
kacan = [k for k in buyuk["kusurlar"] if k["no"] not in toplam]
print(f"dört pencere toplamı: bulunan {len(toplam)}, kaçan {len(kacan)}, "
      f"oran {len(toplam) / 24:.3f}")
print("kaçan sınıfları: " + ", ".join(sorted({k["sinif"] for k in kacan})))
sınıf dağılımı: arayuz 3, gerceklestirim 6, test 3, belge 3, bicim 7, eksik gereksinim 2

 satır  öbek  okunan  okunmayan  bulunan  kaçan  yazılmayan kaçan   oran
   100     2       2          0       22      2                 2  0.917
   300     6       6          0       22      2                 2  0.917
   900    18      12          6       18      6                 2  0.750
  2400    48      12         36        2     22                 2  0.083

 parça  öbek aralığı  bulunan
     1          0-11        2
     2         12-23       12
     3         24-35        2
     4         36-47        6
dört pencere toplamı: bulunan 22, kaçan 2, oran 0.917
kaçan sınıfları: eksik gereksinim

Oranın Çöktüğü Yer

Üst tablonun ilk iki satırı sıkıcıdır ve sıkıcı olması gerekir. 100 satırda 2 öbek, 300 satırda 6 öbek vardır; ikisi de dikkatin altındadır, ikisinde de okunmayan öbek 0’dır. Bulunan 22, kaçan 2 ve kaçan ikisinin ikisi de eksik gereksinim. Yani değişiklik dikkatin altında kaldığı sürece boyutun hiçbir etkisi yoktur; kaçan tek şey zaten hiçbir eksenin aramadığı sınıftır.

Üçüncü satırda sınır devreye giriyor. 900 satır 18 öbektir, 12’si okunur, 6 öbek okunmaz. Bulunan 18’e iner, oran 0,750 olur. Kaçan 6’nın 2’si eksik gereksinim, kalan 4’ü ise okunabilir olduğu hâlde okunmamış kusurdur. Bunlar sınıfları itibarıyla inceleyicinin baktığı eksenlerdedir — gerçekleştirim ve biçim. İnceleyicinin listesinde vardır, kâhinde vardır, yalnız gözünün önünde değildir.

Dördüncü satır çöküştür. 2400 satır 48 öbektir ve dikkat hâlâ 12’dir; 36 öbek hiç okunmaz. Bulunan 2’ye düşer, oran 0,083 olur. Kusur sayısı değişmedi, sınıf dağılımı değişmedi, inceleyicinin eksen listesi değişmedi. Yalnız değişiklik büyüdü.

Kaçan sütunundaki sınıf listesi de bu satırda genişliyor. 900 satırda kaçanlar iki eksene dağılmıştı; 2400 satırda kaçan 22 kusur altı sınıfın altısına birden yayılıyor. Bir eksenin kapatılmasıyla oluşan kayıp o eksenle sınırlıdır ve nereye baktığı bilinir; okunmayan öbeğin ürettiği kayıp ise eksenden bağımsızdır ve nereye düştüğü bilinmez. İki kayıp aynı değildir: birincisi bir karardır, ikincisi bir kazadır.

İki satır arasındaki farkı bir cümlede toplamak mümkün: oran, okunan öbeğin toplam öbeğe oranını izler. 900 satırda 12/18 okunur ve oran 0,750’ye düşer; 2400 satırda 12/48 okunur ve oran 0,083’e düşer. İkincisinin 12/48 = 0,250’nin de altına inmesinin nedeni kusurların öbeklere düzgün dağılmamasıdır: ilk 12 öbekte yalnız 3 kusur vardır ve biri eksik gereksinim sınıfındadır. Büyük değişiklikte inceleyicinin nerede durduğu bir kumar hâline gelir.

Farkların ölçüm bandının içinde olup olmadığına da bakmak gerekir. 22’den 18’e iniş 4/24 = 0,167‘lik bir farktır; kümenin çözünürlüğü 0,042 olduğuna göre bu fark dört basamak yukarıdadır ve savunulabilir. 18’den 2’ye iniş 16/24 = 0,667’dir ve tartışma gerektirmez. Buna karşılık 100 ile 300 satır arasındaki fark 0’dır — kümenin söyleyebileceği hiçbir şey yoktur ve olmadığını söylemek de bir sonuçtur.

Büyük Değişikliğin Nereden Geldiği

Sayılar bir sınır gösteriyor, ama sınırın neden aşıldığını göstermiyor. 2400 satırlık bir değişikliği kimse tek oturuşta yazmaz; o boyut birikir. Birikmenin üç yaygın kaynağı vardır ve üçü de akışla ilgilidir, yazımla değil.

Birincisi dalın ömrüdür. Dallanma ve İşbirliği kursunda kurulan ayrım burada sayıya dönüşür: kısa ömürlü dal küçük değişiklik üretir, uzun ömürlü dal her gün biraz daha büyür ve incelemeye geldiğinde tek bir amaç değil, bir haftanın toplamıdır. İkincisi karışan sınıflardır: yeniden adlandırma, dosya taşıma ve biçim düzeltmesi davranış değişikliğiyle aynı değişiklikte gelir. Üçüncüsü üretilen dosyalardır: bağımlılık kilit dosyası, derlenmiş çıktı ya da yeniden üretilebilen tablo değişikliğe girdiğinde satır sayısını büyütür, ama içinde inceleyicinin karar verebileceği hiçbir şey yoktur.

Üçünün ortak sonucu aynıdır ve ölçümdeki dördüncü satırdır: dikkat aynı kalır, öbek sayısı büyür. Üçünün de çaresi inceleme sırasında değil, incelemeden önce verilir — dalın ömrünü kısaltmak, sınıfları ayırmak, üretilen dosyayı incelemenin dışına almak. İnceleme masasına 48 öbek geldiğinde yapılabilecek tek şey kalmıştır: geri göndermek.

Bölmek Satırı Azaltmaz, Okunan Öbeği Artırır

Alt tablo aynı 2400 satırı dört pencerede okuyor. Değişiklik bölünmedi, kusurlar yeniden serpilmedi, dikkat büyütülmedi — yalnız okuma dört kez, her seferinde 12 öbeklik başka bir pencereden yapıldı. Sonuç: 2 + 12 + 2 + 6 = 22 bulunan, 2 kaçan, oran 0,917.

Bu, 100 satırlık değişiklikle aynı orandır. Bulunan sayısını belirleyen şey değişikliğin satır sayısı değil, okunan öbek sayısıdır. 2400 satır dört pencerede okunduğunda 48 öbeğin 48’i okunur ve okunmayan kalmaz. Kaçan 2 kusur yine eksik gereksinim sınıfındadır ve bölmek onlara dokunmaz: hiçbir pencere yazılmamış olanı göstermez.

Pencerelerin arasındaki dengesizlik de öğreticidir. İlk pencere yalnız 2, ikincisi 12 kusur veriyor. Tek geçişte okunan pencere, kusur bakımından en fakir penceredir. Değişikliği bir turda okuyan inceleyici bunu bilemez; hangi öbeklerin yoğun olduğunu ancak hepsini okuduktan sonra öğrenir.

Bölmenin bedeli sayıda görünmez ama gerçektir: dört pencere dört ayrı okuma demektir. Bu bedel bu konunun son dersinde bekleme süresi ve inceleme turu sayısı olarak ödenecek. Burada kaydedilmesi gereken şey bedelin var olduğu ve öngörülebilir olduğudur — 22 kusuru bulmanın karşılığı, okumayı dörde bölmektir.

İncelenebilir Değişikliğin Sınırı

Ölçüm pratik bir sınır veriyor: bir değişiklik, inceleyicinin dikkati kadar öbeğe sığdığında incelenebilirdir. Kurgunun sayılarıyla bu yaklaşık 600 satırdır. Sayının kendisi kurgunun varsayımıdır ve ekipten ekibe değişir; değişmeyen şey bir sınırın olduğu ve aşıldığında oranın sessizce düştüğüdür.

Sessizlik burada anahtar sözcüktür. Okunmayan öbek geri bildirim üretmez. 2400 satırlık bir değişikliğin incelemesi de onaylanır, o da kapanır ve dışarıdan bakan biri iki incelemeyi birbirinden ayıramaz. Onay, okunduğunun kanıtı değildir. Ölçümdeki 22 kaçan kusur da onaylanmış bir incelemenin ardından koda girmiştir.

Sınırı korumanın yolu değişikliği bölmektir, ama bölme keyfi olamaz. Her parçanın kendi başına anlaşılır ve kendi başına doğru olması gerekir; yoksa inceleyen parçayı okur, ne yaptığını anlamaz ve bir sonraki parçayı bekler — bu da okumayı ertelemenin başka bir adıdır. Uygulanabilir bölme ölçütleri şunlardır: tek amaç (bir parça tek bir şey yapar), kendi başına doğruluk (parça tek başına birleştirilse sistem bozulmaz), ve taşınan ile taşınmayanın ayrılması (yeniden adlandırma, dosya taşıma ve biçim düzeltmesi davranış değişikliğiyle aynı değişikliğe konmaz).

Son ölçüt en çok kazandıranıdır. Biçim düzeltmesi 300 satır büyütüyorsa, o 300 satır 6 öbek demektir ve dikkatin 6 öbeği davranış değişikliğinden çalınmıştır. Önceki ders biçim eksenini araca devretmişti; bu ders aynı devrin ikinci kazancını gösteriyor — devredilen eksen yalnız tartışmayı değil, öbeği de incelemenin dışına çıkarır.

Bölünemeyen değişiklikler de vardır. Tek bir arayüzün adı değişiyorsa ve o ad iki bin satırda geçiyorsa, parçalara ayırmak her parçayı kendi başına bozuk bırakır — birinci ölçüt ile ikinci ölçüt çakışır. Böyle bir durumda yapılabilecek şey bölmek değil, okuma sırasını bildirmektir: değişikliğin hangi öbeklerinin karar gerektirdiği, hangilerinin aynı düzenin tekrarı olduğu yazan tarafından açıkça yazılır. Alt tablo bunun neden işe yaradığını gösteriyor — dört pencerenin ikisi 2, biri 12, biri 6 kusur veriyor. Okunacak öbekler işaretlenmiş olsaydı inceleyicinin ilk 12 öbeği okuması bir kumar olmaktan çıkardı.

Bu bildirim bir hesap verme aracı değildir ve öyle kullanılmamalıdır. Ölçtüğü şey kişinin dikkati değil, değişikliğin okunabilirliğidir: aynı 48 öbek, sırası bildirilmiş hâlde başka bir sonuç veriyor. Sıradaki iki ders bu ayrımı sürdürecek — ölçülen şey her seferinde değişikliğin ve sürecin bir özelliğidir.

Özet

  • Dikkat bir bütçedir: bir inceleme turunda okunan öbek sayısı sabittir (kurguda 12 öbek, 600 satır). Değişiklik bundan büyükse artan her öbek okunmayanlar kümesine gider.
  • Aynı 24 kusur, aynı eksen listesi: 100 ve 300 satırda 22 bulunur (0,917), 900 satırda 18 (0,750), 2400 satırda 2 (0,083). Kusur sayısı değişmedi, yalnız değişiklik büyüdü.
  • 2400 satır 48 öbektir ve 36 öbek hiç okunmaz; okunan 12 öbek kusur bakımından en fakir penceredir, bu yüzden oran 12/48’in bile altına iner.
  • Aynı 2400 satır dört pencerede okunduğunda bulunan 22’ye, oran 0,917’ye çıkar. Belirleyici olan satır sayısı değil, okunan öbek sayısıdır.
  • Kaçan 2 kusur her boyutta ve her pencerede aynı kalır: eksik gereksinim. Boyutu küçültmek de bölmek de yazılmamış olanı göstermez.
  • Onay okunduğunun kanıtı değildir; okunmayan öbek geri bildirim üretmez ve iki inceleme dışarıdan aynı görünür.

Sonraki Adım

Değişiklik incelenebilir boyutta olduğunda inceleyen 22 kusuru buluyor. Ama bulunan bir kusur, düzeltilmiş bir kusur değildir: aradaki mesafeyi bir inceleme notu kapatır ve notun ne dediği, kusurun kaç inceleme turunda kapandığını belirler. Sonraki ders aynı 22 bulguyu iki ayrı yazımla ölçüyor — ne değişeceği ve neden değişeceği yazılı olan not ile yalnız ne görüldüğünü söyleyen not aynı kusuru kaç inceleme turunda kapatır, ve hangi not biçimi değişikliği açık kusurla birlikte kapanmaya zorlar.

İ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