Yazılım Projelerinde Gereksinim Analizi

Bugün 29 Ekim 2013. Ülkemizin tarihindeki en önemli olaylardan birinin yıl dönümü. Bundan 90 yıl önce sonlanan Kurtuluş Savaşı sürecinin bitişi ile temelleri atılan Türkiye Cumhuriyeti’nin kuruluş yıl dönümü. Bugün aynı zamanda cumhuriyet tarihindeki en önemli projelerden birinin, Marmaray Projesi’nin de sonlandığı gün.

Gördüğünüz gibi projeler ve süreçler hayatımızın her noktasında karşımıza çıkmaktadır. Bugün yazılım projeleri ile ilgili bir yazı dizisi başlatmak için de bir gün diye düşünüyorum. İlk olarak süreç ve proje kelimelerinin anlamlarından başlamakta yarar var.

Süreç kelimesinin İngilizce karşılığı process‘dir, Latince processus kelimesinden gelmektedir. Olguların ya da olayların belirli bir taslağa uygun ve belirli bir sonuca varacak biçimde düzenlenmesi, ard arda sıralanması; bir şeyin yapılış, üretiliş biçimini oluşturan sürekli işlemler ve eylemler dizisi şeklinde tanımlanabilir.

Proje kelimesi ise Latince projectum kelimesinden türetilmiştir. Köken olarak Latince proicere fiilinden gelir ve harekete geçmeden önce (pro-iacere) yapılacakları tanımlar. Proje belirli bir plan dahilinde ilerleyen, belirli bir başlangıcı ve bitişi olan bir süreçtir.

Yazılım projelerinde bazen proje kelimesi geliştirilen ürün ile bağdaştırılarak kullanılır. Bu açıdan bakıldığında, ister istemez, söz konusu ürünün idame ettirilmesi için sağlanan operasyonel destek ve zaman içerisinde spontane bir biçimde ortaya çıkan işleri gerçekleştirmek için yapılan rutin işlemler de projenin bir parçası gibi değerlendirilir. Oysa ki projeler, belirli bir plan dahilinde başlatılır, sürdürülür ve mutlaka bir noktada sonlanması temenni edilir. Proje ekipleri bu iş için bir araya gelir ve proje sonunda tekrar doğal ortamlarına geri dönerler.

Yazılım projeleri temelde gereksinimlerin analizi, tasarım, kodlama (geliştirme), test gibi aşamalardan oluşan süreçlerdir. Kullanılan metodolojiye bağlı olarak bu aşamalar birbirinden tamamen ayrı ve sıralı olabileceği gibi yer yer iç içe de geçebilir. Ya da iteratif bir biçimde bir döngü içerisinde ard arda ufak adımlar şeklinde tekrarlanabilir. Önemli olan, her bir aşamanın belirli bir plan dahilinde bir başlangıcı ve bitişinin olmasıdır. Ön görülmeyen durumlardan dolayı ortaya çıkabilecek riskler ve bu risklerin sonucunda ortaya çıkan sapmalar da yine plan dahilinde yapılmalıdır.

Gereksinim analizi, yazılım sürecinin ilk aşamasıdır ve yazılım sürecinin sağlıklı bir şekilde ilerleyebilmesi için hayati bir öneme sahiptir. Öte yandan çoğu zaman en çok ihmal edilen aşama da budur. Bu ihmalin sonuçları genellikle projenin ilerleyen safhalarında, geri dönüşün zor olduğu yerlerde ortaya çıkar ve çoğu zaman kendini Murphy adıyla tanıtarak sinsice ekibe dahil olur. Ekibe katkısı; fazla mesai, baş ağrısı, stres, gecikme, maliyet ve paha biçilmez bir tecrübenin yanı sıra klişeleşen ve efsaneleşen avunma sözcükleridir.

Gereksinim analizi, geliştirilecek olan ürünün hangi ihtiyaçlara cevap vereceğini belirlemek için yapılır. O halde ilk olarak ne yapılacağının net bir biçimde tanımlanması gereklidir. Bunun ardından yapılması gereken; ulaşılması istenen amaçların, elde edilmesi beklenen kazanımların net bir şekilde belirlenmesidir. Hedefi belirli olmayan bir gemiye hiç bir rüzgar yardım edemez. Ayrıca projede rol alacak tüm paydaşların ortak müştereklerde buluşmaları için projenin ne olduğunun ve amaçlarının net bir şekilde tanımlanması gereklidir.

O halde projeye başlamadan önce, ilk olarak kendi kendimize sormamız gereken sorular: “Bu proje ile ne yapmak istiyoruz?”, “Hedeflerimiz neler?”, “Bu proje sonlandığında elde etmeyi beklediğimiz kazanımlar neler olacak?” gibi sorular olmalıdır. Unutulmamalıdır ki proje bir ekip işidir ve ekipte yer alan herkesin ortak bir misyona odaklanması başarıya ulaşmak için yegane anahtardır.