Upload
others
View
26
Download
1
Embed Size (px)
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Ç
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı