YZM 2108 Yazılım Mimarisi ve Tasarımı...YZM 2108 Yazılım Mimarisi ve Tasarımı Yrd. Doç. Dr....

Preview:

Citation preview

YZM 2108

Yazılım Mimarisi ve Tasarımı

Yrd. Doç. Dr. Deniz KILINÇ

Celal Bayar Üniversitesi

Hasan Ferdi Turgutlu Teknoloji Fakültesi

Yazılım Mühendisliği

1

BÖLÜM - 2

Tasarım Kalıplarına Giriş - I

2

Bu bölümde;

Tasarım Kalıpları,

Tasarım Kalıplarının Tarihçesi,

Yazılım Kalitesi

Kötü Tasarımın Belirtileri

Esnemezlik (Rijidite)

Kırılganlık(Fragility)

İmmobalite

Viskozite

ile ilgili konular anlatılacaktır.

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

• "Eğer inşaatçılar, binalarını

programcıların programlarını

yazdıkları gibi dikselerdi, ilk gelen

ağaçkakan medeniyeti yerle bir

ederdi."

-Gerald Weinberg

3

Tasarım Kalıpları Nedir

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

Eğer bir ağaç ev

inşa etmek

isteseydiniz, nasıl

yapardınız?

4

Tasarım Kalıpları Nedir (devam...)

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

1. Dayanıklı bir ağaç

bulurum.

2. Birkaç tahta, çekiç ve

çivi bulurum.

3. Yapabildiğim en güzel

(?) evi yapmaya çalışır

ve en iyisi (?) için umut

ederim

5

Tasarım Kalıpları Nedir (devam...)

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

• Bu yaklaşımı deneyen kişiler bu işlemin

sonunun hüsran olabileceğini bilmektedirler.

Ya da eninde sonunda öğreneceklerdir.

• Bazı durumlarda bu işlem

– ağaç eve zarar vermesinin yanı sıra,

– ağaca da zarar vermektedir.

6

Tasarım Kalıpları Nedir (devam...)

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

7

Tasarım Kalıpları Nedir (devam...)

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

Daha iyi bir önerisi olan…

• İyi bir mimar bulunup, evin ayrıntılı planını

geliştirmek için yardımına başvurulabilir.

– Mimar nasıl karar vermektedir?

– Yıllarca tecrübeden ders almak ve bunu yeni bir

evi yaratırken uygulamak ne kadar mümkündür?

• Kesin olan şey ise, bir bilgi temeli, tecrübe ve

belki biraz önsezinin mimarı başarılı

kıldığıdır.

8

Tasarım Kalıpları Nedir (devam...)

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

• Evin inşası ve tasarımı hakkındaki bu sorularla,

bizim yazılım geliştirme esnasında

karşılaştığımız soruların bir farkı yoktur.

– İyi bir yazılımı etkili bir şekilde nasıl

tasarlayabiliriz?

– Kazanılan tecrübeyi nasıl gelecekteki

projelerimize uygulayabiliriz?

– Yazılımın tasarımı esnasında, esneklik,

genişletilebilirlik veya verimlilik gibi iyi

özelliklere sahip olması için nasıl karar

verebiliriz?9

Tasarım Kalıpları Nedir (devam...)

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

• İşte bu noktada, Tasarım Kalıpları na

başvururuz.

“Tasarım kalıpları, uzmanların yeni

sorunları çözmek için geçmişte

çalıştıkları çözümlerin uygulamalarının

iyi belgelenmiş halidir.”

10

Tasarım Kalıpları Nedir (devam...)

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

• Tasarım kalıplarının arkasındaki düşünce,

yazılım geliştirilirken sıklıkla karşılaşılan

problemler için sunulan genel çözümler

için standartlaşmış bir yol geliştirmektir.

11

Tasarım Kalıpları Nedir (devam...)

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

Uzmanlar, problemlerinin parçalarını önceden karşılaştıkları problemler gibi

tanımlarlar.

Sonrasında, önceki problemlerinin çözümlerine geri dönüp onları genellerler.

Son olarak da genel çözümü o anki problemlerinin içeriğine adapte ederler.

12

Tasarım Kalıpları Uygulanma Adımları

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

• Tasarım kalıplarının kullanımının başlıca

faydalarına göz atalım:

1. Zamanla, kalıpların kataloglarını yapabiliriz.

• Bu sayede, yazılım geliştirmeye yeni başlayanların

yıllar geçtikçe kazanılan tecrübeden daha etkili

bir şekilde yararlanmasını sağlarız.

13

Tasarım Kalıpları Avantajları

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

2. Kalıpların standartlaştırılması, tüm

geliştiricilerin (profesyoneller, yeni

başlayanlar veya uzmanların) kararlarını

daha kolay vermesini sağlamaktadır.

3. Tasarım kalıpları ortak bir kelime haznesi

sağlar. Bu geliştiriciler arasındaki iletişimi

daha da kolay hale getirir. Bir tasarımı

detaylıca açıklamaktansa, planlarımızı

açıklamak için kalıp adını kullanabiliriz.

14

Tasarım Kalıpları Avantajları(devam...)

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

4. Kalıplar birbirleri ile ilişkilendirilebilir,

böylece geliştiriciler projelerinde hangi

kalıpların birlikte bulunması gerektiğini

kolayca anlayabilir.

15

Tasarım Kalıpları Avantajları(devam...)

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

5. Tasarım Kalıpları nesneye yönelik

programlama topluluğu aracılıyla tecrübe

paylaşımı için etkili bir yöntem sunmaktadır.

Örneğin; C++, Smalltalk, C# ya da Java

programlama dillerinde kazanılan bilgiler,

Web projelerinde ortaya çıkan uzmanlık gibi

öğrenilen bilgiler biriktirebilir ve bunlar

diğer geliştiricilerle paylaşılabilir.

16

Tasarım Kalıpları Avantajları(devam...)

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

• Kalıp kavramının kullanımı 1970’li

yılların sonlarında Christopher

Alexander isimli bir mimar tarafından

tanıtıldı. Alexander, kalıpların

belgelenmesi için temel kabul edilen

örnekler ile ilgili iki kitap yazdı.

• 1987 yılında, Ward Cunningham ve

Kent Beck small talk programcılarına

17

Tasarım Kalıplarının Tarihçesi

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

Christopher Alexander

yol göstermesi amacıyla Alexander'ın fikirlerinden

yararlanılarak beş küçük tasarım kalıbı geliştirdi. Böylece

tasarım kalıpları yazılım dünyasına girmiş oldu.

• Erich Gamma, Richard

Helm, Ralph Johnson ve

John Vlissides 1995’te

"Design Patterns: Elements

of Reusable Object-Oriented

Software" kitabını çıkardılar.

Bu dörtlü ayrıca "Gang of

Four" olarak da bilinir.

18

Tasarım Kalıplarının Tarihçesi (devam...)

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

• Bu dörtlü kitaplarında 3 farklı

kategoride toplam 23 tane kalıba yer

vermişlerdir:

– Creational: nesneleri yaratmakla

ilgili olan tasarımlardan 5 adet

– Structural: nesneler arasındaki

yapısal ilişkileri ifade eden

tasarımlardan 7 adet

19

Tasarım Kalıplarının Tarihçesi (devam...)

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

– Behavioral: nesnelerin çalışma zamanı davranışlarını

değiştirmek için oluşturulan tasarımlardan 11 adet kalıp

bulunmaktadır.

Tasarım ve Paketleme Prensipleri

20Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

• Her yazılımcı bir şekilde bekleneni verebilen ve

çalışabilir bir kod yazıp ortaya bir yazılım ürünü

çıkarabilir.

• Ancak bu yaptığı işin her zaman kaliteli olduğu

anlamına gelmez.

• Bir yazılımın kalitesi ölçülürken çoğu zaman yanlış

bir yaklaşımla performansı, hatta sadece görsel

olarak ne kadar alımlı olduğu dikkate alınmaktadır.

• Oysa bu iki faktör kaliteyi ölçmek için yeterli

değildir.

21

Kötü Tasarımın Belirtileri

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

22

Kötü Tasarımın Belirtileri (devam...)

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

Yazılım Kalitesi ≠ Performans + Görsellik

• Kalite, ihtiyaçları karşılama yeteneğidir.

-Deming, 1968.

• Kalite, şartlara uygunluktur.

-Crosby, 1979

• İlk seferde doğrusunu yapmaktır.

-Price, 1975

• Kalite, bir ürün ya da hizmetin önceden

belirlenen ya da sonradan ortaya

çıkabilecek gereksinimleri karşılama

yeteneğine dayanan özelliklerin toplamıdır.

ISO–840223

Kalite Nedir?

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

• Kalite, ürün ya da hizmeti en az

maliyetle üreten ve tüketici isteklerine

cevap veren bir üretim sistemidir.

JIS – Japon Standartlar Enstitüsü

• Kalite, mükemmeli arayışın sistematik

bir yaklaşımıdır.

ASQC – Amerikan Topluluğu Kalite Kontrol

• Kalite, kullanıma uygunluktur.

-Dr. Joseph M. Juran

24

Kalite Nedir? (Devam...)

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

• Kalite kavramı günümüze gelene

kadar tanım değişiklikleri ile

birlikte çeşitli evrimler

geçirmiştir. Ayrıca bakış açısına

göre de farklılık göstermektedir.

25

Kalite Nedir? (Devam...)

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

• Örneğin bireysel ve kurumsal bakış açıları

aynı olmayabilir ve farklı cevaplar

üretilebilir

1. Kalite Kontrol

• Kısa Tanım: Hata ayıklama odaklı geleneksel

yaklaşım

2. Kalite Güvence

• Kısa Tanım: Hata önleme odaklı modern

yaklaşım

26

Kalite Nasıl Sağlanır?

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

1. Kalite Kontrol

– Bir ürün ya da hizmetin

tanımlanmış gereksinimleri

karşılayıp karşılamadığını

kontrol etmek için kullanılan

uygulama teknikleri ve

faaliyetleridir.

27

Kalite Nasıl Sağlanır? (devam...)

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

2. Kalite Güvence

– Bir ürün ya da hizmetin

tanımlanmış gereksinimleri

karşılamak amacıyla yeterli

güveni sağlamak için gereken

planlı ve sistematik faaliyetlerin

bütünüdür.

28

Kalite Nasıl Sağlanır? (devam...)

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

Yazılım kalitesi, yazılımın çözmeye çalıştığı

problemlerin başarı derecesidir.

29

Yazılım Kalitesi

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

YZM 410 - Yazılım Kalite Güvencesi

• Yazılım kalitesi, kullanım amaçlarına göre açıkça

tanımlanmış işlev ve gereksinimlere uyum, kullanıcı

isterlerine yanıt verebilme, açıkça belgelendirilmiş yazılım

geliştirme standartlarına sadık kalma, yüksek güvenilirlik

sağlama, üretilen yazılımda çeşitli teknik özelliklere sahip

olma ve teslim sonrası destek olarak tanımlanabilir.

30

Yazılım Kalitesi (devam...)

31

Yazılım Kalitesi Nasıl Sağlanır?

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

• Hata Ayıklama (Geleneksel)

– Doğrulama ve Geçerleme (Verification and

Validation)

• Hata Önleme

–Kalite Güvence (Quality Assurance)

–Test Güdümlü Geliştirme (TDD)

Hata Önleme > Hata Ayıklama

Yazılım Kalitesini Belirleyen Özellikler

YZM 410 - Yazılım Kalite Güvencesi

• Yazılım kalitesini belirleyen özellikleri 3 ana başlık

altında toplayabiliriz;

Yazılımın çalışmasına ilişkin özellikler,

Yazılımın gelişmesine ilişkin özellikler,

Yazılımın uyumluluğuna ilişkin özellikler

32

Yazılımın Çalışmasına İlişkin Özellikler

YZM 410 - Yazılım Kalite Güvencesi

• Doğruluk (Correctness): Yazılımın öngörülen tüm işlevleri istenilen

şekilde, doğru ve yeterli hassaslıkla yerine getirebilmesidir.

• Güvenilirlik (Reliability): Sistemin işlevlerinde bir kesintiye

uğramadan çalışmaya devam edebilme özelliğidir.

• Verimlilik (Efficiency): Yazılım işlevlerini yerine getirirken sistem

donanımı uygun şekilde kullanmalıdır.

• Korunmuşluk (Immunity): Yazılım, yetkisiz kişilerin yapabilecekleri

değişikliklere ve verebilecekleri zararlara karşı sistemi koruma altına

alabilmelidir.

• Kullanılabilirlik (Usability): Üretilen yazılımda kullanıcıların

rahatlıkla kullanabilmesi için gerekli kolaylıklar sağlanmalı, özellikle

kullanıcı arayüzü düzenli, estetik ve kullanımı kolay olmalıdır.

33

Yazılımın Gelişmesine İlişkin Özellikler

YZM 410 - Yazılım Kalite Güvencesi

• Bakım Kolaylığı (Maintainability): Başka bir yazılım geliştirici kişi

ya da grup tarafından yazılımın bakımının yapılabilmesi için kaynak

kodun anlaşılabilir şekilde yazılmış olması, iyi belgelendirilmesi, sorun

çözümlemesinin ve testinin kolay olması gerekir.

• Esneklik (Flexibility): Bir yazılım her zaman için kullanıcı isterlerine

göre yeniden uyarlanabilir özelliğe sahip olmalıdır. Sistemde gerekli

değişiklikler uygun bir şekilde ve kolayca yapabilmelidir.

• Sınanabilirlik (Testability): Geliştirici için doğrudan önem taşıyan bu

özellik, sistemin veya bir bölümün test edilebilir olma özelliğini açıklar.

34

Yazılımın Uyumluluğuna İlişkin Özellikler

YZM 410 - Yazılım Kalite Güvencesi

• Taşınabilirlik (Portability): Yazılımın bir yazılım/donanım ortamından

diğerine kolay taşınabilir olması özelliğidir.

• Tekrar kullanılabilirlik (Reusability): Geliştirici açısından giderek

büyük önem taşıyan bu özellik, bazı yazılım parçalarının başka

sistemlerde ne ölçüde kullanılabilir olduğunu gösterir.

• Uyumluluk (Congeniality): Bir yazılım ürünü daha önce üretilmiş olan

veya beraber çalışan diğer ürünlerle tam uyumlu olmalıdır. Birbiriyle

etkileşen sistemler ortak özelliklere sahip olarak yaratılmalıdır.

35

36

Yazılımda Kalite Ölçümü

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

• Geri Bildirim

o Yazılımın kalitesinin ölçmenin en basit yöntemi

geri bildirimlerdir.

• Kod Kalitesi İncelenmesi ile

o Kod Metriklerine bakılması

o Kod Yeniden İncelenmesi

o Birim Testlerinin yapılması

37

Yazılım Kalitesi (devam...)

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

Kötü tasarımlar kalitesiz

yazılımların ortaya çıkmasındaki

en büyük etmenlerdendir.

Kötü Tasarım belirtilerini genel olarak şöyle

gruplandırabiliriz:

1. Esnemezlik (Rijidite)

2. Kırılganlık(Fragility)

3. İmmobalite

38

Kötü Tasarımın Belirtileri (devam...)

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

• Genel olarak esnemezlik, bir

sistemin değişime karşı

gösterdiği direnç olarak

tanımlanabilir.

• Esnemezliğin ölçütü regresyon

olarak adlandırılır.

39

Kötü Tasarımın Belirtileri - Esnemezlik

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

• Bir yazılım sistemi zaman içinde değişen ve yeni

gündeme gelen gereksinimleri karşılayabilmelidir.

Eğer bir değişim ve gelişime karşı sistem, aşırı

direnç gösteriyorsa ve hatta değişime izin

vermiyorsa bu esnemez bir sistemdir.

• İyi bir tasarımda regresyonun düşük

olması beklenir.

• Düşük regresyonlu sistemlerde olası

değişimler büyük sorunlara neden

olmadan yapılabilmektedir.

• Bir sistem ne kadar esnemez ise o kadar

kırılgandır.

40

Kötü Tasarımın Belirtileri - Esnemezlik

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

• Yazılım sistemleri

olabildiğince esnek

tasarlanmalı dolayısıyla

daha az kırılgan olmalıdır.

41

Kötü Tasarımın Belirtileri - Kırılganlık

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

• Muhtemel değişikliklere daha az direnç

gösteren yani daha az kırılgan tasarlanmalıdır.

• Aksi takdirde yapılacak bir

değişiklik, sistemde domino

etkisi yaratıp, zincirleme bir

şekilde birden çok şeyin

değişmesini gerektirebilir.

42

Kötü Tasarımın Belirtileri - Kırılganlık

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

• Değişimler yönetilemez hale gelir ve sistemi

çökmeye (katastrofi) götürebilir.

• Yazılım sistemleri modüler bir şekilde

tasarlanmalıdır.

• Bir projede kullanılmış olan herhangi bir

bileşenin farklı bir projeye taşınıp orada da

kullanılabilmesi "yeniden kullanılabilirlik

(reusability)" olarak bilinir.

43

Kötü Tasarımın Belirtileri - İmmobilite

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

• Pratikte çok kolay ve sorunsuz

olabiliyorken çoğu zaman da ya çok zor

ya da imkansız olmaktadır.

• İmmobilite diye bilinen bu durumun

sebebi; genelde bağımlılıkların sayısı ve

derinliğiyle yakından ilgilidir.

44

Kötü Tasarımın Belirtileri - İmmobilite

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

Yararlanılan Kaynaklar

45

• Aykut Taşdelen, C++, Java ve C# ile UML ve Dizayn

Paternleri, Pusula Yayıncılık, İstanbul, 2014

• Eric Freeman, Head First Design Patterns, O'Reilly

Media,2004

• Stephen Stelting & Olav Maassen, Applied Java™

Patterns, Prentice Hall PTR ,2001

• http://www.AlgoritmaveProgramlama.com

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı

46

İYİ ÇALIŞMALAR…

Yrd. Doç. Dr. Deniz KILINÇ

deniz.kilinc@cbu.edu.tr

Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı