You are on page 1of 5

4.

ULUSAL YAZILIM MÜHENDİSLİĞİ SEMPOZYUMU - UYMS'09

Algoritma Yazılımı Gerçekleştirme ve Doğrulama Uygulamaları

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

Özetçe Algoritma gerçekleştirme yöntemleri arasında ilk akla gelen,


algoritmayı yazılımın bir parçası olarak gerçekleştirmeye
Algoritma yazılımları, gömülü yazılımların performansı ve çalışmaktır. Ancak bu durumda, algoritma yazılımı
doğruluğu açısından kritik modülleridir. Bu modüllerin kodlamalarının, YKB kapsamında geliştirilen diğer kodlarla
geliştirilmesinde ve doğrulanmasında izlenecek yöntemler bu koordineli şeklide yürütülmesi, sorunsuz çalışan bir YKB’ye
yazılımların ve bu yazılımları kullanan sistemlerin sahip olmak için gereklidir.
performansını önemli ölçüde etkiler.
Aksi yönden, YKB’nin başka bölümlerinde çıkan
Algoritma yazılımlarının mümkün olduğunca bağımsız yazılım problemlerden veya başka bir algoritmadaki problemlerden
modülleri olarak geliştirilmesi, bağımsız olarak test edilmesi dolayı, gerçekleştirilmekte olan algoritmanın testlerinin devam
ve diğer yazılımlara dışarıdan entegre edilmesinin, algoritma edememesi istenen bir durum değildir. Aynı zamanda,
yazılımlarının doğruluğunu ve güvenilirliğini arttırdığı algoritmayı kullanacak YKB’nin, algoritmanın geliştirilme
görülmüştür. süreci boyunca beklememesi, YKB’nin algoritma harici
Uygulanan yöntem ile hem algoritma yazılım modüllerinin, kısımlarının kodlama ve testlerinin devam etmesi arzu edilir.
hem de sistemin diğer modüllerinin geliştirilmesi ve test Ayrıca aynı algoritmanın birden fazla YKB tarafından
edilmesi hızlandırılmıştır. Algoritma yazılımlarının kullanılması gerekebilir. Bu durum, algoritma kodunun
modülerliği sayesinde, daha uygun bir algoritma yazılımı kendinden bekleneni, YKB’nin diğer kısımlarından bağımsız
geliştirilmesi durumunda, var olan algoritma ile hızlıca olarak, yerine getiren bir kod olması gereğini doğurur.
değiştirilerek önemli performans iyileştirmeleri
sağlanmaktadır. Sayılan ihtiyaçlardan dolayı, uygulanacak en doğru yöntemin,
“algoritmanın bağımsız modüller olarak gerçekleştirilmesi ve
Bu bildiride algoritma yazılımlarının bağımsız modüller olarak kendisini kullanacak YKB’lere dışarıdan entegre edilmesi”
geliştirilmesi ve doğrulama çalışmaları sırasında izlenen olduğu açıktır.
yöntemler ve faydaları anlatılmaktadır.
Bu bildiride bahsedilecek algoritma yazılımları, ASELSAN
1. Giriş REHĐS bünyesindeki Elektronik Harp projelerinde
kullanılmak üzere geliştirilen ve gerçekleştirilen yazılımlardır.
Algoritma, bir görevi yerine getirmek için uygulanması Bu algoritma yazılımları, kendinden beklenen göreve özgü;
gereken sonlu sayıdaki adımlar kümesi olarak tanımlanabilir. ama projeden bağımsız olarak, birden fazla projenin ihtiyacını
Her ne kadar adım sayısı sonlu da olsa, büyük ve karmaşık karşılayabilecek şekilde geliştirilen matematiksel yazılım
algoritmalar için bu sayılar binleri hatta onbinleri bulabilir. parçalarıdır.
Algoritmaların bu kadar karmaşıklaşması, bu algoritmaları
geliştirmek için sistematik yaklaşımları zorunlu kılmıştır. Aynı Bu makalede, algoritmaların gerçekleştirilmesi sırasında
şekilde bu ölçekteki algoritmaların gerçekleştirilmesi de bazı izlenen yöntemler ve bu yöntemlerin faydaları anlatılmaktadır.
sistematik yaklaşımlar gerektirmektedir. 2. bölümde algoritma geliştirme, 3. bölümde algoritma
yazılımı gerçekleştirme, 4. bölümde algoritma yazılımını
Bir algoritmayı gerçekleştirmeye başlamadan önce yapılması doğrulama işlemleri ve 5. bölümde ise algoritma
gereken ilk iş algoritmanın geliştirilmesidir. Algoritma yazılımlarının projelere nasıl entegre edildiği anlatılmıştır.
geliştirme çalışmaları, ilgili algoritmanın, kendinden beklenen
görevleri yerine getirebilmesi için izlemesi gereken yolları ve 2. Algoritma Geliştirme
alt adımları belirleme işidir. Algoritma geliştirme çalışmaları
kapsamında algoritmanın tasarımı yapılır, ardından da “Algoritma geliştirme” kavramı, bir görevi yerine getirmek
tasarlanan algoritma simülasyon ortamında kodlanarak, çeşitli için uygulanacak adımları belirleme işlemlerini ifade eder.
test verileri ile tasarım doğrulanır. Algoritma geliştirme, algoritma gerçekleştirme
Geliştirme aşaması tamamlanmış olan algoritmayı kullanarak çalışmalarından bağımsız bir süreç gibi görünmesine rağmen,
bir görevi yerine getirecek bir Yazılım Konfigürasyon Birimi bu iki çalışma birbirini besler şekilde yürütülmelidir.
(YKB), bu algoritmayı gerçekleştirmeli ve uygun şekilde Çoğunlukla bu işlemlerden biri sırasında bulunan sonuçlar
kullanmalıdır. Ancak bir YKB’nin, bu algoritmanın görevini diğeri için bir geri besleme niteliğindedir. Bu nedenle, bu
yerine getirmesinin yanında yapması gereken başka işler de makalede algoritma geliştirme çalışmalarına da kısaca
olacaktır. Hatta büyük sistemlerde bu YKB’nin çalıştırması değinilmesi uygun bulunmuştur.
gereken başka algoritmalar da olacaktır. Bu sebeple, bir YKB Algoritma geliştirme çalışmaları kapsamında ASELSAN’da
için, kullanacağı algoritmanın gerçekleştirilme yöntemi önem benimsenen yöntem, aşağıdaki adımları izlemeyi gerektirir.
kazanmaktadır.

247
4. ULUSAL YAZILIM MÜHENDİSLİĞİ SEMPOZYUMU - UYMS'09

Algoritmanın Görevini Tanımlama: Öncelikle bu


algoritmanın yapacağı işler net bir şekilde tanımlanır.
Algoritmanın girdileri, algoritmadan beklenen çıktılar
belirlenir.
Algoritmayı Alt Adımlara Bölme: Algoritma uygun şekilde
alt adımlara bölünür. Bu alt adımların, kendi içinde bir
bütünlük içermesi gereği aranır.
Alt Adımları Tasarlama: Alt adımların her biri ayrı ayrı
tasarlanır. Bu sırada, alt adımların birbirleriyle ilişkileri de
irdelenir ve arayüzleri belirlenir.
Algoritmayı Test Etmek Đçin Gereken Verileri Belirleme:
Algoritmayı test etmek için gereken veriler elde edilir. Gerçek
test verileri mevcut ise bunlar kullanılır. Ancak çoğunlukla bu
aşamada gerçek veriler mevcut değildir ve dolayısıyla test
verileri benzetimle üretilir. Benzetimlerin gerçeğe mümkün
olduğunca yakın olması önemlidir.
Test Çıktılarını Belirleme: Algoritmanın sonuçlarının
nerelerde kontrol edileceği belirlenir. Sonuçların kontrol
edileceği yerler ve sayıları geliştirilen algoritmaya ve bu
algoritmanın kritikliğine bağlı olarak değişiklik
göstermektedir.
Alt Adımları Geliştirme ve Benzetim: Algoritma adımları
simülasyon ortamında gerçekleştirilir ve testleri yapılır. Test
sonuçlarında algoritmanın beklenen davranışı sergilediği
görülmelidir. Đstenen sonuçlar elde edilmezse önceki adımlara
dönülerek hatalar giderilir.
Algoritmanın Sonuçlarını Kaydetme: Algoritmaların ilgili
test verisi için verdiği sonuçlar kaydedilir. Bu sırada tüm
aşamalardaki sonuçlar kaydedilmelidir. Bu sonuçlar daha
sonra, gerçekleştirilen yazılımın doğrulama testleri için Şekil 1: Algoritma Yazılımı Gerçekleştirme, Doğrulama ve
referans olacaktır. Yazılım Entegrasyonu Aşamaları.
3. Algoritma Yazılımını Gerçekleştirme
Yazılımsal Gerekleri Belirleme: Algoritma yazılımının,
Geliştirme çalışmaları tamamlanmış bir algoritma için entegre edileceği YKB’lere uygun çalışması için yapması
algoritma gerçekleştirme çalışmaları başlatılır. gerekenler belirlenir. Bunlar çoğunlukla girdi ve çıktı veri
“Algoritma yazılımı gerçekleştirme” kavramı, algoritma yapısının nasıl olacağını ve YKB’lere entegrasyonunun nasıl
geliştirme kapsamında belirlenen adımları kullanarak ilgili yapılacağını adresleyen gereklerdir. Bu aşamada yazılımın dış
görevi yerine getirecek yazılımı üretme işlemlerini ifade eder. arayüzlerinin belirlenmesi ve sabitlenmesi önemlidir. Dış
arayüzlerin sonradan değiştirilmeye çalışılmasının maliyeti
Algoritma gerçekleştirme çalışmalarında, amaç sadece yüksek olacağından arayüz belirleme işlemleri kodlamadan
algoritmanın kendinden beklenen gerekleri yerine getirecek bir önce yapılmaktadır.
yazılım üretmek değildir. Bu algoritmanın gerçek zamanlı
sistemlerin performans kriterlerini sağlaması, sistemlerin Algoritma ve Yazılım Đhtiyaçlarına Uygun Tasarımı
güvenlik kısıtları ile uyumlu olması ve farklı YKB’lerin Belirleme: Belirlenen gereklere uygun şekilde yazılımın alt
ihtiyaçlarına göre uyumlandırılabilir olması da algoritma adımlara bölünmesi ve alt adımların tasarlanması yapılır. Her
gerçekleştirme aşamasının önemli girdileridir. alt adım için girdi, çıktı ve yapacağı işlem belirlenir. Burada
uygulanan “alt adımlara bölme” işlemi, algoritma geliştirme
Bu makalede önerilen yöntemde, algoritma yazılımı aşamasında uygulanan bölme ile aynı veya daha detaylı
gerçekleştirme sırasında üzerinden geçilen aşamalar Şekil 1’de olabilmektedir. Burada önemli olan, kendi içinde bütünlüğü
tariflenmektedir. olan parçalar elde etmektir.
Şekil 1’de verilen algoritma yazılımı gerçekleştirme aşamaları Algoritmik ve Yazılımsal Tasarıma Göre Yazılım
aşağıda detaylı olarak anlatılmaktadır. Modüllerini Gerçekleştirme: Belirlenen yazılım parçaları,
yazılımın çalışacağı ortama uygun bir dille geliştirilir.
Algoritma Kaynaklı Gerekleri Belirleme: Gerçekleştirilecek
Algoritmanın karakterine uygunsa, daha genel bir çalışma
algoritma incelenerek, algoritma kaynaklı gerekler belirlenir.
ortamına uygun şekilde geliştirilip asıl çalışma ortamına göre
Yazılımın temel işi algoritmaya uygun şekilde çalışmak
özelleştirilir. Bu şekilde bir yaklaşım tekrar kullanılabilirliği
olacağı için, gereklerinin büyük bir bölümü algoritma kaynaklı
arttırmaktadır.
olmaktadır.

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

You might also like