SlideShare a Scribd company logo
1 of 28
nasıl

çalıştığını anlamadan

kontroller arkasına
tekrardan yaz
uzun süre
deneme amaçlı

devasa bir sınıf
başarılı bir şekilde kullandığınız

atıl olmuş kod
kopya
özelleştirme
hata mesajını

3ncü parti bir bileşende
gizlediniz
Andrew Koenig, 1995

Şöyle Yorumlayabiliriz : AntiPattern
görünüşte(yüzeysel anlamda) çözüm zannedilen bir
Pattern gibidir, ama aslında değildir.
• İlk bakıldığında ideal gibi görünen ama zaman içerisinde geliştirilmekte olan
ürüne olumsuz etkilerde bulunan, farklı kategorilerden disiplin ve
yaklaşımların oluşturduğu çözümler bütünü.
• Dünün en popüler çözümü bugünün AntiPattern’ i olabilir.
• Bir Pattern çözdüğünden daha fazla problem oluşturuyorsa AntiPattern’ dir.
• Bir AntiPattern, mimari kavramlar ile gerçek dünya uyarlamaları arasındaki
boşluğu dolduran köprüdür.
• Tasarım kalıplarının doğal bir uzantısıdır.

Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Favori bir çözümün evrensel anlamda
kabul gördüğünü varsaymak.

Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Var olan bir çözüm
yerine ondan daha
kötü olan özel bir
çözüm üretme hatasına
düşmek.

Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Daha generic bir
çözüm üretmek yerine
var olan kodları
kopyalayarak
geliştirme yapmak.

Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Lüzumsuz veya düşük
kaliteli kodları, kaldırma
maliyetlerinin yüksek
olması veya ön
görülemeyen sebepler
nedeniyle barındırmaya
devam etmek.

Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Her hangi bir amaçla
kullanılmayan bir sistem
parçasını tutmak/unutmak.

Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Desen ve metodları ne/nasıl/niçin
olduğunu anlamadan kullanmak.

Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Özellikle kod yapılarının kötü kullanılması nedeniyle güç
anlaşılır programların oluşması.

Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Kullanıcıya yakalanan bir hata ile
ilişkili ya hiçbir şey
gösterilmemesi ya da anlamlı bir
mesaj verilmemesi.
Ayrıca Stack izlerini Exception’ ın
ele alındığı sürede silinmesi ve
hata ayıklamaya engel olunması.

Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Bir projenin analizine
orantısız ölçüde yüksek
efor harcamak.

Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Bir sistemin, dışarıdan sağlanan bir bileşene aşırı
bağımlı olacak şekilde yazılması.

Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Ticari bir yazılımın
modifiye edilmesinin
oluşturduğu bakım yükü.

Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Tasarımın tek bir
parçasının-ki burada
kastedilen bir sınıftır- çok
fazla sayıda fonksiyona
konsantre olması.

Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Soyutlama kullanmadan
arayüz üzerinde doğrudan
uygulama mantığı kodlamak.

Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Bir projeyi gereğinden daha
karmaşık ve güçlü hale
getirmek için kaynak
harcamak.

Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
Software Engineering
Software Design Object-Oriented Design

Abstraction inversion
Ambigous viewpoint
Big ball of mud
Database-as-IPC
Gold planting
Inner-platform effect
Input kludge
Interface bloat

Magic pushbutton
Race Hazard
Stovepipe System

Anemic domain model
BaseBean
Call super
Circle-ellipse problem
Circular Dependency
Constant interface

God Object

Object cesspool
Object orgy
Polergeists
Sequential coupling
Yo-yo problem

Programming

Accidential complexity
Action at a distance
Blind Faith

Boat anchor
Busy waiting
Caching failure

Cargo cult programming
Coding by exception

Error hiding
Hard code

Lava flow

Methodological Configuration Management

Copy and past Programming
Golden Hammer
Imporability factor
Not invented here
Invented here
Premature Optimization
Programming by Permutation

Reinventing the square wheel
Silver bullet
Tester driven development

Loop-switch sequence
Magic numbers
Magic strings
Repeating yourself
Shotgun surgery
Soft code

Spaghetti code
Lasagna Code

Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt

Dependency hell
DLL hell
Extension conflict
JAR Hell
Social and Business Operations

Project Management

Organizational

Analysis Paralysis

Avalanche

Cash cow

Death march

Design by commitment

Groupthink

Escalation of commitment

Overengineering

Management by perkele

Smoke and mirrors

Management by objectives

Analysis

Software bloat

Moral hazard
Mushroom management
Stovepipe or Silos

Vendor lock-in
Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt

Bystander apathy
AntiPatterns: Refactoring
Software, Architectures, and Projects
in Crisis
www.AntiPatterns.com
The Patterns Handbook:
Techniques, Strategies, and
Applications (SIGS Reference Library)

Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt

More Related Content

Similar to Gizli Tehlike : AntiPatterns

ABAP mimarisi hakkında yeni bir kitap: "Design Patterns in ABAP Objects"
ABAP mimarisi hakkında yeni bir kitap: "Design Patterns in ABAP Objects"ABAP mimarisi hakkında yeni bir kitap: "Design Patterns in ABAP Objects"
ABAP mimarisi hakkında yeni bir kitap: "Design Patterns in ABAP Objects"Dr. Kerem Koseoglu
 
CADENAS PARTsolutions - Stratejik Parça Yönetim Sistemi
CADENAS PARTsolutions - Stratejik Parça Yönetim SistemiCADENAS PARTsolutions - Stratejik Parça Yönetim Sistemi
CADENAS PARTsolutions - Stratejik Parça Yönetim SistemiAkın Terzi
 
Web KullanılabilirliliğIi
Web KullanılabilirliliğIiWeb KullanılabilirliliğIi
Web KullanılabilirliliğIiAytac Mestci
 
Implementation.pptx
Implementation.pptxImplementation.pptx
Implementation.pptxglkabakc
 
Yazılım mimarisi yazılım müh.
Yazılım mimarisi yazılım müh.Yazılım mimarisi yazılım müh.
Yazılım mimarisi yazılım müh.Hüseyin Örer
 
7. SINIF URetiyorum etkinliği 5/10
7. SINIF URetiyorum etkinliği 5/107. SINIF URetiyorum etkinliği 5/10
7. SINIF URetiyorum etkinliği 5/10osman keskin
 
Eş zamanlı mühendislik
Eş zamanlı mühendislik Eş zamanlı mühendislik
Eş zamanlı mühendislik akyolhulyanur
 
Analist Eğitimi - Tüm Bölümler - [535 Slides]
Analist Eğitimi - Tüm Bölümler -  [535 Slides]Analist Eğitimi - Tüm Bölümler -  [535 Slides]
Analist Eğitimi - Tüm Bölümler - [535 Slides]Erol Bozkurt
 
GDO'suz Yazılım Geliştirme Teknikleri
GDO'suz Yazılım Geliştirme TeknikleriGDO'suz Yazılım Geliştirme Teknikleri
GDO'suz Yazılım Geliştirme TeknikleriLemi Orhan Ergin
 
Yönetici Denetçi ve Son Kullanıcı Bilişim Akademisi
Yönetici Denetçi ve Son Kullanıcı Bilişim AkademisiYönetici Denetçi ve Son Kullanıcı Bilişim Akademisi
Yönetici Denetçi ve Son Kullanıcı Bilişim Akademisialinizam99
 
Mühendislik problemlerinin bilgisayar ortamında sayısal analiz yöntemleriyle...
Mühendislik problemlerinin  bilgisayar ortamında sayısal analiz yöntemleriyle...Mühendislik problemlerinin  bilgisayar ortamında sayısal analiz yöntemleriyle...
Mühendislik problemlerinin bilgisayar ortamında sayısal analiz yöntemleriyle...Abdurrahman Tunç
 
Yazılım Projelerine Scrum Yazılım Geliştirme Modelinin Uygulanması ve Scrum Y...
Yazılım Projelerine Scrum Yazılım Geliştirme Modelinin Uygulanması ve Scrum Y...Yazılım Projelerine Scrum Yazılım Geliştirme Modelinin Uygulanması ve Scrum Y...
Yazılım Projelerine Scrum Yazılım Geliştirme Modelinin Uygulanması ve Scrum Y...Cenk Derinozlu
 
Cadenas Elektronik Ürün Katalogu
Cadenas Elektronik Ürün KataloguCadenas Elektronik Ürün Katalogu
Cadenas Elektronik Ürün KataloguAkın Terzi
 

Similar to Gizli Tehlike : AntiPatterns (20)

ABAP mimarisi hakkında yeni bir kitap: "Design Patterns in ABAP Objects"
ABAP mimarisi hakkında yeni bir kitap: "Design Patterns in ABAP Objects"ABAP mimarisi hakkında yeni bir kitap: "Design Patterns in ABAP Objects"
ABAP mimarisi hakkında yeni bir kitap: "Design Patterns in ABAP Objects"
 
CADENAS PARTsolutions - Stratejik Parça Yönetim Sistemi
CADENAS PARTsolutions - Stratejik Parça Yönetim SistemiCADENAS PARTsolutions - Stratejik Parça Yönetim Sistemi
CADENAS PARTsolutions - Stratejik Parça Yönetim Sistemi
 
Sistem İyileştirme Programları
Sistem İyileştirme ProgramlarıSistem İyileştirme Programları
Sistem İyileştirme Programları
 
Web KullanılabilirliliğIi
Web KullanılabilirliliğIiWeb KullanılabilirliliğIi
Web KullanılabilirliliğIi
 
Agile proje yönetimi
Agile proje yönetimiAgile proje yönetimi
Agile proje yönetimi
 
Implementation.pptx
Implementation.pptxImplementation.pptx
Implementation.pptx
 
Wireframing Sunum
Wireframing SunumWireframing Sunum
Wireframing Sunum
 
Yazılım mimarisi yazılım müh.
Yazılım mimarisi yazılım müh.Yazılım mimarisi yazılım müh.
Yazılım mimarisi yazılım müh.
 
Design Patterns in PHP
Design Patterns in PHPDesign Patterns in PHP
Design Patterns in PHP
 
7. SINIF URetiyorum etkinliği 5/10
7. SINIF URetiyorum etkinliği 5/107. SINIF URetiyorum etkinliği 5/10
7. SINIF URetiyorum etkinliği 5/10
 
Eş zamanlı mühendislik
Eş zamanlı mühendislik Eş zamanlı mühendislik
Eş zamanlı mühendislik
 
Analist Eğitimi - Tüm Bölümler - [535 Slides]
Analist Eğitimi - Tüm Bölümler -  [535 Slides]Analist Eğitimi - Tüm Bölümler -  [535 Slides]
Analist Eğitimi - Tüm Bölümler - [535 Slides]
 
Cevik Yaklasim, Scrum ve XP Pratikleri
Cevik Yaklasim, Scrum ve XP PratikleriCevik Yaklasim, Scrum ve XP Pratikleri
Cevik Yaklasim, Scrum ve XP Pratikleri
 
Ibe kitap kullanılabilirlik 2-testler
Ibe kitap kullanılabilirlik 2-testlerIbe kitap kullanılabilirlik 2-testler
Ibe kitap kullanılabilirlik 2-testler
 
GDO'suz Yazılım Geliştirme Teknikleri
GDO'suz Yazılım Geliştirme TeknikleriGDO'suz Yazılım Geliştirme Teknikleri
GDO'suz Yazılım Geliştirme Teknikleri
 
Yönetici Denetçi ve Son Kullanıcı Bilişim Akademisi
Yönetici Denetçi ve Son Kullanıcı Bilişim AkademisiYönetici Denetçi ve Son Kullanıcı Bilişim Akademisi
Yönetici Denetçi ve Son Kullanıcı Bilişim Akademisi
 
Çevik Yaklaşım ve Scrum
Çevik Yaklaşım ve ScrumÇevik Yaklaşım ve Scrum
Çevik Yaklaşım ve Scrum
 
Mühendislik problemlerinin bilgisayar ortamında sayısal analiz yöntemleriyle...
Mühendislik problemlerinin  bilgisayar ortamında sayısal analiz yöntemleriyle...Mühendislik problemlerinin  bilgisayar ortamında sayısal analiz yöntemleriyle...
Mühendislik problemlerinin bilgisayar ortamında sayısal analiz yöntemleriyle...
 
Yazılım Projelerine Scrum Yazılım Geliştirme Modelinin Uygulanması ve Scrum Y...
Yazılım Projelerine Scrum Yazılım Geliştirme Modelinin Uygulanması ve Scrum Y...Yazılım Projelerine Scrum Yazılım Geliştirme Modelinin Uygulanması ve Scrum Y...
Yazılım Projelerine Scrum Yazılım Geliştirme Modelinin Uygulanması ve Scrum Y...
 
Cadenas Elektronik Ürün Katalogu
Cadenas Elektronik Ürün KataloguCadenas Elektronik Ürün Katalogu
Cadenas Elektronik Ürün Katalogu
 

More from Burak Selim Şenyurt (16)

Monolitik Yapılarda Teknik Borçlardan Kurtulmak
Monolitik Yapılarda Teknik Borçlardan KurtulmakMonolitik Yapılarda Teknik Borçlardan Kurtulmak
Monolitik Yapılarda Teknik Borçlardan Kurtulmak
 
Bugün Yarınların için Ne Yapacaksın?
Bugün Yarınların için Ne Yapacaksın?Bugün Yarınların için Ne Yapacaksın?
Bugün Yarınların için Ne Yapacaksın?
 
Kaosu Körüklemek
Kaosu KörüklemekKaosu Körüklemek
Kaosu Körüklemek
 
Yazılımda Sağlam Adımlar Atmak
Yazılımda Sağlam Adımlar AtmakYazılımda Sağlam Adımlar Atmak
Yazılımda Sağlam Adımlar Atmak
 
Bir .Net Geliştiricisinin Ruby ile İmtihanı
Bir .Net Geliştiricisinin Ruby ile İmtihanıBir .Net Geliştiricisinin Ruby ile İmtihanı
Bir .Net Geliştiricisinin Ruby ile İmtihanı
 
SOA Gerçekleri
SOA GerçekleriSOA Gerçekleri
SOA Gerçekleri
 
Finans Sektöründe Verimli Yazılımcı Olabilmek
Finans Sektöründe Verimli Yazılımcı OlabilmekFinans Sektöründe Verimli Yazılımcı Olabilmek
Finans Sektöründe Verimli Yazılımcı Olabilmek
 
Anti-Patterns
Anti-PatternsAnti-Patterns
Anti-Patterns
 
C# Akademi 2005
C# Akademi 2005C# Akademi 2005
C# Akademi 2005
 
Netron Techweek 2007 WCF
Netron Techweek 2007 WCFNetron Techweek 2007 WCF
Netron Techweek 2007 WCF
 
Yazilim Zirvesi 2008
Yazilim Zirvesi 2008Yazilim Zirvesi 2008
Yazilim Zirvesi 2008
 
Ready to Rock
Ready to RockReady to Rock
Ready to Rock
 
C# 4.0 new features - innova
C# 4.0   new features - innovaC# 4.0   new features - innova
C# 4.0 new features - innova
 
Bankacılık ve SOA
Bankacılık ve SOABankacılık ve SOA
Bankacılık ve SOA
 
Trakya Üniversitesi Workshop
Trakya Üniversitesi WorkshopTrakya Üniversitesi Workshop
Trakya Üniversitesi Workshop
 
Kariyerini Çiz
Kariyerini ÇizKariyerini Çiz
Kariyerini Çiz
 

Gizli Tehlike : AntiPatterns

  • 1.
  • 2.
  • 3. nasıl çalıştığını anlamadan kontroller arkasına tekrardan yaz uzun süre deneme amaçlı devasa bir sınıf
  • 4. başarılı bir şekilde kullandığınız atıl olmuş kod kopya özelleştirme hata mesajını 3ncü parti bir bileşende gizlediniz
  • 5.
  • 6. Andrew Koenig, 1995 Şöyle Yorumlayabiliriz : AntiPattern görünüşte(yüzeysel anlamda) çözüm zannedilen bir Pattern gibidir, ama aslında değildir.
  • 7. • İlk bakıldığında ideal gibi görünen ama zaman içerisinde geliştirilmekte olan ürüne olumsuz etkilerde bulunan, farklı kategorilerden disiplin ve yaklaşımların oluşturduğu çözümler bütünü. • Dünün en popüler çözümü bugünün AntiPattern’ i olabilir. • Bir Pattern çözdüğünden daha fazla problem oluşturuyorsa AntiPattern’ dir. • Bir AntiPattern, mimari kavramlar ile gerçek dünya uyarlamaları arasındaki boşluğu dolduran köprüdür. • Tasarım kalıplarının doğal bir uzantısıdır. Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
  • 8.
  • 9.
  • 10.
  • 11. Favori bir çözümün evrensel anlamda kabul gördüğünü varsaymak. Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
  • 12. Var olan bir çözüm yerine ondan daha kötü olan özel bir çözüm üretme hatasına düşmek. Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
  • 13. Daha generic bir çözüm üretmek yerine var olan kodları kopyalayarak geliştirme yapmak. Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
  • 14. Lüzumsuz veya düşük kaliteli kodları, kaldırma maliyetlerinin yüksek olması veya ön görülemeyen sebepler nedeniyle barındırmaya devam etmek. Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
  • 15. Her hangi bir amaçla kullanılmayan bir sistem parçasını tutmak/unutmak. Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
  • 16. Desen ve metodları ne/nasıl/niçin olduğunu anlamadan kullanmak. Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
  • 17. Özellikle kod yapılarının kötü kullanılması nedeniyle güç anlaşılır programların oluşması. Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
  • 18. Kullanıcıya yakalanan bir hata ile ilişkili ya hiçbir şey gösterilmemesi ya da anlamlı bir mesaj verilmemesi. Ayrıca Stack izlerini Exception’ ın ele alındığı sürede silinmesi ve hata ayıklamaya engel olunması. Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
  • 19. Bir projenin analizine orantısız ölçüde yüksek efor harcamak. Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
  • 20. Bir sistemin, dışarıdan sağlanan bir bileşene aşırı bağımlı olacak şekilde yazılması. Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
  • 21. Ticari bir yazılımın modifiye edilmesinin oluşturduğu bakım yükü. Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
  • 22. Tasarımın tek bir parçasının-ki burada kastedilen bir sınıftır- çok fazla sayıda fonksiyona konsantre olması. Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
  • 23. Soyutlama kullanmadan arayüz üzerinde doğrudan uygulama mantığı kodlamak. Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
  • 24. Bir projeyi gereğinden daha karmaşık ve güçlü hale getirmek için kaynak harcamak. Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt
  • 25.
  • 26. Software Engineering Software Design Object-Oriented Design Abstraction inversion Ambigous viewpoint Big ball of mud Database-as-IPC Gold planting Inner-platform effect Input kludge Interface bloat Magic pushbutton Race Hazard Stovepipe System Anemic domain model BaseBean Call super Circle-ellipse problem Circular Dependency Constant interface God Object Object cesspool Object orgy Polergeists Sequential coupling Yo-yo problem Programming Accidential complexity Action at a distance Blind Faith Boat anchor Busy waiting Caching failure Cargo cult programming Coding by exception Error hiding Hard code Lava flow Methodological Configuration Management Copy and past Programming Golden Hammer Imporability factor Not invented here Invented here Premature Optimization Programming by Permutation Reinventing the square wheel Silver bullet Tester driven development Loop-switch sequence Magic numbers Magic strings Repeating yourself Shotgun surgery Soft code Spaghetti code Lasagna Code Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt Dependency hell DLL hell Extension conflict JAR Hell
  • 27. Social and Business Operations Project Management Organizational Analysis Paralysis Avalanche Cash cow Death march Design by commitment Groupthink Escalation of commitment Overengineering Management by perkele Smoke and mirrors Management by objectives Analysis Software bloat Moral hazard Mushroom management Stovepipe or Silos Vendor lock-in Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt Bystander apathy
  • 28. AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis www.AntiPatterns.com The Patterns Handbook: Techniques, Strategies, and Applications (SIGS Reference Library) Anti-Patterns | burak selim şenyurt | about.me/buraksenyurt

Editor's Notes

  1. Vaktiyle zamanında Z sektöründe var olan kürsel ölçekli X isimli bir firma varmış. Firmanın yazılım geliştirme alanında hatırı sayılır sayıda elamanı bulunmaktaymış. Yazılım departmanı içerisinde bir kaç grup bulunuyormuş. Bu guruplar yine vaktiyle zamanında tüm kurumu ilgilendiren bir takım süreçlerin önemli bir parçası üzerinde çalışmaya başlamışlar. Ancak farklı dönemlerde. İstenen iş bir dönem bir ekipte, diğer bir dönme başka bir ekipte ele alınmış. Ürünün özellikle akademik destek isteyen önemli bir parçası için de V isimli Vendor’ la anlaşılmış. Vendor firma standart ürününü ilk başından itibaren ekiplerin kullanımına sunmuş. Lakin bu firma, X’ nin iş biriminden gelen özel istekler nedeniyle standart ürünlerini söz konusu firma için bazı noktalarda özelleştirmek zorunda kalmış. Üstelik sırf X firması istediği için uzmanlık alanı olmadığı halde arayüzler tasarlamış.Bir süre sonra V firması, ürününe ait bazı kütüphanelerin kaynak kodlarını da anlaşma gereği X firmasına vermiş. X firmasının yazılım ekipleri zaman içerisinde üzerine aldıkları bu ürünü alıp kendi ihtiyaçları doğrultusunda değiştirmişler. Ürünün zaman içinde devredildiği her ekip bazen aynı amaçlara hizmet eden kod parçalarını, karmaşıklıklarından dolayı tekrardan yazmak zorunda kalmış. Hatta kodlar tekrardan incelendiğinde hiç kullanılmayan, bir köşede unutulmuş, atıl olmuş parçalara da rastlanmış. Bazı noktalarda ise mecburen istekler için Vendor’ a gidilmesi gerekmiş. Bu istekler basit de olsa Vendor, X firmasına toplantı talepleri göndermiş. Analizler yapılması gerektiğini vurgulamış. Analizler ve uzun süren toplantılar nedeniyle yeni istekler çoğu zaman gecikmekteymiş. Ayrıca Vendor bu istekleri faturalamakta ve uzun sürede gerçekleştirmekteymiş. Sonunda X, söz konusu ürünü In-House olarak geliştirme kararı almış. Hem de uzun yıllar sonunda. Ancak ürünün kritik noktalarında yer alan bazı Vendor çözümleri şirketin ağı içerisinde öyle bir yayılmış ve kullanılmış ki, var olan sistemi çöpe atmak gibi bir alternatif söz konusu değilmiş. Yeni ekibin eski ürünün bazı özelliklerini alıp yeni çözümde kullanması ve bunu yaparken yeni çözümün mükemmel alt yapısını da tasarlaması gerekiyormuş. Eski ürünün özellikle veri katmanı tarafındaki oluşumunda da sıkıntılar bulunuyormuş. İsimlendirme standartları çoğu yerde ihlal edilmiş, düzgün bir domain yapısı kurgulanamamış, kurgulanmışsa da zaman içerisinde bozulmuş, veriler normalize edilmek zorunda kalacak tutulmuş, veriyi erişim için pek çok noktada tekrar eden işlevsellikler türemiş… İşin kötü tarafı ekibe verilen süre ve kaynak sayısı oldukça yetersizmiş. Daha da kötüsü ekibtençevik(Agile) olmaları ve son bir sene içerisinde diğer birimlerin yaptığı gibi Scrum metodolojisinde yürümeleri isteniyormuş. Ancak ekip daha önce çevik bir proje geliştirme tecrübesi yaşamamış.Bu kısa hikaye içerisinde bir çok AntiPattern tanımı bulundurmaktadır. Bu AntiPattern’ ler nedeniyle ürün çeşitli zaman dilimlerinde tıkanma notkasına gelmiş, bu yüzden yeniden yazılması söz konusu olmuştur.
  2. Anti Pattern terimi 1995’ de Koenig’ in Journal of Object Oriented Programming(ki doğrulatamadığım bilgilere göre bunun yerini Journal of Object Technology almıştır)’ de yayınlanan C++ köşesindeki PatternsandAntiPatterns makalesinde şu şekilde tanımlanmıştır;“Anti-pattern is justlikepattern, exceptthatinstead of solution it givessomethingthatlookssuperficiallylike a solution, but isn'tone." (Koenig, 1995)”Koenig’ in bu tanımı daha sonra Cambridge Üniversitesinin derlediği ThePatternsHandbook: Techniques, Strategies, and Applications (SIGS Reference Library) isimli kitapa da katılmıştır.Anti Pattern’ ler yazılım geliştirme de kötü çözüm yaklaşımları ve pratikleri olarak bilinirler. Söz gelimi tasarım desenleri, belli başlı problemlerin çözümünde standart pratikleri önerirken, Anti-Pattern’ ler tam tersine arzu edilmeyen ve sonrasında daha büyük problemlerin kapısını açan pratiklerin uygulanması olarak düşünülebilir. Aslında Anti-Pattern’ lerin tehlikeli tarafı bazı senaryolarda çözüm olarak kullanılmaları ve uygun çözüm yolu olarak düşünülmeleridir.Anti-Pattern’ ler aslında Design-Pattern’ lerin doğal bir uzantısı olarak yazılım geliştirme sürecinde tekrar eden bazı yanlışlarını ifade ederler ve özünde bu yanlışları engellemek, anlamak ve onlardan korunmak için gerekli bir takım tanımlamaları içerirler. Diğer yandan mimari kavramlarlar ile gerçek dünya uyarlamaları arasındaki boşluğu dolduran bir köprü olarak da vurgulanmıştır.
  3. Adı : TheBlogAyrıca Şu İsimlerle Bilinir : Winnebago veya TheGod ClassEn Sık Görüldüğü Seviye : Application(Uygulama Seviyesinde)Refactor Edilmiş Çözüm : Sorumlulukların tekrar gözden geçirilip yenilenmesi (Dağıtılması diyebiliriz)Refactor Çözümün Tipi : Software(Yazılımsal çözüm)Kök Sebepler : Temebellik, AcelecilikDengesizleştirdiği Güçler : Fonksiyonelliğin Yönetimi, Performans, KarmaşıklıkMizahi İfadesi : Bu sınıf gerçek anlamda mimarinin kalbini oluşturmaktadır.
  4. Daha önceden başarılı bir şekilde uygulanmış bir çözümün, sonraki problemlerde kullanılmaya çalışılması olarak düşünülebilir. Oysaki bazı problemler aynı yöntemler ve yaklaşımlar ile çözümlenemeyebilir. Bu biraz da çözümü arayan kişilerin daha önce başarılı bir şekilde uyguladıkları yaklaşımları sahiplenmesinden kaynaklanır. Örneğin tüm yazılımların SOA mimari bütünü içerisinde ele alınması gerektiğini düşünmek bu duruma örnek olarak verilebilir. (Ayrıca bir çekicimiz olduğunda tüm sorunların çivi olarak görme ihtimalimiz yüksektir)Diğer taraftan en sık görülen Anti-Pattern’ ler arasında yer alır.Söz konusu pattern’ in oluşmasının nedenlerinden birisi teknolojik gelişmelerden ekiplerin haberdar olmamasıdır. Bazı firmalar gerekli eğitimlerin getirdiği ek maliyetlerden kaçınır ve ekibi donatmaz.İstisnai Durum :Kullanımını geçerli kılan istisnai durumlar da vardır. Söz gelimi uzun soluklu ürünlerde Oracle veri tabanının kullanılması ve diğer çözümler için de ele alınması kabul edilebilir bir yaklaşımdır. Bankalarda bu tip veri tabanı seçimleri genellikle bir kez yapılır ve kolay kolay değiştirilmez.
  5. Bazı yazılım problemlerinin çözümünde kullanılacak olan yollar zaten standart ve bellidir. Üstelik bu çözümler için standart hale gelmiş mimari yaklaşımlar, ürünler ve alt yapılar mevcuttur. (Hatta tasarım kalıpları) Problemin bu tip yardımcılar ile çözülemeyeceğini düşünüp sıfırdan bir çözüm üretilmeye başlandığı hal tekerleğin yeniden keşfi olarak düşünülür ve bu anti-pattern’ in oluşmasına neden olur. Nitekim ekip söz konusu problemin çok özel olduğuna ve var olan pratikler ile ele alınamayacağına inanır.Genel sebepleri;Yazılım geliştirme projeleri arasında teknoloji transferi ve yeterli iletişimin(özellikle bilgi akışının) olmaması.Sürecin gerektirdiği sistemin baştan inşa edilmesi gerektiğine inanılması.İstisnai Durum :Bazı istisnai hallerde kabul edilebilir. Özellikle araştırma(Resource) nitelikli projelerde, öğrenme süreçlerinde ve bazı bilimsel çalışmalarda göz ardı edilebilir.
  6. Kaynaklarda Cut-Paste programming olarak da geçer. Çoğunlukla bir çözüm için yazılımın her hangi bir yerinde uygulanan bir kod parçasının, ihtiyaç olunan başka bir yerde aynen kopyalanarak kullanılmaya devam etmesidir. Bunun doğal sonucu olarak bir değişiklik olması halinde kodun yapıştırıldığı yerlere gidilmesi gerekecektir. Güncellemeler için fazla maliyetli eforlar sarf edilebilir. Hatalar gözden kaçabilir ve uygulamanın yanlış çalışma riski giderek artabilir. Söz konusu parçaları soyutlayıp nesne yönelimli dil temellerine uygun olacak şekilde ayrıştırmak önemlidir. Günümüzün gelişmiş yazılım mimari yaklaşımlarında bu tip bir durumun oluşması son derece azdır ama yine de günü kurtarma stratjisi burada da etkisini gösterebilir.Başka adları da vardır. ClipboardCoding, Software Cloning, Software Propogation gibi. İstisnai Durum :
  7. Bazen araştırma/resource amaçlı olarak başlayan yazılımlar ürüne dönüşürler. Ürüne dönüşme noktasında geriye doğru bakıldığında ne amaçla yazıldıkları belli olmayan(hatta yazan kişinin de şirketten ayrılmış olması sebebiyle kimsenin bilemediği) kod parçalarından oluşan bir tarihi antika oluşabilir. Öyleki bazı developer’ lara sorulduğunda ilgili kod parçasının hangi amaçla geliştirildiğini hatırlamayabilir bile(İstisnai bir durum ise gri veya ak saçlı geliştiricilerin bunu hatırlayabilmesidir)Bu durumun oluşmasının pek çok nedeni vardır. Örneğin projede görevlendirilip tek başına kodlama yapan bir geliştirici sebepler arasında sayılabilir(Single-Developer veya Lone Wolf written code)Sonuç olarak ürünün içeriğine bakıldığında müdahale edilmesi zor, modası geçmiş ve kullanılmayan kod parçaları içeren, üstüne sürekli yeni özellikler eklenirken hata ayıklaması da oldukça zorlaşan bir ürün ortaya çıkar.İçinde başka Anti-Pattern’ leri de barındırır diyebiliriz. Söz gelimi Boat Anchor, Spaghetti Code, Error Hiding vb…Kaynak kodun takibi de zorlaşır. Çözüm yollarından birisi Configuration Management’ tır.İstisnai Durum :Tabi oluşmasına müsaade edilebilecek durumlar da vardır ki bu durum çalışmanın bir araştırma çalışması olmasını gerektirir.
  8. «Daha sonra bu fonksiyona/kütüphaneye ihtiyacımız olabilir» denilerek yazılan fakat yazıldığı yerde unutulan kod parçalarının ortaya çıkarttığı durumdur. Unutulan kod parçaları yıllar sonra bırakıldıkları halleri ile kafalarda tam bir soru işareti oluşturabilirler. Neden yazıldıkları, ne amaçla kullanıldıkları bilinmeyebilir. Yazılımsal görünümü haricinde donanımsal tarafta da karşımıza çıkar. Örneğin artık demode olmuş, teknolojisi oldukça eskimiş bir bilgisayarın hasarlı bile olsa bir köşede durmaya devam etmesi/unutulması olarak da düşünülebilir.Aslında bir mini anti pattern’ dir.İstisnai Durum :
  9. Bu aslında bir inanışı sorgusuz sualsiz kabul etmekten dolayı isimlendirilmiş bir desendir. Çoğu zaman geliştirici bir çözüm için kullandığı bileşenleri, prensip ile desenleri, kod parçalarının nasıl çalıştığını/niye kullanıldığını bilmeden uygular. Bu sıkı sıkıya bağlılık aynı felsefeleri başka çözümlerde de kullanmaya çalışmasına yol açar. Bir nevi Copy-Paste Programming Anti-Pattern yaklaşımının bir sonucu olarak ortaya çıkabilir. Geliştirici çözüm için bir kod parçasını gerekli olup olmadığını ve nasıl çalıştığını anlamadan bir yerden bir yere taşıyarak uygulamaya çalışır.İstisnai Durum :
  10. Genellikle mantıksal bir tasarım bütünü içerisinde düşünülmeden hareket edildiğinde ortaya çıkar. Nesne yönelimli dil yetenekleri göz ardı edilir ve neredeyse her iş süreci için ayrı birer fonksiyonun yazılması söz konusudur. Bunun doğal sonucu olarak okunabilirlikten uzak, takibi oldukça zor bir kod bütünü ortaya çıkar. Yaşam döngüleri içerisinde sürekli olarak güncellenen programlar ve deneyimsiz geliştiriciler bu tip kodların oluşmasına sebebiyet verebilir.Nesne yönelimli olmayan dillerde daha sık rastlanır.Metotlar daha çok süreç odaklı yazılır hatta süreç adları olarak isimlendirilir.Nesneler arasında neredeyse hiç ilişki yoktur.Çoğu metot parametre almaz ve global seviyedeki sınıf değişkenlerini oluşturmakta kullanılır.Kodun yeniden kullanılabilirliği zordur.OOP temel özellikleri(kalıtım, çok biçimlilik, soyutlama) kullanılmaz.Bu tip kodları genellikle kodun sahibinden başkası anlamaz/anlamakta güçlük çeker ve hatta «bunu tekrar yazsam daha iyi olur» der.İstisnai Durum :Bazı ara yüz parçalarında implementasyonun iç içe olduğu hallerde göz ardı edilebilir. Özellikle bileşenin yaşam ömrünün kısa olduğu ve sistemin geri kalanından tamamen ayrıldığı/izole edildiği durumlarda göz yumulabilir. Örneğin bir web ara yüzünde yoğun javascript kullanıldığı hallerde sayfa kodunun bu şekilde karmaşıklaşması gibi.
  11. Bazen geliştiriciler, asıl hata mesajını son kullanıcıdan saklama veya anlamlı bir gerekçe göstermeme yolunu tercih ederler. Çoğunlukla nesne yönelimli dillerin kullanıldığı senaryolarda Exception Handling noktasında kendisini gösterir. Kullanıcının oluşan hata ile ilişkili olarak anlamlı bir mesajla uyarılmayışı çok doğal olarak sorunun anlaşılamaması demektir. Bu anti-pattern oluştuğunda geliştirici genellikle exception handling’ i ezer ve uç noktalara anlamlı mesajlar vermeyi ihmal eder.Örnek bir senaryo;A fonksiyonunun B bileşenindeki bir servise ihtiyacı olduğunu düşünelim. B bileşeni de A’dan gelen isteği yerine getirmek için C bileşenine ihtiyaç duysun. C kendi içinde bir exception alırsa bunu B bileşenine iletebilir. B bileşeni de C’den gelen hatayı rethrow ederek A’ ya iletebilir. A bu noktada gelen hatayı handle edecek yeterli bilgiye sahip olamayabilir. Bu durumda A şu 3 alternatiften birisini seçer; ya hatayı rethrow eder, ya hatayı yakalar onu loglar ve yine rethrow eder ya da hatayı yakalar ama anlamlı olabilecek hiçbir şey yapmaz. Deneyimsiz programcılar genellikle 3ncü hali seçer ve hatayı gizleyerek anlamlı bir çıktı üretmezler. Burada en büyük problem şudur. Belki de uygulama için kritik olan ve işletilen sürecin doğru yürümesine engel olan bir durum oluşmuştur ama son kullanıcı/uç noktadaki program error-hiding nedeniyle bunun farkında bile değildir.İstisnai Durum :
  12. Analiz FelciBazı projelerin analiz safhası hem uzun sürer hem de kullanılan kaynakların(eleman gibi) maliyeti yüksek ve fazla olur. Çoğunlukla waterfall adı verilen yazılım geliştirme metodolojisinde karşımıza çıkar. Analizin uzamasının belli nedenleri vardır. Bunlardan birisi gereksiz detaylara çok fazla girilmesidir. Mükemmel bir analiz olmadan tasarım yapılamayacağı ve ilerlenemeyeceği varsayılır. Bu Anti-Pattern ayrıca günümüzün popüler çevik süreçlerinin doğmasında da rol almış olabilir. Nitekim çevik süreçler iterafit yaklaşımı tercih ederlerken iterasyonlar sonucunda işe yarar bir ürünün veya paketin müşteriye sunulmasına odaklanırlar.İstisnai Durum : Kitaba göre bu deseni haklı çıkartacak hiçbir istisnai durum yoktur.
  13. Müşteri olarak bir üreticinin ürünü veya hizmetine sıkı sıkıya bağlı olunan hallerde ortaya çıkar. Öyleki farklı bir üreticinin ürününe geçiş yapmak için ekstra maliyet altına girmek gerekebilir. Sıklıkla verilen örneklerden birisi SIM kartla satılan ve başka SIM kartla çalışmayan telefonlardır. Bir başka örnek müzik sistemi içeriye gömülü olan otomobillerdir. Bunlarda müzik sistemi değiştirmek epeyce külfetli iştir. Ya da bir servis sağlayıcısı tarafından sunulan hizmet veya satın alınan bir yazılım bileşeninin herhangi bir ara katman geliştirilmeksizin doğrudan kullanılması bu halin oluşması anlamına gelir.Bu duruma düşülmesinin belli başlı sebepleri vardır. Örneğin sadece Pazar ve satış bilgilerine bakılıp ürünün teknik detayı atlandığında kolayca ortaya çıkabilir. Diğer yandan uygulamanın sıkı sıkıya bağlı olduğu yazılımdan kopartılmasına uygun teknik bir çözüm veya maliyet modeli olmadığında da oluşabilir.Durumun oluşmasını engellemek için uygulama bazında katmanları iyi bir şekilde izole etmek ve vendor ürünü yerine yeri geldiğinde bir başkasını koyabilme kabiliyetini oluşturabilmek gerekir. Bu da ürün ile onu kullanan asıl uygulama arasında izole edilmiş bir katmanın olması ile sağlanabilir.İstisnai Durum :Bir uygulamanın gerektirdiği harici çözümleri büyük oranda karşılayan tek bir Vendor ile çalışılıyorsa göz yumulabilir.
  14. Bir Mini-Anti Pattern olarak tanımlanmıştır.Genellikle çözümlerde kullanılan 3ncü parti bileşenlerde değişiklikler yapıldığında ortaya çıkar. Bileşenin destekçisinin yapacağı bir güncelleme sonrasında, hali hazırda yapılmış olan değişiklikler ortadan kalkar. Kalkması istenmiyorsa bu durumda entegre edilmesi için epeyce efor sarf edilmesi gerekebilir. Bu tip bileşenlerde değişiklik yapmaktan kaçınmak daha doğrudur. Pek tabi bileşen sahibi bir süre sonra ürüne olan desteğini de bırakabilir.Bu durumun önüne geçmek için aynen VendorLock-In de olduğu gibi bileşenleri izole edilmiş bir katman ile asıl uygulamadan ayrıştırma yolu tercih edilebilir.İstisnai Durum :
  15. Bir sınıf içerisine çok sayıda fonksiyonelliğin gömüldüğü(60dan fazla metot) ve sınıf ile ilişkili verilerin ayrı veri sınıflarında tutularak bu sınıfla ilişkilendirildiği hal olarak düşünülebilir. Process odaklı procedural yaklaşım da diyebiliriz. Bu durumda tüm iş yükünü üstlenen sınıfların bakımı, genişletilmesi, iş mantıklarının kolayca okunur olarak içerisinde yer alması oldukça zorlaşır. Karmaşıklığın yanında belleğe yüklenmesi de zaman alan nesneler ortaya çıkar. Sınıf daha da kalabalıklaştığında yeni istekler için güncellemelerin yapılması zorlaşacaktır. Üstelik iş mantıklarının da yeteri kadar soyutlanamaması nedeniyle tekrarlı kodların önüne geçilmesi mümkün olmayacak ortak iş mantıkları farklı kanallara sunulamayacaktır.BLOB Anti Pattern olarak da anılır.Anti-Patterns kitabının konuya ilişkin örnekte PowerBuilder ile tasarlanan bir GUI ele alınmıştır.İstisnai Durum :Bazı istisnai durumlarda oluşmasına müsaade edilebilir. Örneğin miras olarak alınan çok eski sistemlerin sarmalanarak daha kolay erişilebilmesi ve yeni nesil ortamlara basit bir katman üzerinden sunulması hallerinde göz önüne alınabilir. Örneğin bir donamımın (Fax makinesi gibi) driver yazılımını .Net veya Java tabanlı bir uygulamada rahat kullanabilmek için onu sarmallayan kütüphaneler God Object olsalar dahi izolasyonu sağladıklarından tercih edilebilirler.
  16. Bu desen GUI tipindeki uygulamalarda ortaya çıkar. Arayüz tarafı ile iş mantıkları genellikle buton gibi bir kontrol arkasına gömülür. Ara yüz kontrollerine ait doğrulama işlemleri gibi operasyonlar butona basılmadan önce, çalıştırılması gereken iş mantıkları ise butona basıldıktan sonra devreye giren olay metodlarında ele alınır. Doğal olarak iş mantıkları soyutlanmamış olacağından arayüz ile sıkı sıkıya bağlı hale gelir ve ilgili iş birimleri farklı yerlerde kullanılmak istendiğinde işler zorlaşır. Kodun okunabilirliği de ortadan kalkar. İstisnai Durum :
  17. Bir uygulamanın gereğinden ve ihtiyaç duyulandan fazla kompleks geliştirilmesidir. İstenen şeyler çok basit seviyede olabilecekken karmaşıklaştırılır. Bu bir nevi sedan tipindeki aile arabasının 340 KM süratle gidebilmesini sağlayacak teknolojiyi kullanarak üretim yapmaya benzer. Sonuçta üretim maliyeti yükselir. Kısacası bir problemi olduğundan daha karmaşıkmış gibi algılayıp çözmeye çalışmak olarak düşünülebilir.İstisnai Durum :
  18. Sayısız Anti-Pattern vardır ve bunlar belirli kategoriler halinde ayrışmaktadır.Wikipedia’ ya baktığımızda Anti-Pattern’ lerin aşağıdaki gibi kategorilendirildiğini görürüz.Socialand Business OperationsOrganizationalProject ManagementAnalysisSoftware EngineeringSoftware DesignObject Oriented DesignProgrammingMethodologicalConfiguration ManagementHays W.”Skip” McCormick’ in AntiPatterns:RefactoringSoftware,Architectures, andProjects in Crisis a göre ise 3 ana kategori söz konusudur. Software DevelopmentSoftware ArchitectureSoftware Project Management
  19. http://proceedings.informingscience.org/InSITE2011/InSITE11p109-138Bulajic276.pdfwww.antipatterns.comAntiPatterns: Refactoring Software, Architectures, andProjects in Crisisby William J. Brown, Raphael C. Malveau, Hays W. "Skip" McCormickand Thomas J. Mowbray (Apr 3, 1998)ThePatternsHandbook: Techniques, Strategies, and Applications (SIGS Reference Library)(Andrew Koenig’ in AntiPatternstermini tanımladığı makalenin dahil olduğu kitap)