Baykar: Stajyer Bilgisayar Mühendisi
2015
2015 — İkitelli'de TMS570/lwIP gömülü ağ çalışmalarıyla başlayıp Keşan'da gerçek İHA sistemleri, aviyonik hata ayıklama, C/C# statik analiz ve yer kontrol telemetrisiyle devam eden yazılım stajı.
2015 yazındaki Baykar stajım İstanbul İkitelli'deki Yazılım Birimi'nde başladı ve ilerleyen haftalarda Keşan'daki saha ortamında gerçek İHA sistemlerini görerek devam etti. Bu süreç benim için sıradan bir yazılım stajından çok, kritik sistem yazılımının donanım, haberleşme, aviyonik, ölçüm ve kullanıcı arayüzü katmanlarını birlikte değerlendirdiğim yoğun bir mühendislik dönemi oldu.
Dönemin staj kayıtlarında bazı gömülü yazılım ve arayüz çalışmalarının gizlilik nedeniyle ayrıntılandırılamadığı belirtiliyordu. Kamuya açık anlatım; sistem mimarisi, görev verileri, devre ayrıntıları ve kurum içi arayüzler yerine kendi çalışma alanım, kullandığım yöntemler ve paylaşılabilir teknik sonuçlarla sınırlıdır.
Teknik Değerlendirme Süreci
Staja kabul süreci yalnız programlama dili bilgisinin ölçüldüğü kısa bir görüşme değildi. Bilgisayar mühendisliği temelleri ile gömülü sistemler, havacılık ve kritik sistem disiplinlerini bir arada değerlendiren kapsamlı bir teknik süreçti.
İşletim sistemlerinde süreç ve eşzamanlılık, mutex ve senkronizasyon, mikrodenetleyiciler, gömülü yazılım ve algoritmik problem çözme bu değerlendirmenin bir bölümünü oluşturuyordu. Algoritma tarafında, dört basamaklı bir sayının rakamlarına verilen doğrusal bir koşulu sağlayan olası değerleri sistematik biçimde bulmayı gerektiren kombinatoryal bir problem gibi sorular vardı. Bu tür sorularda kaba kuvvetle sonuç üretmekten çok, arama uzayını nasıl modellediğiniz ve çözümü nasıl gerekçelendirdiğiniz önemliydi.
Teknik değerlendirme aynı zamanda aviyonik sistem standartları, MIL-STD ailesi, kritik yazılım, Türkiye ve dünyada İHA teknolojilerinin tarihsel gelişimi, havacılık ve savunma sanayii gibi tek bir üniversite dersinin sınırına sığmayan alanlara uzanıyordu.
Bu süreç daha staja başlamadan önemli bir çerçeve çizmişti: kritik bir sistemde çalışan yazılımı anlamak için yalnız dil sözdizimi yeterli değildir. İşletim sistemi, zamanlama, elektronik, haberleşme ve sistemin tabi olduğu mühendislik disiplinleri de aynı problemin parçalarıdır.
TMS570 ve lwIP Üzerinde Gömülü Ağ Haberleşmesi
İkitelli'deki ilk ciddi çalışmalarım Texas Instruments TMS570 geliştirme kartı üzerinde oldu. lwIP ağ yığınının yapılandırılması, kart üzerinde TCP ve UDP iletişiminin çalıştırılması ve echo senaryolarının güvenilir biçimde sonuçlandırılması üzerine çalıştım.
Masaüstünde birkaç satırlık socket koduyla kolay görünen bir TCP/UDP echo işlemi, mikrodenetleyici üzerinde ağ yığını, sürücü, bellek, interrupt davranışı ve donanım konfigürasyonunun birlikte doğru olmasını gerektiriyordu. Çalışma bu nedenle beklediğimden çok daha zorlayıcı oldu.
Hazır bir örneği çalıştırıp sonucu göstermek yerine yapılandırmanın hangi katmanda koptuğunu anlamaya çalıştım. Kaynakları, konfigürasyonları ve deneme sonuçlarını ayrıntılı not ettim. Sorunu sonuçlandırdığımda kullanılan kaynak kod ve teknik notların tamamı çalışma kapsamında teslim edildi.
Bu bölümün stajın devamı açısından da belirleyici olduğunu düşünüyorum. İkitelli'deki geliştirme kartı çalışmasının ardından stajımın sonraki kısmını Keşan'daki saha ortamında sürdürdüm. Böylece kontrollü bir geliştirme kartından gerçek İHA sistemlerinin bulunduğu çalışma ortamına geçtim. Bunu bir ayrıcalık cümlesi olarak değil, teknik sorumluluğun aşamalı biçimde genişlediği bir süreç olarak görüyorum.
İkitelli'den Keşan'a: Gerçek Sistemle Çalışmak
Keşan'da artık soyut bir laboratuvar senaryosu yerine farklı elektronik ve yazılım bileşenlerinin birlikte çalıştığı gerçek sistemleri görme imkânım vardı. Staj dosyamın sonuç bölümünde de ilk haftadaki geliştirme kartı ve haberleşme çalışmalarından sonra Keşan'daki havaalanında İHA yazılımlarının, gömülü yazılımın ve arayüz uygulamalarının incelendiği kayıtlıdır.
Bu geçiş hata ayıklamanın biçimini değiştirdi. Geliştirme kartında yalnız kod ve konfigürasyon üzerinde düşünmek mümkünken gerçek aviyonik sistemde kaynak kod, elektronik devre, fiziksel sinyal ve sistem davranışı aynı anda değerlendirilmek zorundaydı.
SPI/I2C Dönüşüm Modülünde Donanım-Yazılım Hata Ayıklama
Keşan'daki çalışmalardan birinde aktif İHA sisteminde kullanılan bir aviyonik haberleşme bileşeninin SPI/I2C dönüşüm davranışıyla ilişkili yazılım problemini inceleme fırsatı buldum.
Bu çalışma yalnız C kaynak kodunu okuyarak çözülebilecek bir hata değildi. Gömülü yazılım tarafını incelerken Altium Designer üzerinde ilgili elektronik bölgeleri takip ediyor, yazılımın dokunduğu çevre birimlerinin devredeki karşılığını anlamaya çalışıyordum. Tektronix osiloskop ve sinyal analiz ekipmanlarıyla haberleşme hatlarının fiziksel davranışını gözlemleyerek yazılım akışı ile gerçek sinyali karşılaştırdım.
Aviyonik hata ayıklama çalışmasının kamuya açık teknik karşılığı, C kaynak kodu -> çevre birimi -> PCB -> fiziksel sinyal zincirini aynı hata ayıklama oturumunda izleyebilmekti. Devre topolojisi ve ayırt edici sistem ayrıntıları bu kapsamın dışındadır.
Sorunun kaynağı bu katmanlar arasında izlenerek ilgili yazılım davranışının düzeltilmesine yönelik çalışma tamamlandı. Daha sonraki yıllarda donanım-yazılım sınırındaki problemlerde log veya exception'ın tek başına nihai kanıt olmadığını düşünmemin nedenlerinden biri bu deneyimdir. Fiziksel sistem söz konusuysa ölçülebilen davranış temel referanstır.
Telemetri Yazılımı: Çok Eksenli Görselleştirme
Stajın en kapsamlı bireysel çalışması, telemetri verilerinin incelenmesi için geliştirdiğim masaüstü yazılımı oldu. Uygulamayı C# ve .NET Windows Forms üzerinde geliştirdim; grafik katmanında GDI+ ve özel UserControl bileşenleri kullandım.
İlk problem farklı ölçeklerdeki çok sayıda telemetri veri kalemini ortak zaman ekseninde anlamlı biçimde göstermekti. Tek Y eksenine zorlanan serilerden biri görünürken diğeri neredeyse düz çizgiye dönüşebiliyordu. Bu nedenle çoklu eksen destekli bir grafik yapısı geliştirdim.
Grafik bileşeninde yalnız çizgi üretmeye odaklanmadım. Yakınlaştırma, farklı veri kalemlerini birlikte izleme, zaman aralığı üzerinde gezinme ve raporlama gibi kullanım senaryolarını da düşünerek bileşeni ayrı bir modül olarak tasarladım.
Telemetri Verisini Analiz Edilebilir Hale Getirmek
Görselleştirme tek başına yeterli değildi. Telemetri verisindeki mühendislik açısından anlamlı davranışları daha hızlı bulabilmek için analiz işlevleri ekledim.
Uygulama içinde minimum ve maksimum noktaların bulunması, sıra dışı veya ekstrem değerlerin belirlenmesi, belirli zaman aralıklarının incelenmesi ve iki veri kaleminin birlikte değerlendirilmesi gibi işlevler geliştirdim. İki seri arasındaki doğrusal ilişkinin korelasyon üzerinden incelenmesi de bu çalışmanın parçalarından biriydi.
Korelasyon özelliğinin amacı görsel benzerliği matematiksel kesinlik gibi sunmak değildi. İki değişkenin birlikte nasıl hareket ettiğine ilişkin nicel bir gösterge sağlıyor, asıl mühendislik yorumunun daha hedefli yapılmasına yardımcı oluyordu.
Bu yaklaşım daha sonraki sinyal işleme ve veri analizi çalışmalarımda da devam etti: grafik son ürün değildir; ham veride hangi bölgeye ve hangi değişken ilişkisine bakılması gerektiğini gösteren araçlardan biridir.
Prototipten Yer Kontrol İstasyonuna
Telemetri uygulamasının benim için en önemli sonucu staj sonunda sunulup bırakılan bağımsız bir öğrenci projesi olarak kalmamasıydı. Geliştirdiğim bölüm modüler hale getirilerek mevcut telemetri yazılımına dahil edildi ve aktif İHA projesinin yer kontrol istasyonu yazılımında kullanılan yapının parçası oldu.
Bu süreç çalışan kod ile entegre edilebilir kod arasındaki farkı erken dönemde gösterdi. Bir modülün algoritması doğru olabilir; ancak mevcut sistemin parçası olabilmesi için veri giriş-çıkış sınırları, kullanıcı etkileşimi, hata davranışı, performansı ve diğer bileşenlerle ilişkisi de belirli olmalıdır.
Daha sonra üretim sistemlerinde sürekli karşıma çıkacak "prototipten güvenilir bileşene geçiş" problemini ilk kez gerçek bir sistem üzerinde burada yaşadım.
Programlama Standartları ve Statik Kod Analizi
Stajın kamuya açık biçimde en ayrıntılı belgelenmiş bölümlerinden biri programlama standartları ve statik analiz çalışmalarıdır. İlk günlerde ANSI, ISO ve özellikle MISRA C kuralları üzerinde çalışarak ayrı bir teknik doküman hazırladım.
Bu çalışma benim açımdan statik analizin sonradan eklenen bir kalite kapısı olmadığını da gösteriyordu. Statik analiz projesini MISRA C kurallarını inceleyip belgeleyerek başlatmış olmam, geliştirdiğim yazılımda uygulanabilir MISRA denetimlerini ilk önceliklerden biri hâline getirdi. Önce kuralın neyi sınırlandırdığını belgeledim; ardından tekrarlanabilir olan kontrolleri yazılım içinde gerçekledim. Böylece belgelendirme, gerçekleme ve analiz aynı geliştirme akışının parçaları oldu.
Daha sonra bu kuralların bir bölümünü otomatik kontrol etmeyi amaçlayan C tabanlı bir kaynak kod analiz programı geliştirdim. Çözüm yalnız metin içinde kelime aramıyordu. Kaynak kodu karakter karakter işlerken yorum, string/character literal, preprocessor ve normal kod durumlarını ayırmaya çalışıyordu.
Aynı karakter dizisinin bulunduğu bağlama göre farklı anlam taşıması bu ayrımı zorunlu kılıyordu. // bir string içinde görülüyorsa yorum değildir; = bir koşul ifadesinde bulunduğunda farklı bir kontrol gerektirebilir; switch bloklarında durum takibi yapılmadan break davranışı doğru yorumlanamaz.
Çalışma daha sonra C# ile kapsamlı bir masaüstü analiz aracına dönüştü. Dosya sistemi izleme, kaynak dosyaları arasında gezinme, kural ihlallerini dosya ve satır bazında gösterme, filtreleme, arka planda tarama, farklı thread'den kullanıcı arayüzü güncelleme, external process yönetimi ve zaman aşımı davranışları eklendi.
Kendi kontrollerimin yanında cppcheck ve splint gibi araçların çıktıları da process üzerinden alınarak ortak bir sonuç modeline dönüştürüldü. Böylece farklı analiz motorlarının bulguları tek bir arayüzde incelenebiliyordu.
Bu çalışma bugün güvenli yazılım mühendisliğinde kullandığım temel yaklaşımın erken bir örneğidir: tekrarlanabilir bir kural mümkünse insan hafızasına bırakılmamalı, otomatik ve denetlenebilir hale getirilmelidir.
Java ile Metadata Tabanlı Veri Tabanı Aracı
Stajın son bölümünde Java ile genel amaçlı bir veri tabanı yönetim uygulaması da geliştirdim. JDBC metadata üzerinden tabloların, sütunların ve birincil anahtarların okunması; veri türüne göre düzenleme bileşenlerinin oluşturulması ve kayıtların dinamik biçimde gösterilmesi üzerine çalıştım.
Bu çalışma doğrudan İHA sistemiyle ilgili bir ayrıntı taşımıyordu; fakat aynı dönemde farklı programlama dilleri ve problem alanları arasında geçiş yapabilmenin önemli bir parçasıydı.
Geriye Baktığımda
Baykar stajı İkitelli'de gömülü ağ haberleşmesiyle başladı; TMS570/lwIP probleminin sonuçlandırılmasının ardından Keşan'da gerçek İHA sistemleri üzerinde gözlem ve geliştirme ortamına geçti. Kaynak kodun elektronik devre ve fiziksel sinyalle birlikte incelendiği bir aviyonik hata ayıklama çalışmasına katıldım; geliştirdiğim telemetri modülü de mevcut yer kontrol istasyonu yazılımına alındı.
Bu deneyim bana kritik sistemlerde güvenilirliğin tek bir kod kalitesi metriği olmadığını gösterdi. Algoritma, işletim sistemi, eşzamanlılık, haberleşme, elektronik, ölçüm, veri analizi ve kullanıcı arayüzü aynı sistemin farklı parçalarıdır.
2015'te tuttuğum staj dosyası, kamuya açık biçimde aktarılabilen çalışmaların gün gün teknik kaydını içeriyor. Buradaki özet, o kayıtlardaki gömülü ağ, aviyonik hata ayıklama, telemetri ve statik analiz çalışmalarını mühendislik bağlamlarıyla bir araya getiriyor.
2015 teknik staj dosyası (PDF)
İlgili Teknik Konular
Bu deneyimin kamuya açık teknik bağlamı mikrodenetleyiciler, işletim sistemleri ve bilgisayar mimarisi çalışmalarındaki düşük seviyeli sistem kavramlarıyla doğrudan ilişkilidir.
İlgili Teknik Bağlam
Baykar stajındaki gömülü ağ ve aviyonik hata ayıklama deneyimi, sonraki gerçek zamanlı sistem çalışmalarım için erken bir bağlamdır. Safety-critical yazılımda zaman ve alan izolasyonunun standartlaşmış karşılığını ARINC 653 ile Zamansal ve Mekansal Bölümlendirme notunda ele alıyorum.
Stajdaki uçuş kontrolü, gömülü ağ, telemetri, statik analiz ve hata ayıklama deneyiminin daha geniş sistem bağlamını Aviyonik Sistemler ve İnsansız Hava Araçları ders notunda bir araya getiriyorum.