Yazılım ürününün hem üretim hem de
müşterideki kullanım süreci boyunca geçirdiği tüm aşamalar yazılım geliştirme
yaşam döngüsü (“software development life cycle”, “SDLC”) olarak adlandırılır.
Yazılım geliştirme süreci, zamanlamaya dayalı ve içerik olarak bölünmüş
aşamalardan oluşmaktadır. Bu sayede yazılım planlı bir şekilde
geliştirilmektedir. Yazılım işlevleri ile ilgili gereksinimler sürekli olarak
değiştiği ve genişlediği için, söz konusu aşamalar sürekli bir döngü biçiminde
ele alınır. Döngü içerisinde her hangi bir aşamada geriye dönmek ve tekrar
ilerlemek söz konusudur. Temel yazılım geliştirme aşamaları aşağıdaki gibidir:
§ Planlama: Yazılım yaşam
döngüsünün ilk aşamasıdır. Temel ihtiyaçlar belirlenir, proje için fizibilite çalışmaları
yapılır (maliyetlerin ve sistemin yararlarının tanımlanması) ve proje
planlaması gerçekleştirilir.
§ Analiz: Bu aşamanın amacı
sistemin işlevlerini ve kesin gereksinimleri açıklığa kavuşturmak ve sonucunda
bunları belirli bir formatta dokümante etmektir. Bu çalışma
müşteri, yazılım mühendisi, sistem analisti, iş analisti, ürün yöneticisi vb.
rollerin bir araya geldiği gruplar tarafından yapılabilir. İhtiyaçların net
olmadığı durumlarda yazılım mühendisi ve müşteri arasında iletişim ve birlikte
çalışmanın çok daha fazla olması gerekir. Çeşitli yazılım geliştirme
metodolojilerinde bu aşamada kullanım dokümanları ve test plan dokümanları da
oluşturulabilir.
§ Tasarım: Gereksinimlerin
tamamlanmasıyla beraber sistem tasarım aşamasına başlanır. Yazılım ürün
tasarımı, müşterinin gereksinim ve isteklerini karşılamak üzere yazılım
ürününün özellikleri, yetenekleri, ve arayüzlerinin belirlenmesi etkinliğidir.
İki tür tasarımdan bahsetmek mümkündür (Yüksek düzeyde tasarım – Mimari tasarım
ve Detaylı tasarım). Mimari tasarım, yazılım modüllerinin genel yapıları ve
organizasyon içerisindeki etkileşimleri ile ilgilenir. Sonucunda mimari tasarım
dokümanları oluşturulur. Detaylı tasarım aşamasında Mimari tasarım dokümanları
genelde revize edilirler. Tasarım ve analiz aşamalarının ayrımı “Problem Ne?/Problem NasılÇözülür?”
sorularının kullanımı ile ilgilidir. Gereksinimlerin belirlendiği analiz
aşaması problemin ne olduğu ile ilgilidir. Unutmamak gerekir ki sistemdeki tüm
problemler yazılım ürününün tamamlanması ile çözülmeyecektir. Maalesef çoğu
zaman Ne söylemi tasarım kararı olurken Nasıl söylemi
de müşterinin gereksinimi olabilmektedir. Bu duruma dikkat etmek gerekir.
o Yazılım tasarımında
kullanılan en önemli tekniklerden birisi Soyutlama (Abstraction) dır.
Soyutlama, problemlerin çözümlerini kolaylaştırmak için nesnelerin, olayların
ve durumların bazı özelliklerin görmezden gelinmesidir. Problemi
basitleştirerek en önemli kısımlarına odaklanmamızı sağlar. Modelleme is
temel tasarım aracı olup statik ve dinamik modellerden bahsetmekten mümkündür.
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ı).
§ Gerçekleştirim (Kodlama
ve Test)
o Tasarım aşamasının
belirli bir olgunluğa ulaşmasıyla birlikte Kodlama aşaması
başlar. Müşteriye teslim edilecek ürünü programlama aşamasıdır. Kaliteli
kodlama üzerine önümüzdeki yazılarda bayağı kafa yoracağız. Şimdilik kısaca
değinelim. İyi kod, okunabilirliği ve bakımı kolay olan basit koddur. KISS (Keep
it simple) prensibine göre yeni mezun olmuş birisine kodunuzu verdiğinde 1-2
gün içerisinde anlayabiliyor ve değiştirebiliyorsa kodunuz iyi bir koddur.
İster bir şirkette çalışın ister bireysel projeler geliştirin mutlaka belirli
bir kodlama kalite standardınız olsun (İsimlendirme
standartları, yorum satırı kullanımları, tekrar eden kodlar, dev –if koşul
blokları, aşırı benzer işlevler, uzun metotlar vb.)
o Kodlama süresince ve
kodlama sonrasında yapılan diğer önemli aşama test’tir. Erken test
et yaklaşımı ile (early testing) hareket edip, analiz aşamasından
itibaren test bakış açısına sahip olmamız hata yapma oranımızı ve maliyetleri
(zaman, para, prestij vb.) düşürecektir. Birim testleri, duman testleri, yanlış
değer testleri, kabul testleri, kullanım senaryo testleri, yük testleri,
kullanıcı kabul testi, yoldan geçen adam testi, test otomasyonu gibi sürece ve
duruma göre uygulanabilecek çok farklı kategoride ve derinlikte test türü
bulunmaktadır.
§ Teslim ve Bakım
o Tüm test aşamaları
tamamlandıktan sonra yazılım ürünün sahaya teslim edilebilir bir versiyonu
çıkartılır ve teslim aşaması gerçekleştirilir. Teslim çıktısı olarak ürün tek
başına yeterli değildir. Mutlaka son kullanıcılar için kullanım kılavuzu ve
versiyon fark dokümanı oluşturulmalıdır. Teslim ile birlikte bakım aşaması da
başlar. Hata giderici, önleyici, altyapıyı iyileştirici, ürüne yeni özellikler
ekletici gibi farklı bakım faaliyetleri mevcuttur.
Yaşam
döngüsünün temel adımları çekirdek süreçler (core processes) olarak da
adlandırılır. Bu süreçlerin gerçekleştirilmesi amacıyla Yazılım Belirtim Yöntemleri ve Yazılım Süreç
Modelleri kullanılmaktadır.
§ Yazılım Belirtim
Yöntemleri (Specifications)
o
Bir çekirdek sürece ilişkin fonksiyonları yerine getirmek amacıyla
kullanılan yöntemlerdir.
o
Süreç Akışı İçin Kullanılan Belirtim Yöntemleri: Süreçler arası
ilişkilerin ve iletişimin gösterildiği yöntemlerdir (Veri Akış Şemaları,
Yapısal Şemalar, Nesne/Sınıf Şemaları).
o
Süreç Tanımlama Yöntemleri: Süreçlerin iç
işleyişini göstermek için kullanılan yöntemlerdir (Düz Metin, Algoritma, Karar
Tabloları, Karar Ağaçları, Anlatım Dili).
o
Veri Tanımlama Yöntemleri: Süreçler
tarafından kullanılan verilerin tanımlanması için kullanılan yöntemlerdir
(Nesne İlişki Modeli, Veri Tabanı Tabloları, Veri Sözlüğü).
§ Yazılım Süreç Modelleri
(Processes)
Yazılım
yaşam döngüsünde belirtilen süreçlerin geliştirme aşamasında, hangi düzen ya da
sırada, nasıl uygulanacağını tanımlayan modellerdir. Karmaşıklığı azaltıp
krizleri önler. Ürünlerin beklenilen kalitede olması süreçlerin kontrol
edilmesine bağlıdır. Belli başlı yazılım süreç modelleri aşağıdaki gibidir;
- Kodla
ve Düzelt (Code and Fix)
- Şelale
Modeli (Waterfall Model)
- V
Modeli (V-shaped Model)
- Evrimsel
Geliştirme (Evolutionary Development)
- Prototipleme
(Prototyping)
- Spiral
Model
- Formal
Sistem Geliştirme (Formal System Development)
- Matematiksel
sistem modeli formal (kurallara uygun) olarak gerçekleştirilir.
- Yeniden
kullanıma yönelik geliştirme (Re-use based development)
- Sistem
var olan bileşenlerden toparlanır
- Artımlı
Geliştirme (Incremental Development)
- Birleşik
Süreç (Unified Process)
- Çevik
Modeller (Agile models: XP, Scrum)
Kaynak :
Hiç yorum yok :
Yorum Gönder