Değiştirebilirlik Kalite Özniteliği

Huseyin Kutluca
Yazılım Mimarileri
4 min readApr 12, 2021

Değiştirilebilirlik kalite özniteliği, geliştirilen yazılımın yaşam döngüsü boyunca ihtiyaç duyulacak değişiklikleri en az maliyetle yapabilmeyi ifade eder. Büyük çaplı yazılım sistemlerinin toplam yaşam maliyetinin %80 ini ürünün sahaya konulması sonrası maliyetler oluşturduğu tespit edilmiştir. Bu sebeple yazılım mimarisi tasarımında değiştirilebilirlik en etkili kalite özniteliği olarak karşımıza çıkmaktadır.

Yazılımlar,

  • Sahaya kurulduktan sonra hata düzeltmeleri,
  • Performans iyileştirmeleri,
  • Yeni kabiliyet ekleme, silme yada değiştirme,
  • Farklı ortam veya kullanım için konfigüre etme
  • İşletim sistemi, veri tabanı iletişim yönteminin güncellenmesi yada yeni bir tanesi ile değişimi
  • Yeni teknolojinin adapte edilmesi veya yeni bir sistemin entegre edilmesi,
  • Entegre olunan sistemlerdeki güncellemelere
  • Gelişen standartlara uyum

gibi ihtiyaçlarla gerekliliği ile değişikliğe ihtiyaç duymaktadır.

Neyin değişeceği kadar ne zaman değişeceği de önemli bir soru olarak karşımıza çıkmaktadır. Ayrıca değişikliğin kod değişikliği ile mi, dinamik kütüphane yada yeni modül ekleyerek mi, sistem canlıda iken bir modülün yeni versiyonunu koyarak mı yada konfigürasyon dosyası değiştirerek mi yapılacağı tasarım aşamasında öngörülmelidir.

Geliştirilen yazılımların sürdürülebilir bir şekilde ayakta kalabilmesi bu değişikliklerin zorluğu, maliyeti ve risk ile yapılabilmesine bağlantılıdır.

Bu değişikliklerin öngörülmesi kalite senaryosu şeklinde yazılabilir.

Değiştirilebilirlik senaryolarını oluşturmak üzere , ortaklık/değişkenlik analizi yöntemi ile nelerin değişebileceği ve bu değişikliklerin nasıl ele alınabileceği öngörülmelidir.

Tasarımınızı değiştirilebilir kılar iken SOLID prensiplerinden birisi olan Open/Close prensibine uygun hareket ederek beklenmeyen yan etkileri azaltmış oluruz. Geliştireceğimiz bileşenler gelişime açık, kod değişimine kapalı olmalıdır. Benzer şekilde tek sorumluluk, arayüzleri ayırma ve bağlılığı tersine çevirme yaklaşımları da nesneye yönelik programlama kapsamında değiştirebilirliği arttıran tasarım prensipleridir.

ISO 25010 sınıflandırmasına göre değiştirilebilirlik kalite özniteliği modülerlik, yeniden kullanılabilirlik, çözümlenebilirlik ve test edilebilirlik ile birlikte bakım yapılabilirliğin alt kalite faktörleri olarak öngörülmektedir. Temelde hedefimiz bakım yapılabilir ve sürdürülebilir bir yazılım geliştirerek yazılımın ömrünü büyük ölçüde arttırmaktır. Aksi takdirde sektörde gördüğümüz 2–3 yılda bir mevcut yazılımı çöpe atıp yeni mühendislerle ve yeni teknolojilerle yeniden geliştirme döngüsüne girilir.

Taktikler/Tasarım Kalıpları

Daha küçük bileşenlere bölme taktiği ile gelecekte ihtiyaç duyulacak değişikliklerin daha kolay yapılması öngörülür. Tabi ki çok küçük parçalara bölmenin bileşenler arası iletişimden dolayı performansı kötü etkilememesi gerekmektedir.

Günümüzde en moda yazılım geliştirme yöntemi olan mikro servis yöntemi monolitik yapı yerine daha küçük yönetilebilir servisleri ön plana çıkartmaktadır. Servisler, Alan Odaklı Tasarım (Domain Driven Design) yöntemi ile iç bağımlılığı yüksek fakat diğer bileşenlere bağımlılığı düşük bir şekilde tasarlanır.

Anlamsal tutarlılığı arttırma taktiğinde anlamsal olarak yakın olan kabiliyetler aynı modül içinde bulundurulur. Eğer aynı bileşen içinde iki farklı kabiliyeti içeriyorsa bu bileşeni bölmek daha anlamlı olur.

Değiştirilebilirlik bakım yapılabilirliğinin en önemli unsurlarından birisidir. Değiştirilebilirliği yüksek mimariler için bileşen içi uyumluluğu (high cohhession) üst seviyede ve bileşenler arası bağımlılığı ise en az seviyede tutmayı (low coupling) hedefleriz.

Sarmalama taktiği bir kabiliyetin geliştirme detayları ile ara yüzü ayırmayı temel alır. Diğer modüller sadece ara yüz üzerinden modüle erişir.

Üçünci parti yazılımlara ve sistemlere bağımlılık değiştirebilirliği zorlaştıran faktörlerdendir. Girdi/Çıktı Donanım Adaptasyonu tasarım kalıbı ile donanım bağımlılığını azaltmak üzere girdi/çıktı donanımı, iletişim donanımı, sürücü yazılımının soyutlanması sağlanmaktadır. Benzer şekilde alt sistem adaptasyonu, sisteme entegre edilen cihazların veri, kontrol ve durum mesajlarının ortak bir iletişim yöntemi ile soyutlamasını sağlayarak değiştirebilirliği sağlayan tasarım kalıplarındandır.

Aracı kullanma taktiğinde ise modüllerin birbiri ile doğrudan iletişim kurup bağımlılık yaratması engellenir.

Yayımla Abone Ol taktiği özellikle dağıtık sistemlerde çok kullanılan bir yöntemdir. Yayımla abone ol mimarisinde veriyi üreten bileşen verinin kime iletileceğini düşünmeden veriyi ara katman üzerinden yayımlar. Veriye abone olan bileşenler ise veriyi üretenden habersiz şekilde veriye erişir. Herhangi bir zamanda sisteme yeni veri üretici bileşen yada mevcut verileri işleyen bir bileşen entegre edilebilir. . Bu alanda MQTT, DDS ve AMQP gibi ara katman standartları mevcuttur. Ayrıca Kafka, Zero-MQ gibi endüstride yaygın kullanılan ara katmanlar mevcuttur.

Modüller arası bağımlılığı sınırlama taktiğinde bir bileşenin sadece belirli bileşenlerle iletişim kurması tasarlanır. Örneğin katmanlı mimari tasarım deseni ile bir bileşen sadece bir alt ve bir üst katman ile iletişim kurabilir.

Alan Tabanlı Tasarım (Domain Driven Design) ve Onion Architecture mimarisi temel iş alanı nesneleri(domain entities) ve iş mantığı algoritmalarının teknolojilere bağımlılığını kaldıracak şekilde tasarımlar önermektedir. Böylelikle daha az değişen iş alanı mantığı onu nasıl gösterdiğimizi veya ne tür veri tabanında sakladığımızı gibi detaylardan ayrılmış olmaktadır.

Kod düzenleme(refactor) taktiği karmaşık hale gelmiş kodların iyi tasarım yaklaşımları dikkate alınarak yeniden düzenlenmesidir.

Ortak servislerin belirlenmesi taktiğinde sistemde yetkilendirme, alarm yönetimi gibi birçok bileşende ihtiyaç duyulan kabiliyetler ortak bileşen olarak geliştirilir.

Bağlama zamanını geciktirme taktiğinde bileşenlerin birbiri ile bağımlılığı geciktirilerek esneklik kazanılır. Çalışma zamanında kayıt olma, eklenti, dinamik kütüphane, servis kayıt defteri gibi yöntemler bağlama zamanını geciktirme yöntemleridir.

Mikro Servis mimarisinde servisler ZooKeeper benzeri kayıt sistemleri üzerinden aranıp bulunur. Konteyner yapısı ile servisler bağımsız olarak kurulabilir ve aynı anda bir servisin iki versiyonu sistemde yer alabilir.

Bunlar dışında katmanlı mimari, model gösterim kontrol deseni, nesneye dayalı tasarım prensipleri ve kalıpları ve kodlama standartları değiştirile bilirliği artıran yöntemlerdir.

--

--

Huseyin Kutluca
Yazılım Mimarileri

Highly motivated Software Architect with hands-on experience in design and development of mission critical distributed systems.