Professional Documents
Culture Documents
Mehmet Kadir ASLAN1 Gözde ÇEVĐK ASLAN2 Emin KÖKSAL3 Mustafa CANAY4
1, 2, 3, 4
Radar, Elektronik Harp ve Đstihbarat Sistemleri (REHĐS) Grubu, ASELSAN A.Ş. , Ankara
1 2
e-posta: kaslan@aselsan.com.tr e-posta: gcevik@aselsan.com.tr
3 4
e-posta: ekoksal@aselsan.com.tr e-posta: mcanay@aselsan.com.tr
247
4. ULUSAL YAZILIM MÜHENDİSLİĞİ SEMPOZYUMU - UYMS'09
248
4. ULUSAL YAZILIM MÜHENDİSLİĞİ SEMPOZYUMU - UYMS'09
Yukarıda bahsedilen adımlar, algoritma gerçekleştirme Bu seçim sayesinde, algoritma modülünde bir hata tespit
sürecinde üzerinden geçtiğimiz olmazsa olmaz aşamalardır. edilmesi durumunda, modülün aynı versiyonu, test ortamında
tekrar çalıştırılarak kendi başına test edilebilmektedir. Bu
Bu aşamaların dışında, ASELSAN’daki önceki projelerde
durum Şekil 1’de de ifade edilmektedir.
edinilen deneyimlere dayanarak, algoritma gerçekleştirmeleri
sırasında gerekli gördüğümüz pratikler aşağıda Girdi ve Çıktılarını Yazdırma Arayüzü: Algoritma
tariflenmektedir. yazılımlarının girdileri, çıkaracakları sonucu belirleyen temel
unsurdur. Bu sebeple, üretilen sonucun doğruluğundan
Bağımsız Hafıza Alanı Açma ve Bırakma Arayüzlerine
herhangi bir şüphe duyulduğu anda verilen girdi ve üretilen
Sahip Olma: Algoritma yazılımları, ilgilendikleri veri
çıktıları kaydetmek önemli getiriler sağlamaktadır. Algoritma
miktarının çokluğu ve yoğun işlem yükleri nedeniyle, fazla
yazılımlarınca kaydedilen bu veriler test ortamında tekrar
miktarda belleğe ihtiyaç duyan yazılımlardır. Ancak yazılımın
çalıştırılarak hata durumu yeniden yaratılır. Problemler bu
çalışması sırasında dinamik olarak hafıza alanı açıp bırakmak,
şekilde tespit edilerek giderilmeye çalışılır. Bu veriler
süre olarak maliyetli bir işlem olduğu için; bu yazılımların
kullanılarak yapılan testler, sistemden bağımsız olarak test
kendisine gerekebilecek tüm veriyi çalışma başlangıcında
ortamında yapılır. Bu sayede, sistemin normal çalışması
açması tercih edilmektedir. Bunun da ilerisinde, bizim
sırasında oluşan problemler tekrar yaratılıp çözülebilmektedir.
uygulamamızda veri alanı açma işlemi ve açılan alanları
bırakma işlemleri dış arayüze taşınmıştır. Böylelikle hafıza Farklı Noktalardan Giriş Yapılabilme: Algoritma yazılımları
alanı açma işleminin sorumluluğu, algoritma modülünü genel olarak tek bir görevi yerine getirmek üzere
çağıran yazılıma bırakılmıştır. Ayrıca açılacak veri alanlarının gerçekleştirilirler. Ancak bazı durumlarda algoritma yazılımını
boyutu da ayarlanabilir hale getirilmiştir. Bu sayede, farklı noktalardan başlatarak çalıştırabilmek önemli
algoritmanın kullanılacağı sistemin veri işleme gereklerine olmaktadır. Böyle bir durum yazılımın testi için kolaylık
göre uyumlandırılabilecek esnek bir yapı kurulmuştur. sağlar. Bu sayede problem olan yer belirlenip problem daha
Sağlanan bu esneklik sayesinde, algoritma modülünü hızlı çözülmektedir. Ayrıca bu durum konfigure edilebilirliği
çağıracak YKB, kendi akışına uygun olan noktada veri de arttırır. Bir YKB, algoritmayı en baştaki adımıyla
alanlarını yaratabilmekte, algoritmayı sürekli çalışır halde başlatırken; başka bir projenin YKB’si, farklı ihtiyaçlarından
kullanabilmekte ya da gerektiği zaman algoritmayı çalıştırıp ya da donanımsal özelliklerinden dolayı, algoritmanın bazı
işlem bitince sonlandırabilmekte ve istediği zaman algoritma adımlarına ihtiyaç duymayarak, algoritmayı daha sonraki bir
için ayırdığı veri alanlarını serbest bırakabilmektedir. adımdan başlatabilmektedir.
Konfigure Edilebilir Olma: Algoritma yazılımlarının Sürekli Takip Etme ve Zamanlama Verisi Biriktirme:
çalışmaları sırasında üretecekleri sonuçlar ve bu sonuçları Algoritma yazılımlarının performansı, sistemlerin
üretme performansları bazı parametrelere bağlıdır. Bu performansını belirleyeceği için büyük önem taşımaktadır. Bu
parametrelerin ayarlanabilir olması, farklı proje ihtiyaçlarına yazılımların performansının sürekli ölçülmesi ve mümkün
cevap verme konusunda algoritmaya esneklik olduğunca iyileştirilmesi gereklidir [1]. Ayrıca yazılımın hangi
kazandırmaktadır. Esnekliği daha da artıran bir yapı olması dallardan geçtiğini, bu dallarda hangi verileri kullandığını
için, bu ayarların, algoritmayı çağıran yazılım tarafından, takip edebilmek de önemlidir. Bu amaçlarla yazılımın hangi
sistem çalışması sırasında yapılabilmesi sağlanmıştır. Ayrıca noktalardan, hangi zamanlarda geçtiğini kaydeden başka bir
algoritma yazılımı aynı anda birden fazla örnek çalıştırabilme modül gerçekleştirilmiş ve algoritma yazılımlarına entegre
yeteneğine de sahiptir. Bu sayede, algoritmayı kullanan YKB, edilmiştir. Bu modül, algoritmanın kritik noktalarında hata
birden fazla algoritma örneğini, her örnek farklı takibi ve performans ölçümü için kullanılabilecek bir miktar
konfigürasyonlarda çalışacak şekilde kullanmakta; bunlara veriyi de kaydetmektedir. Bu modülün getirdiği ekstra yükün,
paralel işlem yaptırarak, sistem performansı açısından algoritmanın çalışma süresinin yanında ihmal edilebilir
iyileştirmeler sağlanmaktadır. derecede küçük olması gerekir [1]. Yapılan ölçümlerde bu
modülden kaynaklanan ekstra yükün 1us’den az olduğu
Birden Fazla Projede Kullanılabilir Olma: Önerilen yöntem görülmüştür. Veri toplama modülünün, algoritma zamanlarına
sayesinde, aynı algoritmaya ihtiyaç duyan birden fazla projede getirdiği yük Şekil 2’de oransal olarak ifade edilmektedir.
aynı algoritma yazılımı kullanılarak, geliştirme süreleri önemli
ölçüde kısaltılmaktadır. Yazılımın konfigure edilebilir olması
ve dışarıdan entegre edilebilir olması bu durumu daha da
kolaylaştırmaktadır.
Kütüphane Olarak Entegrasyon: Algoritma yazılım
modülünü YKB’ye entegre etmek için, “kaynak kod olarak
entegrasyon” ya da “kütüphane olarak entegrasyon” Şekil 2: Veri toplama modülünün algoritma çalışma
seçenekleri mevcuttur. ASELSAN Elektronik Harp zamanlarına getirdiği ekstra yükün oransal gösterimi.
projelerindeki uygulamada “kütüphane olarak entegrasyon”
tercih edilmiştir. Bu durum, kaynak kod olarak entegrasyona
Veri kayıtlarına ek olarak, algoritmanın zamanlama
göre hem derleme zamanını kısaltmakta, hem de tekrar
performansını ölçmek için, yazılımın içinde çeşitli noktalara
derlemekten kaynaklanabilecek hataları engellemektedir.
“Takip Noktaları” konulmuş, bu noktalardaki zaman
Kütüphane olarak entegrasyon yönteminde, algoritma
bilgilerinin aynı modül ile toplanması sağlanmıştır.
yazılımının versiyonu kütüphane oluşturulurken sabitlenir ve
versiyon kontrolü yazılımı gerçekleştiren kişinin Kritik noktalardan toplanan veriler ve zaman bilgileri çalışma
sorumluluğundadır. Kaynak kod olarak entegrasyonun aksine, sırasında biriktirilmekte ve algoritma çalışması sonlandığında
YKB derlendikçe algoritma yazılımının versiyonu ilerlemez. dışarı aktarılmaktadır. Daha sonra bu bilgiler harici olarak
249
4. ULUSAL YAZILIM MÜHENDİSLİĞİ SEMPOZYUMU - UYMS'09
başka bir yazılım ile analiz edilmektedir. Şekil 3’te analiz Hazır test aracı kullanılmadan yapılacak birim testler
aracının örnek bir görüntüsü verilmektedir. Bu analiz kapsamında kontrol edilecek veri miktarı ve kritik veri noktası
sonuçlarında yazılımın performansı ölçülmekte, bir hata varsa çok fazla olabilmektedir. Ayrıca tespit edilen bir hata
nereden kaynaklandığı tespit edilebilmektedir. sonucunda kodda düzeltme yapıldıysa, aynı test verileriyle
kodun tekrar çalıştırılıp sonuçların eskileriyle karşılaştırılması
gerekmektedir. Buna ek olarak, kodda yapılan düzeltmenin
algoritmanın başka bölümlerinde yeni bir hataya yol
açmadığının kontrolü önemlidir.
Bu sebeple testlerin otomatik olarak yapılması ve sonuçların
kaydedilmesi için bir altyapı kurulmuştur. Benzer bir altyapı
algoritma geliştirme aşamasında da kurulmuştur. Bu sayede
hem algoritma simülasyonu hem de algoritma yazılımı tekrar
tekrar çalıştırılıp sonuçlar otomatik olarak
kaydedilebilmektedir. Đki tarafta kaydedilen veriler başka bir
yazılım tarafından otomatik olarak karşılaştırılır. Bu yazılım
farklı olan sonuçları gösterir. Farklılığın sebebi araştırılır ve
uygun şekilde çözülür.
Algoritma yazılımlarının testi için, “Birim Test”in dışında bir
de statik kod analizleri uygulanmaktadır. “Statik Kod Analizi”
Şekil 3: Zamanlama verileri analiz aracı. olarak adlandırılan bu testlerde, seçilen kodlama standardına
göre kodda bulunan uygunsuzluklar ve hataya açık noktalar
Bahsi geçen modül, algoritma yazılımı teslim edildikten sonra tespit edilerek düzeltilir.
da yazılımda kalacaktır. Bu sayede, görev sırasında da kritik
veriler toplanmaya devam edilecek ve gerektiğinde Algoritma yazılımının statik kod analizi için hazır alınan bir
incelenebilecektir. test aracı kullanılmaktadır. Bu test aracı yardımıyla, seçilen
kodlama standardına göre algoritma kodlarının statik analiz
4. Algoritma Yazılımını Test Etme sonucu elde edilir. Statik kod analizi sonuçları, algoritma
yazılımının gerçekleştirilmesi sırasında yapılan standarda
Gerçekleştirilen algoritma yazılımlarını doğrulama aşamasına
aykırı kodlamaları içerir. Buna örnek olarak “for”, “while”,
gelindiğinde; algoritma yazılımının, algoritma geliştirme
“break”, “return” gibi koda özel anahtar kelimelerin kullanımı,
aşamasında belirlenen test verileri için algoritma
matematiksel işlemler, hafıza alanı ile ilgili işlemler verilebilir.
simülasyonunun verdiği sonuçları verip vermediği kontrol
Standartlar, bu ifadelerin hatayı en çok engelleyecek şekilde
edilir.
nasıl kullanılması gerektiğini belirlemiştir. Bu standartlara
“Birim Test” olarak adlandırılan bu test yönteminde aykırı durumlar analiz sonucunda görülüp düzeltilir.
algoritmanın tüm gereklerinin hatasız şekilde gerçekleştirildiği Böylelikle gerçek çalışmada oluşabilecek hata riski en aza
doğrulanır. Algoritma yazılımının birim testi, önce hazır test indirgenmekle birlikte, standartlara uygun biçimde kod
aracıyla sonra da ASELSAN’da kurduğumuz otomatik test yazılarak anlaşılabilirlik ve kod kalitesi arttırılmış olur. [3]
altyapımızla olmak üzere iki aşamada yapılmaktadır.
Anlatılan birim test ve statik test yöntemleri, birbirlerine
Öncelikle, her iki aşama için de geçerli olmak üzere, yazılım alternatif olarak değil, birbirlerini tamamlayıcı şekilde
için kritik olan çıktı noktaları belirlenir. düşünülmelidir (Bkz. Şekil 1). Statik kod analizleri sayesinde,
yapılan hatalar daha kodlama aşamasındayken
Hazır test aracıyla yapılan testlerde, kontrollü test verileri ve düzeltilmektedir. Böylece erken dönemde kod
seçilen kritik noktaların bu verilerle üretmesi beklenen iyileştirmelerine olanak sağlanmaktadır. Dinamik kod analizi
sonuçlar test aracına girilir. Test aracı, yazılımı kontrollü test olarak düşünülen birim testler ile de algoritma yazılımlarının
verilerini kullanarak koşturur. Çıkan sonuçların istenen gerçek verilerle testleri yapılmakta, yazılımda çalışma
sonuçlar olup olmadığını kontrol eder. Bunun yanında, birim esnasında görülebilecek hatalar gerçek sisteme entegre
testin bir diğer amacı da algoritma yazılımının akış edilmeden tespit edilip düzeltilebilmektedir.
diyagramını görmektir. Test verilerinin kod içerisindeki bütün
olası yolları kapsamadığı durumlar olabilmektedir. Bu Bu biçimde bir test yöntemi ile projelere tüm testleri
diyagram incelenerek hangi test verilerinin yazılımda hangi tamamlanmış bir algoritma yazılımı verilmektedir. Bu sayede,
yolu takip ettiği, kapsanmayan (dolayısıyla test edilememiş) bu yazılımı kullanan projelerin tekrar test ihtiyacı minimuma
yolların olup olmadığı tespit edilir. Bu durumda, o yolların da indirilmiştir [4].
kullanılmasını sağlayan yeni test verileri üretilebilmekte, ya da
yazılımda hiç koşturulamayan gereksiz kod parçaları olduğuna 5. Algoritma Yazılımının Projelere
karar verilip bunlar ayıklanabilmektedir. Entegrasyonu
Hazır test aracı, test ettiği kodun senaryosal gerekleri Gerek analizleri yapılmış, statik kod analizleri ve birim
konusunda bilgi sahibi değildir. Dolayısıyla, hazır test aracı ile testlerle bağımsız bir modül olarak doğrulanmış olan
yapılan birim testlerin kapsamı, bu aracın test yetenekleri ile algoritma yazılımı, bu noktadan sonra sistem yazılımlarına
sınırlıdır. Bundan dolayı, hazır test aracından ayrı olarak, entegre edilmeye hazırdır.
algoritma gerçekleştiricisi tarafından bir birim test altyapısı
Algoritma yazılımları sistem yazılımlarından bağımsız
oluşturulmuştur [2].
geliştirildiği için, bu süre zarfında algoritmayı kullanacak
250
4. ULUSAL YAZILIM MÜHENDİSLİĞİ SEMPOZYUMU - UYMS'09
sistem yazılımı da başka bir kodlayıcı tarafından paralelden Daha önce geliştirilmiş projelerde uygulanan yöntemlerden
gerçekleştirilebilmektedir. edinilen tecrübeler, böyle kontrollü şekilde geliştirmeyi
zorunlu kılmıştır [5].
Sistem yazılımı, kütüphane olarak derlenmiş olan algoritma
yazılımını kendi projesine ekler. Algoritma yazılımının dış 7. Kazanımlar
dünyaya açılım noktaları olan “C/C++ Başlık” dosyaları da
projeye dahil edilir. Bu dosyalardaki değişime açık Bu yöntemin faydaları aşağıdaki gibi sıralanabilir.
parametreler, proje ihtiyaçlarına göre ayarlanarak, algoritma • Algoritma geliştirmeyi ve yazılım geliştirmeyi
projeye uygun konfigürasyona getirilmiş olur. hızlandırır.
• Algoritma simülasyonu ve algoritma yazılımı bağımsız
Algoritmanın ihtiyaç duyduğu veri alanları sistem yazılımı test edilir.
tarafından açılarak algoritmaya bildirilir. Bu şekilde, hafıza • Gerek algoritma yazılımı açısından, gerekse sistem
taşmalarının önüne geçmek için gerekli kontrol, sistem YKB’si açısından test yapmayı hızlandırır.
yazılımının eline verilmiştir.
• Sistem YKB’si ve algoritma yazılımı birbirlerinden
Bu noktadan itibaren, sistem yazılımını kodlayan kişi bağımsız ve arayüzleri de belirli olduğu için, hata
algoritmayı bir “kara kutu” gibi algılar. Sistem yazılımı kaynağı doğru tespit edilir.
sadece algoritmaya gerekli girdileri doğru şekilde • Hatalar, gerçek sisteme entegrasyondan çok önce tespit
aktarmaktan ve sonuçları doğru formatta toplamaktan edilerek düzeltilir.
sorumludur. Đlgili girdi verileri için elde edilen sonuç • Algoritma yazılımının sistem YKB’sine entegrasyonunu
verilerinin doğru olup olmadığı sistem yazılımının kapsamı kolaylaştırır.
dışındadır. Sistem yazılımcısı, algoritmanın doğru çalışıp • Algoritma yazılımında değişiklik yapmak ve bunun
çalışmadığından bağımsız olarak, yalnız kendi gereklerini test sistem YKB’sine yansımasını sağlamak kolaydır.
eder. • Algoritma yazılımını başka bir algoritma yazılımı ile
değiştirmek kolaydır.
Sistem yazılımının algoritma modülüne ihtiyaç duyduğu
zamanda algoritma henüz hazır değilse, gerçek algoritma 8. Sonuçlar
yerine aynı amaç için eskiden geliştirilmiş bir algoritma ya da
ticari hazır yazılımlar kullanılır. Beklenen algoritma yazılımı Bu bildiride gömülü yazılımlarda kullanılan algoritmaları
hazır olduğunda, eski yazılımın bir kara kutu halinde sökülüp yazılımdan bağımsız bir modül olarak geliştirmek amacıyla
yerine yeni algoritmanın konması gerekmektedir. Algoritma yapılan çalışmalar anlatılmıştır. Algoritmaların geliştirilmesi
yazılımının “kütüphane olarak entegre edilecek bir modül” ve algoritma yazılımlarının gerçekleştirilmesinde uygulanan
olarak geliştirilmiş olması, bu işlemin oldukça kolaylaşmasını yöntem detaylı olarak incelenmiştir.
sağlamıştır.
Algoritmaların geliştirilmesinde uygulanan bu yöntemin o
Ayrıca gerçek sistemde gerçek verilerle çalışma sırasında algoritmayı kullanacak sistem yazılımlarına entegrasyon
algoritmada daha önce oluşmamış bir hata görülürse (Bkz. sırasında sağladığı faydalara değinilmiştir.
Şekil 1), sistem yazılımı algoritmanın mevcut halini ya da bir
Algoritma ile sistem yazılımının iç içe geliştirildiği yönteme
önceki versiyonunu kullanmaya devam ederken, paralelden
göre elde edilen kazanımlar oldukça önemlidir. Bu yüzden bu
algoritma kodlayıcı kendi yazılımındaki hatayı bulur ve
uygulamanın ileriye dönük olarak tüm algoritma
düzeltir. Yeni algoritma versiyonunun sistem yazılımına
gerçekleştirme çalışmalarında kullanılması
entegrasyonu, yazılıma dahil edilen kütüphanenin
değerlendirilmiştir.
değiştirilmesinden ibaret olmaktadır.
6. Tartışma 9. Teşekkür
Bu makalenin hazırlanması sırasında desteğini esirgemeyen
Uygulanan bu yöntem birçok problemi çözüme
ve algoritma kodlamaları süresince bu uygulamanın
kavuşturmuştur. Đlk bakışta, bu yapının detaylarla fazla
geliştirilmesine katkıda bulunan tüm iş arkadaşlarımıza
uğraştığı ve geliştirme sürecini uzattığı izlenimi doğabilir.
teşekkürlerimizi sunarız.
Ancak unutulmamalıdır ki, bu yöntem kullanılmadığı
durumda entegrasyon ve arazi testleri sırasında aynı 10. Kaynakça
problemlerle uğraşmak gerekecektir. [1] David B. Stewart – InHand Electronics, “Measuring
Algoritmanın, yazılımın diğer kısımlarından ayrı tutularak Execution Time and Real-Time Performance”, Embedded
geliştirildiği bu yaklaşımla, algoritmadaki versiyon Systems Conference Boston, 2008
değişikliklerinin yazılıma entegrasyonu oldukça [2] Ark Khasin - Macro Expressions, “C/C++ Code Unit
kolaylaşmıştır [4]. Testing on a Shoestring”, Embedded Systems Conference
Boston, 2008
Bu yöntem sayesinde; algoritmanın henüz yeni geliştirilmekte [3] Dan Saks, “Writing Better C and C++ for Embedded
olduğu aşamada, eldeki mevcut eski algoritma geçici olarak Systems”, Embedded Systems Conference Boston, 2008
kullanılmış, yeni algoritma tamamlandığında eskisini bir kara [4] Bedir Tekinerdoğan – University of Twente, “Software
kutu gibi çıkarıp yerine yenisini koymak mümkün olmuştur. Architecture Engineering / Product Line Engineering
Bu durum, yazılımın bu algoritmaya ihtiyaç duyan diğer Lecture Notes”, Aselsan, 2006
kısımlarının da algoritmayla paralel olarak geliştirilmesine [5] Jack Ganssle, “Learning From Disaster”, Embedded
olanak sağlamıştır. Systems Conference Boston, 2008
251