İçeriğe geç
academia.sh

Ders 19 / 19

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.

Yayın Güncelleme

Bu derste

  • İ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
İçindekiler

Ö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.

// 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.

// 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.

// 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.

// 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()
}
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.

// 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))
}
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.

// 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()
}
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.

İ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