Yazılım Tasarımı ve Mimarisi
Yazılım tasarımı ve mimarisi, bir yazılım sisteminin bileşenlere ve bağlayıcılara nasıl yapılandırıldığını, sorumlulukların nasıl ayrıştırıldığını ve tasarım kararlarının işlevsel gereksinimleri ve kalite niteliklerini nasıl karşıladığını ele almaktadır.
Tanım
Yazılım tasarımı, bir sistemin mimarisini, bileşenlerini, arayüzlerini ve diğer özelliklerini tanımlama sürecidir; yazılım mimarisi ise sistemin öğelerini, bunların ilişkilerini ve her ikisinin özelliklerini içeren yapılar bütünüdür.
Kapsam
Bu alan; katmanlı, istemci-sunucu, mikroservisler, olay tabanlı, boru ve filtre gibi mimari stilleri ve desenleri; modülerlik, bilgi gizleme, uyum (cohesion), bağlılık (coupling) ve sorumlulukların ayrılması gibi tasarım ilkelerini; nesne yönelimli ve bileşen tabanlı tasarımı; tasarım desenlerini; mimari kalite niteliklerini ve bunların ödünleşimlerini; ve tasarımları ifade etmek için kullanılan UML gibi modelleme gösterimlerini kapsamaktadır.
Alt konular
Temel sorular
- Bir sistem modüllere ve bileşenlere nasıl ayrıştırılmalıdır?
- Hangi mimari stil, gerekli kalite niteliklerini en iyi şekilde desteklemektedir?
- Bağlılık (coupling) ve uyum (cohesion) gibi tasarım ilkeleri iyi bir yapıyı nasıl yönlendirmektedir?
- Tekrarlayan tasarım problemleri, yeniden kullanılabilir desenlerle nasıl çözülmektedir?
Temel kuramlar
- Bilgi gizleme ve modülerlik
- Parnas, modüllerin, değişmesi muhtemel tasarım kararlarını istikrarlı arayüzlerin arkasına gizleyecek şekilde tanımlanması gerektiğini savunmuştur, böylece değişiklik yerelleştirilir; bu ilke modülerliğin, kapsüllemenin ve düşük bağlılığın temelini oluşturmaktadır.
- Mimari kalite nitelikleri ve ödünleşimler
- Mimari, performans, değiştirilebilirlik, erişilebilirlik ve güvenlik gibi kalite nitelikleri tarafından yönlendirilmektedir; bunlar birbiriyle çeliştiği için mimari, taktikler ve desenler rehberliğinde ödünleşimler üzerine akıl yürütmekle ilgilidir.
- Tasarım desenleri
- Tekrarlayan tasarım problemlerinin iyi anlaşılmış, adlandırılmış çözümleri vardır — yaratımsal, yapısal ve davranışsal desenler — bunlar uzman uygulamasını yakalar ve nesne yönelimli tasarım için ortak bir kelime dağarcığı sağlar.
Klinik önem
Mimari kararlar, daha sonra değiştirilmesi en zor olanlardır ve bir sistemin kalite niteliklerini en güçlü şekilde belirlemektedir; bu nedenle sağlam tasarım ve mimari, uzun vadeli bakım maliyetini azaltmakta, ölçeklenebilirliği ve evrimi mümkün kılmakta ve ekip organizasyonunu şekillendirmektedir.
Kanıt ve kılavuzlar
ISO/IEC/IEEE 42010, mimari tanımını standartlaştırmaktadır; SWEBOK Yazılım Tasarımı bilgi alanı ise Software Architecture in Practice gibi referans metinlerle birlikte fikir birliğine dayalı rehberlik sağlamaktadır.
Tarihçe
Modüler tasarım ilkeleri, 1970'lerin başında Parnas tarafından dile getirilmiştir. Nesne yönelimli tasarım ve tasarım desenleri 1980'ler ve 1990'larda olgunlaşmış, yazılım mimarisi 1990'ların ortalarında Shaw ve Garlan'ın çalışmalarıyla ayrı bir disiplin olarak ortaya çıkmış, hizmet odaklı ve mikroservis stilleri ise 2000'ler ve 2010'larda bunları takip etmiştir.
Tartışmalar
- Monolitik ve mikroservis mimarisi
- Sistemlerin tek bir dağıtılabilir monolit olarak mı yoksa birçok bağımsız dağıtılabilir servis olarak mı inşa edilmesi gerektiği yaygın olarak tartışılmaktadır; mikroservisler, dağıtık sistem karmaşıklığı pahasına bağımsız ölçekleme ve dağıtım sunar, bu nedenle doğru seçim ölçeğe ve organizasyonel yapıya bağlıdır.
Öne çıkan isimler
- David Parnas
- Mary Shaw
- Len Bass
- Erich Gamma
- Grady Booch
İlgili konular
Temel eserler
- parnas1972
- gamma1994
- bass2012
Sıkça sorulan sorular
- Tasarım ve mimari arasındaki fark nedir?
- Mimari, en üst düzey yapıları ve değiştirilmesi en maliyetli kararları — ana bileşenleri, etkileşimlerini ve sistem genelindeki kalite niteliklerini — ilgilendirirken, tasarım bu bileşenlerin daha ayrıntılı iç yapısını kapsar; sınır, keskin bir çizgi olmaktan ziyade önem derecesine göre belirlenir.
- Tasarım desenleri neden önemlidir?
- Desenler, tekrarlayan tasarım problemlerine kanıtlanmış çözümleri yakalar ve mühendislere ortak bir kelime dağarcığı sunarak tasarımların iletişimini, üzerinde akıl yürütülmesini ve evrimini kolaylaştırır; bunlar zorunlu reçeteler değil, ihtiyatlı bir şekilde uygulanması gereken rehberlerdir.