YAZILIM MMARLER HAFTA 3 Yazlm Tasarm r Gr

  • Slides: 35
Download presentation
YAZILIM MİMARİLERİ HAFTA 3 Yazılım Tasarımı Öğr. Gör. Mevlüt İNAN

YAZILIM MİMARİLERİ HAFTA 3 Yazılım Tasarımı Öğr. Gör. Mevlüt İNAN

YAZILIM TASARIMI Herhangi bir mühendislik ürünü geliştirme sürecindeki ilk adım tasarım olarak adlandırılabilir. Geliştirilecek

YAZILIM TASARIMI Herhangi bir mühendislik ürünü geliştirme sürecindeki ilk adım tasarım olarak adlandırılabilir. Geliştirilecek bir ürünün ilk modelini veya gösterimini ortaya çıkarmak tasarımcının amacıdır. Tasarım genel olarak bilgi birikimi ve deneyim ile desteklenen çeşitli kurallarla yapılır. Makine, mekanik, inşaat, düzenek veya elektronik tasarımlar için çeşitli hesaplamalar ve yardımcı araçlar kullanılabilir. Bilgisayar yazılım tasarımı daha yeni bir geçmişe sahiptir. Çeşitli geliştirme teknikleri, tasarım ve tanımlama yöntemleri bulunsa da yazılım mühendisliği hala bir “ sanat” niteliğindedir.

Bir kodlayıcı ne kadar iyi olursa olsun, bir tasarım yapıp onu yeterli şekilde yazılı

Bir kodlayıcı ne kadar iyi olursa olsun, bir tasarım yapıp onu yeterli şekilde yazılı hale getirdikten sonra verimli bir geliştirme yapamaz. mutlaka önce tasarım yapılmalıdır, en küçük kod parçaları için dahi olsa bile ondan sonra kod yazımına geçilmelidir. Hiçbir bilgisayar programı kod yazma ile başlanılmamalıdır. Yazılım tasarımı, bir binanın temeline benzetilebilir. Çok sağlam olmayan bir temel üzerine plansızca yapılan katlardan oluşan bir binanın depreme dayanıklı olmasıda beklenemez. Aynı zamanda üzerine başka bir kat çıkmakda mümkün olmaz.

Tasarım aşaması Özellikle bir bütün olarak düşünülmesine rağmen yazılım tasarımı aşaması aşamalar halinde gerçekleştirilir.

Tasarım aşaması Özellikle bir bütün olarak düşünülmesine rağmen yazılım tasarımı aşaması aşamalar halinde gerçekleştirilir. En önemli aşamalardan biri veri tasarımıdır; çözümleme sırasında toplanan bilgilerin bilgi yapılarının yazılımda kullanılacak veri yapılarına dönüştürülmesini içerir. Daha sonra gelen mimari tasarımı, yazılım birimlerinin yapısal parçalarını, birbirleriyle ilişkisini tanımlar. Yordamsal tasarım, yazılımı oluşturan yapısal birimler yordam ve fonksiyonlar haline dönüştürülmesine verilen addır. Arayüzü tasarımı da alt sistemlerle olan arayüzlerinin ayrıntılarını insan-makine etkileşiminin şeklini, içerir.

Bunların hepsi bir belgede toplanır, değerlendirilir ve sonrada kodlama aşamasına geçilir. Tasarım, yazılımın testine

Bunların hepsi bir belgede toplanır, değerlendirilir ve sonrada kodlama aşamasına geçilir. Tasarım, yazılımın testine kadar herşeyi etkilediğinden nitelik unsurunun öne çıktığı ilk aşama olma özelliğini taşımaktadır.

Yazılım tasarımı sırasında gözetilmesi gereken temel ilkelerden en önemli gördüğümüz üç unsuru şunlardır: §

Yazılım tasarımı sırasında gözetilmesi gereken temel ilkelerden en önemli gördüğümüz üç unsuru şunlardır: § Soyutlama (abstraction), anlaşılabilirliği ve denetimi artırmak üzere en az ayrıntı ile işlem yapmaya denir. Bu amaçla, yazılım isterlerini gruplayarak karşılamak üzere bileşenler, birimler ve modüller oluşturulur, aralarındaki ilişkinin en aza indirgenmesine çalışılır. § Birbirlerinden bağımsız modüllerde bulunan veriler ve yordamlar üzerinde erişim kısıtlamaları sağlanarak bilgi güvenliği artırılır.

§ Kolay anlaşılmalıdır. § Kurumsal tasarım standartlarına uygun olmalıdır. § Gerektiğinde değiştirilebilmelidir. § Diğer

§ Kolay anlaşılmalıdır. § Kurumsal tasarım standartlarına uygun olmalıdır. § Gerektiğinde değiştirilebilmelidir. § Diğer tasarımlarla birleştirilmesi mümkün olmalıdır. § Esneklik, gelişebilirlik ve taşınabilirlik özelliklerine tasarım aşamasında gerekli önem verilmesi ile, bakım sırasında gereksinim duyulan niteliksel özelliklerde kendiliğinden belirlenmiş ve ortaya çıkması olası sorunların önüne geçilmiş olur.

Yazılım Tasarım Süreci Yazılım geliştirme sürecinin ana aşamaları daha önce belirtilmişti. Bu aşamalardan birincisi

Yazılım Tasarım Süreci Yazılım geliştirme sürecinin ana aşamaları daha önce belirtilmişti. Bu aşamalardan birincisi olan isterler çözümlemesi daha kurumsal iken, tasarım, test ve kodlama daha tekniktir. Tasarım kademesi bir tür süreç şeklindedir. Bu süreç bittiğinde ortaya çıkan tasarım , testin ve kodlamanın temeli oldugu için mutlaka yeterli zaman ayrılması şarttır. Tasarımın niteliğini değerlendirebilmek için iyi bir tasarım kıstasların belirlenmesi gereklidir. Bu kıstaslar özellikle yazılım geliştirme planında kullanılan standartlarla belirtilidir.

Yazılım tasarımı tanımlamalarında ve sürecinde rehber olarak aşağıdaki standartlar kullanılabilir: Tasarım için yazılım geliştirmeye

Yazılım tasarımı tanımlamalarında ve sürecinde rehber olarak aşağıdaki standartlar kullanılabilir: Tasarım için yazılım geliştirmeye yardımcı araçları kullanabileceği gibi, çeşitli tasarım yöntemleri de kullanılabilir sonuç olarak ortaya elektronik yada basılı ortamda çeşitli belgeler çıkar. Tasarım sırasında isterler yazılım geliştirmede kullanılacak ifadelere dönüştürürler. Teknik olarak, süreç başında, bu ifadeler ve gösterim tarzı ve yazılım genel görünüşü oluşturulurken , süreç sonunda tasarım kaynak koda yakın bir hale gelir. Yönetsel olarak bu süreç iki aşamada ele alınır:

q Öntasarım(preliminarydesign): İsterlerin mimari ve veri tasarımına dönüştürülmesidir q Ayrıntılı tasarım(detail design): Mimari ve

q Öntasarım(preliminarydesign): İsterlerin mimari ve veri tasarımına dönüştürülmesidir q Ayrıntılı tasarım(detail design): Mimari ve veri tasarımın ayrıntılı veri yapıları ile algoritmik gösterime dönüştürülmesine denir. Her iki aşamanın sonunda resmi gözden geçirme işlemi yapılır. Pek çok projeden bu aşamalar ödemeye esas önemli geçiş noktalarıdır. Yazılım tasarımı, isterler çözümlenmesi sonunda elde edilen bilgiler yazılım tasarımı ile gerçekleşir. Ve kodlamaya esas olacak mimari tasarım veri tasarımı, ara yüz tasarımı ve yordamsal tasarımı yapılır. Bu arada gerekli belgeler üretilir.

VERİ TASARIMI Veri modelleri ve yapıları birbirleriyle mantıksal olarak ilişkili verirleri yönetilebilir ve bir

VERİ TASARIMI Veri modelleri ve yapıları birbirleriyle mantıksal olarak ilişkili verirleri yönetilebilir ve bir arada tutmaya çalışır. Bu yapılar ve modeller, veriler arasındaki sıra düzensel ilişkileri ve erişim yöntemlerini belirler. Yapıların karmaşıklık derecesi ve düzenlenmesi tamamen tasarımcı tarafından belirlenir. Tasarımcı, veriye erişim yöntemi, etkinlik, hız, işlev, büyüklük bakımından çözümlemesini yaparak uygun veri tiplerini ve yapıları belirler.

Veri yapıları ve modelleri bu kitabın konusu dışında tutulduğu için yanlızca tanımlama olarak kısaca

Veri yapıları ve modelleri bu kitabın konusu dışında tutulduğu için yanlızca tanımlama olarak kısaca değinirsek: Sayısal ögeler, belirli bir temel tipten olup programlama dili ve donanıma göre değişiklik gösterilebilir. Mesela C dilindeki tam sayı, bazı donanımlar için 64 bit, bazıları için 32 bit ile gösterilmektedir. Birden fazla aynı tür ögenin ardışık olarak sıralanmasıyla diziler oluşur. Tek boyutlu olanlar vektör adını alır. Dizilerin çok sayıda boyuta sahip olduğu durumda matrisler oluşur. Dinamik veri yapıları, programın çalışması sırasında gereksinim duyuldukça bellekde yönetilmesi ve yaratılması esasına dayanır. Bağlı listeler(linked list), eşlem(map) ve ağaç(tree) yapıları buna örnektir.

Veri modellerinin ve yapılarının ne şekilde kullanıcağı da ayrı soyutlama kavramlarının kullanımını gerektirir. Örneğin,

Veri modellerinin ve yapılarının ne şekilde kullanıcağı da ayrı soyutlama kavramlarının kullanımını gerektirir. Örneğin, bir bağlı liste , ya"ilk giren ilk çıkar"(first -in first-out)ilkesine dayalı bir yığın(stack)yada rastgele erişimli bir depo olabilir. Tasarım sırasında benimsenen soyutlama derecesine göre, veri yapısının iç tasarımı belirtilmeden işlevselliği ön planda tutulabilir. Yani, tasarımcı, yalnızca bir yığın kullanmak istediğini belirtebilir, yığının gerçekleşinmine kodlayıcıya bırakabilir. Veri modeli ile veri yapısı iç içe geçmiş iki ayrı kavramdır. biri verinin bellekte tutulması veya saklanması ile ilgilenirken diğeri veriler arasındaki bağıntı ve ilişki konusuyla ilgilenir.

İyi veri tasarımı yapabilmek için aşağıdaki kuralların uygulanmasında yarar vardır: 1. İşlevsel çözümlemeye verilen

İyi veri tasarımı yapabilmek için aşağıdaki kuralların uygulanmasında yarar vardır: 1. İşlevsel çözümlemeye verilen önem kadar veri tasarımına ve çözümlemesine de önem verilmelidir. Gözden geçirmeler sırasında veri yapılarının tasarımı incelenmelidir. Önem verilmeyen , tasarımın başarılı olması beklenemez. 2. Veri modelleri ve yapıları yanında bu yapılar üzerinde yapılacak işlemlerin de tanımlanması gereklidir. Bu tanımlama nesneye yönelik programlamada yapılır; Ancak yapısal programlamada özel dikkat gereklidir. Nesneye dayalı programlamada kullanılan soyut veri türleri de veri ve işlemleri içerdiğinden önerilebilir. 3. Kullanılacak veri yapılarını oluşturan birimlerin sınırları, türleri ve birbirleri ile olan ilişkileri veri sözlüğü içinde toplanmalıdır. Sözlük kullanılarak karmaşık yapıların ve algoritmaların tasarımında kolaylık sağlanır.

4 - Veri yapılarının tanımlanmasında döngüsel bir çizgi izlenmesi daha uygundur. Her şey de

4 - Veri yapılarının tanımlanmasında döngüsel bir çizgi izlenmesi daha uygundur. Her şey de tüm veri yapılarını en ince ayrıntılarına kadar tasarlamaya çalışmak başarılı bir sonuç vermeyebilir. Bu sebeple, tasarımın başında anahtarları oluşturulan veri yapılarının tasarım. I ilerledikçe alt düzey ayrıntılarını tamamlamak daha fazla zaman ve yararda kazanç sağlar. 5 - Veri yapıları sadece kendilerini kullanan modüllere görünür olmalıdır. Bu şekilde "Bilgi Gizleme“ ilkesine uyulmuştur. 6 - Çok kullanılması olası veri yapıları , soyut veri türleri şeklinde önceden geliştirilerek kütüphane haline getirilirse, geliştirme sırasında veri yapılarını test etmek ve kodlamak için zaman ayrılmasına gerek kalmaz.

Örneğin, bir bağlı liste ve ilgili işlemleri genel amaçlı olarak önceden geliştirilirse, kod yazarken

Örneğin, bir bağlı liste ve ilgili işlemleri genel amaçlı olarak önceden geliştirilirse, kod yazarken açıkta kalan bellek veya göstergeç(dangling pointer) temizlenmemesi gibi problemlerden sakınılmış olur. Bir başka öneri , C++ dilinin desteklediği "Standart Template Library" gibi önceden geliştirilmiş standart ve hazır yapıların kullanımıdır. 7 -Tasarım sırasında , kodlamada programlama dilinin unsurları dikkate alınarak veri yapıları tanımlanmalıdır. Günümüzde kullanılmakta olan genel amaçlı programlama dillerinde çok fazla sorun yaşanmayabilir; fakat, FORTRAN gibi bir dilde liste yaratmak mümkün değildir.

8 -Karmaşık veri yapılarının kullanımı gerekiyorsa kullanılacak programlama dili soyut veri türlerini(abstract data types)

8 -Karmaşık veri yapılarının kullanımı gerekiyorsa kullanılacak programlama dili soyut veri türlerini(abstract data types) destekleyebilecek şekilde seçilmelidir. Nesneye yönelik programlama dili kullanılabilecek ise onunla yapısal programlama yapmaya çalışmak doğru olmaz.

MİMARİ TASARIM Uygulama yazılımı bir problemin çözümünü parçalara bölerek sağlayabilir. Bu parçaların yazılımdaki karşılığı

MİMARİ TASARIM Uygulama yazılımı bir problemin çözümünü parçalara bölerek sağlayabilir. Bu parçaların yazılımdaki karşılığı modüllerdir. Uygulama yazılımı mimarisi; Modüllerin sıradüzensel ilişkilerini gösteren yapıya denir.

Yazılım içindeki modüller nesne olabileceği gibi, gerçekleştirim veya tasarım yönteminin özelliğine göre , birer

Yazılım içindeki modüller nesne olabileceği gibi, gerçekleştirim veya tasarım yönteminin özelliğine göre , birer paket birer program, birer nesne veya birer yordam olabilirler. Yapının çıkış yelpazesi, derinliği ve genişliği modüler yapı hakkındaki önemli ölçütlerdendir.

Bu modüller ayrıt 2. 6 da değindiğimiz genel yazılım mimarileri biçiminde yapılanabilirler. Yazılım mimarisi

Bu modüller ayrıt 2. 6 da değindiğimiz genel yazılım mimarileri biçiminde yapılanabilirler. Yazılım mimarisi seçiminde dikkate alınması gerekli noktaları şu biçimde özetleyebiliriz. 1 -UYGULAMA ALANININ ÖZELLİKLERİ Yazılımın kullanacağı alanın gereksinimlerine göre yazılım bölümlerini fiziksel olarak belirli donanım unsurları üzerinde çalıştırmak gerekebilir. Sistemin dağınık yada merkezli olması , açık sistem olması , belirli bir amaçla kullanmak üzere tahsis edilmesi yada gömülü sistem olması mimari seçimini etkiler.

2 -UYGULAMA YAZILIMININ KARMAŞIKLIK DERECESİ Basit uygulamalar, tek program içinde, her türlü bilgi ve

2 -UYGULAMA YAZILIMININ KARMAŞIKLIK DERECESİ Basit uygulamalar, tek program içinde, her türlü bilgi ve arayüz işlemeyi kapsayacak biçimde geliştirilebilir. Daha karmaşık uygulamalarda, hem geliştirilme hem de yürütme bakımından yazılımı öğelere , öğeleri de birimlere bölmek daha kolay biçimde geliştirme, bakım ve test olanağı sağlar.

3 -KULLANICI ARAYÜZÜ KISITLAMALARI Kullanıcı arayüzü ile Bilgi işleme birimleri farklı mimariye sahip işlemcilerde

3 -KULLANICI ARAYÜZÜ KISITLAMALARI Kullanıcı arayüzü ile Bilgi işleme birimleri farklı mimariye sahip işlemcilerde çalışması gereken durumlar olabilir. Grafik görüntü verebilen yüksek nitelik de bilgisayarlar her amaç için uygun olmadıklarından bir ayrım yapmak gerekebilir. O taktirde , uygun bir iletişim alt yapısı kullanılması zorunlu hale gelir.

1 -TAŞINABİLİRLİK Geliştirilen yazılımın sonradan başka donanım veya işletim sistemi ile kullanılmak üzere ayrı

1 -TAŞINABİLİRLİK Geliştirilen yazılımın sonradan başka donanım veya işletim sistemi ile kullanılmak üzere ayrı ortamlara taşınması gerekiyorsa, katmanlı bir yaklaşımla, asıl yazılımı olası taşıma işinden etkilenmeyecek şekilde tasarlamak gerekir. Bu amaçla, yazılım mimarisi içine uygun katmanlar yerleştirilebileceği gibi iletişimin zorluklarını ortadan kaldırmak için bir ara katman mantığı da kullanılabilir.

YORDAMSAL TASARIM Yordamlar(procedure, function) bilgi işlemeyi gerçekleştirmek üzere yazılım modülünün iç yapısında bulunurlar. Bir

YORDAMSAL TASARIM Yordamlar(procedure, function) bilgi işlemeyi gerçekleştirmek üzere yazılım modülünün iç yapısında bulunurlar. Bir yordam, döngüler, karşılaştırmalar, veri yapıları, dallanmalar yardımıyla tüm bilgi işleme özelliklerini tanımlamalıdır. Yordamlar arasında da belirli bir yapı gözetilmesi zorunludur. Bir yordam içinde başka yordamların çağrılması, yazılım mühendisliği kuralları bakımından gereklidir. Bir modülün bütün görevlerin tek bir yordamla gerçekleştirilmesi olası olmadığı gibi, yordam içinde yordam çağırmada da aşırıya kaçılmamalıdır. Program ve veri yapılarının tasarımı tamamlandıktan sonra yordamsal tasarım başlar. Yordamsal tasarım, modüllerin iç yapılarındaki algoritmik ayrıntıların tanımlanmasına yordamsal tasarım denir.

Tasarım konuşma diline yakın anlatımla yapılabileceği gibi çeşitli şekilsel gösterimlerle de yapılabilir. Şimdi yordamsal

Tasarım konuşma diline yakın anlatımla yapılabileceği gibi çeşitli şekilsel gösterimlerle de yapılabilir. Şimdi yordamsal tasarımın nasıl yapılacağını görelim. YAPISAL PROGRAMLAMA GÖSTERİMİ Yazılım tarihinin en eski tasarım yöntemlerinden biri işlevleri metinsel bir biçimde anlatmaktır. Bu anlatım için özellikle ingilizce kullanılmaktadır. Program tasarım dili(Programming Design Language)adı verilen bir dilde tasarım için tanımlanmıştır. Sözde kod(pseudo) adı verilen bu yöntemle , gerçek programlama dili yapılarına aynı şekilde , ancak daha serbest bir söz dizimiyle her yapı ve her yordam tanımlanır. Özellikle ardışık deyimler, koşullu dallanma ve döngüler kullanılır.

Program tasarım dilleri genellikle PASCAL veya ADA gibi yüksek düzey bir dili andırırlar. Özel

Program tasarım dilleri genellikle PASCAL veya ADA gibi yüksek düzey bir dili andırırlar. Özel bir yazılım paketi gerektirmeksizin normal bir metin yazıcı kullanılabilir. Yazılmış metin dosyalarını grafiksel bir tasarım yöntemine dönüştürebilen araçlarda tasarım dili bulunmaktadır. Örneğin, bir yazılım paketi bir tasarım kodunu tarayıp akış diyagramı üretebilir.

Piyasadan temin edilebilecek çeşitli tasarım dilleri de vardır. Bunların sahip oldukları ortak unsurlar arasında

Piyasadan temin edilebilecek çeşitli tasarım dilleri de vardır. Bunların sahip oldukları ortak unsurlar arasında şunlar sayılabilir: 1. Her türlü yapıyı destekliyebilen sabit bir anahtar sözcük listesi 2. Veri yapıları ve veri tipleri tanımlama yeteneği 3. Alt program çağırma ve tanımlama düzeneği 4. Bilgi işlemeyi serbest bir dille anlatabilme olanağı 5. Ara yüz tanımlama yeteneği 6. Çevrim ve koşul yapıları 7. Giriş/çıkış yapıları 8. Zaman belirtimleri

GRAFİKSEL GÖSTERİM Bazen bir resim bir çok satırdan oluşan bir anlatımın yerine geçebilir, bu

GRAFİKSEL GÖSTERİM Bazen bir resim bir çok satırdan oluşan bir anlatımın yerine geçebilir, bu gerçekten hareketle, çeşitli grafiksel gösterim yöntemleri bulunmuş, bu yöntemleri kullanan yazılım tasarım araçları geliştirilmiştir. Fakat, bir şeklin yanlış yada eksik çizilmesi , okuyucunun gösterim simgelerini iyi bilmemesi sonucu tasarımı yanlış anlaması hatalı kodlamaya neden olabilir. Bu sebeple grafiksel gösterimlerin iyi öğrenilmesi ve iyi anlaşılması gereklidir. Grafik tabanlı gösterim şekillerine değinirsek:

1 -YAPISAL ÇÖZÜMLEME VE TASARIM Yapısal tasarım ve çözümleme yapmak için durum geçiş diyagramları

1 -YAPISAL ÇÖZÜMLEME VE TASARIM Yapısal tasarım ve çözümleme yapmak için durum geçiş diyagramları ve veri akış diyagramları kullanılır. Bu konudaki ayrıntılı bilgiler yapısal çözümleme kısmında verilmiştir. 2 -UML "Unified Modelling Language"(UML), nesneye yönelik çözümleme ve tasarımın hem metinsel hem de grafiksel olarak yapılabilmesine yardımcı olan uluslararası çevrelerce kabul edilmiş, standart ve yaygın bir tanımlama dilidir. Piyasada bu dili destekleyen yazılım araçları ve tümleşik ortamlar bulunmaktadır. UML hakkında tanıtıcı bilgiler Ek-D de verilmektedir.

AKIŞ DİYAGRAMLARI En eski ve en yaygın program tasarım yöntemlerinden biri akış diyagramları (flow

AKIŞ DİYAGRAMLARI En eski ve en yaygın program tasarım yöntemlerinden biri akış diyagramları (flow chart) kullanmaktadır. Günümüzde bir program çok sayıda yordamdan veya modülden oluştuğundan, çok sayıda akış diyagramı kullanmak gerekebilir. Uzun veya karmaşık yordamlarda iç içe diyagramlar kullanmak da mümkündür. Hazırlanan diyagramlar arası geçişin sağlanması ve tutarlılığın korunması bir miktar zorluk getirir.

DİĞER ŞEKİLDE GÖSTERİMLER Çeşitli tasarım yöntemlerinde kullanılabilecek görsel anlatımları ve diyagramları ikiye ayırmak mümkündür.

DİĞER ŞEKİLDE GÖSTERİMLER Çeşitli tasarım yöntemlerinde kullanılabilecek görsel anlatımları ve diyagramları ikiye ayırmak mümkündür. Bunlardan ilki olan ve durağan olarak nitelendirilebilecek yapısal tasarım gösterim teknikleri içinde şunlar yer alabilir: 1. Sınıf nesne diyagramları 2. Bileşen diyagramları(component diagrams) 3. Konuşlandırma diyagramları( deployment diagrams ) 4. Varlık - ilişki diyagramları( entity - relationship diagrams ) 5. Yapı diyagramları( Structure Charts )

Dinamik olan davranışsal tasarım için de aşağıdaki tekniklerinden biri kullanılabilir: 1. 2. 3. 4.

Dinamik olan davranışsal tasarım için de aşağıdaki tekniklerinden biri kullanılabilir: 1. 2. 3. 4. 5. 6. 7. 8. 9. İşleklik diyagramları(activity diagrams) İşbirliği diyagramları (collaboration diagrams) Veri akış diyagramları (data flow diagrams) Karar tabloları ve diagramları(decision tables) Akış diyagramları(flowcharts) Sözde kod(pseudo code) Ardıllık diyagramları(sequence diagrams) Etkileşim diyagramları(interaction diagrams) Durum geçiş diyagramları(state transition diagrams) 10. Durum diagramları(statechart diagrams)