<!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>A Reference Model for Low-Level Design Alt Düzey Tasarım için Referans Modeli</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Ebru Özdoğru Kandırmaz</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ufuk Tiryaki</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ali Hikmet Doğru</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>IBTECH A.Ş. Tübitak MAM Teknoloji Serbest Bölgesi</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Gebze/Kocaeli</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Orta Doğu Teknik Üniversitesi</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Bilgisayar Mühendisliği Bölümü</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ankara</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>ebru.ozdogrukandirmaz@ibtech.com.tr</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>ufuk.tiryaki@ibtech.com.tr</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>dogru@ceng.metu.edu.tr</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Anahtar Sözcükler: Alt düzey tasarım</institution>
          ,
          <addr-line>Yazılım değişim mühendisliği, Kalite öznitelikleri</addr-line>
        </aff>
      </contrib-group>
      <abstract>
        <p>This research presents a reference model to improve the effectiveness of low-level design activities. This model is supported with methodological steps and has been realized as a result of real industrial problems and is explained here using an example case. This work shows that low-level design activity is very important to meet quality attribute requirements of systems as much as high-level design activity. As a case study, re-engineering process of a legacy banking system is presented. Özet. Bu çalışmada ayrıntı düzeylerinde tasarım çalışmalarını daha etkin hale getirmek için bir referans modeli sunulmaktadır. Gerçek endüstri problemlerinden yola çıkarak planlanan ve metodolojik adımlarla desteklenen bu model, bir saha vakası kullanılarak anlatılmıştır. Çalışma, istemlerde kalite öznitelik gereksinimlerinin karşılanmasında alt düzey tasarımın üst düzey mimari tasarım kadar önemli bir etkinlik olduğunu göstermektedir. Saha vakası olarak eski bir bankacılık sisteminin yeniden yapılandırma süreci anlatılmıştır.</p>
      </abstract>
      <kwd-group>
        <kwd>Low-level design</kwd>
        <kwd>Software re-engineering</kwd>
        <kwd>Quality attributes</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Giriş</title>
      <p>Bankacılık sistemleri kurumsal sistemlerdir. Günümüz finans teknoloji şirketlerinde
alçak düzeyli ve yordamsal dillerle geliştirilmiş anaçatı (mainframe) tabanlı sistemler
kullanılmaya devam edilmektedir.</p>
      <p>Gelişen teknoloji ve ihtiyaçlarla birlikte, bankalar sistemlerini yeniden yapılandırma
çalışmaları içindedir. Yeni sistemlerin üç temel özelliğinden bahsedilebilir:
1. Yüksek düzeyli programlama dillerinin kullanımı,
2. Değişen ihtiyaçlara hızlı cevap verebilen yenilikçi mimari tasarımlar ve
3. Bilgiye kolay erişim ve mobil sistem destekleri.</p>
      <p>
        Türkiye’deki sayısal bankacılık sisteminin Avrupa ülkeleri arasında ön sıralarda yer
aldığı söylenebilir [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Bu motivasyonun bir sonucu olarak sistemlerin mimari ve
tasarımsal konuları da oldukça ön planda yer almaktadır. Önemli olan her sahada olduğu
gibi, bankacılık sahasında da yazılım mimarisi konuları ve bu çalışma özelinde ele
alınmakta olan alt düzey tasarım konuları gelişme potansiyeli olan konulardır.
      </p>
    </sec>
    <sec id="sec-2">
      <title>Gereksinimler ve Kalite Öznitelikleri</title>
      <sec id="sec-2-1">
        <title>Sistem Gereksinimleri</title>
        <p>
          İşlevsel olmayan gereksinimlerin çözümlenmesi ile sistemin kalite öznitelik
gereksinimleri ortaya çıkar. Kalite öznitelik gereksinimleri mimari tasarımları yönlendirir [
          <xref ref-type="bibr" rid="ref2 ref3">2,
3</xref>
          ]. Bankacılık sisteminin işlevsel olmayan gereksinimleri şu şekilde özetlenebilir:
Müşteri Odaklılık. Müşteri kitlesini, gereksinimleri belirleyenler ve sistemi
kullananlar olmak üzere iki gruba ayırabiliriz. Gereksinimleri belirleyen müşteriler bundan
sonra iş kolları olarak adlandırılacaktır.
        </p>
        <p>İş kolları, gereksinimlerin karşılanması konusunda rekabet ortamından dolayı
sabırsızdır. Gereksinimler için belirlenen standartlaşmış bir referans dokümanı yoktur. İş
kollarındaki personel değiştikçe aynı fonksiyon için sistemden beklenti de değişkenlik
gösterir.</p>
        <p>Sistemi kullanan müşteriler, bankacılık işlemlerini personel olarak kullanan veya
sistemden hizmet alan uç kullanıcılar olarak tanımlanır. Hizmet alan müşteriler,
değişen piyasa koşulları neticesinde paralarının değer kaybetmemesi ve hayat
standartlarının bozulmamasını isterler. Sosyal medyayı etkin kullanırlar. Bu tür kullanıcılar
açısından ortaya çıkacak hataların hızla tamir edilmesi ve uygulamanın pazara çıkış süresinin
kısalması gerekir.</p>
        <p>Zaman Odaklılık. Bu sahada söz konusu olan sistemler üretim ortamında sürekli
kullanılan canlı sistemlerdir. Üretim ortamındaki hataların olabildiğince hızlı tamir
edilmesi beklenmektedir. Müşterilere kesintisiz hizmet vermesi gereken fonksiyonları
içerirler.</p>
        <p>Küresel piyasalar, rekabet ortamı ve sık değişen yasal düzenlemeler, yazılım
ihtiyaçlarının çok hızlı değişmesine neden olmaktadır. Geliştirmelerin pazara çıkması için
çoğunlukla zaman kısıtları öne çıkmaktadır.
Performans Odaklılık. Gün geçtikçe sisteme yeni işlevler eklenmektedir. Günlük
işlem hacmi çok yüksek hızda artmaktadır. Sistem yatay ve düşey yönde büyüme
eğilimindedir.</p>
        <p>Sistemin hızlı cevap vermesi önemlidir. Örneğin, piyasaların çok dalgalı olduğu
saatlerde, döviz kuru değişikliklerini yakın gerçek zamanlı görebilip, hızlı işlem yapma
gereksinimleri vardır. Piyasa hareketliliği sistemlerde ciddi miktarda yük
yaratmaktadır.
2.2</p>
      </sec>
      <sec id="sec-2-2">
        <title>Kalite Öznitelikleri</title>
        <p>Tablo 1’de işlevsel olmayan gereksinimlerin mimari kalite özelliklerine göre
sınıflandırılmış bir listesine yer verilmektedir.</p>
        <p>Tablo 1. Mimari kalite özellikleri
Gereksinim
Canlı (yaşayan) sistemler
7/24 hizmet edebilme
Başarım/yük oranı
Gereksinimlerin sık değişmesi
Öznitelik
Kullanılabilirlik / Güvenilirlik
Yeniden Kullanılabilirlik / Genişletilebilirlik / Bakım
yapılabilirlik
Pazara çıkma süresinin kısalığı</p>
        <p>Yeniden kullanılabilirlik
Gelişen sistem (Growing system)</p>
        <p>Genişletilebilirlik / Ölçeklenebilirlik
3
3.1</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Sistemleri Yeniden Yapılandırma Süreci</title>
      <sec id="sec-3-1">
        <title>Yeniden Yapılandırma Etkinlikleri</title>
        <p>Yenilenen sistemleri olabildiğince çabuk ‘canlıya almak’ hedeflendiğinden dolayı üst
düzey tasarıma odaklanılmaktadır. Alt düzey tasarımla ilgili konular genellikle sonraki
çalışma adımları olarak düşünülmekte ve ötelenmektedirler.</p>
        <p>
          Yazılım mimarisi, sistemi yukarıdan aşağıya doğru alt sistemlere bölerek yapılan
çok katmanlı bir çalışmadır [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ]. Üst düzey tasarım, tüm sistemin ana parçalarını ve ara
yüzlerini belirleyebilmek amacı ile yapılır. Alt düzey tasarım ise, üst düzey tasarımda
belirlenen sistemin ana bileşenlerinin içlerinin ayrıntılı tasarımının yapıldığı etkinliktir.
        </p>
        <p>
          Bu çalışmada örnek olarak sunulmakta olan sistemde servis yönelimli bir mimari
(SYM) seçilmiştir. SYMyi, yeniden kullanılabilir ve gevşek bağlı servislerin
kullanılmasını temel alan üst düzey bir mimari tasarım kalıbı olarak değerlendirmek
mümkündür [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ].
        </p>
        <p>Üst düzey mimari tasarım etkinliklerinde aşağıdaki konulara öncelik verilmiştir:
 Servis havuzu,
 Servislerin kullanım senaryoları ve bir araya getirilmesi,
 Temel iş modülü bileşenleri.
4</p>
        <p>Şekil. 1. Yeni sistemin üst düzey mimarisi – Servis Yönelimli Mimari (SYM)
Servis Havuzu, servislerin uygulamalar tarafından kullanılabilmesi için gerekli
tanımları da içerir. Sevisin iş modülü ile bileşen ve kaynak kod parçası ilişkisini
barındırır.</p>
        <p>İş katmanını oluşturan temel modüller, sistemin iş bakışı açısından bölümlemesini
sunmaktadır. Bu bölümleme genelde kurumda organizasyonel yapılanmayı da hedefler.
Modüllerin içindeki bileşenler, modüllerin iş mantığına göre ayrıştırılması ile oluşan
kaynak kodlarıdır.</p>
        <p>Örnek olarak sunulan sistemde, üst düzey mimari tasarımı sonrasında eski kodlar
yeni yazılım diline ayrıntılı tasarım yapılmadan aktarılmaktadır. Bunların ayrıntı
seviyesinde tasarlanıp yeniden yazılması daha sonraki etkinlikler olarak planlanmıştır. Bu
süreç sonucunda, üst düzey bir dile geçişten bahsedilse de, yordamsal kaynak
kodlarının devam ettirildiği yeni bir gevşek bağlı sistem geliştirilmiştir.
3.2</p>
      </sec>
      <sec id="sec-3-2">
        <title>Gözlemlenen Sürdürülmekte Olan Sorunlar</title>
        <p>Sistemlerin canlıya alınması sonrasında ise, iş kollarının gereksinimleri doğrultusunda
yeni işlevlerin hızla sisteme eklenmesi istenmiştir. Kalıtım yolu ile aktarılmış kodların
yeniden tasarlanması ve yazılması ötelenmektedir.</p>
        <p>Ekiplere yeni gelen yazılımcılar kodlarda alışageldikleri uyarlamaları devam
ettirmektedirler. Kodlar büyüdükçe ve alışkanlıklar yerleştikçe alt düzey tasarımsal
aktivitelere yer vermek daha zor hale gelmektedir.</p>
        <p>Değişen bir gereksinimi karşılayabilmek için, çalışan sisteme etki yaratmamak
niyetiyle var olan kaynak kodlar kopyalanabilmekte, yazılım karmaşıklığı ve servis sayısı
artmaktadır. Yazılımcıların aynı işlevsel modül üzerinde eş zamanlı çalışabilmesi
zorlaşmaktadır.</p>
        <p>Yeni geliştirilen uygulamalarda tasarımcılar da alışkanlıklardan dolayı üst düzey
mimari tasarıma yoğunlaşmaktadırlar. Bu davranış zamanla kurum kültürüne
dönüşmektedir.
Alt düzey tasarımın etkinleştirilmesi amacı ile basit bir referans modeli önerilmektedir.
Modelin şu amaçlarla kullanılması hedeflenmektedir:
1. Eski bir sistemin yeniden yapılandırma süreci sonrasında oluşmuş olan alt düzey
mimari eksikliklerin ve dolayısıyla kalıtım yoluyla aktarılmış yordamsal kodların
yarattığı yan etkilerin giderilmesi için yeniden yapılandırma çalışmalarının
yönlendirilebilmesi
2. Sistemde tamamen yeni geliştirilecek yazılımlar için alt düzey mimari tasarımı
etkinliklerinin zorunlu hale getirilebilmesi.</p>
        <p>
          Referans modelinin odak noktası, nesneye yönelimli tasarımlar için paket tasarım
prensipleri ve sınıf tasarımlarının ilk beş prensibi olarak bilinen ilkelere uyumlu bir
çerçeve oluşturarak bağımlılıkları yönetebilen ve tasarıma uygun yazılım
geliştirilmesini kolaylaştırmaktır [
          <xref ref-type="bibr" rid="ref6 ref7">6,7</xref>
          ]. Bu referans modeli temel olarak şu iki konuyu uygulayarak
hedefe ulaşmayı amaçlamaktadır:
1.
2.
        </p>
        <p>Doğru paket yapısının oluşturulması ve</p>
        <p>Tasarım desenlerinin kullanılması.
4.1</p>
      </sec>
      <sec id="sec-3-3">
        <title>Doğru Paket Yapısı</title>
        <p>
          Tasarım etkinliklerinin sistemi yukarıdan aşağıya doğru alt sistemlere bölerek ilerleme
doğasına uyumlu olarak, bileşen içerisindeki işlevlerin gruplanması gerekmektedir. İş
bakış açısı ile paketlerin kendi içinde bütünlüğünü sağlamak en önemli ölçütlerden
biridir. İş açısının oluşturacağı yönlendirme, doğal olarak modülerlik prensiplerini de
destekliyor olmalıdır. Paketler, bağımlılık prensipleri gözetilerek oluşturulmalıdır [
          <xref ref-type="bibr" rid="ref6 ref7">6,
7</xref>
          ]. Paket bağımlılık prensipleri, yüksek tutunum (high cohesion) ve gevşek bağlaşım
(low coupling) prensiplerine göre temellenirler [
          <xref ref-type="bibr" rid="ref6 ref7">6, 7</xref>
          ]:
        </p>
        <p>Tutunum ile ilgili olanlar:
 Yayımlama Yeniden Kullanılabilirlik Denkliği Prensibi-YYP (Release Reuse
Equivalency Principle): Yeniden kullanılabilir en küçük birim yayımlanabilen en küçük
birimdir.
 Genel Kapalılık Prensibi-GKP (The Common Closure Principle): Birlikte değişen
sınıflar birlikte paketlenirler.
 Genel Yeniden Kullanılabilirlik Prensibi-GYP (The Common Reuse Principle) :
Birlikte Kullanılan sınıflar birlikte paketlenirler.</p>
        <p>Bağlaşım ile ilgili olanlar:
 Çevrimsiz Bağımlılık Prensibi-ÇBP (The Acyclic Dependencies Principle) :
Paketler arasında çevrim oluşturan bağımlılıklar bulunmamalıdır.
 Dengeli Bağımlılık Prensibi-DBP (The Stable Dependencies Principle) : Paketler az
değişiklik gösteren paketlere bağımlı olmalıdır.
 Dengeli Soyutlama Prensibi-DSP (The Stable Abstractions Principle) : Çok az
değişiklik gösteren paketler soyut paketler olmalıdır. Soyut sınıflar bu paketlerde
toplanabilir. Az değişiklik gösteren paketler somut paketler tarafından genişletilebilirler.</p>
        <p>Paket yapısının doğru oluşturulması aşağıdaki faydaları sağlar:
 Yazılım Kalite öznitelik gereksinimlerinin daha etkin olarak karşılanabilmesi,
 Bileşendeki işlevlerin daha çabuk kavranabilmesi,
 İşlevlerin bağımsız konuşlandırılabilmesi ve lisanslanabilmesi,
 Yazılımcıların aynı modül içinde eş zamanlı çalışabilmesi.</p>
        <p>İşlev paketlerinin altında alt işlevler var ise onlar için de alt düzey paket yapısı
oluşturulması faydalıdır. Gün sonu işlemleri ve veri tabanı erişimleri için bir alt paket
bulundurulur.
4.2</p>
      </sec>
      <sec id="sec-3-4">
        <title>Tasarım Desenleri</title>
        <p>
          Tasarım desenleri, yaygınca tekrarlanan bir tasarım sorununu çözebilen yeniden
kullanılabilir çözüm kalıplarıdır [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ]. Bu özellikleri ile yazılım kalite metrikleri üzerinde
olumlu etkileri bulunmaktadır [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ]. Baştan belirlenmiş tasarım desenlerinin içerildiği
bir şablonun kullanılması, ilk beş tasarım prensibine uygun yazılım geliştirmeyi en
başta destekleyen bir etki yaratmaktadır. Bu prensipler, değişikliklere daha kolay uyum
sağlayabilen ve daha kolay bakımı yapılabilen yazılımlar geliştirebilmeyi hedefleyen
mimari odaklı prensiplerdir. İngilizce isimlerinin baş harfleri kullanılarak oluşturulmuş
S.O.L.I.D kısa adı ile anılırlar ve şu şekilde tanımlanırlar [
          <xref ref-type="bibr" rid="ref6 ref7">6,7</xref>
          ]:
 Tek Sorumluluk Prensibi (Single Responsibility Principle): Sınıflar tek bir işlevle
sorumlu olmalıdır.
 Açık/Kapalılık Prensibi (Open/Close Principle): Sınıflar genişlemeye açık
değişikliğe kapalı olmalıdır.
 Liskov Yerine Geçme Prensibi (Liskov Substition Principle): Somut sınıflar ana
sınıfın yerine davranışı farklılaştırmadan geçebilmelidir.
 Arayüz Ayrımı Prensibi (Interface Segregation Princible): Arayüzler ince olmalı, az
işlev tanımlamalıdır.
 Bağımlılıkların Ters Çevrilmesi Prensibi (Dependency Inversion Prensibi):
Bağımlılıklar soyutlamalar üzerinden tanımlanmalı, somut sınıflara dayanmamalıdır.
        </p>
        <p>Tablo 2’de yazılım kalite özniteliklerinin paket ve S.O.L.I.D prensiplerince nasıl
eşleştiğinin bir listesi sunulmuştur:</p>
        <p>Tablo 2. Kalite öznitelikleri ve S.O.L.I.D prensipleri eşlemeleri</p>
        <p>Paket Prensipleri
Genişletilebilirlik
Bakım yapılabilirlik
Ölçeklenebilirlik
ÇBP, DBP, DSP
YYP, GKP, GYP, ÇBP, DBP, DSP
S, O, L, I, D
Bu tasarım desenlerinin kullanımının, özellikle geç zamanlarda ortaya çıkan değişiklik
baskıları sonucunda yapılacak işlemlerde yan etkilerin azalması ve bu değişikliklerin
yönetiminin kolaylaşması yönünde yararlı olduğu gözlemlenmiştir.
4.3</p>
      </sec>
      <sec id="sec-3-5">
        <title>Referans Modeli</title>
        <p>Bileşen Paket Ayrıştırması. Referans Modelinin uygulandığı modül bileşenlerinin
paket prensiplerine uygun ayrıştırılması Şekil 2 ‘de verilmiştir. Paket ayrıştırılması zaman
içinde geliştirilen projelerde oluşturulmuş benzer ve ortak yapılar olarak belirlenmiştir.
Bu tür yapılar için yaygın örnekler aşağıda listelenmektedir:</p>
        <p>Şekil. 2. Bileşen paket bölümlemesi
 Fonksiyon / Alt Fonksiyon Paketi: Bileşende iş bakış açısı ile kendi içinde bütünlüğü
olan işlev gruplarıdır.
 Servis Facade: Bir fonksiyon / alt fonksiyon paketinin SYM’ye uyumlu olarak,
sistemin diğer bileşenlerine sunduğu servislerin kaynak kodda giriş noktalarının
sunulduğu paketlerdir.
 Kontrol: İşlevlerle ilgili gerekli kontrol mantıklarının içerildiği yapılardır. Bu
kontrol yapıları kurumdaki hemen hemen her uygulama modülünde bulunmaktadır.
Örnek olarak, verilerin doğruluk kontrolü gibi mantıklar burada kurgulanabilir.
 Hesaplama: İşlevlerle ilgili hesaplamaların içerildiği yapılardır. Uygulamalarda,
hemen her modülde hesaplamalarla ilgili mantıklar bulunmaktadır. Faiz hesaplamaları,
yatırım getiri hesaplamaları gibi bir takım özel hesaplamalar örnek olarak verilebilir.
 İşlem: İşlevlerle ilgili iş mantıklarının barındırıldığı yapılardır. Kredi başvuru işlemi
gibi örnekler verilebilir.
 Dönüşüm: Veri modellerinin oluşturulması ve başka bir modele dönüştürülmesi ile
ilgili yapılar.
 Model: İşlevlerle ilgili verilerin modellendiği yapılar.
 Gün Sonu: Bankacılık uygulamalarında, günün sonunda toplu iş görevleri
çalıştırılarak işlemler yaptırılır. Vadeli mevduat bitişlerinin belirlenerek faiz getirilerinin
hesaplara yatırılması örneği verilebilir.
 Veri Tabanı: İşlevlerle ilgili olarak veri tabanı tablolarına erişim sınıfları.
Önerilen Tasarım Desenleri. Referans modelinde belirlenmiş işlevler için belli başlı
tasarım desenlerinin kullanılması öngörülmektedir. Bu işlevlerde hangi desenin
kullanılacağı, zaman içinde geliştirilen projelerde oluşturulmuş çözümlerin incelenmesi ile
belirlenmiş ve referans modeli kapsamında genelleştirilmiştir. Bu sayede, referans
modelinin uygulamalarda kullanılabilecek hazır çözüm kalıpları şablonunu
oluşturduğundan bahsedilebilir.</p>
        <p>
          Aşağıda önerilen tasarım kalıplarının bir listesi verilmektedir:
 Bağımlılık enjeksiyonu (dependency injection-DI) ve kontrolün ters çevrilmesi
(Inversion of Control - IoC) desenlerinin kullanılması [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ]: Bağımlılıklar soyut sınıflar
(arayüzler) ile tanımlanarak azaltılır. Bağımlı olan nesneye bağımlı olunan nesne
çalışma zamanında geçirilmiş olur.
 Servislerin kaynak kodunda giriş noktalarının Facade tasarım örüntüsü ile sunulması
[
          <xref ref-type="bibr" rid="ref5">5</xref>
          ]: Bu örüntü tasarım ve iş mantığını gerçekleyen kaynak kodlarının
değiştirilmesini kolaylaştırmaktadır. Servis havuzunda değişiklik gerektirmez. Servisin hizmet
ettiği uygulamaları, kod ve tasarım iyileştirmeleri etkinliklerinin yan etkilerinden
korumaktadır. Her işlev paketi içinde bir service Facade kullanımı önerilir.
 Kontrol işlemlerinde Sorumluluk Zinciri (Chain of Responsibility-CoR) tasarım
deseni kullanılır [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ].
 Hesaplama işlemlerinde Dekoratör (Süsleyici/Decorator) tasarım deseni kullanılır
[
          <xref ref-type="bibr" rid="ref5">5</xref>
          ].
 İşlevsel gereksinimleri karşılayan işlemler için Dekoratör (Süsleyici/Decorator)
tasarım deseni kullanılır [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ].
 Veri modelini bir veri tipinden oluşturma veya veri modelleri arasındaki dönüşüm
işlemleri için Kurucu (Builder) tasarım deseni kullanılır [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ].
 Kontrol ve hesaplama işlemleri gibi sınıfların yaratılması için Fabrika tasarım deseni
(Factory) kullanılır [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ].
 Veri tabanı erişimi için Uyarlayıcı (Adapter) tasarım deseni kullanılır [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ].
Uyarlayıcılar veri tabanına yazma ve veri tabanından okuma uyarlayıcıları olarak
çeşitlendirilir. Uyarlayıcılar kullanılarak yazılım veri tabanından soyutlanabilmektedir.
Tablo 3’te referans modelinde kullanımı belirlenen tasarım desenlerinin S.O.L.I.D
prensipleri açısından bir değerlendirilmesi sunulmuştur:
        </p>
        <p>Tablo 3. Referans Model’de önerilen tasarım deseninin karşıladığı S.O.L.I.D prensibi
Önerilen Tasarım Deseni
Bağımlılıkların enjeksiyonu ve IoC
Facade
Sorumluluk Zinciri
Dekoratör
Fabrika
Builder
Uyarlayıcı
S, O, L, I, D
S, O, L, I, D
S, O, I, D
S, I, D</p>
        <p>S, I, D
5</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Uygulamada Referans Modelinin Değerlendirilmesi</title>
      <p>Bu çalışmanın yön verildiği kurumda, bir alandaki iş modüllerine ait bileşenlerde alt
düzey tasarım etkinlikleri için referans modeli uygulama süreci son birkaç senedir
devam etmektedir.</p>
      <p>Üst düzey tasarım çalışmasında eski bileşenlerde yazılım geliştirilmesine karar
verildiğinde referans modeli bu bileşenlerde uygulanmaya başlanmış ve kalıtımsal
yollarla aktarılan kodlara yeniden yapılandırma (refactoring) çalışması yapılmıştır. Yeni
bir bileşen yaratıldığında ise bileşende kalıtımla aktarılan kod bulunmadığından
referans modeli en baştan uygulanmıştır.
5.1</p>
      <sec id="sec-4-1">
        <title>Yazılım Kalite Ölçüt Analizi:</title>
        <p>
          Yazılımın kalitesi, önceden belirlenerek ölçülen özelliklere göre değerlendirilir [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ].
Kurumda belirlenmiş ölçütler kapsamında, bir kod kalite analiz aracı olan SONAR
kullanılarak yazılımların ölçümlemesi yapılmaktadır.
        </p>
        <p>Türev Teminat projesi kapsamında, Risk modülünde referans modeli uygulanmaya
başlanmıştır. Projenin geliştirilmesinden önceki Risk modülündeki yazılım kalite ölçüt
değerleri, referans modeli uygulanarak geliştirilen proje sonrasındaki değerler ile
karşılaştırılmıştır. Referans modeli kullanımının yazılım kalite ölçüt değerlerindeki etkisi
Tablo 4’te özetlenmiştir:</p>
        <p>Tablo 4. Yazılım kalite ölçüt analizi
Ölçüt
Kaynak kod satır sayısı
Sınıf sayısı
Sınıf kod satır sayısı
McCabe karmaşıklık ölçütü
McCabe sınıf karmaşıklık ölçütü
Paket çevrimleri</p>
        <p>Etki
Artış
Artış
Azalma
Azalma
Azalma</p>
        <p>Sayısal değişim (%)
15.82
Paket bağımlılıkları
Paket çevrim sayısı
Bulgu sayısı
Tabloya göre kaynak kod satır sayısında artış olmasına rağmen, sınıf kod satır
sayısında, karmaşıklık değerlerinde, paket çevrim sayılarında ve bulgu sayılarında azalma
görülmektedir. Sınıf sayısının artması ve sınıf kod satır sayısının az olması sınıfların
S.O.L.I.D prensipleri olan ‘Tek Sorumluluk Prensibi’ ve ’Arayüz Ayrımı Prensibi’ ile
uyumludur. Sınıf kod satır sayısının, karmaşıklıkların, paket çevrim ve bağımlılıkları
sayılarının az olması durumunda bakımı daha kolay yapılabilir ve modüler bir
yazılımdan söz edilebilir.</p>
        <p>Bulgu sayısındaki azalma ve teknik borç yaratılmama ölçütü ise, referans model
kullanımı ile hata üretme oranının azaldığı konusunda bir fikir vermektedir.
Sektör genelinde bankalarda ortak fon altyapısına geçiş projeleri geliştirilmiştir.
Projeler Türk Lirası (TL) Fonu Geçişi ve Yabancı Para (YP) Fonu işlevlerinin eklenmesi
projeleri olarak iki fazda planlanmıştır.</p>
        <p>TL Fon Geçiş Projesinde, mevcutta sistemde olan TL Fonu modülü referans modeli
uygulanarak ortak fon yapısına geçirilmiştir. Bu kapsamda müşteriye yatırım fonu alış
ve satış akışının yönetildiği modüller üzerinde referans modeli ile uyumlu bir kod ve
veri tabanı modeli oluşturulmuştur.</p>
        <p>YP Fonu Geçiş Projesinde, ilk proje kapsamında referans modeli uygulanarak
geliştirilmiş olan Fon Modülü üzerinde, referans modelinin kullanımı devam ettirilerek
YP fon işlevleri ortak fon yapısı için geliştirilmiştir. Yabancı Para Fonu projesi, TL
fonu projesinin aksine tamamen referans modeli uygulanmış bir modül üzerinde
geliştirilmiştir.</p>
        <p>Tablo 5’te, iki projede yakın sayılarda ekran ve tablo etkisi olmasına rağmen,
yabancı para fonu geçişinin daha az maliyetle gerçekleştiği görülmektedir.</p>
        <p>Tablo 5. Proje Maliyet Karşılaştırması
Maliyet (Adam/Gün)</p>
        <p>Ekran sayısı</p>
        <p>Veritabanı tablo sayısı
Proje
TL Fon projesi
YP Fon Projesi
960
320
24
21
18
14
5.3</p>
        <p>İşlevsel Olmayan Gereksinimlerin Karşılanması:
İşlevsel olmayan gereksinimlerin referans modeli tarafından karşılanması iki
yöntemle incelenebilir:
1. Tablo 1’de işlevsel olmayan gereksinimlerin kalite öznitelikleri ile ilişkisi
verilmiştir. Tablo 2 ve Tablo 3’te bahsedilen kalite özniteliklerinin referans modelinin temel
aldığı prensipler tarafından karşılanmasına yer verilmiştir. Bu kapsamda, işlevsel
olmayan gereksinimlerin referans modeli ile karşılanmasının etkisi tablolar
değerlendirilerek yapılabilir.
2. Tablo 4 ve Tablo 5’te verilen analizler bakımından uygulamada referans modelinin
işlevsel olmayan gereksinimlere etkisi değerlendirilebilir.</p>
        <p>Aşağıda bu değerlendirmelere yer verilmiştir:
 Başarım/Yük Oranı: Tablo 4’te verilen bulgu sayısının azalmasına bağlı olarak
sistemin kullanılabilirliğinde artış olmaktadır. Servislerin daha az hatalı çalışmasına
bağlı olarak sistemin başarım oranında artış gözlemlenebilir.
 Gereksinimlerin sık değişmesi: Tablo 1, Tablo 2 ve Tablo 3’ten yola çıkılarak
referans modelinin sık değişen gereksinimleri ele alma konusunda olumlu etkisi olduğu
söylenebilir. Tablo 4 sonuçları için yapılan değerlendirmeler bağlamında, referans
modeli daha kolay bakımı yapılabilir bir sistem oluşturulması sağlamaktadır. Bu
kapsamda, değişikliklerin yapılması kolaylaşmaktadır.
 Pazara çıkma süresinin kısalığı: Tablo 1, Tablo 2 ve Tablo 3’ten yola çıkılarak
referans modelinin pazara çıkma süresinin kısalmasında olumlu etkisi olduğu
söylenebilir. Tablo 5’te sunulan sonuçlara bağlı olarak, referans modeli kullanımı ile sürenin
kısaldığı görülmektedir. Yazılım kalite ölçüt analizindeki değerlendirmeler
kapsamında, yapılan geliştirme ve değişikliklerin belli bir alanı etkilediğinden
bahsedilebilir. Bu hem geliştirme hem de test süresinde kısalma sağlamaktadır.
 Gelişen sistem: Tablo 1, Tablo 2 ve Tablo 3’ten yola çıkılarak referans modelinin bu
gereksinimi karşıladığı söylenebilir.
5.4</p>
      </sec>
      <sec id="sec-4-2">
        <title>Gözlemlenen Kazanımlar:</title>
        <p>Referans modelinin kullanımı yazılımlarda belli prensiplerin uygulanmasını zorunlu
hale getirmektedir. Bu zorunluluk ile birlikte şu görünen kazanımları elde ettiğimizden
bahsedebiliriz:
 Yordamsal kodların sayısı azalmaya başlamıştır. Tablo 4’teki sınıf sayısının artması
ve sınıf kod satır sayısının azalması bu konuda bir gösterge olarak düşünülebilir.
Bununla birlikte, yazılımcılarda yapısal düşünme, yukarıdan aşağıya tasarım bakış
açısı ve tasarım desenleri kullanım becerilerinin gelişmekte olduğu
gözlemlenmektedir.
 Bileşenler içinde yeniden kullanılabilir sınıflar oluşmaktadır. Tablo 5’teki
değerlendirmeleri temel alarak, referans modeli oluşturulduktan sonra geliştirilen proje, ilk
projedeki bazı sınıfları kullanarak üretim ortamına geçiş sürecini hızlandırmıştır.
 Kodların daha kolay anlaşılabildiği ve tasarımın koddan daha kolay saptanabildiği
gözlemlenmektedir. Tablo 4’teki kalite ölçütlerindeki iyileşmeler bu gözlemi
desteklemektedir. Çevik süreçlerin uygulandığı ve sürdürülen detaylı dokümantasyonun
olmadığı kurumda bakım süreçleri kolaylaşmaktadır. Hatalara neden olan kod
blokları, hata ayıklayıcı program daha az kullanılarak ve daha kısa sürede tespit
edilebilmektedir.
 Yeni geliştirmelerin çok büyük bir kod bloğundaki iş akışını dikkate almaya gerek
kalmadan gerçeklenebildiği ve yazılımın daha kolay genişletilebildiği
gözlemlenmektedir. Daha az yan etki üreten kod geliştirmenin kolaylaşmasına bağlı olarak,
bulgu sayılarının ve etki testi yapılma süresinin azaldığı gözlemlenmiştir. Tablo
4’teki kalite ölçütlerindeki iyileşmeler ve Tablo 5’teki süreler bu gözlemi
desteklemektedir.
6</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Geçiş Sürecinin Yazılımcılar Üzerindeki Etkileri</title>
      <p>Yeni bir modele geçişin yazılım geliştirme kültüründe değişiklik ve yeni konuların
öğrenilmesi ihtiyaçlarını zorladığından, benimsenmesinin zaman aldığından
bahsedilebilir.</p>
      <p>Organizasyonda uzun yıllardır çalışan yazılımcılar için modele uyum sürecinde
başlangıçta zorluklar gözlemlendiği söylenebilir. Pazara çıkma zaman baskısının da etkisi
ile alışılageldik şekilde yazılım geliştirme yaklaşımının daha hızlı bir çözüm olarak
kabul görmesi, geçiş sürecinin daha uzun zamanda gerçekleşmesine neden olmaktadır.</p>
      <p>Organizasyona yeni katılan yazılımcıların referans modelini uygulamalarının, alt
düzey tasarım etkinliklerine daha kolay uyum sağlamalarında yardımcı olduğu
söylenebilir. Bununla birlikte, idame ettirilmekte olan ve kalıtımla aktarılmış kodların etkisi
onlarda da gözlemlenmektedir.</p>
      <p>Zaman içerisinde referans modelinin kullanılmasının devam ettirilmesi ve
kalıtımsal yolla aktarılan kodların azalması ile birlikte referans modelinin daha etkin
kullanılmaya başlandığından söz edilebilir.
7</p>
      <p>İlgili Çalışmalar
Çalışmanın kapsamında sunulan referans modelinin kullanımı ile hem eski sistemlerin
alt düzey mimari eksikliklerinin tamamlanması hem de yeni tasarlanacak sistemlerde
alt düzey tasarım etkinliklerinin uygulanması hedeflenmektedir. Referans modeli, bu
hedefe yazılım prensipleri ve tasarım desenlerinin belirlendiği şablon bir model sunarak
ulaşmaya çalışmaktadır.</p>
      <p>Yeniden yapılandırma çalışmaları, sistemlerin yeniden tasarlanması veya eski
sistemden tersine mühendislik yöntemi ile yeniden yapılandırma olarak
gerçekleştirilebilmektedir.</p>
      <p>
        Eski sistemlerin yeniden yapılandırma sürecine yönelik olarak, referans modelinin
ele aldığı gibi tasarım desenleri kullanılarak ileri doğru yeniden yapılandırma
yaklaşımını kullanmakta olan savunma ve medikal gibi farklı sektörlere ait çalışmalar
bulunmaktadır [
        <xref ref-type="bibr" rid="ref10 ref11 ref12 ref9">9, 10, 11, 12</xref>
        ]. Yeniden yapılandırma çalışmalarında tasarım desenleri
kullanımlarının yazılım kalitesini olumlu yönde etkilediği ile ilgili çalışmalar da
bulunmaktadır [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. Bu çalışmalarda yazılımların genişleyebilirlik ve bakım yapılabilirlik
özellikleri vurgulanmaktadır. Diğer yandan, tersine mühendislik yöntemi kullanılarak,
yordamsal kodlardan nesneye yönelik kodları üretebilen çalışmalardan da
bahsedilmektedir [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ].
      </p>
      <p>Referans modeli, yeniden yapılandırma çalışmalarının yanı sıra sıfırdan
geliştirilecek yazılımlar için de alt düzey mimari etkinliklerinin yapılmasını sağlayabilecek bir
model olarak önerilmesi açısından bu çalışmalardan farklılık göstermektedir.
8</p>
    </sec>
    <sec id="sec-6">
      <title>Sonuç ve Gelecek Çalışmalar</title>
      <p>Alt düzey tasarım etkinliği, sistemin kalite gereksinimlerini karşılamakta önemli bir
etmendir. Daha esnek ve yeniden kullanılabilir yapı taşlarının kullanılması ile
desteklenmektedir.</p>
      <p>Kurumsal sistem yeniden yapılandırma sürecinde alt düzey tasarım etkinliklerinin
ötelenmesi, yaşayan sistemde birçok olumsuz yan etki yaratmaktadır.</p>
      <p>
        Alt düzey tasarım etkinliklerinin gerçeklenmesi için bir referans modelinin
kullanımı süreci kolaylaştırmaktadır. Önerilen referans modeli, Paket ve S.O.L.I.D [
        <xref ref-type="bibr" rid="ref6 ref7">6,7</xref>
        ]
prensipleri ile belli başlı tasarım desenleri [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] kullanımını temel almaktadır.
      </p>
      <p>Referans modelinin kullanıldığı iş modülünde pazara çıkma zamanında kısalma,
değişen gereksinimlere hızlı uyum sağlayabilme ve hataların daha az yan etki ile
çözülebilmesi kazanımları olmuştur. Yaşayan sistem için de kurum kültürünün oluşmasında
olumlu etkisi bulunmaktadır.</p>
      <p>Referans modelinin kullanımı, kalıtımsal yollarla aktarılan yordamsal kodlara
dayanan sistemler için bir dönüşüm süreci gerektirir. Yeni kurulan bir sistemde kodlar
sıfırdan yazıldığından modelin kullanımına uyum göreceli olarak daha kolay olmaktadır.</p>
      <p>Mevcut süreçte modele uyum, tasarımcıların kontrolü ve yönlendirmesine
bağımlıdır. Kişiye bağımlılığın azaltılması amacı ile modelin otomasyona geçirilmesi
gelecekte planlanabilir. Model şablonunu oluşturarak bileşenler içinde kullanılmasını
sağlayan bir yazılım, tasarımcılar üzerindeki yükü hafifleterek zaman kazanılmasına
yardımcı olabilir. Yazılımcıların modele uyum yeteneklerini kendi başlarına
geliştirmelerine olanak sağlayabilir.</p>
      <p>Referans modeli, kurumda oluşan gereksinimden geliştirilmiş ve uygulanmış bir
modeldir. Ancak, kapsadığı nitelikler ile diğer sektörlerde de uygulanabilme potansiyeline
sahiptir. Bu bağlamda gelecek çalışma konuları olarak, modelin diğer sektörlerde
uygulama denemelerinin yapılarak sonuçların karşılaştırılması değerlendirilebilir.</p>
    </sec>
    <sec id="sec-7">
      <title>Kaynakça</title>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1. https://www2.deloitte.com/content/dam/Deloitte/global/Documents/About-Deloitte/
          <article-title>central-europe/ce-digital-banking-maturity-study-emea</article-title>
          .
          <source>pdf?nc=1</source>
          , son erişim
          <year>2018</year>
          /09.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>O</given-names>
            <surname>'Brien</surname>
          </string-name>
          <string-name>
            <given-names>L.</given-names>
            ,
            <surname>Bass</surname>
          </string-name>
          <string-name>
            <given-names>L.</given-names>
            ,
            <surname>Merson</surname>
          </string-name>
          <string-name>
            <given-names>P.</given-names>
            : Quality Attributes and
            <surname>Service-Oriented</surname>
          </string-name>
          <string-name>
            <given-names>Architectures</given-names>
            , CMU/SEI
            <surname>-</surname>
            2005-
          </string-name>
          TN-014.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Kaur</surname>
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sing</surname>
            <given-names>H.</given-names>
          </string-name>
          :
          <article-title>An Analytical Review of Quality Attributes of Service-Oriented Architecture, Trends in Information Management (TRIM)</article-title>
          , ISSN:
          <fpage>0973</fpage>
          -
          <lpage>4163</lpage>
          , pp.
          <fpage>40</fpage>
          -
          <lpage>50</lpage>
          , (
          <year>2014</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4. https://martinfowler.com/articles/injection.html. ,
          <source>son erişim</source>
          <year>2018</year>
          /09.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Gamma</surname>
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Helm</surname>
            <given-names>R.</given-names>
          </string-name>
          , Johnson R., and Vissides J.: Design Patterns:
          <article-title>Elements of Reusable Object-Oriented Software</article-title>
          ,
          <string-name>
            <surname>Addison-Wesley</surname>
          </string-name>
          ,
          <year>1995</year>
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>Design</given-names>
            <surname>Principles Page Papers by Bob Martin</surname>
          </string-name>
          , http://condor.depaul.edu/dmumaugh/OOT/Design-Principles,
          <source>son erişim</source>
          <year>2018</year>
          /11.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7. http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod, son erişim
          <year>2018</year>
          /10.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8. IEEE, '
          <article-title>Standards for a Software Quality Metrics Methodology'</article-title>
          , P-1061-1998 (
          <issue>R2009</issue>
          ), IEEE Press, New York,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Barkataki</surname>
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Harte</surname>
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dinh</surname>
            <given-names>T.</given-names>
          </string-name>
          ,
          <article-title>Reengineering A Legacy System Using Design Patterns</article-title>
          and Ada-95
          <string-name>
            <surname>Object-Oriented</surname>
            <given-names>Features</given-names>
          </string-name>
          , http://www.sigada.org/conf/sa98/papers/barkataki.pdf,
          <source>son erişim 2018/11</source>
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <article-title>Re-engineering Legacy Code with Design Patterns:A Case Study in Mesh Generation Software</article-title>
          ,https://pdfs.sematicscholar.org/1aa8/ba2e3cd596f3c501e0966530ab24c6bb190e.pdf,
          <source>son erişim</source>
          <year>2018</year>
          /11.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Jung-Eun</surname>
            <given-names>Cha</given-names>
          </string-name>
          , ChulüHong Kim,
          <string-name>
            <surname>Young-Jong</surname>
            <given-names>Yang</given-names>
          </string-name>
          ,
          <article-title>Architecture Based Software Reengineering Approach for Transforming from Legacy System to Component Based System through Applying Design Patterns</article-title>
          , International Conference on Software Engineering Research and Applications, SERA 2003:
          <article-title>Software Engineering Research</article-title>
          and Applications pp
          <fpage>266</fpage>
          -
          <lpage>278</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <article-title>Usability of Software Architecture Design Pattern in Medical Process Re-engineering Model</article-title>
          , http://www.ijaiem.org/Volume2Issue6/IJAIEM-2013
          <string-name>
            <surname>-</surname>
          </string-name>
          06-26-084.pdf,
          <source>son erişim</source>
          <year>2018</year>
          /11.
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <article-title>On the Role of Design Patterns in Quality-Driven Re-engineering</article-title>
          , http://www.stargroup.uwaterloo.ca/pubs/conf/Tahvildari_et_al_CSMR02.pdf,
          <source>son erişim</source>
          <year>2018</year>
          /11.
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>A SURVEY OF OBJECT IDENTIFICATION IN SOFTWARE</surname>
          </string-name>
          RE-ENGINEERING, http://www.sis.uta.fi/cs/reports/pdf/A-1998
          <article-title>-6</article-title>
          .pdf,
          <source>son erişim</source>
          <year>2018</year>
          /11.
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <article-title>A Quality Model for Design Patterns</article-title>
          , https://www.researchgate.net/publication/249885094_A_Quality_Model_for_Design_Patterns, son erişim
          <year>2018</year>
          /11
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>