Yazılım geliştirme süreçlerinin en önemlilerinden birisi, geliştirilecek olan sistem veya yazılım için müşterinin gereksinimlerini ortaya çıkarmak ve bunları analiz etmektir. Gereksinim mühendisliği; müşterinin bir yazılımdan beklentilerini, operasyonel ve geliştirme esnasındaki kısıtları da dikkate alarak ortaya koyma ve gereksinimleri belgeleme işlemlerini sistematik olarak yapabilme disiplinidir. Gereksinim mühendisliği için benzer bir diğer tanım ise, yazılımda neler yapılacağını, nasıl yapılacağını belirtmeksizin, doğru, eksiksiz, tutarlı ve muğlak olmayan ifadeler biçiminde belirtmek ve ortaya çıkartmak için tanımlanan süreçler bütünüdür. Yazılım geliştirme sürecinin tüm aşamalarında, kalite ile maliyet ve kaynak kullanımının azaltılmasının öneminin artması ile birlikte bu sürecin de önemi zamanla artmış ve sistem geliştirme süreçlerinin en önemli ve kritik aşaması olduğunun farkına varılmıştır.

Sistem gereksinimleri tam ve doğru olarak ortaya konulamaz ise, daha sonraki süreçlerde bu aşamadan dolayı ortaya çıkacak problemlerin maliyeti göreceli olarak artacak ve ortaya çıkan yazılım kaynaklar açısından verimli olmayacaktır. Bu sürecin mühendislik şeklinde ifade edilmesinin nedeni ise gereksinimleri elde etme esnasında ve analiz işlemlerinde sistematik yaklaşımların yer almasıdır. Bu önemine rağmen hala yazılım geliştiriciler bu sürece daha az zaman ve emek harcayarak doğrudan geliştirme sürecine geçmekte, müşteri gereksinimleri dokümanlarını yapısal ve düzenli biçimde hazırlamamaktadırlar.

Gereksinim nedir?

Gereksinim mühendisliğinin temelini oluşturan gereksinim için belli bir sınır koymak imkansızdır. Müşteri ile uzlaşışmış tüm istekler ve ortaya çıkabilecek tüm kısıtlar gereksinim olarak düşünülmelidir. Geniş bir aralıkta değerlendirilen gereksinimler, üst seviyedeki genel isteklerden yazılımın fonksiyonel detaydaki belirtimlerine kadar dağılım gösterir. Sonuçta hepsinin gereksinim olarak ele alınıp analizinin yapılması gerekir. Gereksinimler çok değişik şekilde sınıflandırılıp, farklı tiplere ayrılabilir.

Gereksinim tipleri ve dokümanlar:

- Kullanıcı gereksinimleri: Doğrudan kullanıcıya yönelik, görsel ve fonksiyonel ağırlıklı gereksinimlerdir. Doğal dille yazılabilen, diyagramlarla gösterilebilen ve müşterileriler için hazırlanan gereksinimlerdir. Kullanıcı senaryoları (use-case) için temel oluşturur. Kullanıcıdan alındıkları için teknik anlamda detaylar içermeyebilir.


- Sistem gereksinimleri: Sistemin servislerinin detaylı tanımlamaları ile donanımsal yapılara özgü gereksinimlerdir. Üst seviyede sistem iskeletini tanımlarlar. Yapısal bir doküman olup müşteri ile yapılan anlaşma ve sözleşmeye göre hazırlanır.


- Özel kısıtlara yönelik gereksinimler:Yazılımın performansı ve niteliklerini tanımlayan subjektif olmayan kesin sınırlar ve kısıtlardır. Yazılımın etki alanını belirleyen gereksinimlerdir. Yazılımın geliştirilmesine yönelik kısıtlar da bu tip gereksinimlerdir.


- Yazılım Belirtimleri: Yazılımın geliştirme ve tasarıma yönelik detaylı şekilde belirtimleridir. Geliştiricilere yönelik hazırlanan teknik bir dokümandır.

Ayrıca gereksinimleri etki alanları ve niteliklerine göre de 3 ayrı tipe ayırabiliriz.


- İşlevsel (fonksiyonel) gereksinimler: Sistemin sunacağı hizmetler ile sistemin işlevsel altyapısını tanımlarlar. Sistemin ne yapacağını yapısal ve işlevsel olarak ortaya koyarlar. Geliştirmeden bağımsız çoğunlukla giriş, çıkış arabirimleri, süreçler ile hata yönetimine yönelik gereksinimlerdir. Sistem girişindeki izin verme ve yetkilendirme gereksinimleri de bu tiptedir. Sistemin neler yapacağını soyut olarak değil de detaylandırılmış biçimde belirler.


- İşlevsel olmayan gereksinimler:Sistemin daha çok kısıtları ile fiziksel ortam, arayüzler, kullanıcı odaklı olma, güvenlik, güvenilirlik, kalite güvence gibi soyut niteliklerini belirleyen gereksinimlerdir. Yazılımlara işlevsellik katmamasına rağmen bu tip gereksinimler özellikle yazılım kalitesi açısından kritik rol oynarlar. Bu gereksinimler yazılımda karşılanmadığı sürece yazılımın kullanılabilirliği yetersiz kalacaktır.


- Çalışma (etki) alanına özel gereksinimler: Yazılımsal olmayan, yazılımın geliştirileceği alana özel gereksinimler ve teknik dokümanlardan ortaya çıkarılan sistem özellikleridir. Her yazılımın uygulama alanına özgü terimleri, dokümanları ve iş süreçleri bulunabilir. Bunları önceden kestirmek imkansızdır ve ancak ilgili alanda çalışılması durumunda elde edilebilirler. Bunlar işlevsel gereksinimleri de içerirler ve bu gereksinimler yazılım tarafından desteklenmedikçe yazılımın çalışması beklenemez.

İşlevsel ve işlevsel olmayan gereksinimleri karşılaştırmak istenildiğinde, ortak ve ortak olmayan bir çok noktalar bulunur. İşlevsel olmayan gereksinimler sadece işlevsel gereksinimlere yapılan eklenti veya süsleme değildir. Yazılımların, istenilen işlevsel hizmetlerini gerçekleştirmesi yanında kalite, güvenilirlik gibi subjektif gibi görünen niteliklerinin de desteklenmesi gerekir. Kaliteli bir yazılım için işlevsel ve işlevsel olmayan gereksinimler tamamen karşılanmak zorundadır. Yazılım gereksinimleri dokümanında her ikisinin de bulunması gereklidir. Örneğin güvenilirlik işlevsel olmayan gereksinimi için yazılıma birkaç işlev ile hata raporlama yapılarının kurulması gerekecektir. Ancak bu şekilde yazılımların güvenilirliği sağlanır.

Gereksinim Mühendisliğinin 4 ana süreci ve bunları gerçekleştirmek için tüm süreçlere uygulanan faaliyetler vardır. Bu süreçler birbirinden tamamen bağımsız olmayıp birbirini bütünleyen ve eksiksiz bir yazılım gereksinim dokümanı hazırlamak için gereken çalışmalardır. Süreçlerinin tamamının yazılım geliştirme sürecinde uygulanması gerekmez. Organizasyon ve proje büyüklüğüne göre uygun olanlar seçilir. Bu süreçler:

- Olurluk (fizibilite) çalışması: Müşteri gereksinimlerinin maliyetinin, uygun bütçe ve teknoloji sınırları içinde olup olmadığının tespit edildiği süreçtir. Müşterilere, fazladan istenilen hizmetlerin bir ek maliyeti olduğu ve bunun hem zaman hem de maddi açıdan yeterli olması gerektiği belirtilmelidir. Bazen de eldeki teknolojinin de yetersiz kalması ortaya çıkabilir. Tüm gereksinimler için olurluk çalışmasının yapılması gereklidir. Bunun sonucunda fizibilite raporu hazırlanmalıdır. Değişik biçimlerde olurluk çalışması yapılabilir.
- Teknik olurluk (kaynak, teknoloji vb)

- Ekonomik olurluk
- Yasal olurluk
- Alternatifler
Olurluk çalışmasında ayrıca karlılık-maliyet analizinin de çıkarılması ve belli kriterlere göre karar verilmesi gereklidir. Her bir hizmet ve araç için maliyetlerin ortaya konulması ve beklenti, risk ve öncelik değerleri ışığında karar verilmesi gerekir.


- Gereksinim analizi: Müşterinin ve tüm paydaşların sistemden olan beklentilerini ortaya çıkarmak ve bunları uygun metodolojilerle ayrıştırıp arındırmaktır. Özelikle çatışma yönetiminin bu süreçte yapılması ve varsa tutarsızlıkların çözümlenmesi gereklidir. Gereksinimlerin önceliklendirilmesi de bu süreçte yapılır. Müşteri bakış açısına göre tüm gereksinimler aynı öncelik derecesine sahip görünebilir. Ortada bir proje planı ve bütçe olması nedeniyle bazı gereksinimlerin daha fazla önceliğe sahip olması gerekecektir.

- Gereksinim tanımlama: Gereksinimleri müşterinin anlayabileceği formlara dönüştürerek gerekli tanımlamaları yapmaktır. Bu süreçte diyagram veya formlar kullanılır ve görsel anlamda yapısal doküman hazırlanır. Müşteriye yönelik süreçtir ve gereksinim analizi süreciyle iç içe yürütülür.

- Ayrıntılı gereksinim belirtimi: Gereksinimleri detaya inerek tanımlama ve ortak olmayan ve olmayan noktaları ortaya koyma sürecidir. Yazılım tasarımına giriş yapılır. Bu süreç daha çok uygulama geliştiriciler ile müşteri ortamındaki teknik paydaşlar içindir. Gereksinim tanımlama sürecinden ortaya çıkan formların her biri için detaylı formlar ve diyagramlar oluşturulur. Yazılımın tasarımında tanımlanacak nesneler için soyut tanımlamalar yapılır ve üst düzeyde veri akışı diyagramı oluşturulur.

Gereksinim mühendisliğinin dört ana süreci ve bunları gerçekleştirmek için de tüm süreçlere uygulanabilecek aktiviteler vardır. Bunlar süreçlerin doğru tamamlanabilmesi için mutlaka uygulanması gereken aktivitelerdir. Her bir süreçte, bu aktivitelerden biri veya birden fazlası uygulanabilir. Çoğunlukla da süreçlerle aynı şekilde adlandırılmışlardır.

- Çalışma alanını anlamak: Çalışma yapılacak alan ile varsa daha önceki varolan sistemi ve süreçleri anlama aktivitesidir. Uygulama alanında, olurluk çalışması yapılmasında ve iyileştirme yapmak için başvurulur.

- Gereksinim elde etme/meydana çıkarma: Paydaşlarla birlikte gereksinimleri keşfetme, meydana çıkarma aktivitesidir. Bu aktivite kapsamında paydaşlarla mülakat ve müzakere yapılır, varolan dokümanlar gözden geçirilir, gözlemleme ve sosyal ortam analizi yapılır, gereksinim anketleri düzenlenir ve bunlar değerlendirilir. Sosyal içerikli bir çalışma olup tüm paydaşlar ile etkili bir iletişim ortamının kurulması gerekir. Tüm paydaşların farklı bakış açıları dikkate alınarak sistem gereksinimleri hakkında bilgiler elde edilir. Gereksinimleri önceliklendirmek planlama ve süreç yönetimi açısından çok önemlidir. Önceliklendirme ayrı bir uzmanlık ve yetenek gerektirmesine rağmen gereksinimler üzerindeki bazı kriterler gereksinimlere öncelik sağlar. İşlevsel gereksinimler ve çalışma alanına özgü temel ve kritik gereksinimler önceliklidir. Ayrıca analiz sonucu birbirini takip eden gereksinimlerde de kolay önceliklendirme yapılabilir.

- Analiz ve modelleme: Gereksinimleri tanımlayarak ayrıntılı belirtimlerini oluşturma faaliyetidir. Müşteri gereksinimleri modüler şekilde ayrıştırılmış ve arındırılmış olur. Tasarım öncesi yazılım modellemesi yapılır ve veri tipleri tanımlanır. Gereksinimler arasındaki arayüzler ve sistem etkileşimleri detaya inilmeden belirtilir. Bilgisayar destekli yazılım mühendisliği (CASE) araçlarıyla gereksinimler kullanıcı senaryoları ve diyagramları oluşturulur.

- Gereksinimleri geliştirme ve olgunlaştırma: Gereksinimler analiz edildikçe yeni gereksinimleri doğurur. Proje bütçesi ve kaynak sınırlamaları çerçevesinde yeni ortaya çıkan gereksinimlerin de müşteri onayı ile gerçekleştirilmesine gereksinimleri geliştirme faaliyeti denir. Bu tip gereksinimler daha çok proje kabul aşamasında ortaya çıkabilecek kabul kriterleridir. Gereksinimleri geliştirmenin bir diğer yöntemi ise prototip oluşturma ve bu prototipi müşteriye sunarak daha önceden alınan gereksinimlerin eksiklerini tamamlamak ve geliştirmektir.

- Onaylama ve doğrulama: Müşteri onayı olmayan gereksinimleri tasarıma girdi olarak almak, hatalara ve boşa emek harcanmasına neden olabilir. Büyük projelerde müşteri tarafından da teknik kişilerin proje ekibinde yer alması nedeniyle onaylama işlemi anlık yapılsa da hazırlanan tüm gereksinim dokümanlarının resmi olarak onaylatılması gereklidir. Bu onaylamadan sonra ortaya çıkabilecek gereksinim değişikliklerinin maliyeti ve proje planı revizyonları daha kolay olabilecektir. Gereksinimleri doğrulamak için kontrol listelerinin kullanılması gereklidir. Kontrol listesindeki tüm kriterlerin sağlandığından emin olunması ve eksikliklerin tamamlanması zorunludur.

- Gereksinim yönetimi: Gereksinim mühendisliği süreçlerini, proje planına uygun olarak zamanında ve eksiksiz tamamlayabilme aktivitesidir. Müşteri görüşmelerinin ve toplantılarının düzenlenmesi ve elde edilen gereksinimlerin doğru analiz edilerek dokümantasyon edilmesi bu faaliyet kapsamındadır. Proje yöneticisi ve müşteri sorumlusu tarafından yürütülür.

Yorum Yaz

Yorumlarınız denetimden geçtikten sonra yayınlanmaktadır...