---
title: 'Yayın Sonrası İzleme'
source: 'https://academia.sh/tr/kurslar/android-uretim/yayin-sonrasi-izleme'
course: 'Test, Başarım ve Dağıtım'
language: tr
updated: '2026-10-21T05:02:42+00:00'
license: 'CC BY-SA 4.0'
objectives:
    - 'İzleme penceresindeki her günün çökme sayısını ayrı bir örnek olarak ölçer'
    - 'İlk günlerdeki sıçramanın aşımı nasıl azında bıraktığını açıklar'
    - 'Aynı sayıların günlük ya da haftalık toplanmasının aşımı belirlediğini gösterir'
    - 'Kursun 19 dersinin aşımını karşılaştırır'
---

# Yayın Sonrası İzleme

Yayından sonraki izleme penceresinde her günün çökme sayısını hata eşiğiyle karşılaştırır. İlk günlerdeki sıçramanın aşımı azında bıraktığını, aynı sayılar haftalık toplanınca örnek sayısının düştüğünü ve kategorinin değiştiğini ölçer; ardından kursun 19 dersini tek tabloda toplar.

Önceki ders uygulamayı incelemeden geçirdi ve kullanıcılara ulaştırdı; `Yayın Sonrası İzleme` dersi yayından sonraki günlerin çökme sayısını bütçeyle karşılaştırır. Yayın bir kapıdan geçmek değil, bir pencerenin açılmasıdır: derleme gerçek kullanıcıların elindeyken ekip, **izleme penceresi** (monitoring window) denen bir süre boyunca verinin gelmesini bekler. Bu ders pencerenin her gününü bir ölçüm olarak ele alır.

Kursun sorusu burada da aynıdır: **bu ölçüm bütçesini kaç örnekte aşıyor?** Ölçüm bir günün çökme sayısıdır (`crashCount`), bütçe ekibin bir günde kabul ettiği hata eşiğidir, pencerenin her günü bir örnektir.

```kotlin
// Overrun.kt — bir olcumun butcesini kac ornekte astigini siniflandirir
class Budget(val name: String, val limit: Int)

class Overrun(val label: String, val budget: Budget, samples: List<Int>) {
    val total: Int = samples.size
    val over: Int = samples.count { it > budget.limit }
    val verdict: String = when {
        over == 0 -> "icinde"
        over == total -> "hepsinde"
        over * 2 < total -> "azinda"
        else -> "cogunda"
    }

    fun line() {
        println("$label: butce=${budget.name}<=${budget.limit} | asan=$over/$total -> $verdict")
    }
}

fun countOverruns(overruns: List<Overrun>) {
    for (name in listOf("icinde", "azinda", "cogunda", "hepsinde")) {
        println("$name: ${overruns.count { it.verdict == name }}")
    }
}
```

`Overrun` sınırı kesin aşan örnekleri sayar ve yaygınlığı dört adla verir: içinde, azında, çoğunda, hepsinde. Kural kaç günün aştığını görür; bir günün bir mi yoksa on çökme fazla mı taşıdığı aşan her gün için aynıdır.

## Ayrım: Rapor mu, Eşik mi

Kursun önceki bölümünde Analitik ve Çökme Raporlama dersi, çökme raporunun alıcıya kaç kopya olarak ulaştığını saydı. O ders raporun teslimini ölçtü. Bu ders teslimi ölçmez: raporların geldiğini varsayar ve günler boyunca eşiği kaç kez aştığını sayar. Biri bir olayın yolunu, öteki bir sayının bütçeyle ilişkisini inceler.

## Çökmeyi Gösteren Platform Parçası

Bir çökme raporu, uygulamanın beklenmedik bir hatayla durduğu anda üretilen kayıttır. Kayıt, yanıt vermeyen uygulama (ANR) durumunu da ayrı bir türde taşıyabilir. Ekipler izleme sırasında genellikle çökmesiz oturum oranına bakar; bu derste oran değil sayı ölçüleceği için yalnız ham sayıyı kullanıyoruz.

```kotlin
// Platform kodu: CrashReporting
val reporter = crashReportingFramework.instance()
reporter.setCustomKey("release_window_day", dayIndex)
reporter.recordException(error)
```

Bu parça bir platform çağrısıdır; çıktı iddia etmiyoruz. Model, bu ölçümün kuralını kurar; model aracın kendisi değildir. Modelde bir oturum ya `cokme` ya `saglam` biter; çerçevenin topladığı ek bilgi, yığın ya da ANR türü modelin dışında kalır.

## İzleme Penceresini Modellemek

Yardımcı dosya pencerenin her gününü on oturumdan kurar. Günler aynı büyüklükte olduğundan çökme sayıları doğrudan karşılaştırılabilir.

```kotlin
// MonitoringModel.kt — izleme penceresini ve gun basina cokme sayisini modeller
class ReleaseDay(val label: String, val outcomes: List<String>)

fun crashCount(day: ReleaseDay): Int = day.outcomes.count { it == "cokme" }

fun releaseWindow(crashes: List<Int>): List<ReleaseDay> =
    crashes.mapIndexed { index, crashed ->
        ReleaseDay("gun-${index + 1}", List(10) { if (it < crashed) "cokme" else "saglam" })
    }

fun launchWindow(): List<Int> = listOf(6, 5, 4, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1)

fun weeklyTotals(counts: List<Int>): List<Int> = counts.chunked(7).map { it.sum() }
```

`launchWindow` ilk günleri yüksek, sonrasını alçak tutar. Yayın sonrası ilk günlerde çökmeler kümelenir: yayının ilk saatlerinde en hevesli kullanıcılar, en çok farklı yolu deneyen oturumlar gelir.

## Günlük Ölçüm

Hata eşiğini günde üç çökme olarak koyalım.

```kotlin
// Main.kt — izleme penceresinin her gunu olculur, hata esigi gunde uc cokme
fun main() {
    val days = releaseWindow(launchWindow())
    val samples = days.map { crashCount(it) }
    println("cokme: $samples")
    Overrun("gunluk-cokme", Budget("cokme", 3), samples).line()
}
```

```text
cokme: [6, 5, 4, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1]
gunluk-cokme: butce=cokme<=3 | asan=3/14 -> azinda
```

Ondört günün üçü eşiği aştı: ilk üç gün sırasıyla altı, beş ve dört çökme taşıdı. Yarıdan azı aştığı için yanıt **azında**. Bu, dersin aşımıdır.

**DA6.** Model her günü aynı büyüklükte on oturumdan kurar ve çökmeyi oturum başına bir sonuç sayar. Gerçekte günlük oturum sayısı yayın büyüdükçe artar ve bir kullanıcı aynı çökmeyi tekrarlayabilir; model ikisini de görmez. `launchWindow` elle yazılmış bir girdidir; günlerin çökme sayıları `days.map { crashCount(it) }` ile modelden çıkar, ama sayıların kendisi gerçek bir izlemeden gelmez.

## Sıçramayı Ayırmak

İlk üç günün diğerlerinden farkı kuralda görünmez; kural yalnız üç günün aştığını söyler. Pencereyi ikiye bölüp her parçayı ayrı ölçersek sıçrama görünür olur.

```kotlin
// Main.kt — pencere ilk uc gun ve sonraki gunler diye ikiye bolunup olculur
fun main() {
    val samples = releaseWindow(launchWindow()).map { crashCount(it) }
    val spike = Overrun("ilk-uc-gun", Budget("cokme", 3), samples.take(3))
    val rest = Overrun("sonraki-gunler", Budget("cokme", 3), samples.drop(3))
    spike.line()
    rest.line()
    countOverruns(listOf(spike, rest))
}
```

```text
ilk-uc-gun: butce=cokme<=3 | asan=3/3 -> hepsinde
sonraki-gunler: butce=cokme<=3 | asan=0/11 -> icinde
icinde: 1
azinda: 0
cogunda: 0
hepsinde: 1
```

İlk üç günde her gün aştı, sonraki onbir günde hiçbiri aşmadı. Bütün pencere azında çıktı çünkü onbir sakin gün üç sıçrama gününü seyreltti. Bu bir sorun değil, ölçünün özelliğidir: pencere uzadıkça aşım değeri sıçramadan çok pencerenin uzunluğuna bağlanır.

**DA7.** Üç günlük bölme, sıçramanın nerede bittiğini baştan bilen bir ekibin bölmesidir. Gerçek izlemede sıçramanın sonu bilinmez; bölme noktasını seçmek ekibin kararıdır ve model bu kararı vermez.

## Sınırlayıcı Ölçüm

Aynı ondört gün, günlük değil haftalık toplanırsa ne olur? Ekipler çoğu zaman tek bir sayıyla rapor verir, o sayı da genellikle haftalıktır.

```kotlin
// Main.kt — ayni cokme sayilari haftalik toplanir, iki ayri butceyle olculur
fun main() {
    val samples = releaseWindow(launchWindow()).map { crashCount(it) }
    val weekly = weeklyTotals(samples)
    println("haftalik: $weekly")
    val same = Overrun("haftalik-ayni-butce", Budget("cokme", 3), weekly)
    val scaled = Overrun("haftalik-yedi-kati", Budget("cokme", 21), weekly)
    same.line()
    scaled.line()
}
```

```text
haftalik: [21, 9]
haftalik-ayni-butce: butce=cokme<=3 | asan=2/2 -> hepsinde
haftalik-yedi-kati: butce=cokme<=21 | asan=0/2 -> icinde
```

Aynı ondört gün iki haftaya toplandı: ilk hafta 21, ikinci hafta 9 çökme. Günlük bütçe olduğu gibi bırakılınca iki hafta da aştı ve yanıt **hepsinde** oldu. Bütçe yedi katına, yani 21'e çıkarılınca 21 sınıra eşit olduğu için ilk hafta da aşım sayılmadı ve yanıt **içinde** oldu. Günlük kesimin **azında** yanıtı haftalık ölçümlerin hiçbirinde çıkmadı. İki örnekle azında kurulamaz: `over * 2 < total` koşulu 2 örnekte ancak sıfır aşımla sağlanır, ve sıfır aşım içinde demektir.

**DA8.** Haftalık toplamın bütçesini günlük bütçenin yedi katı almak, günlerin eşit dağıldığını varsayar. Yayın sonrası çökmeler eşit dağılmaz; bu yüzden yedi katı bütçe ilk haftanın sıçramasını gizler. Bütçeyi başka bir sayıya çekmek başka bir aşım verirdi.

Bu ölçüm bir kuralı değil, bir kesme biçimini sınar: ders, örneğin nasıl kesildiğinin aşımı belirlediğini söyler. Günlük kesimde ondört örnek vardı ve aşım azında çıktı; haftalık kesimde iki örnek kaldı ve aşım örnek sayısının kendisine bağlandı. Kursun örnek sayısı en az dört olmalı ilkesi bu yüzden vardır.

## Bütçe Bir Karardır

Günde üç çökme ekibin seçtiği bir sayıdır. Daha sıkı bir eşik daha çok günü aşım sayar; daha gevşek bir eşik ilk günlerin sıçramasını da içeri alır. Sayıyı seçmek, hangi yayını durduracağınıza karar vermektir. Model bu kararı vermez; yalnız seçilen sayının kaç günü aştırdığını söyler.

## Yaygın Yanılgılar

**"Pencere uzadıkça veri daha doğru olur."** Pencere uzadıkça sakin günler çoğalır ve sıçrama seyrelir; aşım değeri değişir, ama bu değişim yayının iyileşmesi değil, örneğin kesilişidir.

**"Haftalık toplam günlükten iyi bir özettir."** Haftalık toplam sayıyı korur ama örnek sayısını yediye böler. İki örnekle dört kategoriden biri, azında, zaten kurulamaz.

**"Azında olan bir yayın sağlıklıdır."** Azında, aşan günlerin yarıdan az olduğunu söyler; hangi günlerin aştığını söylemez. Bu derste aşan günler ilk üç gündü ve yayının en çok kullanıcıya ulaştığı anlardı.

## Kapanış Tablosu

Kurs 19 derste aynı soruyu sordu. Her dersin aşımı o dersin `## Özet` bölümündeki "Bu dersin aşımı:" satırıdır; ölçülen iş birimi ve sınırlayıcı ölçüm kaynak dersin kendisindedir.

| Ders | Ölçülen iş birimi | Aşım | Sınırlayıcı ölçüm |
|---|---|---|---|
| Birim Testleri | girdi doğrulama adımı | içinde | bütçe 5 adıma inince azında |
| Sahteleme | işlemdeki ağ çağrısı | hepsinde | güdük önbellekle çağrı sıfır, içinde |
| Aygıt Üstü Testler | test başına iş | hepsinde | kurulum paylaşılınca azında |
| Arayüz Testleri | düğümü bulma adımı | çoğunda | test etiketiyle tek adım, içinde |
| Test Kararlılığı | hazır olma beklemesi | azında | koşula bağlı yoklamayla içinde |
| Statik Çözümleme | modül başına ihlal | çoğunda | temel değer dosyasıyla azında |
| Başlangıç Süresi | ilk kareye kadar iş | azında | bağımlılığı ertelemekle içinde |
| Çizim Akıcılığı | karede yeniden oluşan öğe | hepsinde | kararlı anahtarla azında |
| Bellek Yönetimi | tutulan nesne | çoğunda | dinleyiciyi yaşam döngüsüne bağlayınca içinde |
| Ağ ve Pil Profili | tur başına istek | içinde | tek tek gönderimde azında |
| Karşılaştırmalı Ölçüm | yineleme başına iş | azında | ısınma atılınca yeni sürüm hepsinde |
| Kod Küçültme ve Karartma | modül başına kalan sınıf | içinde | geniş koruma kuralıyla hepsinde |
| Uygulama Paketi Biçimleri | yapılandırmaya inen dosya | hepsinde | bölünmüş pakette içinde |
| Sürüm Yönetimi | aygıtın sürümden uzaklığı | çoğunda | yalnız sürüm adı değişince aynı kalır |
| Sürekli Tümleştirme ve Teslimat | değişiklik başına koşan iş | azında | süzgeçsiz hatta hepsinde |
| Test Kanalları | üretime kadar adım | içinde | geri çevrilen derleme baştan sayılınca azında |
| Aşamalı Yayın | aşama başına çökme | azında | durdurmayla örnek azalınca hepsinde |
| Mağaza İnceleme ve Politikalar | modül başına kullanılmayan izin | çoğunda | izinler çıkarılınca içinde |
| Yayın Sonrası İzleme | günlük çökme sayısı | azında | haftalık toplamayla örnek sayısı düşer |

19 dersin 4'ü içinde, 6'sı azında, 5'i çoğunda, 4'ü hepsinde kapanır. Açılış dersindeki çekirdek başka bir dağılım verdi: dört ölçüm 1 içinde, 1 azında, 1 çoğunda, 1 hepsinde çıktı. İki dağılım aynı şeyi saymaz; çekirdek dört ölçümü, tablo on dokuz dersi sayar.

## Özet

- Bu dersin aşımı: azında. Ondört günün üçü, ilk üç gün, günde üç çökme eşiğini aştı.
- İlk günlerin sıçraması bütün pencereye yayılınca seyrelir: ilk üç gün hepsinde, sonraki onbir gün içinde çıktı.
- Aynı sayılar haftalık toplanınca örnek sayısı ondörtten ikiye düşer ve kategori değişir. Örneğin nasıl kesildiği aşımı belirler.
- Bu ders çökme raporunun teslimini değil, raporların günler boyunca eşiği kaç kez aştığını sayar.
- Çökme raporlama çerçevesi platform kodudur ve bu derste ölçülmez.

## Kurs Kapanışı

Kurs test, başarım ve dağıtım boyunca tek bir soruyu sordu: bu ölçüm bütçesini kaç örnekte aşıyor? Tablo, aynı soruya dört ayrı cevabın hepsinin gerçekten verildiğini gösterir. Sıradaki müfredat M32, çok platformlu mobil geliştirme konu alanına geçer.
