Photo by Mr TT on Unsplash

Yazılım Mimarisi

Yazılım Mimarisi Nedir ?

Yazılım Mimarisinin ne olduğunu Peter Eeles Yazmış olduğu What’s Software Architecture yazısının üzerinden notlar alarak özetlemeye çalışacağım.

--

Yazılım Mimarisi başlığı altında Mimari Kavramlar, Mimari Deneyim, Mimari Kalite, Mimari Örüntüler, Tasarım Örüntüler, Anti-Patterns yazı dizileri yazıyorum. Ama yazılım mimarisinin ne olduğundan bahsetmediğimi farkettim.

Bu konuda yazılmış yazıları incelediğimde Peter Eeles Yazmış olduğu What’s Software Architecture yazısının oldukça açıklayıcı ve doyurucu olduğunu gördüm. Bu blog yazısı üzerinden çeviriler ve notlar alarak bu konuyu kendi perspektifimden anlatmaya çalışacağım.

Yazılım Mimarisi Yazı Dizisi

1. Giriş

Cep telefonunda, televizyonlarda, şehirdeki trafik ışıkları, metrolar ve yaşam alanlarında, savunma sistemlerinde, okulda, havalimanlarında, uzay mekiklerinde, uzay araçlarında yani özetle hayatımızın her alanında, her işletmenin merkezinde yazılımın yer alıyor. Endüstri 4.0 ile birlikte giderek kapsadığı alanında genişletecek. Hal böyleyken birbiri ile çalışabilen büyük sistemlerin oluşturulabilmesi için, yazılımların, sistemlerin, ekiplerin belli bir düzen ve disiplinde çalışabilmesi gerekiyor. İşte burda Yazılım Mimarisi devreye giriyor.

Şehirler, şirketler ve yazılımı yaşamlarının önemli bir parçası olarak kullanan organizasyonlar; gelişen teknoloji ve yeni gereksinimlere ayak uydurabilecek şekilde yazılımlarını güncellemeli, bunu yaparken mevcut sistemi bozmadan, kaliteyi koruyarak, kabul edilebilir bir harcama ile bunu gerçekleştirmelidir.

Tüm bu bahsedilen konular bu yazıda bahsedeceğimiz Yazılım Mimarisinin karakteristiklerini oluşturan temel gereksinimlerdir. Burada her ne kadar yazılımdan (Software) bahsetsekte. Yazılım belirli bir kalitede, güvenilir , performanslı, güvenlikli olabilmesi için üzerinde çalışacağı donanım ile uyumuna bağlıdır. Burada devreye para/maliyetlerde girdiği için elinizde sınırsız kaynak varmış gibi düşünmemeniz gerekir. İhtiyaçlarınız doğrultusunda en optimum sonuçları alacak şekilde yazılım ve donanımı bir araya getirmelisiniz.

2. Yazılım Mimarisi Tanımı

Mimari

Architecture is the fundamental organization of a system embodied in its components, their relationships to each other, and to the environment, and the principles guiding its design and evolution. [IEEE 1471]

Mimari, sistemin temel organizasyonuna ait somutlaşmış bileşenlerinin birbirleriyle, çevreleri ile ilişkilerinde, tasarımına ve gelişimine yol gösteren prensiplerdir.

Sistem

A system is a collection of components organized to accomplish a specific function or set of functions. The term system encompasses individual applications, systems in the traditional sense, subsystems, systems of systems, product lines, product families, whole enterprises, and other aggregations of interest. A system exists to fulfill one or more missions in its environment. [IEEE 1471]

Sistem, belirli bir işlevi veya bir dizi işlevi gerçekleştirmek için düzenlenmiş bir bileşen grubudur …

Çevre

The environment, or context, determines the setting and circumstances of developmental, operational, political, and other influences upon that system. [IEEE 1471]

Çevre veya bağlam, sistem üzerindeki gelişimsel, operasyonel, politik ve diğer etkilerin ortamını ve koşullarını belirler.

Bileşen

[A component is] a modular part of a system that encapsulates its contents and whose manifestation is replaceable within its environment. A component defines its behavior in terms of provided and required interfaces. As such, a component serves as a type, whose conformance is defined by these provided and required interfaces (encompassing both their static as well as dynamic semantics) [UML 2.0]

Sistemin oluşturan modüler parçalarıdır. Kendi içeriklerini tutarak belirli arayüzler üzerinden birbirleri ile iletişim kurarlar.Bu arayüzler üzerinden belli davranışlar sergilerler ve tuttukları içerikleri değiştirirler.

3. Yazılım Mimarisi Yapıyı (Structure) Belirler

Mimari dediğimizde çoğu kişinin aklına kağıtların üzerine çizilmiş yapılacak yapının temel bilgileri aklına gelir. Örneğin bir ev için aşağıdaki şekilde girişin nerden olacağı, odaların büyüklükleri , ne amaçla tasarlandığı vs… vs..

Ev Planı

Yazılım Mimarisinde’de aynısı her yazılımcının anlayacağı bazı standart çizimler dili mevcuttur. UML (Unified Modeling Language) kullanarak aşağıdaki elemanları kullanarak bu yapıyı oluşturmaya çalışır.

  • subsystem, (Alt-sistem)
  • a process,
  • a library, (kütüphane)
  • a database, (veritabanı)
  • a computational node, (işlemci düğüm)
  • a legacy system, (kullanılan mevcut sistem)
  • off-the-shelf product, (hazır alınmış ürün)

Yapısı(Structure) sadece elemanların tek tek havada durması değil, birbirini kapsayarak daha büyük bileşenler oluşturması veya birbirleri ile belli arayüzler aracılığı ile iletişiminin olduğununda gösterilmesi içerir. Bu iletişim nasıl olacağı, tek/çift yönlü , sync/async vb.. detaylarıda içermelidir.

https://www.ibm.com/developerworks/rational/library/feb06/eeles/index.html (Structure)

4. Yazılım Mimarisi Davranışı (Behavior) Belirler

Bir önceki mimarinin yazılım bileşenlerinin yapısını ve bunlar arasındaki iletişimi, etkileşimi gösterdiğinden bahsetmiştik. Bileşenler ve çevre yazılımlar bu etkileşimi sistemin istenilen davranışı sağlayabilmesi için gerçekleştirir. UML Sequence Diagram’da bileşenlerin bir işi yapabilmesi için hangi sıra ile birbirleri ile etkileşimi gireceğinin bilgisi verilir. Mimari aynı zamanda üst seviye davranışı da belirlemesi gerekir.

https://www.ibm.com/developerworks/rational/library/feb06/eeles/index.html (Behavior)

5. Yazılım Mimarisi Önemli Elemanlar Üzerine Odaklanır

Yazılım Mimarisi sistemin yapısını ve davranışını tanımladığını söylemiştik. Burada kastedilen tüm detaylı yapısı ve tüm detaylı davranışları değildir. Mimari demek sisteme belli bir soyutlama yaparak bakmak demektir. Önemli, temel elemanlar ile davranışları ortaya çıkararak detaylarda boğulmamaktır. Bu ayrımı nasıl yapacağınıza gelirsek;

  • Bileşenleri belirli büyüklüklerde detaya girmeden tanımlamak gerekiyor ki dışarıdan bakıldığında anlaşılsın, ve bileşenleri ilerleyen süreçlerde değiştirmek gerekmesin.
  • Davranışları iş akışlarını üst seviye tanımlamalı ki bu detaylardaki değişikliklerden etkilenmesin.
  • Mimaride’de tanımlanması gereken bileşenler, bunları birbirleri ile olan iletişimlerinin kalitesi, güvenilirliği, ölçeklendirebilirliği, güvenliği, güvenilirliği, performansı gibi önemli değerleri olmalıdır.

Özetle Mimari , mimarın sistem tüm detaylarından kendisinden soyutlayarak karmaşıklığı yönetmesini sağlayan bir araçtır.

Burada önemli öğeler kümesi hiç değişmeyecek anlamına gelmiyor.

  • İhtiyaçlar iyileştirilmesi
  • Risklerin tanımlanması
  • Çalıştırılabilir yazılımların oluşturulması
  • Ve bunlardan alınan derslerden

dolayı bu önemli unsurlar değiştirebilir. Burada mimarinin bu ciddi değişikliklere karşı ufak revizeler ile ilerleyebiliyor olması iyi bir mimariye kararlı bir yapıya sahip olduğunun göstergesidir.

6. Yazılım Mimarisi Paydaşların İhtiyaçlarını Dengeler

Yazılım mimarisi paydaşların ihtiyaçlarını karşılamak için oluşturulur.

  • Son kullanıcı sistemin doğru davranışı, performansı, güvenilirliği , kullanabilirliği, erişilebilirliği ve güvenliği ile ilgilenir.
  • Sistem yöneticisi, sistemin davranışı, yönetimi ve takibi için gerekli olan araçlarla ilgilenir.
  • Pazarlama ve Market çalışanları diğer ürünlere göre rekabetçi özellikler, zamanında markette yer almak , diğer ürünlere göre pozisyonu ve maliyetle ilgilenir.
  • Müşteri maliyet, ölçeklenebilirlik ve program/plan ile ilgilenir.
  • Yazılım Geliştiriciler açık gereksinimler, basit ve tutarlı tasarım yaklaşımları ile ilgilenir.
  • Proje yöneticisi tahminlenebilir takip edilebilir bir proje , proje planı, kaynakların üretkenliği ve bütçe ile ilgilenir.
  • Bakım ile uğraşan çalışanlar anlaşılır, tutarlı ve belgelenmiş tasarım yaklaşımı ve kolay değişiklik yapabilmeyle ilgilenir.

Bu ihtiyaçlar her zaman her paydaşın istediği gibi olamaz. Birisinin ihtiyacı henüz başka bir nedenden diğer bir paydaşın ihtiyacının tanımlanmasını engelliyor olabilir. Veya ihtiyaçlar birbirleri ile çelişiyor/çakışıyor olabilir.

Mimari paydaşların birbirleri ile anlaşabilmesi için ihtiyaç dengelemesini gerçekleştirir. İhtiyaçlar her zaman fonksiyonel olmaz, hatta fonksiyonel olmayan gereksinimler tüm sistemi etkileyen kalite, sınırlandırmalar ele almak fonksiyonel gereksinimlerden çok çok daha zordur. Mimar’ın özellikle üzerinde durması ve ayrıntılı hale getirmesi gerekenler bu özelliklerdir.

7. Mimari Mantığa Dayalı Kararları Bünyesinde Barındırır

Mimari kesin sonuç anlamına gelmez. Neden bu şekilde tasarlandığına, karar alındığına dair mantıkların, gerekçeleri içeren bilgiler ve belgeler bütünüdür.

Bu bilgiler, özellikle sistemin bakımını yapanlar olmak üzere birçok paydaşla ilgilidir. Bu bilgiler, alınan kararların ardındaki mantığı yeniden gözden geçirmesi ve değerlendirilmesi oldukça önemlidir. Zaten yazılımın ilerleyen süreçlerinde mimarinin sürekli olarak değişmemesi bu mantıksal kararlardan kaynaklanacaktır.

8. Mimari Oluştururken, Mimari Stile Uyabilir.

Çoğu mimari, benzer endişeleri paylaşan sistemlerden türemiştir. Bu benzerliklere Mimari Stiller diyebiliriz. Mimari stil geçmiş sistem deneyimlerinden öğrenilmiş ,edinilmiş örüntülerde diyebiliriz.

Bu örüntüler belli yapı ve davranışı sağlayan sistemlerin ortak uyması gereken prensipleri belirleyen yöntemleri tanımlamıştır. Mimar bu örüntüleri bilip , geliştirdiği sistemin hangi örüntüye uyduğunu bulursa, daha önceden karşılaşılmış sorunların nasıl çözümleneceği, hangi en iyi yöntemleri kullanacağı bu örüntülerde anlatıldığı için işleri kolaylaşacak, hata yapma olasılığı ve yanlış yönde gitme durumu ortadan kalkacaktır. Bundan dolayı bir Mimar’ın bu örüntüleri içselleştirebilmesi oldukça önemlidir.

9. Yazılım Mimarisi Çevresinden Etkilenir

Mimari çevresinden etkilenir. Çevresi sistemin sınırlarında diğer hangi sistemler ile etkileşimde olacağını belirlediği için mimariniz çevrenizdeki sistemler ile uyumlu çalışması durumunda anlamlı hale gelecektir. Bu uyumluluklar mimariye bir çok ekstra iş ve zorluk çıkarabilir.

Mimariyi Etkileyen Çevresel Faktörler;

  • Organizasyon standartlarına uyma
  • Harici Teknik Kısıtlamalar Örn: Harici bir arayüzle arayüz oluşturmak ihtiyacı
  • Sistem ve Harici düzenleyici standartlara uyma.

Bunun yanında sizin geliştirmiş olduğunuz Mimari’de çevreyi etkileyebilir ve değiştirebilir. Örneğin ortak , tekrar kullanabilir bileşenler sayesinde çevredeki bazı bileşenlere ihtiyaç kalmayabilir, ortamın teknolojisini daha ileriye götürmeye zorlayabilir. Buradan da anlaşılacağı gibi çevre ve mimari birbirini etkileyen yapılardır.

[A system is] a set of resources that provide services that are used by an enterprise to carry out a business purpose or mission. System components typically consist of hardware, software, data, and workers

Sistem bir grup kaynak tarafından işletmenin belli bir amaç ve misyonu için servis sağlamasıdır. Sistem bileşenleri de donanım, yazılım, veri ve çalışanlardan oluşur.

Sistem Mühendisliği alanında bu kaynakların nasıl kullanılacağı maliyet-performans analizleri yapılarak karşılaştırılır. Örneğin çok zor yapılacak bir işiniz olsun, bunu Donamıma para koyarak yapabilirsiniz en pahalısı bu olacaktır belki ama en performans sağlayanıda bu olacaktır. Donanımdan feragat ederek bunu yazılım ile çözebilirsiniz, hazırını alabilirsiniz veya kendi ekibinize geliştirtebilirsiniz gibi

10. Yazılım Mimarisi Ekip Yapısını Etkiler

Yazılım Mimarisi ana bileşenleri oluştururken bunlar ile uyumlu birbirinden farklı ekiplerde oluşturur. Bunların farklı disiplinlerde, farklı yetenek setlerine , farklı son kullanıcılara sahip olması bu ayrışmaya neden olur. Conway Yasasından bahsederken bu konuyu anlatmıştım. Örneğin bir sistem için mimari doğrultusunda aşağıdaki gruplar ortaya çıkabilir.

  • sipariş işleme sistemi ,
  • sipariş girişi,
  • hesap yönetimi,
  • müşteri yönetimi, harici sistemlerle entegrasyonlar,
  • kalıcılık(persistency) ve güvenlik altyapı

11. Mimariyi Belgelemenin Önemi

Mimari resmi olarak belgelenmese veya sistem son derece basit ve örneğin tek bir unsurdan oluşsa bile, her sistemin bir mimarisi vardır.

Belgelenmiş mimariler, mimariyi kaydetme süreci doğal olarak fikirleri değerlendirmeye yol açtığından, daha dikkatli bir şekilde değerlendirilme yapılır.

Mimari belgelenmemişse, sürdürülebilirlik, en iyi uygulamaların uyumlulaştırılması ve benzeri gibi nitelikleri ele alma açısından belirtilen gereksinimleri karşıladığını kanıtlamak zordur. Belgelenmemiş, bugün var olan çoğunluk gibi görünen mimariler, tesadüfidir

12. Mimarinin Belirli Bir Kapsamı Vardır

Yazılım mimarisi farklı farklı mimarileri içerir. Örneğin;

  • Yazılım (Software) Mimarisi : Yukarıda yazılım için bahsettiğimiz kapsamları ele alır.
  • Kurumsal (Enterprise) Mimari: işlemci, bellek, sabit disk, dış cihazlar , yazıcılar, ağ elemanları ve bunların birbirleri ile fiziksel bağlantılarını ele alır.
  • Sistem (System) Mimari: iş süreçleri , organizasyonel, roller ve sorumlulukları ve kuruluşun temel yetkinliklerini ele alır.
  • Organizasyon (Organization) Mimari,
  • Bilgi (Information) Mimarisi,
  • Donanım (Hardware) Mimarisi,
  • Uygulama (Application) Mimarisi,
  • Altyapı (Infrastructure) Mimarisi,

Tüm bu mimariler farklı farklı kapsamlarda ve bakış açıları ile mimariyi ele alırlar.

https://www.ibm.com/developerworks/rational/library/feb06/eeles/index.html#notes. (Scope)

Referanslar

Okumaya Devam Et 😃

Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.

--

--