Bölüm 9 · Yazılımın içi · Ders 46
CI/CD hattı ve kademeli dağıtım
Robot yazılımı güncellemesi testlerden ve canary filodan geçerek dağıtılıyor
Veri. 200 robotluk bir depo filosunun yazılım ekibi günde 14 commit gönderiyor; bunların yaklaşık %30'unda bir hata var. Her commit otomatik olarak derlenir, birim testleri ve simülasyonda entegrasyon testi koşar, 3 test robotlu hazırlık ortamına çıkar. Geçen sürüm önce filonun %10'una (20 robot) gider: 50'şer görevde hata oranı %2'yi aşarsa otomatik geri alınır, aşmazsa %50'ye ve %100'e yayılır.
import numpy as nprng = np.random.default_rng(4)HATA = 0.3 # hatalı commit oranıTUR = ['derleme', 'birim', 'entegre', 'saha'] # hata türleriYAKALAR = {'yok': [0, 0, 0, 0], # derleme, birim, entegr., hazırlık'derleme': [1, 0, 0, 0], 'birim': [0, .85, .7, .5], # yakalama olasılığı'entegre': [0, 0, .8, .5], 'saha': [0, 0, 0, 0]} # saha: testler görmezdef canary(hatali): # 20 robot × 50 görev (%10)oran = 0.10 if hatali else 0.005return (rng.random((20, 50)) < oran).mean() < 0.02 # eşik %2uretim, geri = [], 0for c in range(14): # günün commit'leritur = 'yok'if rng.random() < HATA:tur = rng.choice(TUR, p=[.25, .35, .25, .15]) # gizli hataif any(rng.random() < p for p in YAKALAR[tur]): # aşamalar sıraylaprint(c, tur, 'testte durdu'); continue # kırmızı: durif not canary(tur != 'yok'): # %10 filoya çıkgeri += 1; print(c, tur, 'canary: geri'); continue # geri aluretim.append(tur) # %50 → %100print('üretim:', uretim, 'geri alma:', geri)assert all(t == 'yok' for t in uretim) # hatalı sürüm üretimde yok
Sahnedeki her sayı, aynı algoritmanın tarayıcında yapılan gerçek çalıştırmasından gelir (sabit tohum, her seferinde aynı sonuç). Python kodunu kendi bilgisayarında çalıştırırsan rastgele başlangıçlar farklı olacağı için sayılar biraz değişebilir.
Veri seti
Tüm veri setleri →Bu dersin kodu verisini kendi içinde üretir; indirilecek dosya yok. Kodu yine de aşağıda tarayıcında çalıştırabilirsin.
Kodu tarayıcıda çalıştırPython · NumPy · matplotlib · Pyodide
Python ve NumPy bu sayfada, tarayıcında çalışır (Pyodide). Kodu değiştirip yeniden çalıştırabilirsin; dersin veri setleri çalışma klasöründe hazır. Kod matplotlib kullanırsa grafikler çıktının altında görünür, yazdığı dosyalar (ör. egitim_gecmisi.csv) indirilebilir.
Çıktı
Çıktı burada görünecek.Nasıl çalışır
- Sürekli entegrasyon (CI): her commit ana depoya girer girmez derlenir ve testlerden geçer; hata, yazıldığı gün bulunur.
- Her aşama bir eleğe benzer: derleme sözdizimi hatasını kesin yakalar, birim ve entegrasyon testleri mantık hatalarının çoğunu yakalar. Bir aşama kırmızıysa commit orada durur, sonraki aşamalara gitmez.
- Sürekli teslim (CD): testi geçen sürüm kendiliğinden yayılır ama kademeli: önce %10 (canary). Canary robotlarındaki hata oranı eşiği aşarsa sürüm geri alınır.
- Testlerden kaçan hata bile tüm filoya ulaşmaz: yalnız 20 robot kısa süre etkilenir.
- Şunu dene: hatalı commit oranını 0,6'ya çıkar; kırmızı kutular artar ama üretime yine yalnız hatasız sürümler çıkar. Tohumu değiştir, saha hatasının canary'de geri alındığını gör.
Neden önemli
Otonom araç, drone ve depo robotu şirketleri yazılımı haftada birçok kez günceller; tek bir hatalı sürüm tüm filoyu durdurabilir. Bu yüzden simülasyon testleri, donanımlı test tezgâhı (HIL) ve canary dağıtım standarttır; geri alma düğmesi de otomatik olmalıdır, çünkü gece 3'te kimse uyanık değildir.
ESOF 323, 11. hafta: robotlarda derin öğrenme →