<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Yazılım Mimari Tasarımından Yazılım Geliştirme Çatısının Üretilmesinde Model Güdümlü Bir Yaklaşım</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>İbrahim Onuralp Yiğit</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Nafiye Kübra Turhan</string-name>
          <email>2nkturhan@aselsan.com.tr</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ahmet Erdinç Yılmaz</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Bülent Durak</string-name>
          <email>4durak@aselsan.com.tr</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Anahtar Kelimeler: Model Güdümlü Yazılım Geliştirme, Yazılım Mimarisi, Referans Yazılım Mimarisi, Alana Özgü Dil Tasarımı, Otomatik Kod Üretme</institution>
          ,
          <addr-line>Deniz Sistemleri</addr-line>
        </aff>
      </contrib-group>
      <fpage>465</fpage>
      <lpage>470</lpage>
      <abstract>
        <p>Özet. Bu bildiride, yazılım mimari tasarımından, yazılım geliştirme çatısının otomatik olarak oluşturulması için uygulanan model güdümlü yaklaşım, bu yaklaşımın sağladığı kazanımlar ve edinilen tecrübeler paylaşılmaktadır. Belirli bir alanda faaliyet gösteren yazılım ekipleri, genellikle ürünlerini tanımladıkları referans yazılım mimarisine uygun bir şekilde geliştirmektedirler. ASELSAN SST Sektör Başkanlığı bünyesinde deniz sistemleri alanında çalışan bir yazılım ekibi tarafından geliştirilen tüm yazılımlar, tanımlanan referans yazılım mimarisine uygun olarak tasarlanmaktadır. Referans yazılım mimarisine uygun olarak tasarlanmış yazılım mimarisinden, kodlamaya geçiş sürecini otomatikleştirmek için model güdümlü bir yaklaşım benimsenmiştir. Bu sayede yazılım ekibi tarafından yazılımların geliştirilmesine referans yazılım mimarisine uygun olarak başlanmaktadır. Ayrıca yazılım mimari tasarımından kaynak koda geçiş sürecinde harcanan iş gücünden de tasarruf sağlanmaktadır.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>ortaya çıkabilecek değişkenlikler de referans yazılım mimarisinde
belirlenebilmektedir.</p>
      <p>
        Belirli bir alanda faaliyet gösteren yazılım ekipleri, genellikle yazılım ürünlerini
tanımladıkları referans yazılım mimarisine uygun bir şekilde geliştirmektedirler [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ].
Referans yazılım mimarisiyle tekrar kullanılabilecek varlıklar ve değişkenlikler ortaya
koyulmaktadır [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. Böylece hem mevcut yazılım ürünlerinde hem de gelecekte
geliştirilecek yazılım ürünlerinde yeniden kullanımın sağlanması için uygun ortam
hazırlanmış olur.
      </p>
      <p>Bu bildiride, yazılım mimari tasarımından, yazılım geliştirme çatısının otomatik
olarak oluşturulması için uygulanan model güdümlü yaklaşım, bu yaklaşımın
sağladığı kazanımlar ve edinilen tecrübeler paylaşılmaktadır. ASELSAN SST Sektör
Başkanlığı bünyesinde deniz sistemleri alanında çalışan bir yazılım ekibi tarafından
geliştirilen tüm yazılımlar tanımlanan referans yazılım mimarisine uygun olarak
tasarlanmaktadır. Referans yazılım mimarisine uygun olarak tasarlanmış yazılım
mimarisinden, kodlamaya geçiş sürecini otomatikleştirmek için model güdümlü bir
yaklaşım benimsenmiştir. Bu yaklaşımın uygulanmasıyla referans yazılım mimarisine
uygun bir şekilde yazılımların geliştirilmesine başlanmaktadır. Bu sayede yazılım
mimari tasarımından kaynak koda geçiş sürecinde kod-mimari uyumu
sağlanmaktadır. Ayrıca şablon kodlar otomatik üretildiği için geçiş sürecinde
harcanan iş gücünden de tasarruf sağlanmaktadır.</p>
      <p>Bildirinin bundan sonraki bölümleri şu şekilde düzenlenmiştir: ikinci bölümde
sistematik yeniden kullanımın sağlanması için benimsenen yaklaşım hakkında bilgi
verilmiştir. Üçüncü bölümde uygulanan model güdümlü yaklaşım ve bu yaklaşımın
sağladığı kazanımlar paylaşılmaktadır. Son bölümde yapılan çalışma sonucunda
gelinen noktanın değerlendirmesi yapılmış ve gelecek dönemde yapılacak
çalışmalardan bahsedilmiştir.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Yeniden Kullanım Yaklaşımı</title>
      <p>
        Yazılım geliştirme çalışmalarında sistematik yazılım yeniden kullanımının sağlanması
için tanımlanmış olan politika, yöntem, araç ve uygulamaların bütününe, Deniz
Savunma Sistemleri Yeniden Kullanım Yaklaşımı (DSS-YKY) adı verilmektedir [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ].
DSS-YKY ile sistematik bir yeniden kullanımın sağlanmasına ilişkin tanımlamaların
yapılması, belirlenen altyapıların oluşturulması, etkin kullanımın sağlanması, tanım
ve altyapıların idame ettirilmesi amaçlanmıştır. Bu kapsamda ortak mimari altyapı ve
ortak sistem bileşenleri kullanılarak ürünlerin geliştirilmesi hedeflenmiştir.
      </p>
      <p>DSS-YKY kapsamında yazılım ekibi tarafından geliştirilen yazılımların ortak bir
mimari yapı kullanılarak geliştirilmesi için Referans Yazılım Mimarisi (DSS-RYM)
tanımlanmıştır. DSS-RYM, geliştirilen yazılımlar için katmanlı bir mimari yapı ve bu
katmanlı yapıya uygun olarak yazılımların geliştirilmesi için yönlendirmeler
sunmaktadır. DSS-RYM için tanımlanan kavramsal mimari Şekil 1’de verilmiştir.
Şekil 1. Referans Yazılım Mimarisi
3</p>
    </sec>
    <sec id="sec-3">
      <title>Model Güdümlü Yazılım Geliştirme Yaklaşımı</title>
      <p>
        Model güdümlü yazılım geliştirme yaklaşımı, platformdan bağımsız modeller
aracılığıyla çalıştırılabilir kod üretmeyi sağlaması sebebiyle günümüzde tercih edilir
[
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. Modeller, üst seviye soyutlama imkânı sunduğu için karmaşık sistemlerin
geliştirilmesini kolaylaştırır [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. Platformdan bağımsız modeller sayesinde aynı model
kullanılarak farklı platformlar için otomatik kod üretilebilir. Böylece tasarımdan
kodlama sürecine geçişte oluşabilecek hatalar da en düşük seviyeye indirilebilir.
Ayrıca, modeller kullanılarak otomatik kod üretilebildiği için kodlama sürecinde
harcanan iş gücünden tasarruf sağlanabilir.
      </p>
      <p>DSS-RYM’ye uygun olarak tasarlanmış yazılım mimarisinden, kodlamaya geçiş
sürecini otomatikleştirmek için model güdümlü bir yaklaşım benimsenmiştir.
DSSMGY adı verilen bu çalışma kapsamında izlenen yol haritası aşağıdaki şekilde
gösterilmektedir. DSS-MGY yol haritasında bulunan adımlara ilişkin açıklamalara bu
bölümün alt başlıklarında yer verilmiştir</p>
      <p>Şekil 2. Model Güdümlü Yazılım Geliştirme Yaklaşımı Yol Haritası
3.1</p>
      <sec id="sec-3-1">
        <title>DSS-RYM Metamodeli</title>
        <p>
          DSS-MGY kapsamında, alana özgü dil tanımlamasında kullanılacak DSS-RYM
Metamodeli oluşturulmuştur. Metamodel oluşturmak için EMF (Eclipse Modeling
Framework) kullanılmıştır. EMF, ECore adı verilen, modelleme anlamında yazılım
alanında çok sık kullanılan, bir meta metamodel sunmaktadır. Kullanıcılar, ECore
meta metamodelini kullanarak kendi metamodellerini tanımlayabilirler [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ].
        </p>
        <p>DSS-RYM Metamodeli oluşturulurken DSS-RYM’de yer alan kavramlar ve bu
kavramlar arasındaki ilişkilerden yola çıkılmıştır. Oluşturulan DSS-RYM Metamodeli
aşağıdaki şekilde gösterilmiştir.</p>
        <p>Şekil 3. DSS-RYM Metamodeli
Şekil 5’de DSS-RYM Metamodelinin elemanları kutularla, elemanlar arasındaki
ilişkiler de çizgilerle gösterilmiştir.</p>
        <p>DSS-RYM Metamodeli oluşturulduktan sonra somut dilbilgisi üretmek için bir
Eclipse eklentisi olan Xtext 1 aracı kullanılmış, Xtext’in var olan metamodelden
otomatik dilbilgisi üretme tekniğinden yararlanılmıştır. Otomatik üretilen dilbilgisi
üzerinde ufak değişiklikler yapılmış ve oluşturulan bu alana özgü dile DSS-ML adı
verilmiştir.</p>
        <p>Dilbilgisine göre DSS-ML uygulama modeli, yazılımın ana paket ve bileşen
tanımlarından oluşacaktır. Bu bileşenler DSS-RYM’de yer alan kavramlara karşılık
gelmektedir.
3.2</p>
      </sec>
      <sec id="sec-3-2">
        <title>DSS-ML Statik Anlamsal Kurallar</title>
        <p>Metamodelde ve somut dilbilgisi modelinde elemanlar arası ilişkiler sadece sayısal
bağlamda kısıtlanmaktadır. DSS-ML için metamodelde ve somut dilbilgisi modelinde
getirilmeyen kısıtlara yönelik bazı statik anlamsal kurallar tanımlanmıştır. Kural
tanımlamaları için Xtext’in geçerlilik kontrol mekanizması (validator) kullanılmıştır.
Kurallar Xtend programlama dili kullanılarak oluşturulmuştur. DSS-ML modelinden
üretilecek sınıf isimlerinin de DSS-RYM’de tanımlanan isimlendirme kurallarına
uygun olması sağlanmıştır.
1</p>
        <p>Xtext framework, http://eclipse.org/Xtext
3.3</p>
      </sec>
      <sec id="sec-3-3">
        <title>Otomatik Kod Üretme</title>
        <p>Model-metin dönüşümü, model güdümlü yazılım geliştirme sürecinde anahtar rolü
oynamaktadır. Bir model kod, rapor, doküman gibi metin varlıklarına
dönüştürülebilmektedir. Bu çalışma kapsamında Xtext DSL olarak tanımlanan
DSSML dili için Xtend programlama dili kullanılarak Java kodu oluşturma mekanizması
kurulmuştur.</p>
        <p>Otomatik kod üretme mekanizmasının ilk aşamasında DSS-ML’de bulunan her bir
DSS-RYM elemanının içinde yer alacağı paketler yaratılmaktadır. Bu paketlerin
içlerine DSS-ML elemanlarına karşılık gelen Java sınıfları koyulmaktadır. Otomatik
kod üretme işlemi tamamlandıktan sonra DSS-ML ile oluşturulan uygulama
modellerinden üretilen kaynak kodlar, tariflenen paketler altına yerleştirilmektedir.
3.4</p>
        <p>Örnek Çalışma
Yapılan tanımlamalar sonrasında, DSS-ML dili kullanılarak yazılım ekibi içerisinde
geliştirilen her yazılım projesi için uygulama modeli geliştirilmeye başlamıştır. Bu
dilbilgisi kullanılarak oluşturulacak olan modellerin “.dssml” uzantılı dosyalar
içerisine yazılması gerekmektedir. Örnek çalışma kapsamında bir simülatör
projesinde DSS-ML dili kullanılarak uygulama modeli oluşturulmuştur.</p>
        <p>Uygulama modeli oluşturulup otomatik kod üretme işlemi tamamlandıktan sonra
simülatör projesinin kaynak kod dizini altına şablon kodlar eklenmiştir. Şekil 4’de
otomatik oluşturulan paket yapısı ve üretilen şablon yönetici sınıfın bir örneği
verilmiştir.</p>
        <p>Şekil 4. Otomatik Üretilen Paket Yapısı ve Kodlar</p>
        <p>Simülatör projesi kapsamında DSS-ML dili kullanılarak projenin başlangıçta
kullanılacak yazılım geliştirme çatısı üretilmiştir. Elde edilen çıktılar aşağıdaki
tabloda paylaşılmıştır.</p>
        <p>Tablo 1. Örnek Çalışma Çıktıları</p>
      </sec>
      <sec id="sec-3-4">
        <title>Metrikler Çıktılar</title>
        <p>Paket Sayısı 38
Sınıf Sayısı 89
Kod Satır Sayısı 502</p>
        <p>Tablo 1’de verilen çıktılar yazılım ekibi üyeleri tarafından incelenmiştir. Ekip
üyelerine göre DSS-ML dili kullanılarak elde edilen çıktıların elle oluşturması
durumunda yaklaşık 8.5 saatlik iş gücü harcanması gerektiği ön görülmüştür. Bu
işlem DSS-ML ile 0.5 saatte tamamlanmıştır. İş gücü tasarrufunun yanı sıra
DSSRYM’ye uygun olarak kaynak kodlar üretildiği gözlemlenmiştir.
4</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Sonuç</title>
      <p>Yeniden kullanım çalışmaları kapsamında ortak bir referans yazılım mimarisi
oluşturulmuştur. Yazılım ekibi tarafından geliştirilen yazılımların referans yazılım
mimarisine uygun olması için yazılım tasarımı DSS-ML uygulama modelleri
üzerinden yapılmaya başlanmıştır. DSS-ML otomatik kod üretme mekanizmasıyla
üretilen şablon kodlar sayesinde tasarımdan kodlamaya geçiş süreci
otomatikleştirilmiştir. Böylece yazılımların geliştirilmesine referans yazılım
mimarisine uygun bir şekilde başlanmaktadır. Ayrıca şablon kaynak kodların
otomatik üretilmesiyle yazılım mimari tasarımından kaynak koda geçiş sürecinde
harcanan iş gücünden tasarruf sağlanmıştır.</p>
      <p>Önümüzdeki dönemde tasarımdan kodlamaya geçiş sürecinin yanı sıra DSS-YKY
çalışmaları kapsamında Yazılım Geliştirme Çatısı Üreteci sürecinin tamamını
kapsayacak otomasyon çalışmalarının yapılması hedeflenmektedir. Ayrıca, uygulama
modelinden UML diyagramlarını içeren tasarım dokümanlarının da otomatik
üretilmesi planlanmaktadır.</p>
    </sec>
    <sec id="sec-5">
      <title>Kaynaklar</title>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1. W. Frakes ve K. Kang, “
          <source>Software Reuse Research: Status and Future,” IEEE Transactıons on Software Engıneerıng, Cilt</source>
          <volume>31</volume>
          , No.
          <issue>7</issue>
          , pp.
          <fpage>529</fpage>
          -
          <lpage>536</lpage>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>R.</given-names>
            <surname>Cloutier</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Muller</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Verma</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Nilchiani</surname>
          </string-name>
          , E. Hole ve M. Bone, “The Concept of Reference Architectures,” Wiley Periodicals, Inc. Syst Eng, cilt
          <volume>13</volume>
          , no.
          <issue>1</issue>
          , p.
          <fpage>14</fpage>
          -
          <lpage>27</lpage>
          ,
          <issue>29</issue>
          <year>Ocak 2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>B. M.</given-names>
            <surname>Yildiz</surname>
          </string-name>
          ve
          <string-name>
            <given-names>B.</given-names>
            <surname>Tekinerdogan</surname>
          </string-name>
          , “Küresel Yazılım Geliştirme Projeleri İçin Alana Özgü Dil,” Ulusal Yazılım Mühendisliği Sempozyumu, Ankara,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>E.</given-names>
            <surname>Kahraman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Ipek</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Iyidir</surname>
          </string-name>
          ,
          <string-name>
            <surname>C.</surname>
          </string-name>
          <article-title>Bazlamaci ve S. Bilgen, “Bileşen Tabanlı Yazılım Ürün Hattı Geliştirmeye Yönelik Alan Mühendisliği Çalışmaları,” Ulusal Yazılım Mühendisliği Sempozyumu</article-title>
          , İstanbul, Türkiye,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>R.</given-names>
            <surname>Atas</surname>
          </string-name>
          ve
          <string-name>
            <given-names>O.</given-names>
            <surname>Kalipsiz</surname>
          </string-name>
          , “
          <article-title>Servis Tabanlı Yazılım Ürün Hattı Mimarileri,” Fırat Üniversitesi Elektrik-Elektronik ve Bilgisayar Sempozyumu</article-title>
          , Elazığ, Türkiye,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>B.</given-names>
            <surname>Durak</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E. K.</given-names>
            <surname>Akbiyik ve</surname>
          </string-name>
          <string-name>
            <given-names>I. O.</given-names>
            <surname>Yigit</surname>
          </string-name>
          , “
          <string-name>
            <surname>Deniz Savunma Sistemleri Alanında Sistematik Yazılım Yeniden Kullanım Yaklaşımı</surname>
            ,” Ulusal Yazılım Mühendisliği Sempozyumu, Güzelyurt,
            <given-names>KKTC</given-names>
          </string-name>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>E. K.</given-names>
            <surname>Karatas ve B. Iyidir</surname>
          </string-name>
          , “Yazılım Ürün Hattı Yaklasımında Model Güdümlü Uygulama Mühendisliği,” Ulusal Yazılım Mühendisliği Sempozyumu, İstanbul, Türkiye,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>A.</given-names>
            <surname>Goknil</surname>
          </string-name>
          ve
          <string-name>
            <given-names>Y.</given-names>
            <surname>Topaloglu</surname>
          </string-name>
          , “
          <article-title>Yazılım Geliştirmede Model Dönüşümü ve Model Dönüşüm Dilleri</article-title>
          ,” [Çevrimiçi]. Available: www.emo.org.tr/ekler/95d2a757eb34bf2_ek.
          <source>pdf. [17 Nisan 2015 tarihinde erişilmiştir].</source>
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>