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
[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