Yazılım Tasarım Süreçleri Nelerdir?
Yazılım geliştirirken sadece kodlama kısmına odaklanılması geliştirilmekte olan yazılımın ömrünü kısaltabilir. Yazılım geliştirirken izlenmesi gereken süreçler vardır. Hepsi birbiriyle bağlantılı olan bu süreçlerin hiç birini bağımsız olarak düşünemezsiniz. Kaliteli bir yazılımın ortaya çıkması ve müşteriye daha iyi hizmet verilmesi açısından yazılım yaşam döngüsündeki adımları harfiyen uygulamanız gerekmektedir.
Yazılımın işlevleri ile ilgili gereksinimler değişip genişleyebildiği için söz konusu aşamaları sürekli bir döngü biçiminde ele almak gerekir. Döngü içerisinde her hangi bir aşamada geriye dönmek ve tekrar ilerlemek söz konusudur.
Yazılım yaşam döngüsü bir yazılım projesinin, başlangıcından sonuna; üretiminden kullanımına gerektirdiği tüm adımların toplamını ifade etmektedir. İşte yazılım geliştirirken mutlaka uygulamanız gereken temel adımlar:
1.Planlama
Planlama genel hatların ortaya çıktığı ilk aşamadır. Fizibilite(yapılabilirlik) çalışması yapılır. Bu aşamada ayrıca personel ve donanım gereksinimleri de çıkarılır. En genel ifadeyle proje için planlar oluşturulur.
Proje için nelerin gerekli olduğu, ihtiyaçların karşılanması için eksikliklerin tespit edilmesi gibi çıkarımlar planlama aşamasında ortaya konulur. İyi bir planlama yazılımın diğer süreçlerini de olumlu yönde etkileyecektir.
2.Analiz
Analiz aşamasının temel amacı ise sistemin işlevlerini ve kesin gereksinimleri ortaya koymak ve sonucunda bunları belirli bir formatta dokümante etmektir. Analiz kısmında gerçekleştirilecek çalışma süreci ise yazılım/bilgisayar mühendisi, müşteri, sistem analisti, iş analisti, ürün yöneticisi gibi rollerin bir araya gelinmesi ile oluşur.
- Proje detaylarının belirlendiği aşamadır.
- Müşteri ile birlikte gereksinimler ortaya çıkarılır.
- İşlevler belirlenir.
Analiz aşamasında kullanım dokümanları ve test plan dokümanları da oluşturulabilir.
3.Tasarım
Gereksinimlerin tamamlanması ve ihtiyaçların net olarak belirlenmesiyle beraber sistem analiz sürecinden tasarım sürecine taşınır. Yazılım ürününün, müşteri gereksinim ve isteklerini karşılamak üzere özellikleri, yetenekleri ve arayüzlerinin belirlenmesi aşamasıdır.
- Yazılım sisteminin temel yapısının oluşturulduğu aşamadır.
- Yapılacak işlemler detaylandırılır. Adım adım belirlenir.
- İşlem bazında listelenir ve zamanlamaları yapılır.
İki tür tasarımdan bahsetmek mümkündür. Bunlar Yüksek düzeyde tasarım – Mimari tasarım ve Detaylı tasarımdır.
Mimari tasarım; yazılım modüllerinin genel yapıları ve organizasyon içerisindeki etkileşimleri ile ilgilenir. Bunun sonucunda ise mimari tasarım dokümanları oluşturulur.
Detaylı tasarım aşamasında ise inceleme arttığından genelde mimari tasarım dokümanları revize edilir.
Tasarım ve analiz aşamasının en önemli farkı sorulan soru çeşididir. “Problem Ne/Problem Nasıl Çözülür” soruları tasarım ve analiz kısmını birbirinden ayıran farkı ortaya koyar.
Yazılım tasarımı sırasında gözetilmesi gereken ilkeler Soyutlama, Modülerlik ve İşlevsel Bağımsızlıktır.
Soyutlama,
- Problemi basitleştirerek ve detayları gizleyerek en önemli kısımlarına odaklanmamızı sağlar.
- Modelleme kullanılarak sistem statik ve dinamik model olarak bölümlendirilir.
- Statik model, programın çalışması sırasında değişmeyen yönlerini ifade etmek için kullanılırken (sınıf ve nesne modelleri), dinamik model programın çalışması sırasındaki işleyişi ifade etmek için kullanılır ( durum ve sıra diyagramları).
Modülerlik kısmında ise modülü; ismi olan, tanımlanmış işlevleri bulunan ve hedef sistemi gerçekleştirmek üzere tümleştirilen birimler olarak tanımlayabiliriz. Modülerlik kısmındaki amaç tüm karmaşıklığı tek bir modülde toplamak yerine sistemi modüllere ayırmaktır. Böylelikle anlaşılabilir, kontrol edilebilir ve parçala-yönet mantığında çalışan bir yazılım sistemi geliştirilmiş olur.
Örnek vermek gerekirse;
- P1 ve P2 elimizdeki problemler olsun,
- K(P1) ve K(P2) de karmaşıklık düzeyleri olmak üzere,
- K(P1+P2) > K(P1) + K(P2) sonucuna ulaşabiliriz.
Yani aynı büyüklükteki problemi ne kadar fazla sayıda modüle ayırırsak toplam karmaşıklık o kadar azalır.
İşlevsel Bağımsızlık kısmında ise, modüllerin işlevsel bağımsızlığı hem anlama hem de test bakım işlerini kolaylaştırır. Ayrıca yapılan bir hatanın diğer işlevlere yansıması ve yapılan değişikliklerin sistem genelinde yan etkileri gibi konuların kontrolü kolaylaşacaktır.
İşlevsel bağımsızlığı oluşturmak için modüller arasındaki bağlantıyı olabildiğince azaltmak ve bir modülün yalnızca bir işlev ile görevlendirilmesini sağlamak gerekir.
4.Üretim
Tasarım aşamasının belirli bir olgunluğa ulaşması ile kodlama aşamasının başladığı aşama olan üretim aşaması başlar. Müşteriye teslim edilecek olan ürünün kodlama/programlama aşamasıdır. İyi bir kod okunabilirliği ve bakımı kolay olan basit bir koddur. Bu kod mantığında yazılan programların bakımı ve geliştirilmesi çok daha kolay olacaktır.
- Yazılım projesinin gerçekleştirildiği aşamadır.
- Yapılacak işlemler oluşturulan zaman çizelgesine uygun olarak hazırlanır.
- İlk testler yapılır.
5.Test
Tüm tasarım ve üretim işlerinin tamamlanmasının ardından yazılım ürününün müşteriye teslim edilebilir bir versiyonu çıkartılır ve teslim aşaması gerçekleştirilir. Teslim çıktısı olarak ürün tek başına yeterli kalmayabilir.
Kullanıcılar için mutlaka kullanım klavuzu ve versiyon fark dokümanı da oluşturulmalıdır. Ürünün müşteriye teslimi ile birlikte bakım aşaması da başlar.
- Yazılım projesinin sınandığı aşamadır.
- Oluşturulan yazılım, test ekibi ve müşteri ile test edilir.
- İlk testler yapılır.
- Ortaya çıkan eksik ya da hatalar düzeltilir.
6.Bakım
Son aşama ise bakım aşamasıdır. Test aşaması ile birlikte bakım aşaması da başlar. Müşteri ve yazılım ekibi sürekli iletişim halinde olur.
- Proje tesliminden sonraki düzeltmelerin yapıldığı aşamadır.
- Teslim sonrası ortaya çıkan eksiklikler düzeltilir.
- Yeni eklentiler yapılır.
Kaliteli bir yazılım ürününün ortaya çıkarılması için programcıların izlemesi gereken yazılım tasarım süreçleri bu 6 aşamadan oluşur. 6 aşamayı birbirinden bağımsız düşünmeden birini diğerinin devamı niteliğinde oluşturmak gerekir. Bu 6 aşama yazılım sisteminin;
- Yönetilebilirliğini artırır,
- Kontrolden çıkmasını engeller,
- Daha güvenli olmasını sağlar,
- Daha anlaşılabilir olmasını sağlar,
- Teste elverişli olmasını sağlar,
- Güncelleme ve bakımının kolay devam etmesini sağlar.
Yazılım geliştirmek için kullanılan dil fark etmeksizin daima bu süreçleri sisteme entegre etmek daha kaliteli bir yazılım ürününün ortaya konulmasını sağlar.