Gereksinimler, bir ürünün ne yapması gerektiğini tanımlar — bir projenin uygulanmasının sonucuna ilişkin belgelenmiş bir beklenti. Bu belge, hem müşterinin hem de geliştiricinin programa, işlevlerine ve projenin bütününe ilişkin beklentilerini yansıtır. Gereksinimler, özellikleri, maliyeti, zaman çizelgesini ve riskleri kapsar. Böylece gereksinimler, ne geliştirmeniz gerektiğine dair bir ifadeyi ya da projenin uygulanması sonucunda elde etmeyi beklediğiniz şeyin kesin ve niceliksel bir tanımını temsil eder. Gereksinimlerin kötü tanımlanması, proje yürütülürken ortaya çıkan sorunların başlıca nedenidir.
Gereksinimler, neyin, ne kadar iyi ve hangi kısıtlar altında yapılması gerektiğini belirtir. Gereksinimler yanlışsa proje ve ürün de kusurlu olacaktır. Gereksinimler, kısıtlar ve varsayımlar, problemi parçalara ayırır. Bu da projenin genel başarısını belirler.
Gereksinim türleri:
- İşlevsel gereksinimler, belirli bir sistem ögesinin ne yapması gerektiğini tanımlar.
- Performans gereksinimleri, sistem tarafından gerçekleştirilen ilgili işlevlerin niceliksel parametrelerini tanımlar.
- Kısıt gereksinimleri, çalışma modu sınırlamalarından, çevresel koşullardan, güvenlik hususlarından veya mevzuata uyum gerekliliklerinden doğar.
- Doğrulama gereksinimleri, sistemin gerçek çalışma ortamında belirtilen özelliklere sahip olduğuna dair güvence sağlar.
- Arayüz gereksinimleri, tüm arayüzlerin işlevlerini, özelliklerini, toleranslarını ve kısıtlarını tanımlar.
- İşletim gereksinimleri, sistem performansına odaklanarak sistemin operasyonel hazır oluşunu belirtir; ayrıca sistemin kullanıcılarla nasıl etkileşime girdiğini de tanımlar.
İngilizce literatürde, iyi gereksinimlerin özelliklerini hatırlamak için SMART kısaltması kullanılır.
- Specific (Belirli) — gereksinimler yalnızca projenin bir özelliğini ya da sistemin bir niteliğini ele almalıdır. Neyin ve ne kadar iyi yapılması gerektiği açısından ifade edilmeli, ancak asla nasıl yapılacağına — olası bir çözüme — dair olmamalıdır.
- Measurable (Ölçülebilir) — ölçülebilir bir parametre nesnel ve niceliksel olarak ifade edilir.
- Achievable (Ulaşılabilir) — bir gereksinim, makul bir maliyetle teknik olarak ulaşılabilir olmalıdır.
- Relevant (İlgili) — bir gereksinim, seçilen sistem düzeyine karşılık gelmelidir.
- Traceable (İzlenebilir) — alt düzey gereksinimler, üst düzey gereksinimlerden açıkça türetilmeli ve/veya onlar tarafından desteklenmelidir. Bir “üst” gereksinimi bulunmayan gereksinimler “öksüz” sayılır ve uygulanmalarının gerekliliği değerlendirilmelidir.
Gereklilik. Bir gereksinime ihtiyaç olup olmadığı konusunda kuşku varsa, şu soruyu sormak yeterlidir: “Bu gereksinim listeye dâhil edilmezse sisteme ne gibi bir zarar gelir?” Bir yanıt bulamıyorsanız, söz konusu gereksinim muhtemelen gereksizdir.
Doğrulanabilirlik. Bir gereksinim ifade edilir edilmez, bunun nasıl doğrulanabileceğinin belirlenmesi gerekir. Bunun için uygun bir uygunluk ölçütü seçilmelidir.
Ulaşılabilirlik. Bir gereksinimin ulaşılabilir olması için, ek kısıtlara tabi olarak, verilen zaman çizelgesi ve bütçe dâhilinde teknik olarak gerçekleştirilebilir olması gerekir. Bir gereksinimin teknik olarak gerçekleştirilebilirliği konusunda belirsizlik varsa, uygun bir araştırma ya da daha ileri bir inceleme yapılmalıdır. Bundan sonra da belirsizlik devam ediyorsa, bir gereksinim yerine bir amaç tanımlanmalıdır. Açıktır ki, bir gereksinim teknik olarak gerçekleştirilebilir olsa bile, maliyet, zaman çizelgesi ya da ağırlık gibi diğer kısıtlar nedeniyle ulaşılamaz olabilir. Gerçekleştirilmesi imkânsız bir şey için gereksinim tanımlamak anlamsızdır; pragmatik olmak gerekir.
Açıklık. Her gereksinim tek bir fikri ifade etmeli, öz ve yalın olmalıdır. Gereksinimin açık ve tek anlamlı olması önemlidir. İyi gereksinimler genellikle yalın cümlelerden başka bir şeye ihtiyaç duymaz.
Bir gereksinim olumlu bir biçimde ifade edilmeli ve asla bir olumsuzlama ile başlamamalıdır. Dil bilgisi açısından doğru olmalı, yazım hatalarından ve eksikliklerden arınmış olmalıdır. Sistemin tüm düzeylerinde tutarlı bir terminoloji kullanılmalıdır.