Herhangi bir sistemi geliştirmeden önce, sistemin ne yapması gerektiğini ve kullanımının o sistem için ödeme yapacak olan kişilerin veya şirketlerin hedeflerini nasıl katkı sağlayacağını anlamalısınız. Bu, uygulama alanını (telekomünikasyon, demiryolları, bankacılık, oyunlar vs.) anlamayı; sistemin operasyonel kısıtlamaları; paydaşlar (sistemi veya sağladığı bilgileri doğrudan veya dolaylı olarak kullanan kişiler) tarafından ihtiyaç duyulan belirli işlevsellik; ve performans, güvenlik ve güvenilirlik gibi temel sistem özellikleri kapsar. Gereksinim mühendisliği, bu anlayışı geliştirmeye yardımcı olan ve sistem geliştirmede yer alan paydaşlar ve mühendisler için sistem özelliklerini belgeleyen bir dizi yapılandırılmış faaliyetlerin tümüne verilen isimdir.
Gereksinim mühendisliği süreci, geliştirilmekte olan uygulamanın türüne, dahil olan şirketlerin büyüklüğüne ve kültürüne ve kullanılan yazılım satın alma süreçlerine bağlı olarak büyük ölçüde değişir. Yenilikçi yazılım ürünleri geliştiren küçük şirketler için, gereksinim mühendisliği süreci beyin fırtınası oturumlarından oluşabilir ve ürün “gereksinimleri”, yazılımın yapması beklenen şeyin kısa bir vizyon ifadesi olabilir. Büyük askeri ve havacılık sistemleri için, sistem mühendisliği süreçlerinde normalde resmi bir gereksinim mühendisliği aşaması ve kapsamlı bir şekilde belgelenmiş sistem ve yazılım gereksinimleri vardır.
Bütün gereksinim mühendisliği süreçlerini temel adımları:
Bu aktivitelerin her zaman sırayla yapılacağına inanılsada aslında bu bir döngüsel aktivitedir.
Yazılım mühendisliği araştırma topluluğu, bir gereksinim belgesi ne kadar eksiksiz ve tutarlı olursa, yazılımın güvenilir olma ve zamanında teslim edilme olasılığının o kadar yüksek olduğunu savundu. Bu yüzden gereksinimlerin tam, eksiksiz ve tutarlı olmasını sağlayan birçok özel yöntem geliştirildi.
1970 yılında Winston Royce tarafından şelale modeli (waterfall) geliştirildi. Bu modelde, sistem gereksinimlerini anlama ve belgeleme süreci, yazılım mühendisliğindeki ilk aşamadır. Bu da gereksinim çıkarmanın yazılım geliştirmeye başlamadan önce yaptığınız bir şey olduğu ve bir kez çıkarıldıktan sonra yazılım gereksinimlerinin geliştirme sürecinde önemli ölçüde değişmeyeceği varsayımına yol açtı. Ayrıca, gereksinim çıkarmanın sistem tasarımından ayrılması gerektiği varsayımına da yol açtı. Sistem gereksinimleri, sistemin ne yapması gerektiğini tanımlamalıdır; tasarım, sistemin gereksinimlerinin nasıl uygulanacağını tanımlamalıdır.
1970’lerdeki çalışmalar bir formal gereksinim dili oluşturmaya odaklandı. 1980’lerde nesne yönelimli modelle geliştirildi. 1990’larda süreç geliştirme, hedef odaklı yaklaşımlar, formal matematiksel metodlar üzerinde çalışıldı.
Artık, gereksinim mühendisliği araştırmalarının ve uygulamalarının çoğunun temelini oluşturan ön varsayımların gerçekçi olmadığını biliyoruz. Yazılımların kullanıldığı iş ortamı değiştiği için gereksinimlerin de değişmesi kaçınılmaz. Büyük sistemler için sistem geliştirmeye başlamadan sistemin tamamını anlamak mümkün olmayabilir. Ürünün geliştirme ve operasyonel süreci boyunca paydaşlar problem hakkında yeni bilgilere ulaşıyor bu gereksinimlerin değişmesine neden oluyor.
Gereksinim ve tasarımın birbirinden ayrılması ve birbirlerini etkilemeleri mümkün değil.
20.yüzyılda gereksinim mühendisliği sistem geliştirilmeden önce yapılan bir aşama olarak görülüyordu. Yazılım geliştirmeye yönelik yeni yaklaşımlar ve işletmelerin yeni fırsatlara ve zorluklara hızla yanıt verme ihtiyacı, gereksinim mühendisliğini yazılım geliştirmedeki rolünü yeniden düşünmemizi zorunlu kılıyor. Yeniden düşünmemize neden olan 4 temel değişiklik:
Eş zamanlı gereksinim mühendisliğinde gereksinim çıkarma, doğrulama ve yazılım geliştirme süreçleri ez zamanlı olarak yürütülür. Her aşamada ürüne yeni özellikler eklenerek sistem aşamalı olarak geliştirilir ve teslim edilir.
Bazı avantajlar:
Geliştirici istenen özelliği parçalara bölüp maliyet analizi yapar. Müşteri temsilcisi buna göre işleri öncellendirip gelecek versiyonda olması istenen özellikleri listeler.
COTS (Commercial off-the-shelf, Ticari kullanıma hazır) ürünler birçok alanda mevcut. Kullanmak için sadece ihtiyaca göre konfigüre edilmesi gerekiyor. COTS ürünleri satın alıp konfigüre ederek bir sistem geliştirmek mümkün. Geleneksel gereksinim mühendisliği prensipleri COTS ürün kullanarak sistem geliştirmeye uygun değil. Bütün gereksinimler önceden ayrıntılı bir şekilde çıkarılırsa buna göre COTS ürün bulmak imkansız olacaktır. COTS ürün seçerken esnek olmalı, ürüne göre gereksinimler yeniden tanımlanmalıdır.
PORE(Procurement-Oriented Requirements Engineering) Satın alma merkezli gereksinim mühendisliği Neil Maiden ve iş arkadaşları tarafından geliştirilen sistematik bir yaklaşımdır. Bu yaklaşımda müşteriden gereksinimler alındıktan sonra buna uygun COTS araçlar seçilip ürün geliştirmenin ve yeni gereksinimlerin bunlar üzerinde tanımlanmasıdır.
PORE yaklaşımında üç aşamalı bir süreç uygulanıp en uygun ürün seçilir.
Şirketler zaten birçok yazılım sistemine sahip. Yeni eklenen yazılımın da eski sistemlerle birlikte çalışabiliyor olması şart. Yazılımların uyumlu çalışabilmesi için Soren Lauesen tarafından yazdığı makalede beş prensip önerdi.
Daha düşük maliyetli ve değişen gereksinimlere daha duyarlı sistemlerin daha hızlı teslimine yönelik iş talepleri, yazılım mühendisliğine yönelik geleneksel “önce gereksinimler” yaklaşımının değişmesi gerektiği anlamına gelir. Gereksinim mühendisliği, yeniden kullanımdan yararlanmak ve sistemlerin değişen gereksinimleri yansıtacak şekilde gelişmesine izin vermek için sistem uygulamasıyla daha sıkı bir şekilde bütünleştirilmelidir. İş sistemi geliştiricileri bu değişiklikleri zaten benimsemiştir. Önümüzdeki birkaç yıl içinde tümleşik gereksinim mühendisliğini çoğu sistem türü için tercih edilen geliştirme modu olacağını tahmin ediyorum.
Bu yazı Ian Sommerville‘ın Integrated Requirements Engineering: A Tutorial isimli makalesinden Türkçeleştirilerek oluşturulmuştur.