Örnek sorular
Sd Ci Test InfrastructureZorluk 1
Bir test suite'ini birden fazla paralel worker'a dağıtmanın (test sharding) temel amacı nedir?
- aHer bir test case'in daha önce olduğundan daha az CPU belleği kullanmasını sağlamak
- bTestleri daha az sayıda ama daha büyük dosyalar haline getirerek kod tabanını taramayı kolaylaştırmak
- cSuite'i, farklı makinelerde eş zamanlı çalışan alt kümelere bölmek✓
- dSuite içindeki tekrarlayan assertion'ları otomatik tespit edip kaldırmak
Açıklama:Test sharding, büyük bir suite'i ayrı worker/makinelerde paralel çalışan daha küçük alt kümelere böler; bunlar sıralı değil eş zamanlı çalıştığı için, toplam CPU süresi kabaca aynı kalsa da, suite'in tamamının bitmesi için gereken gerçek-zaman süresi düşer.
Sd Ci Test InfrastructureZorluk 1
Bir test suite'i, test dosyaları dosya sayısına göre 4 eşit büyüklükte gruba bölünerek 4 shard'a ayrılıyor. Bu yaklaşımın temel riski nedir?
- aBazı shard'lar diğerlerinden çok daha uzun toplam çalışma süresine sahip olabilir ve tüm koşuyu yavaşlatır✓
- bTest suite'i en yavaş shard'daki her test için yanlış-pozitif (false positive) raporlar
- cSayıya göre eşit bölme her zaman izin verilen maksimum paralel worker sayısını aşar
- dSayıya göre bölme, kopyalama adımında test dosyalarının bozulmasına neden olur
Açıklama:Test dosyaları nadiren aynı sürede çalışır. Sadece sayıya göre bölmek, bir shard'ı birkaç uzun süren testle, başka bir shard'ı ise hızlıca biten testlerle bırakabilir; bu yüzden toplam gerçek-zaman süresi hâlâ en son biten shard'a bağlıdır.
Sd Ci Test InfrastructureZorluk 2
Bir suite'i sadece test sayısına göre bölmeye kıyasla, hangi yaklaşım her shard'ın toplam gerçek-zaman süresini daha iyi dengeler?
- aTestleri dosya adlarının alfabetik sırasına göre shard'lara atamak
- bTestleri her koşuda yeni bir rastgele shard'a atamak
- cTestleri, daha büyük dosyaların daha uzun süreceği varsayımıyla test kaynak kodunun byte cinsinden dosya boyutuna göre shard'lara atamak
- dTestleri, önceki koşulardan toplanan geçmiş çalışma-süresi verisini kullanarak shard'lara atamak✓
Açıklama:Önceki koşulardan kaydedilen çalışma süreleri, zamanlayıcının her shard'ın toplam süresini birbirine yakın tutacak şekilde testleri paketlemesini sağlar; bu, sayıya, alfabeye ya da dosya boyutuna göre atamadan çok daha iyi dengeler — bunların hiçbiri gerçek çalışma süresiyle güvenilir şekilde ilişkili değildir.
Sd Ci Test InfrastructureZorluk 1
Dağıtık test çalıştırma bağlamında 'makespan' neyi ifade eder?
- aTüm shard'lar birleştirildiğinde toplam bireysel test case sayısı
- bEn son biten shard'ın tamamlanmasına kadar geçen süre✓
- cTüm worker makinelerde kaydedilen ortalama CPU kullanım yüzdesi
- dEksik bağımlılıklar nedeniyle atlanan test dosyalarının sayısı
Açıklama:Makespan, en son biten shard'ın tamamlanma süresidir; shard'lar paralel çalıştığı için genel koşu yalnızca en yavaş shard'ı kadar hızlıdır, bu yüzden bir sharding algoritmasının gerçek optimizasyon hedefi test sayılarını eşitlemek değil, makespan'i minimize etmektir.
Sd Ci Test InfrastructureZorluk 2
Süre-tabanlı bir test sharding sisteminde, önceki çalışma geçmişi olmayan tamamen yeni bir test genellikle nasıl ele alınır?
- aBir kişi elle atayana kadar shard atamasından kalıcı olarak dışlanır
- bMevcut testlerin ortalaması gibi tahmini bir süre atanır, gerçek veri birikene kadar✓
- cSuite büyüklüğünden bağımsız olarak her zaman kendine ait ayrı bir shard'a tek başına yerleştirilir
- dGerçek sharding kararından önce geçmiş oluşturmak için aynı koşuda iki kez çalıştırılır
Açıklama:Yeni bir test için henüz zamanlama verisi olmadığından, çoğu süre-tabanlı zamanlayıcı varsayılan bir tahmine (genellikle suite ortalaması veya yapılandırılmış bir varsayılan) döner; böylece test yine de makul şekilde bir shard'a paketlenebilir, gerçek veri ise sonraki koşularda birikir.
Sd Ci Test InfrastructureZorluk 2
Bir test-sharding zamanlayıcısı tüm testleri beklenen süreye göre azalan sırada sıralıyor, sonra sırayla bir sonraki testi o anda en düşük birikmiş toplam süreye sahip shard'a atıyor. Bu hangi zamanlama stratejisini tanımlar?
- aİlk giren ilk çıkar (FIFO) kuyruklama
- bSıralanmış test listesi üzerinde ikili arama (binary search)
- cTest bağımlılık grafiğinde derinlik-öncelikli (depth-first) gezinme
- dAçgözlü (greedy) en-uzun-işlem-süresi-önce bin-packing✓
Açıklama:Süreye göre azalan sırayla sıralayıp her seferinde bir sonraki öğeyi en az yüklü bin'e atamak, bin-packing/zamanlama problemleri için klasik açgözlü 'en uzun işlem süresi önce' (LPT) sezgiselidir; optimal ama çok daha pahalı bir çözüm gerektirmeden shard sürelerini dengelemenin basit, etkili bir yoludur.