---
title: 'Depo Platformu Yetenekleri'
source: 'https://academia.sh/tr/kurslar/kod-inceleme/depo-platformu-yetenekleri'
course: 'Kod İnceleme ve Ekip Süreci'
language: tr
updated: '2026-08-17T18:10:47+00:00'
license: 'CC BY-SA 4.0'
---

# Depo Platformu Yetenekleri

Beş yetenek zinciri 45 birimden 21'e indirir ama bulunan 15, kaçan 9 ve yazılmayan kaçan 2 her satırda değişmeden kalır; tek tek kazançlar 2 ile 7 arasındadır ve yalnız tartışmanın kazancı tur sayısıyla büyür — 4, 6, 12.

Önceki iki ders akışın kurallarını metinle kurdu: katkı rehberi bir metin, sahiplik bir eşleme
metniydi. Kuralların yürüdüğü bir yüzey de var — iş öğesinin kaydedildiği, kuyruğun görüldüğü,
tartışmanın değişikliğe iliştiği, tümleşen işin yayımlandığı ve yayımlananın tüketilebildiği
yetenekler.

Bu yetenekler ürün olarak değil **sınıf** olarak ele alınır: sorun izleme, pano, tartışma, sürüm
yayımı, paket kaydı. Hangi barındırma yüzeyinde durdukları bu dersin konusu değildir ve beş yıl
sonra da aynı sınıflar var olacaktır. Bu dersin sorusu tek: **her yetenek zincirin hangi
geçişinin beklemesini kısaltıyor, ve kısalttığı miktar ne?**

## Beş Yetenek Sınıfı

**Sorun izleme**, bir önerinin kaydedildiği yerdir. Öneri bir kayda dönüşmediğinde bir yerde
sözlü olarak durur ve sıraya girmesi birinin onu hatırlamasına bağlıdır. Kayıt, öneriyi
zincirin ilk geçişine bağlar.

**Pano**, iş öğelerinin durumlarına göre dizildiği yüzeydir. Önceki derste ölçüldüğü gibi
birikimi gösterir, hızı göstermez; katkısı sıradaki öğenin **üstlenilmesini** hızlandırmasıdır.
Kimse sırada ne olduğunu görmüyorsa, sıradan bir şey alınması birinin sormasına bağlıdır.

**Tartışma**, bir bulgunun ve karşı görüşün değişikliğe **iliştiği** yerdir. Bulgu değişikliğin
dışında bir yazışmada durursa, sonraki tur onu yeniden kurmak zorunda kalır: hangi satır, hangi
gerekçe, hangi karşı öneri. İlişik tartışma bu yeniden kurmayı ortadan kaldırır.

**Sürüm yayımı**, tümleşen işin bir noktaya bağlanıp dışarıya bildirildiği yetenektir. **Paket
kaydı**, yayımlanan işin bir bağımlılık olarak **çekilebildiği** yerdir. İkisi ayrı geçişlere
dokunur ve ikisi de incelemenin sonrasındadır.

Beşinin ortak yanı, her birinin bir **kayıt** tutmasıdır. Kaydın alanları yeteneğin zincirde ne
yapabileceğini belirler.

```text
# örnek iş öğesi kaydı — çalıştırılmamıştır

kimlik      : #377
durum       : incelemede
sınıf       : arayuz
gereksinim  : dış çağrıda zaman aşımı süresi ayarlanabilmeli
bağlı öneri : #361
değişiklik  : ödeme-zaman-asimi
tartışma    : 4 not, 2'si bir satıra iliştirilmiş
sürüm       : —
```

`durum` alanı öğenin panodaki sütununu, `değişiklik` alanı hangi değişikliğin bu öğeyi
karşıladığını, `tartışma` alanı bulguların nereye iliştiğini, `sürüm` alanı ise işin
yayımlanıp yayımlanmadığını söyler. Alanlardan biri boşsa zincirin o halkası ölçülemez: `sürüm`
alanı hiç doldurulmayan bir depoda `tümleşti→kapandı` geçişinin süresi bilinmez.

## Yeteneklerin Birbirine Bağlanması

Yeteneklerin tek başına değil, **birbirine bağlı** olması ölçümü mümkün kılıyor. Zincirin
beklemesi geçişlerde ölçülür ve bir geçişin ölçülebilmesi için iki ucun aynı kimliğe bağlı olması
gerekir: öneri hangi iş öğesine, iş öğesi hangi değişikliğe, değişiklik hangi tartışmaya, tümleşen
iş hangi sürüme.

Bağ koptuğunda kayıp yalnız izlenebilirlik değildir. Bir bulgunun değişiklikten kopmuş bir
yazışmada durması, o bulgunun bir sonraki turda yeniden kurulmasını gerektirir ve ölçümde
tartışmanın kazancı tam olarak budur — **6**'dan **4**'e inen tur süresi, kopmuş bağın
tamir maliyetidir.

Aynı mantık zincirin sonunda da işler. Bir sürüm notunun hangi iş öğelerini kapsadığı, sürüm ile
öğeler arasındaki bağdan çıkar. Bağ yoksa not elle yazılır ve elle yazılan not, kimsenin
doğrulayamadığı bir listedir. Bu ders bağın **beklemeye** etkisini ölçüyor; notun **okura**
etkisi sonraki dersin konusudur.

## Her Yetenek Bir Geçişe Dokunur

Ölçümün tasarımı tek bir kurala dayanıyor: **bir yetenek yalnız bir geçişe dokunur.** Bir
yeteneğin birden çok yere iyi geldiği söylenirse ölçüm anlamını yitirir; hangi kazancın nereden
geldiği ayrılamaz. Eşleme şudur: sorun izleme `öneri→sırada`, pano `sırada→yazılıyor`, sürüm
yayımı `tümleşti→kapandı`, paket kaydı `kapandı→tüketilebilir`. Tartışma bunların hiçbirine
dokunmaz; **turun süresine** dokunur.

Son geçiş bu derste ekleniyor. Önceki dersin zinciri iş öğesinin kapanışında bitiyordu; paket
kaydı bir adım ötesine, işin bir başkası tarafından **tüketilebilir** hâle gelmesine dokunur. Bu
adım iş öğesinin durumu değildir ve panoda görünmez, ama zincirin okurunun beklediği yer orasıdır.

## Turun Sayısı ile Turun Süresi

Tartışmanın ayrı durması bir ayrımı zorunlu kılıyor. **İnceleme turunun sayısı** ile **bir turun
süresi** aynı şey değildir. Tur sayısını belirleyen şey ilk turda bulunandır ve bu, kursun
başından beri eksen atamasının sonucudur. Bir turun süresini belirleyen ise bulgunun bir turdan
diğerine ne kadar bütün taşındığıdır.

Bu ayrımın pratik sonucu şudur: **hiçbir platform yeteneği tur sayısını düşürmez.** Tur sayısı
incelemenin gördüğüyle belirlenir ve bir yüzey görmeyi değiştirmez. Yetenekler beklemeye dokunur
ve tartışma da beklemeye dokunur — yalnız çarpanı farklıdır, çünkü tur başına yazılan beklemeyi
değiştirir ve tur sayısıyla çarpılır.

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

- **EA22** — Ortak tanımın 600 satırlık değişikliği ve 24 kusuru olduğu gibi kullanılır; sınıf
  dağılımı ve kâhin kursun sabitidir.
- **EA23** — Zincir önceki dersin geçişleridir, sonuna `kapandı→tüketilebilir` **8** birim
  eklenmiştir. Diğer dört geçiş **5**, **9**, **2** ve **3** birimdir.
- **EA24** — Her yetenek **tek bir geçişin** beklemesini yeni bir değere indirir: sorun izleme
  **1**, pano **4**, sürüm yayımı **1**, paket kaydı **1**. Değerler yeteneğin var olduğu ve
  kullanıldığı durumu temsil eder.
- **EA25** — Tartışma tek geçişe değil, **tur başına beklemeye** dokunur ve onu **6**'dan
  **4**'e indirir. Gerekçesi, ilişik tartışmanın turlar arasında yeniden kurulmayı ortadan
  kaldırmasıdır.
- **EA26** — Ana ölçümün ataması `üç inceleyici, ayrı eksen` atamasıdır. İkinci ölçüm tartışmayı dört
  atamada ayrı ayrı sınar; başka hiçbir şey değişmez.
- **EA27** — Yetenekler bulunan kusura dokunmaz. Bir yüzey ne eksen ekler ne dikkat büyütür; bu
  varsayım ölçümün sonucuyla birlikte sınanır ve tabloda doğrulanır.
- **EA28** — Kümenin çözünürlüğü 24 kusurda **1/24**'tür; zincirde ölçülebilen en küçük fark
  **1 birim** beklemedir.

## Ölçüm

```python
"""Depo platformu yetenekleri: her yetenegin dokundugu tek gecis.

Bolum 1 - bes yetenek tek tek ve birlikte; bulunan ve kacan degismiyor mu.
Bolum 2 - tur suresini kisaltan yetenegin dort atamadaki kazanci.
"""
TOHUM = 20260815
EKSENLER = ("arayuz", "gerceklestirim", "test", "belge", "bicim")
YAZILMAYAN = "eksik gereksinim"
SINIFLAR = EKSENLER + (YAZILMAYAN,)
DIKKAT, OBEK = 12, 50
# Zincir: is ogesinin gecisleri ve sonuncusu tuketiciye uzanan adim.
ZINCIR = {"öneri→sırada": 5, "sırada→yazılıyor": 9, "yazılıyor→incelemede": 2,
          "tümleşti→kapandı": 3, "kapandı→tüketilebilir": 8}
TUR_BEKLEME = 6
# Her yetenek tek bir gecise dokunur; tartisma turun suresine dokunur.
YETENEKLER = {
    "sorun izleme": ("öneri→sırada", 1),
    "pano": ("sırada→yazılıyor", 4),
    "tartışma": ("tur süresi", 4),
    "sürüm yayımı": ("tümleşti→kapandı", 1),
    "paket kaydı": ("kapandı→tüketilebilir", 1),
}


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 tur_dongusu(bulunan, kusur_sayisi, tur_basina_bekleme=TUR_BEKLEME):
    kalan, tur, bekleme = kusur_sayisi - len(bulunan), 1, tur_basina_bekleme
    while kalan > 0 and tur < 6:
        tur += 1
        bekleme += tur_basina_bekleme
        kalan -= max(1, len(bulunan) // 2)
    return tur, bekleme, max(0, kalan)


def zincir_toplami(d, atama, acik):
    """Acik yeteneklerin ayarlariyla zincirin toplam beklemesi."""
    gecis = dict(ZINCIR)
    tur_suresi = TUR_BEKLEME
    for ad in acik:
        yer, deger = YETENEKLER[ad]
        if yer == "tur süresi":
            tur_suresi = deger
        else:
            gecis[yer] = deger
    b = kurul(d, atama)
    tur, bekleme, kalan = tur_dongusu(b, len(d["kusurlar"]), tur_suresi)
    return sum(gecis.values()) + bekleme, tur, bekleme, b, kalan


TAM = set(EKSENLER)
ATAMALAR = {
    "tek inceleyici, tüm eksenler": [TAM],
    "üç inceleyici, aynı eksen": [{"gerceklestirim"}] * 3,
    "üç inceleyici, ayrı eksen": [{"arayuz"}, {"gerceklestirim"}, {"test", "belge"}],
    "beş inceleyici, beş eksen": [{e} for e in EKSENLER],
}
d = degisiklik(600)
ANA = ATAMALAR["üç inceleyici, ayrı eksen"]
taban, t0, b0, bul0, _ = zincir_toplami(d, ANA, [])
print(f"atama: üç inceleyici, ayrı eksen | zincir {taban} | tur {t0} | "
      f"inceleme {b0} | bulunan {len(bul0)} | kaçan {24 - len(bul0)}")
print()
print(f"{'yetenek':<16s} {'dokunduğu geçiş':<23s} {'tur':>3s} "
      f"{'zincir':>6s} {'kısalan':>7s} {'bulunan':>7s} {'kaçan':>5s} "
      f"{'yazılmayan':>10s}")
for ad in YETENEKLER:
    z, tur, _, b, _ = zincir_toplami(d, ANA, [ad])
    yaz = sum(1 for k in d["kusurlar"]
              if k["no"] not in b and k["sinif"] == YAZILMAYAN)
    print(f"{ad:<16s} {YETENEKLER[ad][0]:<23s} {tur:3d} {z:6d} "
          f"{taban - z:7d} {len(b):7d} {24 - len(b):5d} {yaz:10d}")
z, tur, _, b, _ = zincir_toplami(d, ANA, list(YETENEKLER))
yaz = sum(1 for k in d["kusurlar"]
          if k["no"] not in b and k["sinif"] == YAZILMAYAN)
print(f"{'beşi birlikte':<16s} {'—':<23s} {tur:3d} {z:6d} {taban - z:7d} "
      f"{len(b):7d} {24 - len(b):5d} {yaz:10d}")

print()
print(f"{'atama':<30s} {'tur':>3s} {'tartışmasız':>11s} {'tartışmalı':>10s} "
      f"{'kısalan':>7s}")
for ad, atama in ATAMALAR.items():
    yok, tur, _, _, _ = zincir_toplami(d, atama, [])
    var, _, _, _, _ = zincir_toplami(d, atama, ["tartışma"])
    print(f"{ad:<30s} {tur:3d} {yok:11d} {var:10d} {yok - var:7d}")
```

```
atama: üç inceleyici, ayrı eksen | zincir 45 | tur 3 | inceleme 18 | bulunan 15 | kaçan 9

yetenek          dokunduğu geçiş         tur zincir kısalan bulunan kaçan yazılmayan
sorun izleme     öneri→sırada              3     41       4      15     9          2
pano             sırada→yazılıyor          3     40       5      15     9          2
tartışma         tur süresi                3     39       6      15     9          2
sürüm yayımı     tümleşti→kapandı          3     43       2      15     9          2
paket kaydı      kapandı→tüketilebilir     3     38       7      15     9          2
beşi birlikte    —                         3     21      24      15     9          2

atama                          tur tartışmasız tartışmalı kısalan
tek inceleyici, tüm eksenler     2          39         35       4
üç inceleyici, aynı eksen        6          63         51      12
üç inceleyici, ayrı eksen        3          45         39       6
beş inceleyici, beş eksen        2          39         35       4
```

## Kısalanın Okunması

Zincirin tabanı **45** birim. Tek tek açıldığında yeteneklerin kazancı **2** ile **7** arasında
değişiyor ve sıralama şöyle: paket kaydı **7**, tartışma **6**, pano **5**, sorun izleme **4**,
sürüm yayımı **2**.

Sıralamayı belirleyen şey yeteneğin önemi değil, dokunduğu geçişin **başlangıçtaki uzunluğudur.**
Paket kaydı en çok kısaltıyor çünkü `kapandı→tüketilebilir` en uzun geçişti — **8** birim. Sürüm
yayımı en az kısaltıyor çünkü dokunduğu geçiş zaten **3** birimdi ve orada kısaltılacak yer yok.
Bu, bir yeteneğin değerinin **zincirdeki yerine bağlı** olduğunu söyler: aynı yetenek başka bir
zincirde başka bir sıraya oturur.

Beşi birlikte açıldığında zincir **45**'ten **21**'e iniyor; kazanç **24** birim, yani zincirin
**%53**'ü. Tek tek kazançların toplamı da **24**'tür ve bu bir tesadüf değil — her yetenek ayrı
bir geçişe dokunduğu için kazançlar birbirine karışmıyor ve toplanabiliyor. Aynı geçişe dokunan
iki yetenek olsaydı toplam, tek tek kazançların toplamından küçük olurdu.

`tur` sütunu altı satırın altısında da **3**. Hiçbir yetenek turu düşürmüyor. Zincirin toplamı
yarıya inerken tur sayısı hiç kımıldamıyor; **beklemeyi kısaltmak ile turu kısaltmak ayrı
işlerdir** ve bu yüzeyler yalnız birincisini yapar.

## Tartışmanın Ayrıcalığı

İkinci tablo tartışmayı dört atamada ayrı ayrı sınıyor ve tek tabloda görünmeyen bir şey
gösteriyor: tartışmanın kazancı **sabit değil.** İki turluk atamalarda **4** birim, üç turlukta
**6**, altı turlukta **12**.

Nedeni tanımında. Tartışma tur başına beklemeyi **6**'dan **4**'e indiriyor; kazanç tur başına
**2** birim ve tur sayısıyla çarpılıyor. Diğer dört yetenek zincirin **sabit** kısmına dokunuyor
ve kazançları atamadan bağımsız — hangi atama olursa olsun paket kaydı **7** birim kısaltır.

Buradan bir sıralama kuralı çıkar. **İncelemenin iyi olduğu bir zincirde tartışmanın kazancı en
küçük yeteneklerden biridir; incelemenin kötü olduğu bir zincirde en büyüğüdür.** Altı turluk
satırda tartışma **12** birim kısaltıyor ve bu, paket kaydının **7**'sinden fazla. Yani bir
yeteneğin sırası, ekibin incelemesinin ne durumda olduğuna bağlı olarak değişir ve sabit bir
öncelik listesi yazılamaz.

Aynı satır bir uyarı da taşıyor. Altı turluk atamanın zinciri tartışmayla birlikte **51** birim;
tartışmasız iki turluk atamanın **39**'undan hâlâ uzun. **Hiçbir yetenek kötü bir eksen
atamasını kapatmaz.** Yüzey, incelemenin görmediğini görmesini sağlamaz.

## Dokunulmayan Sütunlar

Tablonun sağ üç sütunu altı satırda da aynı: bulunan **15**, kaçan **9**, yazılmayan kaçan
**2**. **EA27** bunu varsaymıştı ve ölçüm doğruluyor.

Bu sabitlik dersin asıl bulgusudur. Beş yetenek zincirin yarısını kesiyor ve **bir tek kusur
daha buldurmuyor.** Kusur bulmanın kaynağı kursun başından beri aynı: bakılan eksen sayısı ve
okunan öbek sayısı. Bir yüzey ne eksen ekler ne dikkat büyütür; iş öğesinin bir yerden bir yere
geçmesini hızlandırır.

Yazılmayan kaçan sütunu bunu en sert biçimde söylüyor. **Eksik gereksinim** sınıfı, sorun izleme
yeteneği açıkken de **2** kaçıyor — hem de öneriyi kaydeden yetenek tam olarak budur. Kayıt,
öneriyi zincire sokar; kaydedilmemiş gereksinimi kaydetmez. Bir önceki dersin ölçtüğü
**gereksinim beyanı**, o sınıfa dokunabilen düzenekti ve o bir yüzey değil, bir **rehber
maddesiydi**.

Bu ayrım bir seçim kuralı verir: bir yetenek zincirde bir geçişi kısaltıyorsa değerlidir ve
kısalttığı miktar ölçülebilir. Bulunan kusuru artırma iddiası taşıyan bir yetenek varsa, o iddia
ancak eksen sayısını ya da okunan öbek sayısını değiştirerek doğru olabilir; bu tablodaki hiçbir
yetenek bunu yapmıyor.

## Özet

- Beş yetenek sınıf düzeyinde ele alınır — sorun izleme, pano, tartışma, sürüm yayımı, paket
  kaydı — ve her biri zincirde **tek bir geçişe** dokunur.
- Zincir **45** birimden, beşi birlikte açıldığında **21**'e iner; kazanç **24** birim ve tek tek
  kazançların toplamına eşittir, çünkü geçişler örtüşmez.
- Tek tek kazançlar **2** ile **7** arasındadır ve sıralamayı geçişin başlangıçtaki uzunluğu
  belirler: paket kaydı **7**, sürüm yayımı **2**.
- Altı satırın altısında da tur **3**'te kalır; hiçbir yetenek tur sayısını düşürmez. Yalnız
  tartışma turun **süresine** dokunur ve kazancı tur sayısıyla büyür: **4**, **6**, **12**.
- Bulunan **15**, kaçan **9** ve yazılmayan kaçan **2** her satırda değişmez: yetenekler
  beklemeyi kısaltır, kusur buldurmaz.
- Altı turluk atamanın tartışmalı zinciri **51** birimdir ve iki turluk atamanın tartışmasız
  **39**'undan uzundur; hiçbir yetenek kötü bir eksen atamasını kapatmaz.

## Sonraki Adım

Zincirin sonunda bir geçiş kaldı ve ölçümde yalnız bir sayıyla göründü: tümleşen iş bir noktaya
bağlanıp dışarıya bildiriliyor. O bildirimin kendisi bir metindir ve bir okuru vardır — bu
kursun boyunca hiç görünmeyen biri. Sonraki ders o metni ölçer: **sürüm notu** okura ne söylüyor?
Değişikliklerin listesi ile değişikliklerin **anlamının** listesi arasındaki fark kaç soruya
yanıt veriyor, ve okurun sorduğu sorulardan kaçı hiçbir not biçiminde yanıt bulamıyor?
