İçeriğe geç
academia.sh

Ders 10 / 15

Örnek ve Kod Parçacıkları

Çalıştırılabilir örneğe gömülü iddia bayatlayınca ses çıkarır, gömülü olmayan çıkarmaz; 56 iddianın 17'si gömülüdür ve on ikinci sürümde bayatlayan 56 iddianın 39'u sessizdir — 0,6964.

İçindekiler

Önceki ders bir ayrımı ortaya çıkardı. Terim yeniden adlandırıldığında tarama 31 iddiayı kaçırdı; bunların 8’i ses çıkardı, 23’ü çıkarmadı. Ses çıkaranların tek ortak özelliği vardı: çalıştırılabilir bir örneğin içinde duruyorlardı.

Bu dersin sorusu o özelliğin adını koymak ve bedelini ölçmektir: bir dokümanın kaç iddiası gerçekten gömülüdür, gömülülük oranı değiştirilirse sessiz bayatlama ne kadar geriler ve nerede geri çekilmeyi bırakır?

Gömülü İddia ile Yanındaki Cümle

Bir örneğin çevresinde iki ayrı cümle türü bulunur ve ikisi bayatlama karşısında bambaşka davranır.

Birincisi örneğin kendisidir. Örnek bir çağrının biçimini, bir alanın adını, bir adımın sırasını iddia eder; bu iddialar cümle olarak yazılmamıştır, kod olarak yazılmıştır. Ürün değiştiğinde örnek çalışmaz ve bu bir olaydır: sınama düşer, kurma adımı kırılır, okur bir hata iletisi alır. Gömülü iddia, doğruluğu çalıştırılarak sınanabilen iddiadır.

İkincisi örneğin yanına yazılmış cümledir: “bu çağrı eşik alanını yüzde olarak alır”. Aynı bilgiyi taşır, aynı şeye bağlıdır, ama hiçbir yerde sınanmaz. Ürün eşik alanını saniyeye çevirdiğinde örnek yine çalışır — sayı geçerlidir, yalnız anlamı değişmiştir — ve cümle sessizce yanlışlaşır.

Ayrım bu yüzden “örnek var mı” sorusuyla ölçülmez. Aynı iddianın örneğin içinde mi yoksa yanında mı durduğuyla ölçülür. Yanındaki cümlelerin çoğu, örneğin içine taşınabilir: alanın birimi bir doğrulama satırıyla, dönen alanın varlığı bir yazdırmayla, sıranın önemi adımların gerçekten sırayla çalışmasıyla iddia edilebilir.

Çalışır, Eksiksiz, Doğrulanabilir

Gömülülük bir niyet değil, bir özelliktir ve üç koşulu birden ister. Üçü ayrı ayrı tanımlanır çünkü ayrı ayrı düşerler.

Çalışır: örnek kopyalanıp çalıştırıldığında yürür. Eksik bir alma satırı, tanımsız bir değişken ya da yorum içinde bırakılmış bir seçenek örneği çalışmaz yapar.

Eksiksiz: örnek dışarıdan hiçbir tanım beklemez. Bir önceki örnekte kurulmuş bir değişkeni kullanan parçacık, tek başına kopyalandığında düşer; okur çoğunlukla tek başına kopyalar.

Doğrulanabilir: örneğin beklenen çıktısı yanında yazılıdır ve karşılaştırılabilir. Çıktısı yazılmamış bir örnek çalışır ama yanlış çalıştığı fark edilmez; ses çıkarması için düşmesi gerekir, oysa çoğu bayatlama düşmeden, yalnız farklı bir sonuç vererek gelir.

# ornek dokuman parcasi , calistirilmamistir

parçacık olarak yazılmış örnek
  sonuc = olcum.baslat(esik = 5)
  print(sonuc.ozet)
  Metindeki cümle: "baslat çağrısı esik alanını yüzde olarak alır."

eksiksiz örneğe dönüşmesi için gereken satırlar
  - olcum'un nereden geldiği
  - baslat çağrılabilsin diye kurulması gereken bağlam
  - ozet alanının gerçekten döndüğünün yazdırılması
  - beklenen çıktının örneğin yanında durması

Üstteki parçacık üç koşulun üçünü de karşılamaz. Çalışmaz, çünkü ilk ad tanımsızdır. Eksiksiz değildir, çünkü bağlamı başka bir yerdedir. Doğrulanabilir değildir, çünkü ne yazdıracağı yazılı değildir. Böyle bir parçacık gömülü görünür ama gömülü değildir: bayatladığında ses çıkarmaz, çünkü zaten çalışmıyordur.

Bu Dersin Kendi Örneği

Bu ders “çalışır, eksiksiz ve doğrulanabilir örnek” diyorsa kendi örneği de öyle olmak zorundadır; yoksa dersin kendisi yukarıdaki parçacığın durumuna düşer.

Aşağıdaki ölçüm bloğu bu üç koşulu karşılar. Dışarıdan hiçbir tanım beklemez: türler, yüzeyler, sıklıklar ve gömülülük oranları bloğun içindedir. Kopyalanıp çalıştırıldığında yürür. Ardından gelen etiketsiz blok, bu bloğun gerçekten alınmış çıktısıdır; elle yazılmamıştır ve karşılaştırılabilir. Dersin bütün sayı iddiaları o çıktıdan gelir; hiçbiri metinden gelmez.

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

  • YD31 — 56 iddia ortak kurgudan gelir: dört tür, dört yüzey. Kâhin kurgunun kendisidir; hangi iddianın hangi yüzeye bağlı olduğunu ve hangi sürümde bayatladığını biz yazdığımız için biliriz.
  • YD32 — Bir iddia, bağlandığı yüzey o sürüme kadar en az bir kez değiştiyse bayattır. Yüzey sıklıkları değişmez: imza 2, akış 3, ad 5, kavram 12 sürümde bir.
  • YD33 — Gömülü bir iddia bayatlayınca ses çıkarır; gömülü olmayan bayatlayınca hiçbir şey olmaz ve sessiz sayılır.
  • YD34Kavram yüzeyine bağlı iddia hiçbir örneğe gömülemez. Bir örnek bir şeyin neden öyle olduğunu çalıştırarak iddia edemez; yalnız nasıl davrandığını iddia edebilir.
  • YD35 — Bu dersin değiştirdiği tek şey gömülülük oranıdır. Türlerin yüzey dağılımı ve yüzeylerin sıklığı ortak tanımdaki gibidir.
  • YD36 — Üç gömülülük rejimi denenir: parçacık (oranlar yarıya iner; eksik yazılmış örnek gömülü sayılmaz), ortak tanım (kurgunun kendi oranları), tam örnek (her tür örneklerini eksiksiz yazar, referans da örnek taşır).
  • YD37 — Sessizlik oranı bayatlayanlar üzerinden hesaplanır; hiçbir iddianın bayat olmadığı sürümlerde oran tanımsızdır.

Ölçüm

"""Ornek ve kod parcaciklari: gomulu iddia ses cikarir, gomulu olmayan cikarmaz.

Bolum 1 - gomulu iddialarin turlere dagilimi.
Bolum 2 - surum surum dogru/bayat/sessiz ve sessizin bayata orani.
Bolum 3 - bu dersin degistirdigi tek sey: gomululuk orani.
"""
TOHUM = 20260816
TURLER = {
    "öğretici": {"akis": 9, "imza": 3, "ad": 2, "kavram": 1},
    "nasıl yapılır": {"akis": 6, "imza": 5, "ad": 2, "kavram": 1},
    "açıklama": {"akis": 1, "imza": 1, "ad": 1, "kavram": 9},
    "referans": {"akis": 0, "imza": 13, "ad": 2, "kavram": 0},
}
SIKLIK = {"imza": 2, "akis": 3, "ad": 5, "kavram": 12}
ORNEKLI = {"öğretici": 0.60, "nasıl yapılır": 0.70, "açıklama": 0.10, "referans": 0.00}
SURUMLER = (0, 1, 2, 3, 6, 12)
# Bu dersin değiştirdiği tek şey: gömülülük oranı. Yüzeyler ve türler sabit.
REJIM = {
    "parçacık": {t: o / 2 for t, o in ORNEKLI.items()},
    "ortak tanım": ORNEKLI,
    "tam örnek": {"öğretici": 0.80, "nasıl yapılır": 0.85,
                  "açıklama": 0.40, "referans": 0.60},
}


def iddialar(oranlar=ORNEKLI):
    """Her iddia: türü, bağlandığı yüzey, çalıştırılabilir örneğe gömülü mü."""
    liste, no = [], 0
    for tur, dagilim in TURLER.items():
        hedef = 0
        for yuzey, adet in dagilim.items():
            for _ in range(adet):
                no += 1
                hedef += oranlar[tur]
                gomulu = hedef >= 1 and yuzey != "kavram"
                if gomulu:
                    hedef -= 1
                liste.append({"no": no, "tur": tur, "yuzey": yuzey,
                              "gomulu": gomulu})
    return liste


def bayat_mi(i, surum):
    return surum // SIKLIK[i["yuzey"]] >= 1


def olc(liste, surum):
    """Doğru kalan, bayatlayan ve bayatlayanın sessiz olanı."""
    bayat = [i for i in liste if bayat_mi(i, surum)]
    sessiz = [i for i in bayat if not i["gomulu"]]
    return len(liste) - len(bayat), len(bayat), len(sessiz)


A = iddialar()
print(f"iddia {len(A)}, tür {len(TURLER)}, "
      f"örneğe gömülü {sum(1 for i in A if i['gomulu'])}")
print("gömülü dağılımı: " + ", ".join(
    f"{t} {sum(i['gomulu'] for i in A if i['tur'] == t)}" for t in TURLER))
print()
print(f"{'sürüm':>6s} {'doğru':>6s} {'bayat':>6s} {'sessiz':>7s} {'sessiz/bayat':>13s}")
for s in SURUMLER:
    dogru, bayat, sessiz = olc(A, s)
    oran = f"{sessiz / bayat:.4f}" if bayat else "-"
    print(f"{s:6d} {dogru:6d} {bayat:6d} {sessiz:7d} {oran:>13s}")
print()
print(f"{'gömülülük rejimi':>17s} {'gömülü':>7s} {'sürüm 12 bayat':>15s}"
      f" {'sessiz':>7s} {'sessiz/bayat':>13s}")
for ad, oranlar in REJIM.items():
    liste = iddialar(oranlar)
    dogru, bayat, sessiz = olc(liste, 12)
    print(f"{ad:>17s} {sum(1 for i in liste if i['gomulu']):7d} {bayat:15d}"
          f" {sessiz:7d} {sessiz / bayat:13.4f}")
print()
print(f"{'tür':>15s} {'gömülü':>7s} {'sürüm 3 sessiz':>15s} {'sürüm 12 sessiz':>16s}")
for t in TURLER:
    grup = [i for i in A if i["tur"] == t]
    print(f"{t:>15s} {sum(i['gomulu'] for i in grup):7d}"
          f" {olc(grup, 3)[2]:15d} {olc(grup, 12)[2]:16d}")
iddia 56, tür 4, örneğe gömülü 17
gömülü dağılımı: öğretici 8, nasıl yapılır 9, açıklama 0, referans 0

 sürüm  doğru  bayat  sessiz  sessiz/bayat
     0     56      0       0             -
     1     56      0       0             -
     2     34     22      17        0.7727
     3     18     38      24        0.6316
     6     11     45      28        0.6222
    12      0     56      39        0.6964

 gömülülük rejimi  gömülü  sürüm 12 bayat  sessiz  sessiz/bayat
         parçacık       8              56      48        0.8571
      ortak tanım      17              56      39        0.6964
        tam örnek      31              56      25        0.4464

            tür  gömülü  sürüm 3 sessiz  sürüm 12 sessiz
       öğretici       8               5                7
  nasıl yapılır       9               4                5
       açıklama       0               2               12
       referans       0              13               15

Bayatlamanın Çoğu Sessizdir

İlk tablo kursun üçüncü iddiasını ödüyor. On ikinci sürümde 56 iddianın 56’sı bayattır ve bunun 39’u sessizdir: 0,6964. Dokümanın üçte ikisi yanlıştır ve yanlış olduğunu kimseye söylememektedir.

Sayı yalnız son satırda büyük değil. İkinci sürümde bayatlayan 22 iddianın 17’si sessizdir — oran 0,7727 ile en yüksek noktasındadır. Bunun nedeni ilk bayatlayan yüzeyin imza olması ve imza iddialarının büyük bölümünün referansta durmasıdır; referansın gömülü iddiası yoktur. Dokümanın en erken bayatlayan bölümü, aynı zamanda en sessiz bölümüdür.

Oran üçüncü ve altıncı sürümde 0,6316 ve 0,6222’ye iner. Bu düşüş bir iyileşme değil: akış yüzeyi devreye girer, akış iddialarının çoğu öğretici ile nasıl yapılırdadır ve o iki tür gömülü örnek taşır. Yani ses çıkaran iddialar bu aralıkta bayatlar. On ikinci sürümde kavram yüzeyi de düşünce oran yeniden yükselir, çünkü kavram iddiaları hiçbir zaman gömülü olamaz.

Bu oranın pratik anlamı bir yanılsamadır. Bir ekip dokümanının sağlığını “ne kırıldı” sorusuyla izliyorsa, on ikinci sürümde eline 17 bildirim geçer ve bunların hepsini düzeltir. Düzeltme bittiğinde dokümanın hatasız olduğuna inanır. Gerçek sayı ise 56 bayat iddiadır; görülmeyen 39’u yerinde durmaktadır. Ses çıkaran bayatlamayı düzeltmek, sessiz bayatlamayı görünmez olmaktan çıkarmaz; tersine, dokümanı sağlıklı gösteren bir kanıt üretir.

Bu kümede ölçülebilen en küçük fark 1/56 = 0,0179’dur. Rejimler arasındaki farklar bunun kat kat üstündedir ve karşılaştırılabilir; 0,6316 ile 0,6222 arasındaki fark ise tek bir iddiadan küçüktür ve bir eğilim olarak okunmamalıdır.

Gömülülüğü Yükseltmek

İkinci tablo dersin değiştirdiği tek şeyi gösteriyor. Aynı 56 iddia, aynı yüzeyler, aynı sıklıklar; değişen yalnız kaç iddianın çalıştırılabilir örneğe gömüldüğü.

Parçacık rejiminde gömülü iddia 8’e düşüyor ve sessizlik 0,8571’e çıkıyor. Bu rejim örneği olmayan bir dokümanı anlatmıyor; örneği olan ama eksiksiz olmayan bir dokümanı anlatıyor. Yarım yazılmış örnek sayfada durur, okura bir şey gösterir ve bayatladığında hiçbir şey söylemez.

Tam örnek rejiminde gömülü iddia 31’e çıkıyor, sessizlik 0,4464‘e iniyor. Sessiz iddia sayısı 39’dan 25’e düşüyor: on dört iddia sessiz olmaktan çıkıp ses çıkaran sınıfa geçiyor. Referansın da çalıştırılabilir örnek taşıması bu farkın büyük bölümünü üretiyor.

Tablo aynı zamanda bir tabanı gösteriyor: sessizlik sıfırlanmıyor. En yüksek oranlarda bile 25 iddia sessiz kalıyor, çünkü kavram yüzeyine bağlı iddialar hiçbir örneğe gömülemez. Bir örnek bir şeyin nasıl davrandığını çalıştırarak iddia edebilir; neden öyle olduğunu iddia edemez. Gömülülük bir bakım aracıdır ve erişemediği bir bölge vardır; o bölge için doküman denetiminden başka yol yoktur.

Kopya Gömülü Değildir

Tablo bir şeyi sormuyor: bir iddiayı gömülü yapan tam olarak nedir? Sayfadaki kod bloğu kendi başına metindir; hiçbir metin bayatladığını kendi kendine bildirmez. Ses çıkaran şey aynı metnin bir yerde gerçekten çalıştırılmasıdır.

Bunun iki yolu vardır. Birincisi dokümandaki örneğin kendisinin çalıştırılmasıdır — bu dersteki ölçüm bloğu gibi. İkincisi örneğin, çalıştırılan bir kaynaktan alınmasıdır; doküman kodu barındırmaz, gösterir.

Üçüncü bir durum vardır ve en aldatıcı olan odur: kopya. Ekip örnekleri sınanan bir yerde tutar, dokümana da onların bir kopyasını yapıştırır. Kaynak sınanır, doğru kalır ve herkes örneklerin sınandığını sanır. Oysa sınanan kopya değildir; ürün değiştiğinde kaynak düzeltilir, doküman düzeltilmez ve iki metin sessizce ayrışır. Kopyalanmış örnek ölçümde gömülü sayılmaz; dokümanı doğrudan üstteki parçacık sütununa taşır ve sessizliği 0,8571’e çıkarır. Kopyanın maliyeti, örneksizliğin maliyetinden büyüktür: örneği olmayan doküman kimseyi yanıltmaz, kopyalı doküman hem okuru hem yazanı yanıltır.

Bu ölçütün ikinci sonucu örneğin boyutudur. Eksiksizlik koşulu örneği uzatır; önceki dersin ölçtüğü taranabilirlik ise uzunluğu cezalandırır — okur her satırı bir adım olarak öder. İki koşul gerçekten çekişir ve çözüm ortada bir yerde değildir. Doğru ayar en küçük eksiksiz örnektir: gerçek kullanımın tamamını değil, iddiayı taşıyan en kısa çalışır bütünü yazmak. Örnekten çıkarılan her satır bir iddiayı gömülü olmaktan çıkarır; bu yüzden çıkarma kararı estetik değil, ölçülebilir bir karardır — hangi iddiadan ses almaktan vazgeçiliyor?

Örneğin kaynakla birlikte sürümlenmesi ve inceleme sürecine girmesi bu konunun işi değildir; kursun son konusu doküman işletimini ayrıca kurar. Burada ölçülen yalnız şudur: bir iddia, ancak onu taşıyan metin gerçekten çalıştırılıyorsa ses çıkarır.

Sessizliğin Tür Dağılımı

Son tablo dört türü sessizlik açısından karşılaştırıyor ve bir tersliği açığa vuruyor. Açıklama en uzun yaşayan türdür — üçüncü sürümde yalnız 2 sessiz iddiası vardır. On ikinci sürümde ise 12 iddiasının 12’si sessiz bayattır: tür bütünüyle, tek bir uyarı üretmeden yanlışlaşır.

Referans tersini yapar: üçüncü sürümde zaten 13 sessiz iddia taşır ve on ikinci sürümde 15’e çıkar. Hızlı bayatlar ve baştan sona sessizdir. Öğretici ile nasıl yapılır ise sırasıyla 7 ve 5 sessiz iddiayla en iyi durumdadır; ikisi birlikte 17 gömülü iddianın tamamını taşır.

Sonuç yazma önceliğini belirler. En çok örnek taşıyan iki tür zaten en çok ses çıkaran türlerdir; oraya bir örnek daha eklemenin kazancı sınırlıdır. Kazanç, hiç örneği olmayan türlerdedir: referansın 15 iddiası ile açıklamanın 12 iddiası, ürünün geri kalanının tümünden daha sessizdir.

Özet

  • Gömülü iddia örneğin içinde durur ve çalıştırılarak sınanır; örneğin yanına yazılmış cümle aynı bilgiyi taşır ama sınanmaz ve sessizce yanlışlaşır.
  • Örnek üç koşulu birden ister: çalışır, eksiksiz, doğrulanabilir. Üçünden biri düşerse örnek gömülü görünür ama gömülü değildir. Bu dersin kendi ölçüm bloğu üç koşulu da karşılar ve çıktısı gerçekten alınmıştır.
  • On ikinci sürümde 56 iddianın 56’sı bayat, 39’u sessizdir: 0,6964. En yüksek sessizlik ikinci sürümdedir (0,7727), çünkü ilk bayatlayan yüzey imzadır ve imza iddialarının çoğu örneksiz referanstadır.
  • Gömülülük oranı değiştiğinde sessizlik 0,8571 ile 0,4464 arasında hareket eder; yarım yazılmış örnek gömülülüğü 17’den 8’e düşürür, eksiksiz örnek 31’e çıkarır.
  • Sessizlik sıfırlanamaz: kavram yüzeyine bağlı iddialar hiçbir örneğe gömülemez. En sessiz iki tür açıklama (12/12) ve referanstır (15); örnek eklemenin kazancı oradadır.

Sonraki Adım

Örnek, dokümanda kendi kendini sınayabilen tek öğedir. Metnin yanında duran ikinci bir öğe daha vardır ve o hiçbir koşulda çalıştırılamaz: diyagram. Diyagram da iddia taşır — bir bileşenin adını, bir akışın sırasını, bir kavramın yapısını — ve taşıdığı iddialar tıpkı cümleler gibi bir yüzeye bağlanır. Sonraki ders diyagramın hangi yüzeye bağlandığını, bu seçimin bayatlama hızını nasıl belirlediğini ve görsel bayatlamasının neden istisnasız sessiz olduğunu ölçer.

İ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