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

# Arayüz Anlamı

Beş eksenin bulduğu kümeler ayrıktır ve ikili kesişimlerin toplamı 0'dır; arayüz ekseni kapatıldığında bulunan 22'den 19'a iner ve arayüzsüz on inceleyen, beş eksene bakan tek inceleyenden 3 kusur az bulur.

Önceki ders beş eksenli bir okumanın 24 kusurun **22**'sini bulduğunu, tek eksenli bir
okumanın **6**'sını bulduğunu gösterdi. Aradaki fark eksen sayısındandı; ama tablo bir şeyi
varsaymıştı ve doğrulamamıştı: eksenlerin **payları birbirinden ayrı**. Beş eksenin toplamı
22 çıkıyorsa, aynı kusuru iki eksenin birden saymadığı kabul edilmiş demektir.

Bu ders o kabulü ölçer ve ölçümü ilk eksende, **arayüz** ekseninde yapar. Sorusu şudur: bir
arayüz kusuru gerçekten yalnız arayüze bakan gözle mi bulunur, yoksa yeterince çok kişi
yeterince dikkatli okursa başka bir eksenden de görünür mü.

## Genel Arayüzün Sözleşmesi

Bir kod parçasının **genel arayüzü**, dışarıdan çağrılabilen adların ve onların
davranışlarının kümesidir: işlev imzaları, tip alanları, dönüş değerleri, hata biçimleri ve
adların kendisi. Bu kümeye **arayüz sözleşmesi (interface contract)** denir, çünkü çağıran
taraf ona güvenerek kod yazar.

Sözleşmenin bozulması bir derleme hatası olmak zorunda değildir. Sürümleme stratejileri ve
kırıcı olan ile olmayan değişikliğin sınıflandırması Web API Tasarımı kursunun Hata, Sürüm ve
Belge konusunda kuruldu; burada tekrarlanmıyor. Bu dersin ölçtüğü tek şey **incelemede nasıl
fark edildiğidir**: hangi eksene bakan göz bu izi görür, hangisi görmez.

## Beş Bozma Biçimi ve İncelemedeki İzi

**Zorunlu parametre eklemek.** İz imzanın kendisindedir ve değişikliğin içinde okunur. Çağıran
kod derlenmez; kusur birleştirmeden sonra derleme aşamasında da yakalanır. İncelemenin buradaki
katkısı bulmak değil, **erken** bulmaktır.

**Parametrenin anlamını değiştirmek.** İmza aynı kalır — aynı ad, aynı tür — ama beklenen değer
başkadır; bir süre alanının birimi saniyeden milisaniyeye geçmiştir. Değişiklikte görünen tek
şey gövdedeki bir çarpandır, imzada iz yoktur.

**Dönüş değerinin davranışını değiştirmek.** Boş liste yerine boş değer dönmek, hata yerine
varsayılan dönmek, sıralı yerine sırasız dönmek. İz gövdededir; çağıran taraf derlenir ve
sessizce yanlış çalışır.

**Atılan hata sınıfını değiştirmek.** Yakalama blokları artık eşleşmez; hata yakalanmadan
yukarı çıkar ve çağıran taraf bunu derleme sırasında öğrenmez.

**Bir adı kaldırmak ya da yeniden adlandırmak.** En görünür biçimdir ve değişikliğin içinde
doğrudan okunur; kaldırılan adı kimin kullandığı ise değişikliğin dışındadır.

Ortadaki üç biçimin ortak yanı dersin çıkış noktasıdır: **derleyici sessizdir, testler
geçer, geriye tek savunma olarak inceleme kalır** — çünkü testler de aynı değişiklikte yeni
davranışa göre güncellenmiştir.

## İzin Değişikliğin İçinde, Sonucunun Dışında

Arayüz kusurunun incelemedeki ayırt edici yanı şudur: **izi küçüktür, sonucu değişikliğin
dışındadır.** Gönderilen değişiklikte görünen şey tek bir satırdır — bir imza. O satırın
kırdığı kod ise değişikliğin içinde değildir; başka dosyalarda, başka depolarda ya da henüz
yazılmamış çağrılardadır.

Bu, arayüz ekseninin neden ayrı bir okuma gerektirdiğini açıklıyor. Gerçekleştirime bakan göz
işlevin gövdesini okur ve gövde doğrudur; teste bakan göz testleri okur ve testler geçer,
çünkü testler de yeni imzayla birlikte güncellenmiştir. İzi görmek için imzanın **eski
hâliyle** karşılaştırılması gerekir ve bunu yapan tek okuma arayüz ekseninden yapılandır.

```text
# ogretilen inceleme notu ornegi , calistirilmamistir

konu     genel islevin imzasi
onceki   ayristir(metin)
sonraki  ayristir(metin, kip)

not      Ikinci parametre varsayilansiz eklenmis; onceki imzayla yapilan
         cagri artik gecerli degil. Bu, cagiran koda dokunmadan
         yayimlanamayacak bir degisiklik. Iki yol var: kip parametresine
         onceki davranisi veren bir varsayilan vermek, ya da onceki
         imzayi koruyup yeni davranisi ayri bir adla sunmak.
```

Not değişikliğin bir yerini gösteriyor, kırılan koşulu adlandırıyor ve iki kapanış yolu
öneriyor. Bu blok bir örnektir ve çalıştırılmaz; dersin sayıları yalnız ölçüm bloğundan
gelir.

## İncelemenin Elindeki Üç Kaynak

Arayüz ekseninde çalışan bir okuma üç kaynağa bakabilir ve üçünün kapsamı farklıdır.

**Değişikliğin kendisi** eklenen ve silinen satırlardır. Sözleşmenin yeni hâli buradadır,
önceki hâli de silinen satırlarda durur; bu iki hâlin karşılaştırılması arayüz ekseninin asıl
işidir.

**Değişikliğin başlığı ve açıklaması** yazanın niyetini taşır. "Kip parametresi eklendi"
cümlesiyle "kip parametresi zorunlu olarak eklendi" cümlesi arasındaki fark, incelemenin
hangi soruyu soracağını belirler. Bu kaynak eksikse okuma imzayı kendi başına yorumlamak
zorunda kalır.

**Deponun geri kalanı** çağıran kodu içerir ama değişikliğin parçası değildir. Arayüz
kusurunun sonucu buradadır ve inceleme bu kaynağa bakmak zorunda değildir; bakması ayrı bir
karardır ve ayrı bir okuma isteği doğurur.

Ölçüm bu üç kaynağı ayrı ayrı modellemez; arayüz ekseni açıksa kusur bulunur, kapalıysa
bulunmaz. Modelin bu yalınlığı ölçülen şeyi tek bir değişkende tutmak içindir: **hangi eksene
bakıldığı.**

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

- **IE9** — Ortak kurgu değişmez: 600 satır, 12 öbek, 24 kusur, dikkat 12 öbek. Değişikliğin
  tamamı okunur; bu derste de okunmamış öbek yoktur.
- **IE10** — Bir kusur tek bir sınıfa aittir. Aynı satırda iki sınıftan kusur bulunabilir ama
  bunlar iki ayrı kusurdur ve ayrı sayılır.
- **IE11** — İki eksenin **kesişimi**, ikisinin de bulduğu kusur numaralarının kümesidir.
  Sınıflar birbirini dışladığı için bu kesişimin boş çıkması beklenir; ölçüm bunu varsaymaz,
  sayar.
- **IE12** — "Yalnız bu eksende" sütunu, o eksenin bulduğu ve öteki dört eksenin hiçbirinin
  bulamadığı kusur sayısıdır.
- **IE13** — Arayüzsüz kurullarda hiçbir inceleyen arayüz ekseni taşımaz; kalan dört eksen
  serbestçe dağıtılır ve kişi sayısı artırılabilir.
- **IE14** — "On inceleyen, arayüzsüz" kurulunda dört eksenin her birine ikişer kişi ve
  ayrıca dördünü birden taşıyan iki kişi düşer; toplam on okuma yapılır.
- **IE15** — Ölçüm hâlâ tek turludur. Arayüz kusurunun sonradan, çağıran kod kırıldığında
  bulunması bu tablonun dışındadır ve inceleme bulgusu sayılmaz.

## Ölçüm

```python
"""Arayuz ekseni: bir eksenin buldugunu baska eksen buluyor mu.

Bolum 1 - bes tek eksenli okuma; kesisim ve yalniz kendi ekseninde gorunen.
Bolum 2 - arayuz ekseni olan ve olmayan yapilandirmalar.
"""
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


TAM = set(EKSENLER)
d = degisiklik(600)
tekil = {e: incele(d, {e}) for e in EKSENLER}

print(f"{'eksen':<15s} {'bulunan':>7s} {'öteki dört eksende de':>21s} "
      f"{'yalnız bu eksende':>17s}")
for e in EKSENLER:
    oteki = set().union(*(tekil[o] for o in EKSENLER if o != e))
    print(f"{e:<15s} {len(tekil[e]):7d} {len(tekil[e] & oteki):21d} "
          f"{len(tekil[e] - oteki):17d}")
birlesim = set().union(*tekil.values())
kesisim = sum(len(tekil[a] & tekil[b])
              for a in EKSENLER for b in EKSENLER if a < b)
print(f"beş tekil okumanın birleşimi {len(birlesim)}, "
      f"ikili kesişimlerin toplamı {kesisim}")

print()
DORT = TAM - {"arayuz"}
KURULLAR = {
    "tek inceleyen, beş eksen": [TAM],
    "tek inceleyen, arayüzsüz": [DORT],
    "üç inceleyen, arayüz dahil": [{"arayuz"}, {"gerceklestirim"},
                                   {"test", "belge"}],
    "üç inceleyen, arayüz yerine": [{"gerceklestirim"}, {"gerceklestirim"},
                                    {"test", "belge"}],
    "on inceleyen, arayüzsüz": [{e} for e in sorted(DORT)] * 2 + [DORT] * 2,
}
print(f"{'kurul':<28s} {'inceleyen':>9s} {'bulunan':>7s} {'kaçan':>5s} "
      f"{'arayüz kaçan':>12s} {'yazılmayan kaçan':>16s}")
for ad, atama in KURULLAR.items():
    b = kurul(d, atama)
    kacan = [k for k in d["kusurlar"] if k["no"] not in b]
    ar = sum(1 for k in kacan if k["sinif"] == "arayuz")
    yaz = sum(1 for k in kacan if k["sinif"] == YAZILMAYAN)
    print(f"{ad:<28s} {len(atama):9d} {len(b):7d} {len(kacan):5d} "
          f"{ar:12d} {yaz:16d}")
```

```
eksen           bulunan öteki dört eksende de yalnız bu eksende
arayuz                3                     0                 3
gerceklestirim        6                     0                 6
test                  3                     0                 3
belge                 3                     0                 3
bicim                 7                     0                 7
beş tekil okumanın birleşimi 22, ikili kesişimlerin toplamı 0

kurul                        inceleyen bulunan kaçan arayüz kaçan yazılmayan kaçan
tek inceleyen, beş eksen             1      22     2            0                2
tek inceleyen, arayüzsüz             1      19     5            3                2
üç inceleyen, arayüz dahil           3      15     9            0                2
üç inceleyen, arayüz yerine          3      12    12            3                2
on inceleyen, arayüzsüz             10      19     5            3                2
```

## Paylar Ayrık

Üst tablonun orta sütunu beş satırda da **0** veriyor ve ikili kesişimlerin toplamı da
**0**'dır. Beş eksenin hiçbiri ötekinin bulduğu tek bir kusuru bile bulmuyor.

Sağdaki sütun bunun aynadaki görüntüsü: her eksenin bulduğu kusurların **tamamı** yalnız o
eksende görünüyor — arayüzde **3**, gerçekleştirimde **6**, testte **3**, belgede **3**,
biçimde **7**. Toplamları **22** ve bu, beş tekil okumanın birleşimine eşit. Yani bir eksenin
katkısı, hangi eksenlerin zaten açık olduğundan bağımsızdır.

Ayrıklık, iki kusurun aynı dosyada ya da aynı satır aralığında bulunamayacağı anlamına
gelmiyor; **sınıfların** ayrı olduğu anlamına geliyor. Aynı işlevin aynı satırında hem bir
imza kusuru hem bir biçim kusuru durabilir ve kurgu bunları iki ayrı kusur olarak sayar. Aynı
metni okuyan iki göz, aradıkları şey ayrı olduğu için ayrı şeyler bulur.

Bunun pratik karşılığı kesindir: **bir eksen kapatıldığında kaybedilen kusur sayısı, o
eksenin sınıfındaki kusur sayısıdır.** Kapanan ekseni telafi eden bir kalıntı yoktur. Arayüz
ekseni kapatılırsa üç kusur gider; başka eksenlere ne kadar okuma eklenirse eklensin o üçü
geri getirmez. Alt tablo bu cümleyi sınıyor.

## Arayüz Ekseni Kapatılınca

Alt tablonun ilk iki satırı ölçümün çekirdeği. Aynı tek inceleyen, aynı değişiklik, tek fark
arayüz ekseninin açık olup olmaması: bulunan **22**'den **19**'a iniyor, kaçan **2**'den
**5**'e çıkıyor ve fark tam olarak **3** arayüz kusuru. Kayıp, sınıfın büyüklüğü kadar.

Üçüncü ve dördüncü satır aynı ölçümü üç kişilik bir kurulda tekrarlıyor. Arayüz ekseni açıkken
üç inceleyen **15** buluyor; arayüze bakan kişinin yerine ikinci bir gerçekleştirim okuması
konduğunda **12**'ye iniyor. Kişi sayısı değişmedi, okuma sayısı değişmedi, hatta ikinci
gerçekleştirim okuması fazladan bir emek. Sonuç **3** kusur eksik. Aynı eksene ikinci kez
bakmanın getirisi **0**'dır ve bu ölçümde bedeli görünür hâle geliyor.

Son satır dersin en keskin sonucu. **On inceleyen** arayüz ekseni olmadan çalışıyor: dört
eksenin her birine ikişer kişi, ayrıca dördünü birden okuyan iki kişi daha. Bulunan **19**.
Beş eksene bakan **tek** inceleyen **22** buluyor. On kişilik bir kurul, tek kişilik bir
kuruldan **3** kusur az buluyor — ve fark, on kişinin hiçbirinin bakmadığı tek eksenden
geliyor.

Dördüncü satırın yapılandırması uydurma değildir; bir incelemede kusur kaçtığında verilen ilk
karar çoğu zaman **bir inceleyen daha eklemektir**. Eklenen kişiye hangi eksene bakacağı
söylenmezse, en tanıdık eksene bakar — gerçekleştirime. Tablo o kararın sayısal sonucunu
veriyor: kurul büyüdü, okuma sayısı arttı, bulunan sayı **15**'ten **12**'ye indi. Sayının
düşmesinin nedeni yeni kişinin bir şeyi bozması değil, yerine geçtiği okumanın **başka bir
eksende** olmasıdır.

Aradaki fark **3/24**, yani **0,125**'tir; kümenin çözünürlüğü **1/24 = 0,042** olduğuna göre
bu farkın üç katıdır ve ölçüm bandının içindedir. Sayının küçüklüğü aldatıcı olabilir: kaçan
üç kusurun her biri, değişikliğin dışındaki kodu kıran bir sözleşme bozulmasıdır ve
incelemenin bulamadığı yerde ancak çağıran taraf kırıldığında görünür.

Ekseni açmanın ucuz bir yolu vardır ve tabloda görünmez: arayüz ekseni, değişikliğin tamamını
yeniden okumadan da açılabilir. Genel bildirimlerin geçtiği satırlar değişikliğin küçük bir
parçasıdır ve önce onlara bakan bir okuma, arayüz sınıfının üç kusurunu ötekilerden önce
görür. Eksen açmak her zaman kurula bir kişi eklemek değildir; bazen yalnız okuma sırasını
değiştirmektir. Kurgu bu ayrımı ölçmez — eksen ya açıktır ya kapalıdır — ama tablonun
söylediği ikisi için de aynıdır: **kapalı bir ekseni telafi eden bir kişi sayısı yoktur.**

## Sözleşmenin Yazılmamış Yanı

Arayüz ekseni sözleşmenin **yazılmış** hâlini karşılaştırır. İmza, dönüş türü ve hata sınıfı
metindir ve metin okunabilir. Sözleşmenin bir de yazılmamış yanı vardır: çağıran tarafın
güvendiği ama hiçbir yerde belirtilmemiş davranışlar — çağrının yinelenmesinin güvenli olup
olmadığı, dönen listenin sırasının kararlı olup olmadığı, aynı girdiye aynı yanıtın verilip
verilmeyeceği.

Bu davranışlar bozulduğunda arayüz ekseni bir iz bulamaz, çünkü karşılaştırılacak bir önceki
metin yoktur. Kurgudaki karşılığı doğrudandır: böyle bir kusur arayüz sınıfına değil, altıncı
sınıfa — **eksik gereksinim** sınıfına — düşer ve arayüz ekseni açık olsa bile kaçmaya devam
eder. Alt tablonun son sütununun beş satırda da **2** vermesinin nedeni budur.

Ayrım tek bir soruya iner: **bozulan şey bir yerde yazılı mı?** Yazılıysa arayüz ekseninin
işidir ve eksen açıldığında bulunur. Yazılı değilse hiçbir eksenin işi değildir ve incelemenin
dışında, sözleşmenin yazıldığı yerde kapatılır.

## Özet

- Genel arayüz, dışarıdan çağrılabilen adların ve davranışlarının kümesidir; sözleşmesi beş
  ayrı biçimde bozulabilir ve bunların üçü çağıran kodu kırmadan yanlış çalıştırır.
- Arayüz kusurunun izi değişikliğin içinde tek bir satırdır, sonucu ise değişikliğin
  dışındadır; bu yüzden imzanın önceki hâliyle karşılaştırılmasını gerektirir.
- Beş eksenin bulduğu kümeler ayrıktır: ikili kesişimlerin toplamı **0**, her eksenin
  bulduğunun tamamı yalnız o eksende görünür ve beşinin birleşimi **22**'dir.
- Bir eksen kapatıldığında kaybedilen kusur, o sınıfın büyüklüğü kadardır: arayüz ekseni
  kapatılınca bulunan **22**'den **19**'a iner, kaçan **2**'den **5**'e çıkar.
- Arayüze bakan kişinin yerine ikinci bir gerçekleştirim okuması konduğunda üç kişilik kurul
  **15** yerine **12** buluyor; arayüzsüz **on inceleyen** ise **19** ile beş eksene bakan
  tek inceleyenin **22**'sinin altında kalıyor.
- Sözleşmenin yazılmamış yanı bozulduğunda arayüz ekseninin karşılaştıracağı metin yoktur; bu
  kusur altıncı sınıfa düşer ve eksen açık olsa bile kaçar.

## Sonraki Adım

Tabloda en büyük tekil payı **gerçekleştirim** ekseni taşıyor: **6** kusur, 24'ün **0,250**'si.
Arayüz ekseninin bulgusu imzanın karşılaştırılmasıyla çıkıyordu; gerçekleştirim ekseninin
bulgusu için karşılaştırılacak bir önceki hâl yoktur — kodun ne yapması gerektiği ile ne
yaptığı arasındaki farka bakılır. Sonraki ders bu ekseni ölçer: eksenler tek tek açıldığında
bulunan sayı hangi eğriyle büyür, gerçekleştirim ekseninin kendi payı bu eğrinin neresinde
durur ve tek başına en çok bulan eksen olması onu ne kadar yeterli kılar.
