Rabu, 24 Juni 2009

Anti Pattern

Anti pattern

Apa itu anti pattern:

  • Solusi negatif yang menampilkan lebih banyak masalah dari pada seharusnya
  • Natural extension dari design pattern
  • Menjembatani jurang antara konsep arsitektural dan implementasi dunia nyata
  • Mengerti anti pattern menyediakan pengetahuan untuk mencegah dan memperbaiki darinya

Contoh:

  • Spaghetti code
  • Stovepipe system :
  • Analysis paralysis : memperlihatkan ketidakseimbangan upaya pada fase analysis dari sebuah projek
  • Design by committee
  • God class
  • Mythical man month
  • Death march project

Kenapa belajar antiPattern

  • Anti pattern merupakan sebuah metode menyederhankan mapping sebuah situasi umum ke sebuah klas yang spesifik dari solusi
  • Anti pattern menyediakan pengalaman di dunia nyata dalam menyelesaikan masalah dalam industry software
  • AP menyediakan vocabulary yang umum untuk mengidentifikasi masalah dan mendiskusikan masalah
  • AP menyediakan stress release dalam

Design pattern : Problem + solution pairs
Anti pattern : Solution+solutions Pairs

Development anti pattern

  • The blob
  • Cut & paste programming
  • Spaghetti code
  • Lava flow

Development mini anti pattern

  • Viewpoint yang ambigu
  • Boat anchor
  • Continuous obsolescence (kuno)
  • Dead end
  • Input kludge
  • Mushroom management


Arsitektur AntiPattern

• Arsitektur by implementasi
• Design by commite
• Stovepipe enterprise & system

Arsitektur mini-AntiPattern

• Auto-generated Stovepipe
• Cover your assets
• The grand old duke of yuke
• Jumble
• Swiss army knife
• Wolf ticket

Management AntiPattern

• Analysis paralysis
• Corncob
• Death by planning
• Irrational management: pathological supervisor
• Project mis-management

management mini-AntiPattern

• Blowhard jamboree
• Email is dangerous
• Fear of success
• The feud
• Smoke and mirrors
• Throw it over the wall
• Warm bodies

Development anti pattern

Spaghetti code : bagian undocumented dari source code sebuah s/w yang tidak bisa di extended atau dimodifikasi tanpa usaha yang keras (tidak terstruktur)

Tanda-tanda:
• Lone ranger programmer
• Dokumentasi yang sedikit dan kuno
• 50% waktu maintenance untuk membangun kembali
• Sindrom programmer ragu-ragu
• Tidak dapat dipakai kembali

Object-oriented Spaghetti code

• Banyak objek method tanpa parameter
• Class yang mencurigakan atau variabel global
• Hubungan tak terduga antar objek
• Kehilangan manfaat OO

Refactor Solusi

• Refactor to generalize : membuat sebuah abstract superclass
o Membuat fungsi subclass yang cocok
o Menambahkan fungsi buatan pada superclass
o Membuat function bodies dan variable compatible
o Memindahkan code ke superclass

• Refactor untuk spesialisasi: kondisi yang sederhana
o Untuk setiap kondisi, buat sebuah subclass dengan jenis yang sesuai
o Copy code kedalam subclass
o Spesialisasi superclass constructor

• Strategy : reform the s/w process

The BLOB:

Tanda-tanda:

• Single class dengan banyak atribut dan operasi
• Miskin OO design

Konsekuensi
• Kahilangan manfaat OO
• Terlalu kompleks untuk digunakan kembali atau di test
• Terlalu sulit untuk di load

Poltergeists
• Pengembangan dari class
• Class dan hubungan yang palsu
o Stateless,short-lifecycle class
o Class dengan sedikit responsibilities
o Hubungan sementara
o Kompleksitas yang berlebihan
o Analisis dan desain model yang tidak stabil
o Poor system performance

• Solusi
o Menghapus class yang tidak relevant
? Menghapus class externall
? Menghapus class tanpa domain
o Menghapus kelas data sementara
o Menghapus kelas operasi
o Menghapus class dengan lifecycle yang pendek atau sedikit responsible

Stevopipe enterprise

Vendor lock-in: tidak mempunyai arsitektur atau tergantung vendor
• Kehilangan control
• Konspirasi penghubung