Wednesday, December 04, 2013

Yazılım Geliştirme Sürecinde Tasarımın Rolü


Bu yazımı esinlendiğim değerli kişilere sunuyorum:

Ahmet ARZIK, Niyazi SARAL, Birol BAŞARAN, Nadir YÜCEL, Roy PERRY, Cevdet ACAR, Cem GÖKNAR, Ahmet DERVİŞOĞLU, David B. WILLIAMS, Arthur CORRA, Roque CORDERO, Kemal ERTAŞ, İlhan USMANBAŞ, Erçivan SAYDAM, Aydın YALÇIN, Münevver YARDIMSEVER, Sevgi AKIN

 ISO12207, Mil498 gibi yazılım yaşam döngüsü standartları [1,2,3,4] anahatları ile kullanıcı şartları, yazılım şartları, yapısal tasarım şartları, ayrıntılı tasarım aşamalarına işaret eder.  Bunlardan yazılım şartları , yapısal tasarım şartları ve  ayrıntılı tasarım yazılım geliştirme sürecinin tasarım unsurlarıdır.

 Yazılım şartları kullanıcı şartlarında belirtilen isteklerin gerçekleşmesi için gerekli teknik nitelikleri ve unsurları belirler.  Yapısal tasarım şartları ise farklı unsurlar arasındaki ilişkileri ve her unsur içinde de bütün parça ilişkilerini belirler.  Ayrıntılı tasarım dökümanı yapısal tasarımın gerçekleştirilmesi için gerekenleri  teknik araçlar cinsinden bir sembolik dille belirler.

 Başarılı bir tasarım bilgi ve tecrübenin naklini kolaylaştırır.  Proje başında ve daha sonra yeni katılımlarda takımın öğrenme sürecini kısaltır.

 Doğru bir tasarım proje planlamasında zamanlama hesaplarının yapılmasını mümkün kılar.  Maliyet hesaplarının doğruluğunu belirler.  Eleman ve takım çalşma verimliliğinin takibini mümkün kılar.

 Tasarım projenin küçük parçalaar bölünmesini sağlar.  Ağır yüklerin küçük parçalara bölünmesini ve bu küçük parçalar arasında eşgüdüm ve ilişki kurulmasını (correlation) sağlar.  Benzer şekilde küçük parçaların yan yana getirilip daha büyük bütünler oluşturulmasına yol açar(scaling).

 Tasarım projenin kuşbakışı bir görünümünü vererek alt-bütünler ve onların altparçaları arasındaki olası yan etkilerin gözlenmesine olanak tanır.  Tasarım test durumlarının belirlenmesinde ve test eksikliğinden  kaynaklanan aşırı maliyetlerin düşürülmesinde belirleyici rol oynar.

 Büyük ve karışık projeler tek tek insanların algılama, izleme  ve muhakeme yeteneklerini aşar(transcendence).  Programcı program içine notlar yazarak ayrıntıları korumaya/hatırlamaya çalışır.  Fakat bu durum çok kişili takımlarda kuşbakışı bir görünüm vermeğe yetmez.

 Tasarım proje için niyet(intention) ve görevler(taskset) belirleyerek projenin farklı kısımları ve takımın farklı grupları arasında koordinasyonu sağlar.  Tasarım yalnız genel bir yön hissi vermekle kalmaz, geliştirim unsurları arasında arayüzleri de tanımlar.

 Tasarım yol gösterici olmalıdır.  Proje zora girdiğinde, tıkanmalarda(bottleneck), tasarım yol açıcı olmalıdır.  Tasarım dinamik olmalı, kolaylıkla değiştirilebilmelidir.  Küçük bir değişiklikle tıkanıklıklar aşılabilmelidir.  Tasarım bu özellik dikkate alınarak yapılmalıdır (örn. moduler olmalıdır).

 Tasarım esnek olmalıdır.  Bir tasarım ne kadar çok ayrıntı belirlerse o kadar sıkı olur ve esnekliğini kaybeder.  Tasarım kolay değiştirilebilirlik için esnek olmalı, çok ayrıntılı olmamalıdır.  Esnekliğin homojen olması gerekmez.  Tasarım belirli yerlerde sıkı, belirli yerlerde esnek yapılabilir. 

 Tasarım yazılım geliştiricilerin muhakeme yetenekleri kadar onların ilham yeteneklerine de yer ve pay bırakmalıdır.  Tasarım herşeyi kendisi çözmeye  kalkmamalıdır.   Yazılım geliştirme dağınım bir süreç olmalıdır.

 Tasarım ne olduğu kesin olarak tanımlanabilen bir olgu değildir.  Tasarım tarif edilebilir fakat tanımlanamaz.  İnanıyorum ki, yazılım geliştirmeye ait tasarım unsurlarının esnekliği, ilham için kasıtlı boşluklar ya da hayal gücü için cambazlık yapılacak alanlar bırakarak en büyük başarıya ulaşabilir.

 Ali R+ SARAL

 KAYNAKLAR:

[1] Saral, Ali R+;  Yazılım Yaşam Döngüsü Belgeleme Sistemi
 http://largesystems-atc.blogspot.com/2007/03/yazilim-hayat-dngs-belgeleme-sistemi.html

[2] Saral, Ali R+; KISACA IEEE/EIA 12207 Yazılım Yaşam Döngüsü Süreçleri Standardı Ne Yapar? http://largesystems-atc.blogspot.com/2007/11/kisaca-ieeeeia-12207-yazilim-yaam-dngs.html

[3] Saral, Ali R+; ISO 12207 ve İlgili Yazılım Yaşam-Döngüsü Standartları
http://largesystems-atc.blogspot.com/2007/11/iso-12207-ve-ilgili-yazlm-yaam-dngs.html 

[4 ]Saral, Ali R+; IEEE/EIA 12207 Yazılım Yaşam Döngüsü Standardında Süreçlerin Birbirleri ile İlişkileri
http://largesystems-atc.blogspot.com/2007/12/ieeeeia-12207-yazilim-yaam-dngs.html