next_inactive up previous


Anti-Patterns
Yazılım Mühendisliğinde Çıkmaz Sokak Tarifleri

Gürer Özen

Bilgisayar yazılımları geliştirmekle yıllardır uğraşılmakta. Son yarım yüzyılda ortaya çıkan bu alanda çeşitli paradigmalar (prosedüral, nesne tabanlı, fonksiyonel, vs) ve çeşitli modeller (code reuse, unit testing, component model, extreme programming, design patterns) ortaya atıldı. Daha çok ``Özgür Yazılım'' ile birlikte dağıtık geliştirme yöntemleri gündeme geldi. Tasarım, uygulama ve test aşamalarını kapsayan geniş bir açıdan baktığımızda bize önerilen çeşitli ``doğru'' geliştirme yöntemleri var.

Diğer her alanda olduğu gibi dengeli ve sağlıklı bir kavrayışa sahip olmak için doğruların yanında ``yanlış'' yöntemler hakkında da bilgi sahibi olmak gereklidir. Bu konuda yaşanmış çok tecrübe olmakla birlikte, yazılı olarak birkaç kaynak dışında ciddi bir eksiklik bulunmaktaydı. Bu makale, ağırlıklı olarak yazılım mühendisliği ile ilgili birkaç Internet sitesinden derlenmiş, daha çok özgür yazılım alanını ilgilendiren bu tür çıkmaz yolları tanıtmaktadır.

Ortak noktaları:

Creeping Featuritis

En sık görülenlerden biridir. Kullanıcıları memnun etmek ve rakip ürünlerden daha iyi olmak amacıyla akla gelen her şeyi ürüne ekleme yoluna gidilir. Bir noktada ``gerekli'' ve ``yararlı'' olan ile ``cool'' görünen arasındaki sınır kaybolur, ``nitelik'' yerine ``niceliğe'' bırakır ve kalite kaybolur. Yazılım karmaşıklaştıkça hatalar çoğalır.

Örnek: Tanıtımında rakiplerinden daha uzun özellik listesini öne koyan hemen her yazılım.

Hatalı yaklaşım: Programcıları bir araya toplayıp herkesin ürüne istediği özellikleri eklediği bir tasarım yapmak.

Çözüm: Tasarıma kullanıcı istekleri ve profili ile başlamak.

Design By Committee

Herkesin kullanabileceği bir standart oluşturmak için tüm grup ve kişiler bir araya getirilir. Hedefi ve vizyonu gözeten bir hakem bulunmamaktadır. Toplu kavgadan ne sonuç çıkarsa kabul edilir. Tarafların her biri kendi vizyonunun bir parçasını son ürüne sokabildiği için ortaya hiç kimsenin beğenmediği ama düzeltilmesi için de kimsenin tartışacak enerjisinin kalmadığı bir ucube çıkar.

Örnek: Sözde ``web standartları''.

Hatalı yaklaşım: Tüm fikirlerin bir sentezi en iyi sonucu verir.

Çözüm: Ortaya çıkan şeyin çözmek istediğimiz soruna bir faydası var mı?

Sanal İletişim

Tüm tasarım ve uygulama tartışmaları eposta ve benzeri yollarla yürür. Sanal ortamın limitli ifade olanakları yanlış anlaşılmalara ve kavgalara yol açar.

Örnek: Eposta listelerinde sıkça karşılaşabileceğiniz tartışmalar.

Hatalı yaklaşım: Internet sayesinde insanlar evlerinde çalışabilir, dünyanın öbür ucundan yazılım geliştirebilir.

Çözüm: Toplantılar, bir araya gelmeler, hatta çeşitli eğlenceler düzenlemek ve tarafları fiziksel olarak tanıştırmak.

Hatalı Ekonomi

Tasarruf yapmak amacıyla diğer gruplara destek sağlayan gruplarda kısıntı yapılır. Azalan destek ile birlikte tüm grupların verimi düşer. Bir benzeri de destek gruplarının önemsenmeyip denetlenmemesi yüzünden iş verimlerinin düşmesiyle oluşur.

Örnek: Joel Spolsky'nin eski işyeri ile problemleri ( http://joelonsoftware.com/articles/fog0000000043.html madde 9)

Hatalı yaklaşım: Yazılımcılar asıl önemli işi yapıyor. Desteğe ihtiyaç duymazlar, ufak tefek işleri de arada kolayca halledebilirler.

Çözüm: Gerekli önlemleri alıp destek işlerinin yürümesini, yazılımcıların ofis temizliği, halkla ilişkiler, basit işlerle zaman kaybetmemesini sağlamak.

Bana Derhal Tarih Verin!

Kullanıcı ya da yönetici çok acele olarak bitiş tarihini bilmek ister. Daha yeterli bilgi mevcut değil ve yol belirsizliklerle dolu iken, bu baskıyla bir takım varsayımlar yapılır. Eksik bilgiyle saptanan tarihler deadline haline gelir. Doğal olarak işler yetişmez.

Hatalı yaklaşım: Kesin sayılar üzerinden hesap yapıp proje istatistikleri çıkarmak, gidişatı bu şekilde takip etmeye çalışmak.

Çözüm: Önümüzü göremediğimiz yerlerde ana hedefi ufak hedeflere ayırmak. Kısa sürede yapılabilecek ufak hedefler üzerinden giderek yolun belirgin hale gelmesini sağlamak.

Yanıltan İstekler

Kullanıcılar yeni bir özellik istediklerinde genellikle çözmeye çalıştıkları sorundan çok bu özelliğin nasıl uygulanacağından bahsederler. Özellik kullanıcıdan geldiği için bir gereksinim olarak görülür. Aslında zaten basitçe çözülebilen bir sorun için yazılımın karmaşıklığı gitgide arttırılır.

Hatalı yaklaşım: Kullanıcıyı geliştirici yerine koymak. Hangi sorunu çözmek için istendiğini öğrenmeden istekleri gereksinim saymak.

Çözüm: Önce isteklerin nedenini öğrenmeye çalışın. Gereksinimler her güncellendiğinde, üzerlerinden geçip bunları basitleştirebilir miyim diye düşünün.

Burada Geliştirilmedi Sendromu

Not Invented Here (NIH) syndrome. Bir bileşene ihtiyaç duyulur. Söz konusu işi yapan çeşitli hazır çözümler bulunmaktadır. Bu çözümler grup dışında geliştirildikleri için değerlendirmeye bile alınmaz. Belki daha kötü bir karşılık geliştirmek için kaynaklar ziyan edilir.

Hatalı yaklaşım: Biz ilk kez el attığımız sorunu o alanın deneyimlilerinden daha iyi çözeriz. Başkalarının koduna muhtaç değiliz.

Çözüm: Kimler bu sorunla karşılaşmış, nasıl çözmüşler, biz de bu çözümleri kullanabilir miyiz?

Negatif Deneyim

Bir kişi veya kurum uzun zamandır bir işi yapmaktadır. Bu süreçte yeni deneyimler kazanmamış, hep aynı çözümle başarıya ulaşmışlardır. Aslında iyi olmayan ama sorunu bir şekilde çözen bu yöntemi farklı bir sorun alanına taşımak istediklerinde başarısız olurlar.

Hatalı yaklaşım: Sorunu bugüne kadar nasıl çözdüysek gelecekte de aynı biçimde çözeriz.

Çözüm: Fırsat çıktığında yeni yaklaşımları denemek. Birkaç başarıdan sonra her sorunun altından kalkabileceğini sanmamak.

Sumo Evliliği

İki büyük bileşen iç içe geçirilir, dahili detayları birbirine bağımlı hale getirilir. Bileşenlerden birini değiştirmek veya başka bir platforma taşımak gerektiğinde ortaya büyük bir iş yükü çıkar.

Hatalı yaklaşım: Farklı sorunların çözümlerini bir arada tasarlamak. Yazılımı katmanlandırmamak. Soyutlama kullanmamak.

Çözüm: Tarafları en erken zamanda boşamak gereklidir. Faydacılığa kaçıp bileşenleri baştan ayrı tutmak en iyi çözümdür.

İsveç Çakısı

Bir yazılım özellikler kazandıkça başka sorunlara da yöneltilir. Ana görevinden gittikçe uzaklaşan bir takım fazladan ufak işler yapmaya başlar. Karmaşıklığı artar, her işi yapmaya çalışıp hiç bir işi iyi yapamayan bir hale gelir.

Örnek: Word yazılımı. Mektup yazmak için çok büyük, belge hazırlamak için çok düzensiz, serbest tasarım için çok sınırlayıcı. Yanında popup blocker ile gelen NVidia grafik kartı sürücüsü de başka bir örnek olabilir.

Hatalı yaklaşım: Büyük tek bir yazılımla her sorunu çözelim. Hazır altyapımız var, boş durmasın bu kodlar.

Çözüm: Yazımın yalnızca ana görevini en iyi biçimde yapması üzerinde yoğunlaşmak.

Kullanıcılar Salaktır

Kullanıcıların kendi isteklerini bilemeyeceği, çoğunun bırakın bilgisayarı, yapmak istedikleri işi bile bilmediği varsayılır. Programcılar piyasayı ve kullanıcıları dikkate almayıp kendi varsayımları ile tasarım yapar. Ürün başarısız olur.

Hatalı yaklaşım: Ben karşımdaki adamın sorununu ondan iyi bilirim.

Çözüm: Empati, kullanıcı testleri, pazar araştırmaları.

Bozo Bitini Açmak

Yeteneksiz kişilerle ilgili genel problem, onların kendi yeteneksizliklerini farkedemeyecek kadar yeteneksiz olmalarıdır. İyi durumda olduklarını sandıklarından kendilerini düzeltip geliştirmeye çalışmazlar.

Hatalı yaklaşım: Bit açılır, söz konusu kişi yokmuş gibi davranılır. Söyledikleri ve yaptıkları göz ardı edilir.

Çözüm: Bu kişilerin yeteneklerinin arttırılması için çalışmak, onları durumlarının farkına vardıracak ve hızlanarak kendilerini toparlamalarını sağlayacaktır. Ancak genellikle bu durumdaki kişiler 10 yaşından sonra düzeltilemeyecek türden temel bozukluklara sahip olduklarından işin yürümeyeceğini baştan kabul etmek en iyisidir.

About this document ...

Anti-Patterns
Yazılım Mühendisliğinde Çıkmaz Sokak Tarifleri

This document was generated using the LaTeX2HTML translator Version 2002-2 (1.70)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University, Sydney.

The command line arguments were:
latex2html -no_subdir -split 0 -show_section_numbers /tmp/lyx_tmpdir27291dAe308/lyx_tmpbuf0/antipat.tex

The translation was initiated by on 2005-03-21


next_inactive up previous
2005-03-21