İlgiye Odaklı Programlamanın Gerçek Zamanlı Gömülü Sistemler Üzerinde Bir Değerlendirmesi Yusuf Bora Kartal 1 Ece G. Schmidt 2 1 Aselsan A.Ş., Ankara 2 Elektrik ve Elektronik Mühendisliği Bölümü, Ortadoğu Teknik Üniversitesi, Ankara 1 e-posta: bkartal@aselsan.com.tr Özetçe Yazılım sistemlerinin çoğu birçok birim (module) üzerine dağıtılmış ilgilerden (concern) oluşur. Yazılımdaki karmaşıklığı azaltmak, tekrar kullanılabilirliği artırmak ve anlaşılabilirliği yükseltmek amacıyla dikkate alınan en önemli prensiplerden biri ilgilerin ayrımı (Separation of Concerns- SOC) prensibidir. Nesneye yönelik programlama (Object Oriented Programming-OOP) günümüzde SOC prensibine uygunluğu açısından baskın kullanım oranına sahip bir programlama tekniğidir. Bu tekniği kullanarak sistemin çalışmasını etkileyen birçok ışlevsel ilgiyi (functional concern) ayırmak mümkündür. Fakat enine-kesen ilgiler (crosscutting concerns) olarak adlandırılan ve gerçeklenmesi birçok farklı yazılım birimi üzerine dağılmış olan ilgileri OOP teknikleri ile ayırmak mümkün olmamaktadır. İlgiye odaklı programlama (Aspect Oriented Programming-AOP) enine kesen ilgileri ayrı modüller üzerinde gerçekleyerek yazılımda SOC prensibinin uygulamasındaki eksiklikleri gidermeyi amaçlayan bir programlama tekniğidir. Bu bildiride AOP nin gerçek zamanlı gömülü sistemler üzerinde yapılan bir değerlendirmesi ve bu değerlendirmede alınan sonuçlar sunulmaktadır. Gerçeklenen deneysel projede sistemde bulunan enine-kesen ilgiler hem OOP hem de AOP teknikleri kullanılarak gerçeklenmiş ve iki farklı gerçekleme hem yazılım kalitesi hem de sistem performansı açısından karşılaştırılmıştır. Değerlendirme sonuçları ışığında AOP nin hem yazılım kalitesini ve hem de sistem performansını artırdığı gözlemlenmiştir. 1. Giriş Programlama alanındaki gelişmeler yazılımların modülerliklerinin artırılması yönünde katkılar ortaya koymaktadır. Yazılımdaki birimsellik (modularity); anlaşılabilirlik (understandability), yeniden kullanılabilirlik (reusability), bakım kolaylığı (maintainability) ve test edilebilirlik (testability) gibi yazılım kalite özniteliklerinde (software quality attributes) iyileşmeyi sağlamaktadır. Günümüzde yaygın kullanılan programlama tekniği olan nesneye yönelik programlama (Object Oriented Programming-OOP), birimsel yazılım geliştirme yollarından bir tanesidir. OOP gerçek hayatta karşılaşılan nesneleri yazılım nesnelerine adreslemektedir. Sistemin çalışmasını etkileyen işlevsel ilgiler göz önüne alındığında OOP yazılımın birimselliği açısından oldukça başarılı bir tekniktir. Fakat gerçeklemesi, doğası gereği birden fazla birim üzerine dağılmış loglama, hata yönetimi, eş zamanlama (synchronization) gibi işlevsel olmayan ilgilerin OOP teknikleri kullanılarak birimsel gerçeklemelerinin yapılamadığı ve enine-kesen ilgiler (crosscutting concerns) oldukları görülmüştür. Bu ilgiler OOP teknikleri kullanılarak 2 e-posta: eguran@metu.edu.tr gerçeklendiğinde kod dolaşıklığına (code tangling) ve birden fazla birim üzerine saçılmaya (code scattering) yol açmaktadır [1, 2]. Koddaki dolaşıklık birden fazla ilginin bir yazılım birimi içersinde anlaşılabilirliği azaltacak yönde iç içe geçmesi anlamına gelmektedir. Koddaki saçılma ise bir ilginin birden fazla yazılım birimi üzerine dağılması anlamını taşımaktadır. Koddaki dolaşıklık ve saçılmalar yazılımın birimselliğini azaltıcı yönde etki yapmakta ve yazılım kalitesini düşürmektedir. İlgiye odaklı programlama (Aspect Oriented Programming- AOP) var olan OOP teknikleri üzerine geliştirilmiş, koddaki dolaşıklık ve saçılmayı engelleyerek yazılımda birimsellik sağlamayı amaçlayan bir programlama tekniğidir. AOP ve uygulamadaki yararlarını konu alan çalışmaların çoğu gerçek zamanlı olmayan masaüstü programlama (desktop computing) sistemleri üzerinde yapılmıştır [1, 2, 3]. Bu çalışmalarda AOP nin katkılarını sadece yazılım kalite öznitelikleri üzerinden değerlendirmiştir. AOP nin gerçekzamanlı (real-time) gömülü (embedded) sistemler üzerinde değerlendirilmesi alanında özellikle gerçek-zamanlı gömülü sistemler için önemli olan bellek kullanımı (memory usage), çalışma zamanı (run-time) ve işlemci kullanımı (CPU usage) gibi sisteme bağlı performans metrikleri gözetilerek yapılan bir çalışma henüz kaydedilmemiştir. Sunduğumuz bu çalışma ile bu açık kapatılmaya çalışılmıştır. Gerçek zamanlı gömülü sistemler masaüstü sistemlerden çalışma ortamları ve sistem gerekleri yönünden ayrılmaktadır. Bu sistemlerin geliştirme sürecini etkileyen özel sistem gereksinimleri ve kaynak kısıtları bulunmaktadır. Bu sistemler için geliştirilen yazılımların, sistemin doğası gereği tahmin edilebilir sonuçlar verip, sistem gereklerini mümkün olan en kısıtlı kaynakları kullanarak yerine getirmeleri beklenir [4]. Bu nedenlerden ötürü yazılım kalitesinin yanı sıra, bellek kullanımı, işlemci kullanımı ve çalışma süresi gibi sistem performansını doğrudan etkileyen özellikler de yazılımın değerlendirmesinde ön plana çıkmaktadır [5]. Önceki çalışmalar [1, 2, 3, 6] AOP nin masaüstü sistemler üzerinde sağladığı iyileştirmeleri yazılım kalitesi perspektifinden ortaya koymaktadır. Fakat bu çalışmalar AOP nin gerçek zamanlı gömülü sistemler üzerindeki etkilerini, özellikle sisteme bağlı performans gerekleri açısından ortaya koymaya yetecek bir veri sağlamamaktadır. [19] da AOP nin gerçek-zamanlı gömülü bir sistem üzerinde yazılım kalitesi ve sistem performans metrikleri gözetilerek bir değerlendirmesi yapılmıştır. Bu bildiride [19] da yapılan incelemenin özellikle sistem performans metrikleri açısından genişletilmiş bir değerlendirmesi sunulmaktadır. Değerlendirme test amaçlı geliştirilmiş olan Sayısal Ses Matrisi çalışması üzerinde yapılmıştır. Projede işlevsel
olmayan enine kesen ilgiler hem OOP hem de AOP teknikleri kullanılarak gerçeklenmiş ve değerlendirme bu iki farklı gerçekleme üzerinden yapılmıştır. Projenin modellemesinde UML kullanılmıştır. Projenin işlevsel ilgileri her iki uyarlamada da C++ kullanılarak gerçeklenmiştir. Karşılaştırma için, projedeki enine kesen ilgiler OOP uyarlamasında C++ kullanılarak, AOP uyarlamasında ise AspectC++ kullanılarak gerçekleştirilmiştir. AspectC++ nesneye yönelik C++ programlama diline dayanan ilgiye odaklı bir programlama dilidir [7]. Değerlendirme yazılım kalite öznitelikleri (anlaşılabilirlik, tekrar kullanılabilirlik, bakım kolaylığı ve test edilebilirlik) ve sistem performans metrikleri (bellek kullanımı, işlemci kullanımı ve çalışma süresi) dikkate alınarak yapılmıştır. Bildirinin geri kalanı şu şekilde düzenlenmiştir: İkinci bölümde ilgiye odaklı programlama ve gerçek-zamanlı gömülü sistemlerle ilgili ön bilgi verilmektedir. Üçüncü bölümde gerçeklenen sayısal ses matrisi projesi işlevi ve çalışma ortamı ile birlikte anlatılmaktadır. Dördüncü bölümde ise yapılan karşılaştırmada elde edilen sonuçlara yer verilmektedir. Beşinci bölümde ise yapılan çalışmalar özetlenerek çalışmanın ulaştığı sonuç verilmektedir. 2. Gerçek-Zamanlı Gömülü Sistemler ve AOP Bu bölümde gerçek-zamanlı gömülü sistemlerle ilgili ön bilgi verilmekte ve ilgiye odaklı programlama ilgiye odaklı programlama dili olan AspectC++ üzerinden anlatılmaktadır. 2.1. Gerçek-Zamanlı Gömülü Sistemler Sisteme verilen bir girdi sonucunda oluşan çıktının oluşma zamanının çıktının kendisi kadar önemli olduğu sistemlere gerçek zamanlı sistemler adı verilmektedir [4]. Gerçek zamanlı sistemlerde her bir girdi gerçek hayatta bir olaya eşlenmektedir. Bu nedenle sistemin oluşturduğu çıktının fiziksel ortamda yaratılan tepki ile hem doğruluk hem de oluşum zamanı açısından tutarlı olması gerekmektedir. Gecikmiş bir çıktı gerçek-zamanlı sistemlerde hatalı bir çıktı anlamına gelmektedir. Gömülü sistemler belirli bir görevi gerçekleştirmek için bilgisayar kontrolü sağlayan sistemlerdir. Gömülü sistemlerin kullanıcı ile etkileşimi masaüstü sistemlere nazaran çok sınırlıdır. Bu sistemler masaüstü sistemlere göre çalıştıkları ortama ve yaptıkları işe bağımlı sistemlerdir. Genellikle tek bir işi yapmak için tasarlanmışlardır. Gömülü sistemler standart işletim servisleri sunmamakta ve genellikle büyük bir sistemin bir parçasını oluşturmaktadırlar [4]. Gerçek-zamanlı gömülü sistemlerde sistem tepkileri tahmin edilebilir zamanlarda oluşmalı ve sistem görevlerini mümkün olana en kısıtlı imkânlarla yerine getirebilmelidir [4]. Özellikle bellek ve işlemci kullanımı ile çalışma süresi gerçek-zamanlı gömülü sistemlerin oluşturulmasına yön veren kısıtlardır [8, 9]. Bu kısıtların yanı sıra, gömülü sistemlere yüklenen sorumluluğun artması ile birlikte karmaşıklaşan yazılımlar için yazılım kalitesi de önem kazanmaktadır. 2.2. İlgiye Odaklı Programlama (AOP) İlgiye odaklı programlama enine-kesen ilgilerin birimsel gerçeklemesine imkân veren bir programlama tekniğidir [10]. AOP de enine kesen ilgileri modülerleştirmek amacıyla oluşturulan dil yapılarına aspect adı verilmektedir. Aspect ler programın tekrarlayan özelliklerini tanımlayan kod yapılarıdır [11]. AOP nin temel amacı tek bir yazılım birimi içersinde gerçeklenemeyen enine kesen ilgilerin birimselleştirilmesidir. AOP uygulamaları çekirdek (core) ve aspect olmak üzere iki bileşenden oluşmaktadır [6]. Çekirdek bileşeni standart OOP teknikleri ile gerçeklenmiş ve sistemin ana işlevini tanımlayan bölümdür. Aspect bileşeni ise AOP teknikleri ile gerçeklenmiş ve sistemdeki enine kesen ilgilerin gerçeklendiği bülümdür. Ayrı ayrı gerçeklenmiş olan çekirdek ve aspect bileşenleri aspect örücü (aspect weaver) adı verilen bir kod örücüsü yardımıyla birleştirilip projenin tamamı elde edilir. Aspect örücünün işlevi çekirdek bileşeni içersinde ilgili aspect lerin iliştirilmesidir. AspectC++, nesneye yönelik bir programlama dili olan C++ ın ilgiye odaklı uzantısıdır [10]. AspectC++ programcıya, projenin çekirdek bileşeninin herhangi bir kısmına dışarıdan kod ekleme olanağı sunmaktadır. Bu sayede enine kesen ilgilerin enine kesme davranışları (crosscutting behavior) programcı yönünden bakıldığında ortadan kaldırılmış olmaktadır. AspectC++ enine kesen ilgilerin aspect bileşeni içersinde tanımlanabilmesi için öneri (advice) ve pointcut adı verilen iki dil öğesi ortaya koymaktadır. Öneriler programcının çekirdek bileşeni içersinde herhangi bir yerde yapılmasını istediği işleri belirttiği dil yapılarıdır. Pointcut lar ise programcının, yazdığı öneri kodlarının çalışacağı yerleri işaret eden dil yapılarıdır. Program içersinde öneri kodlarının çalışacağı yerlere eklenti noktası (joinpoint) adı verilmektedir. Programcı bu eklenti noktalarını pointcut ların içinde ya da doğrudan öneri kodunu yazarken tanımlayabilir. Eklenti noktaları tanımlanırken aspect örücünün anlayacağı özel anahtar kelimeler ve karakterler kullanılmaktadır. Bu özel karakter ve kelime grupları kullanarak hazırlanan eşlemelere eşleme ifadesi (match expression) adı verilir. Programcı sözü edilen dil özelliklerini kullanarak çekirdek bileşeninde gerçeklemediği enine kesen ilgileri aspect bileşeni içersinde birimsel olarak gerçekleme imkânına sahip olmaktadır. Aspect bileşeni içersinde tanımlanan enine kesen ilgilerin çekirdek bileşeni içindek iyerlerine yerleştirilmesi işi ise aspect örücü aracılığıyla otomatik olarak yapılmaktadır. Bu sayede enine kesen ilgilerin, programcı açısından birimselliği sağlanmış olmaktadır. Şekil 1 de sözü edilen AspectC++ dil bileşenleri bir örnek ile anlatılmaktadır. Şekil 1. Aspect Örneği
Şekil 1 deki AllOperations adlı pointcut içinde tanımlanan, eşleme ifadesi çekirdek bileşeni içersindeki girdi olarak herhangi bir sayıda ve tipte değişken alan ve herhangi bir tipte sonuç döndüren bütün yöntemleri işaret etmektedir. Kodlanan öneri aracılığıyla da AllOperations pointcut ı ile belirtilen yerlerde yapılması istenen işlev belirtilmiştir. Yukarıda verilen aspect kodu sayesinde çekirdek bileşeni içersinde bulunan bütün yöntemlerden sonra yöntemin adı standart çıktı ekranına yazdırılmaktadır. 3. Test Çalışması AOP nin gerçek-zamanlı gömülü sistemler üzerinde enine kesen ilgilerin gerçeklenmesinde OOP ile karşılaştırılabilmesi için Sayısal Ses Matrisi projesinin iki farklı uyarlaması gerçeklenmiştir. OOP teknikleri kullanılarak gerçeklenen uyarlamada hem işlevsel ilgiler hem de enine kesen ilgiler C++ kullanılarak gerçeklenmiştir. Diğer uyarlamada ise, sistemin işlevsel özelliklerini tanımlayan çekirdek bileşeni OOP teknikleri kullanılarak C++ ile aspect bileşeni ise AOP teknikleri kullanılarak AspectC++ ile gerçeklenmiştir. Bu sayede AOP nin gerçek-zamanlı gömülü sistemlerdeki işlevsel olmayan enine-kesen ilgilerin gerçeklenmesinde sağladığı katkıların değerlendirilmesi amaçlanmıştır. Bu bölümde Sayısal Ses Matrisi projesinin işlevsel ve işlevsel olmayan ilgileri anlatılmakta ve proje işlevsel açıdan incelenmektedir. 3.1. Sayısal Ses Matrisi Sayısal Ses Matrisi projesi kırk giriş on altı tane de çıkışı bulunan ve Aselsan A.Ş. [16] de tamamlanmış bir ses anahtarı gerçeklemesidir. Girişlerden her biri çıkışlardan her birine anahtarlanabilmektedir. Sistem bir grafiksel kullanıcı ara yüzü aracılığıyla kontrol edilebilmektedir. Kullanıcı bu ara yüz aracılığıyla giriş ve çıkış kanalları arasındaki anahtarlamayı kontrol edebilmekte, giriş kanallarından herhangi birinden gelen sinyal üzerinde çeşitli değişikler yapabilmektedir. Birden fazla giriş kanalından gelen sesi bir veya birden fazla çıkış kanalından dinlemek mümkündür. Sistem yazılımı Motorola MVME 5100 [17] hedef kartı üzerinde koşmaktadır. İşletim sistemi olarak gerçek-zamanlı gömülü bir işletim sistemi olan VxWorks [18] kullanılmaktadır. 3.1.1. İşlevsel İlgiler: Sayısal Ses Matrisi projesi toplam 24 sınıf ve 325 metottan oluşan gömülü bir yazılım projesidir. Sistemin işlevsel ilgilerinin çalışması Şekil 2 de özetlenmektedir. Sistemin çalışması üç ana adım olarak anlatılabilir. İlk adım ses matrisinin giriş kanallarını oluşturan örnekselden sayısala dönüştürücü (Analog to Digital Converter) kartın çıkışlarından periyodik aralıklarla örneklenen ses verisinin toplanması işidir. İkinci adımda toplanan örneklerin kullanıcı istekleri doğrultusunda işlenmesi ve anahtarlama yollarının oluşturulması işi gerçekleştirilir. Son adımda ise işlenen verinin ses oluşturmak üzere belirlenen veri yolları üzerinden sayısaldan örneksele dönüştürücü (Digital to Analog Converter) kartın giriş kanallarına yollanması işi gerçekleştirilir. Sayısal Ses Anahtarı nın yerine getirdiği ilk gereksinim giriş kanallarında periyodik olarak örneklenen ses verisini toplamaktır. A/D Çevirici bloğu olarak adlandırılan bu blokta giriş kanallarında bulunan analogdan sayısala dönüştürücü kartın örnekleme hızı 8000 örnek/saniye olduğu için her 125 mikro saniyede bir 40 giriş kanalının her birinde yeni örnekler oluşmaktadır. Her yeni örnek bir önceki örneğin üzerine yazılmaktadır. Bu nedenle 125 mikro saniye içinde 40 kanalda oluşan örneğin toplanıp işlenmesi için ikinci adıma iletilmesi gerekmektedir. Bu sürenin aşılması veri kaybına yol açacağından 125 mikro saniye kesin bir gerçek zaman gereğidir (hard real-time requirement). Sistemin ikinci ve en önemli işlevi ise girişte toplanan örneklerin kullanıcı ihtiyaçlarına göre işlenmesi ve belirlenen veri yolları üzerinden çıkış kanallarına aktarılacak şekilde hazırlanmasıdır. Bu işlev İşlemci Bloğu olarak adlandırılan kısımda gerçekleştirilir. Sistemde her giriş kanalı için ayrılmış arabellek alanları (buffer memory) bulunmaktadır. Arabellek alanlarındaki taşmayı ve veri kaybını önlemek için bu işlev sistem saatine bağlanarak her 100 milisaniyede bir yapılmaktadır. 100 milisaniyelik zaman dilimindeki küçük aşmalar (25 milisaniyeye kadar) insan kulağının hassasiyeti düşünüldüğünde tolere edilebilir olmaktadır. Ancak sözü edilen gecikme arabellek alanlarında taşmaya yol açacak boyuta geldiğinde (125 milisaniyeden büyük gecikmeler) veri kaybına yol açmaktadır. Bu nedenle 100 milisaniyelik zaman sınırı bir öncekine göre daha esnek bir gerçek-zaman gereğidir (soft real-time requirement). Sistem çalışmasındaki en son adım, işlenmiş ve çalınması için ilgili bellek alanlarına yazılmış olan ses verilerinin çıkış kanallarında bulunan sayısaldan örneksele dönüştürücü kartın bellek alanına yazılması işidir ve D/A Çevirici Bloğunda gerçekleştirilir. Bu kart her 125 mikro saniyede yeni sayısal örnekleri örneksel olarak çalmaktadır. 125 mikro saniyelik zaman sınırındaki bir aşma, çıkış verisinin bozulmasına sebep olmaktadır. Veri bozulması göz önüne alındığında bu zaman kısıtı kesin bir gerçek zaman gereğidir (hard real-time requirement). Kullanıcı Ara Yüzü Kullanıcı komutları Şekil 2. Sayısal Ses Matrisi 3.1.2. Enine Kesen İlgiler: Ses Örnekleri Ses Verilerini Topla İşlenmemiş ses verileri Ses Verilerini İşle & Anahtarlama Y ollarını O luştur İşlenmiş ses verileri İşlenmiş Verileri Gönder Ses Örnekleri Hata yönetimi, loglama, bellek yönetimi, boş değer kontrolü (null-value checking), veri büyüklük kontrolü (range checking) ve bellek hata yönetimi en çok rastlanan enine-
kesen ilgilerdir. [12] Bunların yanı sıra zamanlama ve eşzamanlama gerçek-zamanlı sistemlerde sıkça rastlanan enine kesen ilgilerdir. Sayısal Ses Matrisi projesinde; loglama, boş değer kontrolü, veri büyüklük kontrolü ve zamanlama ilgileri örnek enine kesen ilgiler olarak gerçeklenmiştir. Bu ilgiler öncelikle OOP teknikleri kullanılarak gerçeklenmiş, daha sonra da AOP teknikleri ile gerçeklenerek bu iki gerçekleştirilmenin karşılaştırması yapılmıştır. Şekil 3 ve Şekil 4 te Sayısal Ses Matrisi projesinde gerçeklenen loglama ilgisi örnek olarak verilmiştir. Şekil 3. Loglama (OOP) Şekil 3 te görülen Log sınıfının yerini AOP uyarlamasında LogAspect almıştır. Diğer sınıfların Log sınıfıyla olan ilişkilerinin yerini ise aspect örücü aracılığıyla oluşturulan eklenti noktaları almıştır. Bu sayede birden fazla sınıfın içersinde loglamayı ilgilendiren kod parçaları Şekil 4 teki LogAspect aspect inin içinde birimsel olarak gerçeklenmiştir. Şekil 4. Loglama (AOP) 4. Değerlendirme Sayısal Ses Matrisi projesinin işlevsel ilgileri OOP teknikleri kullanılarak gerçeklenmiştir. Projedeki enine kesen ilgiler ise hem OOP hem de AOP teknikleri ile gerçeklenerek iki farklı uyarlama elde edilmiştir. Karşılaştırmanın tasarımcıdan bağımsız sonuçlar verebilmesi için enine kesen ilgilerin gerçeklemesi mümkün olduğu kadar basit tutulmuştur. Bu iki uyarlama, seçilen yazılım kalite metriklerine ve gerçekzamanlı gömülü performans metriklerine göre değerlendirilmiştir. Bu bölümde değerlendirmede kullanılan metrikler ve değerlendirme sonucu elde edilen sonuçlar verilmektedir. 4.1. Yazılım Kalitesi Yazılım kalitesi yazılımın gerçekleme kalitesi olarak tanımlanabilir. Yazılım kalitesini ölçebilmek amacıyla birçok metrik seti yayınlanmıştır. Bu metriklerin çoğu aşağıdaki 4 yazılım kalite özniteliklerine dayanmaktadır: Yeniden Kullanılabilirlik Bakım Kolaylığı Anlaşılabilirlik Test Edilebilirlik 4.1.1. Yazılım Kalite Metrikleri Daha önce yapılan çalışmalarda AOP teknikleri masaüstü sistemler üzerinde yazılım kalite öznitelikleri açısından değerlendirilmiştir. Bu değerlendirmelerin çoğunda ölçüm metrikleri olarak Chidamber ve Kemerer (C&K) Metrik Seti ni [14] kullanılmıştır. Ayrıca AOP ve OOP programlama teknikleri yazılımda birimselliği amaçlayan teknikler olduğu için iki tekniğin yazılım kalitesi açısından karşılaştırması yazılımdaki birimsellik merkezinde gerçekleştirilmiştir. C&K metrik seti yazılım kalitesini ölçmede en kapsamlı ve geçerli sonuçları vermektedir [6, 13]. Bu nedenlerle araştırmamızda yazılım kalitesini ölçmede C&K metrik seti kullanılmıştır. C&K metrik seti 6 adet metrikten oluşmaktadır. Bunlar: Sınıf Başına Düşen Ağırlıklı Yöntem Sayısı (Weighted Methods Per Class - WMC) Nesneler Arası Bağlaşım (Coupling Between Objects-CBO) Sınıfın Tepkisi (Response for a Class -RFC) Yöntemlerin Uyum Eksikliği (Lack of Cohesion in Methods -LCOM) Soyağacı Derinliği (Depth of Inheritance Tree - DIT) Ardılların Sayısı (Number of Children -NOC) WMC bir sınıftaki yöntemlerin toplam karmaşıklıklarının ölçüsüdür. Bir sınıftaki yöntemlerin karmaşıklıklarının c 1 c n, olduğu düşünülürse, o sınıfın WMC ölçüm sonucu WMC = c i olarak hesaplanmaktadır [14]. WMC nin düşüklüğü yazılım tasarımın iyiliğini gösterir. CBO metriği bir sınıfa bağımlı olan diğer sınıfların sayısını belirtir. Sınıflar arası bağımlılığın modüler tasarımı zorlaştırdığı düşünüldüğünde CBO metrik sonuçlarının düşük çıkmasının daha birimsel bir yazılıma işaret ettiği söylenebilir. RFC metriği, bir sınıfın alınan mesajlara karşılık verebileceği yanıt kümesini vermektedir. Yüksek RFC değerleri karmaşık bir tasarımın belirtisidir. LCOM metriği, bir sınıftaki yöntemlerden benzer olmayanlarının sayısını verir. Bir sınıfın, idealde tek bir işle uğraşması gerektiğinden LCOM metrik sonuçlarının yüksek olması o sınıf içersinde birden fazla ilginin toplandığı anlamına gelmekte ve birimsel olmayan bir tasarımı işaret etmektedir. DIT bir sınıfın soyağacındaki (inheritance tree) basamak sayısını verir. Başka bir değişle bir sınıfın özelliklerinin en fazla kaç basamak önceki bir sınıfa dayandığını gösterir. NOC metriği ise bir sınıfın özelliklerinin
başka kaç sınıfa kalıtım (inheritance) yolu ile geçtiğinin ölçüsüdür. Yukarıda anlatılan C&K metrik setinin yazılım kalite özniteliklerine etkisi Şekil 5 te verilmiştir. [14] İyileşme Yüzdesi C&K Metrikleri Üzerinde AOP İyileştirmesi 40 30 20 10 0 WMC CBO RFC LCOM C&K Metrikleri Şekil 5. C&K Metrikleri ve Yazılım Kalite Öznitelikleri 4.1.2. C&K Metrik Sonuçları: Sayısal Ses Matrisi projesinin C&K metrik sonuçları Understand for C++ [15] ölçüm aracı kullanılarak elde edilmiştir. Bu bölümde elde edilen ölçüm sonuçları tartışılmaktadır. C&K metrikleri OOP tabanlı metrikler olduğu için AOP gerçeklenmesinde aspect ler ölçüm aracı tarafından sınıf olarak değerlendirilmiştir. Elde edilen sonuçlar Şekil 6 da sunulmaktadır. 400 350 300 250 200 150 100 50 0 C&K Metrik Sonuçları WMC CBO RFC LCOM(%) C&K Metrikleri Şekil 6. Sayısal Ses Matrisi Projesi C&K Metrik sonuçları Metrik ölçümlerinde kullanılan aracın LCOM metrik sonuçlarını yüzde olarak vermesi nedeniyle LCOM metrik sonuçları Şekil 6 da Sayısal Ses Matrisi projesinde gerçeklenen tüm sınıfların LCOM metrik ölçüm yüzdesi olarak verilmektedir. Sayısal Ses Matrisi projesindeki enine kesen ilgilerin gerçeklemesinde kalıtım ve alt sınıflar (subclass) kullanılmadığından, DIT ve NOC metrikleri her iki uyarlamada da aynı sonuçlar vermiş bu nedenle de değerlendirmeye dâhil edilmemişlerdir. Bu bölümün başında da söylendiği gibi karşılaştırmanın tasarımcıdan bağımsız sonuçlar verebilmesi için enine kesen ilgilerin gerçeklemesi mümkün olduğu kadar basit tutulmuştur. Şekil 6 da görüldüğü gibi DIT ve NOC metrikleri haricinde kalan 4 C&K metriğinde AOP iyileşme sağlamıştır. AOP nin sağladığı iyileşme yüzdesi Şekil 7 de verilmiştir. OOP AOP Şekil 7. C&K Metriklerindeki İyileşme Yüzdesi Yapılan çalışma sırasında AOP nin sağladığı iyileşmenin AOP kullanımının artmasıyla arttığı görülmüştür. Sayısal Ses Matrisi projesindeki enine kesen ilgilerin oluşturduğu toplam kod miktarının, projenin tamamının % 20 si olduğu düşünüldüğünde Şekil 6 ve Şekil 7 de görülen iyileşmelerin önemi ortaya çıkmaktadır. C&K Metrikleri nin yazılım kalite öznitelikleri ile olan bağlantısı ve metrik sonuçları düşünüldüğünde, AOP kullanımının gerçek zamanlı gömülü bir sistem olan Sayısal Ses Matrisi nde yazılım kalitesini artırdığı gözlemlenmiştir. 4.2. Sistem Performansı Gerçek zamanlı gömülü sistemler, bellek kullanımı, işlemci kullanımı ve çalışma zamanı gibi bir takım kısıtları bulunan sistemlerdir. Bu bölümde Sayısal Ses Matrisi projesi üzerinde sistemin bellek ve işlemci kullanımı ile gerçek zaman gereklerinin sağlanması değerlendirilmiştir. 4.2.1. Performans Metrikleri: Sayısal Ses Matrisi projesi, gerçek-zamanlı gömülü sistem performans metrikleri açısından değerlendirilmiştir. Değerlendirmede dikkate alınan performans metrikleri aşağıda verilmektedir: Bellek Kullanımı (Memory Usage) İşlemci Kullanımı (CPU Usage) Çalışma Süresi (Run-time) Bir sistemin bellek kullanımı durağan (statik) ve dinamik bellek kullanımı olarak incelenebilir. Bunlardan gömülü sistemler için önemli olanı dinamik bellek kullanımıdır. Dinamik bellek kullanımı çalışmakta olan yazılımın çalıştığı donanımın ana belleğinden kullandığı miktardır. Bu nedenle dinamik bellek kullanımı testleri çalışan sistem üzerinde yapılmalıdır. Sayısal Ses Anahtarı projesinin bellek kullanımı testleri de sistem hedef kart (Motorola MVME 5100) üzerinde çalışırken özel ajanlar kullanılarak yapılmıştır. Bir işlevin işlemci kullanımı, çalışma süresince tek çekirdekli bir işlemcinin ne kadar süre ile o işleve ayrıldığına bakılarak bulunabilir. Tek çekirdekli işlemcilerde işlemci aynı anda tek bir işle meşgul olabilmektedir. Paralel çalışması gereken işler arasında hızla atlayarak işlerin paralel gibi görünmesi sağlanmaktadır. MVME 5100 kartlarındaki PowerPC 7410 işlemciler de tek çekirdekli işlemciler olup aynı anda tek bir işle ilgilenebilmektedirler. Sayısal Ses Matrisi projesinin işlemci kullanımı da sistem, hedef kart üzerinde çalışırken özel ajanlar kullanılarak hesaplanmıştır.
Çalışma süresi, özellikle gerçek zamanlı gömülü sistemler için büyük önem taşımaktadır. Önceki bölümlerde de bahsedildiği gibi gerçek-zamanlı sistemlerde, sistemin herhangi bir etkiye verdiği tepkinin zamanında gerçekleşmemesi sistemde hatalı çalışmaya neden olabilir. Bu nedenle gerçek-zamanlı sistemlerin en büyük özelliği verilen etkilere tahmin edilebilir gecikmeler içersinde cevap verebilmeleridir. Sayısal Ses Matrisi projesinin çalışma zamanı testleri hedef kart üzerinde sistem çalışırken gerçekleştirilmiştir. Projenin anlatımında da bahsedildiği gibi sistemin 3 adet gerçek zaman gereksinimi bulunmaktadır. Bunlardan iki tanesi kesin zaman kısıtlarıdır, üçüncü gerek ise diğer ikisine kıyasla daha esnek ama yine de gerçeklenmesi gereken bir zaman kısıdıdır. İşletim sistemlerinin çalışmaları birçok etkene bağlı olduğundan sistem her çalıştığında belirli bir yüzde içersinde kalmak koşuluyla farklı çalışma süreleri verebilirler. Bu nedenle Sayısal Ses Matrisi projesinden alınan sonuçlar 100 farklı çalıştırmanın ortalama sonuçları olarak değerlendirilmiştir. Çalışma süresi testleri her üç gerçekzaman gereği için ortalama ve en kötü zamanlama olarak iki şekilde yapılmıştır. Gerçek-zamanlı sistemlerde önemli olan en kötü durum olduğundan bu bildirideki performans karşılaştırmaları en kötü çalışma sürelerine göre yapılmakta ortalama çalışma sürelerine ise bilgi amaçlı yer verilmektedir. 4.2.2. Performans Metrikleri Sonuçları: Sayısal Ses Matrisi projesi üzerinde yapılan performans testleri sistem çalışması sırasında hedef kart üzerinde yapılmıştır. Özellikle çalışma süresi testleri anlamlı sonuçlar alabilmek amacıyla 100 defa tekrarlanmıştır. Test sonuçları Şekil 8 ve Şekil 9 da özetlenmiştir. Dinamik Bellek Kullanımı İşlemci Kullanımı En Kötü Çalışma Süresi (A/D Çevirici Bloğu (us)) En Kötü Çalışma Süresi (İşlemci Bloğu (ms)) En Kötü Çalışma Süresi (D/A Çevirici Bloğu (us)) OOP 24.25% 44% 92.03 158.475 19.79 AOP 20.01% 40% 46.19 114.507 11.28 Şekil 8. Sayısal Ses Anahtarı Performans Ölçüm Sonuçları OrtalamaÇalışma Süresi (A/D Çevirici Bloğu (us)) Ortalama Çalışma Süresi (İşlemci Bloğu (ms)) OOP 42.05 122.542 12.75 AOP 37.07 111.608 9.32 Ortalama Çalışma Süresi (D/A Çevirici Bloğu (us)) Şekil 9. Sayısal Ses Anahtarı Ortalama Çalışma Süresi Sonuçları Şekil 8 de de görüldüğü gibi AOP kullanımı sistem performans metriklerinde gözle görülür bir iyileşme sağlamıştır. Özellikle çalışma süresi test sonuçlarına bakıldığında AOP nin %50 ye varan bir iyileşme sağladığı görülmektedir. Bu iyileşmelerin temel nedeni OOP teknikleri ile kodlanmış uyarlamada enine kesen ilgilerin gereksinmelerini (loglama, hata yönetimi vb.) yerine getirmek için mesaj çağrımları kullanmalarıdır. İşletim sisteminin iki farklı iş (task) arasında geçiş yapabilmesi için context switching yapması gerekmektedir. Başka bir deyişle bir işin özelliklerini o işe özel ayrılmış olan bellek yığınına (stack) aktarması ve geçeceği yeni işin özelliklerini o iş için ayrılmış yığından alması gerekmektedir. Context switching olarak tanımlanan bu işlem belirli bir zaman ve performans kaybına yol açmaktadır. Bu nedenle Sayısal Ses Anahtarı projesinin enine kesen ilgilerinin OOP teknikleri ile gerçeklendiği uyarlamada context switching işleminden kaynaklı bir performans kaybı görülmektedir. Enine kesen ilgilerin AOP teknikleri kullanılarak gerçeklendiği uyarlamada ise mesaj çağrımlarının yerini belirlenen kod bölgelerine aspect örücü aracılığı ile otomatik olarak eklenen kod parçaları almaktadır. Bu nedenle context switching gerçekleşmemektedir. AOP kullanımı enine kesen ilgilerin nesneye odaklı tekniklerle gerçeklenmesinde kullanılan sınıfların ortadan kalkmasını sağlamış, bu sayede dinamik nesne yaratılmasını da azaltmıştır. Dinamik bellek kullanımında elde edilen iyileşmenin sebebi de sınıf sayısının ve dinamik nesne yaratılmasının azalması olarak açıklanabilir. OOP ile kodlanan versiyonda bölüm 3.1.2 de verilen örnekte de görüldüğü gibi, enine kesen ilgilerin gerçeklenmesi amacıyla özel sınıf gerçeklemeleri yapılmıştır. AOP bu sınıfların işlevlerini aspect kod yapılarının içinde gerçekleyerek OOP ile kodlanan versiyondaki sınıf gerçeklemelerini ortadan kaldırmış ve sınıf sayısında azalma sağlamıştır. Sayısal Ses Matrisi projesindeki performans iyileşmesinin koddaki enine kesen ilgi yüzdesine göre değişimi Şekil 10 daki grafikte verilmiştir. Çalışma süresindeki iyileşmeyi göstermek amacıyla İşlemci bloğunun en kötü çalışma süresi verilmektedir. İyileşme Yüzdesi (%) 30% 25% 20% 15% 10% 5% 0% AOP-OOP İyileşme Yüzdesi Grafiği z 10 18 20 Enine Kesen İlgi Yüzdesi (% satır) İşlemci Kullanımı Bellek Kullanımı İşlemci Bloğu En Kötü Çalışma Süresi Şekil 10. Sayısal Ses Matrisi Performans İyileşme Sonuçları Grafikte verilen iyileşme yüzdeleri performans metriklerinin AOP teknikleri kullanılarak ulaştığı değerler ile OOP teknikleri kullanılarak ulaşılan değerler arasındaki farklara bakılarak hesaplanan iyileşme yüzdeleridir. Şekil 10 daki grafikte de görüldüğü gibi projedeki performans iyileşmesi koddaki enine kesen ilgi miktarı arttıkça artmaktadır. Başka bir değişle enine kesen ilgilerin gerçeklenmesindeki AOP kullanımı arttıkça performanstaki iyileşme belirginleşmektedir. Şekil 8 de verilen sonuçlara bakıldığında enine kesen ilgilerin AOP teknikleri kullanılarak gerçeklenmesinin sistem
performansını iyileştirdiği görülmektedir. Elde edilen sonuçlardan özellikle durağan bellek kullanımının kullanılan bağdaştırıcı (linker) ile doğrudan ilgili olduğu unutulmamalıdır. Genel olarak yazılım kalitesi ve performans metriklerinde alınan sonuçlara bakıldığında AOP nin gerçek-zamanlı gömülü sistemlerde enine kesen ilgilerini gerçeklenmesinde kullanılabilecek bir yöntem olduğu görülmektedir. 5. Sonuç Bu bildiride sunulan çalışmanın amacı gerçek-zamanlı gömülü sistemler üzerinde enine-kesen ilgilerin gerçeklenmesinde AOP ve OOP tekniklerinin yazılım kalitesi ve sistem performansı açısından incelenmesidir. Değerlendirme kısmında test projesi olarak tasarlanan Sayısal Ses Anahtarı yazılım kalitesi ve sistem performansı açısından incelenmiştir. İncelemeler sonucunda AOP nin gerçek-zamanlı gömülü sistemlerde yazılım kalitesi ve sistem performansı açısından iyileşmeler sağladığı gözlemlenmiştir. Test sonuçları dikkate alındığında AOP nin gerçek-zamanlı gömülü sistemlerde enine kesen ilgilerin gerçeklenmesinde yazılım kalitesi ve sistem performansını artırmak için kullanılabilecek bir yöntem olduğu sonucuna varılmıştır. 6. Teşekkür Aselsan A.Ş. ye araştırma süresince verdikleri destekten dolayı teşekkür ederiz. Ayrıca geliştirme safhasında verdikleri destekten dolayı Sayın H. Özgür Gören e teşekkürlerimizi iletiriz. 7. Kaynakça [1] Y. Coady, and G. Kiczales, Back to the Future: A Retroactive Study of Aspect Evolution in Operating System Code, Proceedings International Conference on Aspect- Oriented Software Development (AOSD 03), Boston Massachusetts, USA, pp. 50-59, 2003. [2] G. Kiczales, et al. Aspect-Oriented Programming, Proceedings European Conference for Object-Oriented Programming (ECOOP 97), Jyväskylä, Finland, pp. 220-242, 1997. [3] A. Rashid and L. Blair, "Aspect-Oriented Programming and Separation of Crosscutting Concerns," British Computer Society The Computer Journal, vol. 46, no. 5, pp. 527-528, 2003. [4] S. Agrawal and P. Bhatt, "Real-time Embedded Software Systems," TATA Technology Review, 2001. [5] A. Burns and A. Wellings, "Real-Time Systems and Programming Languages," Addison-Wesley, 2001. [6] S. L. Tsang, L. Clarke, and E. Baniassad, "An Evaluation of Aspect-Oriented Programming for Java-Based Real-Time Systems Development," Proceedings of Seventh IEEE International Symposium on Object-Oriented Real-Time Distributed Computing, 2004. [7] O. Spinczyk, A. Gal, and W. Schröder-Preikschat, "AspectC++: An Aspect-Oriented Extension to C++," Proceedings of the 40th International Conference on Technology of Object-Oriented Languages and Systems (TOOLS Pacific 2002), Sydney, Australia, 18-21 February, 2002. [8] W. Wolf and M. Kandemir, Memory System Optimization of Embedded Software, Proceedings of the IEEE, vol. 91, pp. 165 182, 2003. [9] D. Lohmann, O. Spinczyk, and W. Schröder-Preikschat, "Lean and Efficient System Software Product Lines - Where Aspects Beat Objects," Transaction of Aspect-Oriented Software Development (TAOSD), 2006. [10] O. Spinczyk, D. Lohmann and M. Urban, "Advances in AOP with AspectC++," Available: http://www.aspectc.org/fileadmin/publications/somet- 2005.pdf [11] S.K. Miller, "Aspect-Oriented Programming Takes Aim at Software Complexity", IEEE Computer Journal, vol. 34, pp. 18-21, 2001. [12] M. Bruntink, A. van Deursen, R. van Engelen, and T. Tourwe, "On the Use of Clone Detection for Identifying Crosscutting Concern Code, IEEE Transactions on Software Engineering, vol. 31, pp. 804 818, 2005. [13] R. Harrison, S.J. Counsell, and R.V. Nithi, An Evaluation of the MOOD Set of Object-Oriented Software Metrics IEEE Transactions on Software Engineering, vol. 24, No.6, pp. 491-496, 1998. [14] S.R. Chidamber, and C. F. Kemerer, A Metrics Suite for Object-Oriented Design Proceedings IEEE Transaction on Software Engineering, vol. 20, no.6, pp. 476-493, 1994. [15] Understand for C++ (Ver. 1.4), [Online] Available: http://www.scitools.com/documents/manuals/pdf/understand_ c.pdf [16] Aselsan Inc., http://www.aselsan.com.tr/ [17] Motorola MVME 5100 Data Sheet", [Online] Available: https://mcg.motorola.com/us/ds/pdf/ds0008.pdf [18] "VxWorks Center", [Online] Available: http://www.windriver.com/vxworks/index.html [19] Y. B. Kartal and E. G. Schmidt, "An Evaluation of Aspect Oriented Programming for Embedded Real-Time Systems," IEEE ISCIS 07.