Aaronaught tarafından zaten çok iyi bir cevap var, fakat şimdi kaldırılan, işlevsel olmayan bir gereksinimin ne olduğu konusunda tamamen yanlış olan başka cevaplar olduğu için, ne hakkında hata yapmamak için birkaç açıklama eklemenin yararlı olacağını düşünüyorum. işlevsel olmayan gereksinimdir.
İşlevsel olmayan bir gereksinim "ürünün sahip olması gereken kalite veya özellik" dır . James Taylor, işlevsel olmayan bir gereksinimin "[...] [yine de] bir gereklilik olduğunu ve müşteri için önemli olduğunu - bazen işlevsel bir gereksinimden daha önemli olduğunu" söylüyor . Daha sonra iki örnek verir: ürünün logosu ve ekipmanın doğruluğu ve güvenilirliği. Bu iki örnek de çok iyi olduğunu gösteriyor:
- İşlevsel olmayan gereksinimler şu şekilde pazarlamacı bir jibber değildir: "İnternet bugünlerde önemlidir ve bir web sitesine sahip olmak istiyoruz".
- İşlevsel olmayan gereksinimler müşterileri ilgilendirir, çünkü üretkenliklerini ve ürünü kullanma kabiliyetini ciddi şekilde etkileyebilirler.
- İşlevsel olmayan gereksinimler tamamen nesneldir.
Son nokta esastır. Gereklilik öznel ise, ihtiyaç listesinde yapması gereken bir şey yoktur. Doğrulama testleri subjektif olan bir şeyden yapmak imkansız olacaktır . İhtiyaç listesinin tek amacı, müşterinin belirsiz beklentilerini sıralamaktır. "Bu karenin kırmızı olmasını istiyorum" bir gerekliliktir. "Bu karenin hoş bir renge sahip olmasını istiyorum" açıklama gerektiren bir dilek.
Gereksinimler listesinin bir sözleşme gibi olduğunu ve çoğu durumda sözleşmenin bir parçası olduğunu unutmayın. Müşteri ve geliştirme şirketi tarafından imzalanır ve bir dava durumunda, çalışmanızı doğru yapıp yapmadığınızı belirlemek için yasal olarak kullanılır. Size bir yazılım ürünü sipariş edersem, "ürünün harika olması gerektiğini" belirtin ve ürün bittiğinde ödeme yapmayı reddedersem, çünkü benim için yaptığınız şey mükemmel bir ürün değil mi?
Öyleyse bazı örnekler görelim.
1. Yazılım ürünü son kullanıcıya duyarlıdır.
Bu bir gereklilik değil. İşlevsel değil. İşlevsel değil. Bu sadece bir gereklilik değil. Hiç. Sıfır değeri var. Doğrulama testi sırasında yazılım sisteminin bu gereksinimi karşılayıp karşılamadığını kontrol edemezsiniz. Ne sen - QA departmanı ya da müşteri.
2. Kullanıcı istatistiklerinin yeniden yüklenmesi 100 msn altındaki sürenin% 90'ını gerçekleştirir. Makinede ek G bölüm 2'de belirtilen performans ve CPU için yük% 10'un altında, hafıza için% 50'nin altında ve aktif R / W disk işlemleri olmadığında test edildiğinde.
Bu bir gerekliliktir. Ek G bölüm 2 yeterince hassassa, makineyi benzer bir donanıma alabilir ve QA departmanında doğrulama testini yapabilirim ve her zaman ikili bir sonuç elde edeceğim: geçti veya kaldı.
İşlevsel bir gereklilik mi? Hayır . Sistemin ne yapması gerektiğini belirtmez . Yazılım uygulamasının kullanıcı istatistiklerini yeniden yükleyebilmesi gerektiğini belirtmeden önce muhtemelen işlevsel bir gereksinim vardı.
İşlevsel olmayan bir gereklilik mi? Bu. Bir ürünün yüzde eşiği verilen maksimum / ortalama tepki süresine sahip olması gereken bir özelliği belirtir.
3. Uygulama C # ile yazılmıştır.
Bu bir zorunluluk mu? Bir bağlam olmadan gerçekten bilmiyoruz. Bu şartı ekleyerek, meslektaşları ile birlikte kullanılacak dili tartışmaktan kaçınmak isteyen lider geliştiricinin bir isteği olabilir. Ayrıca donanım / yazılım, miras veya uyumluluk unsurlarına dayalı bir gereklilik olabilir. Bilmiyoruz
4. Ürünün C # kod tabanı Microsoft Minimum Önerilen Kurallar ve Microsoft Küreselleşme Kurallarına uyar.
Bu garip bir şey. Şahsen ben bunu bir şart olarak adlandırmamayı tercih ediyorum ve standartları ve en iyi uygulamaları belirten ayrı bir belgeye koydum.
5. Uygulamanın ana penceresi pembe (#fcc) dolu daireler içeren mavi (# 00f) 10px kenarlığa sahiptir, bu daireler sınırın iç kenarına yerleştirilir ve çapları 3px'dir, birbirinden 20px'dir.
Bu bir gerekliliktir ve işlevsel değildir. Doğrulama testi sırasında test edebileceğimiz bir şey belirtir ve ürünün ne yapmak istediğini değil, ürünün bir özelliğini belirtir .
6. Araç takip sistemi, hızı ± 0,016 mil / saat hassasiyetle ölçer.
Ayrıca işlevsel olmayan bir gereksinim. Sistemin hassasiyetinin ölçülebilir bir eşiğini verir. Sistemin ne yapması gerektiğini söylemez, ancak çalışmasını ne kadar hassas yaptığını söyler. Fakat bekle? Araç takip sisteminin hızı ölçtüğünü söylüyor , değil mi? Yani bu da işlevsel bir ihtiyaç mı? Hayır, ölçümün kesinliğine vurgu yaptığımızdan, ölçüm yapıldığına değil.
7. Araç takip sistemi aracın hızını ölçer.
Şimdi işlevsel bir gereksinim. Sistemin nasıl çalıştığını söylemez, ama ne yaptığını. İşlevsel gereksinimler sayesinde, araç takip sisteminin hızı, batarya gücünü, ne olduğunu ve ışıkların açık olup olmadığını bilmediğim basıncı ölçtüğünü öğrenebiliriz.
8. İnternet sitesinin sayfaları 850 msn. yüklemek için.
Bu bir gereklilik değil. Bir olmaya çalışır, ancak tamamen geçersiz. Bunu nasıl değerlendiriyorsunuz? Hangi sayfalar? Herşey? Dört çekirdekli bir istemci makinesindeki yerel 1 Gb / sn'lik bir ağ üzerinden ve% 2 oranında SSD'li sekiz çekirdekli bir sunucu üzerinden veya% 99 oranında kullanılan küçük bir sunucu tarafından barındırılırken eski ve berbat bir dizüstü bilgisayarın modemi aracılığıyla test edildi ? "Yüklemek" ile ne kastedilmektedir? Sayfayı indirmek anlamına mı geliyor? İndirme ve gösterme? POST isteğini bazı büyük verilerle gönderme, sonra yanıtı yükleme ve görüntüleme?
Sonuç olarak, işlevsel olmayan bir gereksinim her zaman bir gerekliliktir, yani tamamen nesnel olan ve otomatik veya manuel doğrulama testi ile kontrol edilebilecek bir şey tanımladığı anlamına gelir, ancak sistemin ne yaptığını söylemek yerine , sistemin nasıl yapıldığını açıklar. bir şey yapıyor ya da sistemin kendisi .
Technology Bilgi Teknolojisi Projelerini Yönetme: Yazılım, Donanım ve Entegrasyon Girişimlerine Proje Yönetimi Stratejileri Uygulama, James Taylor, ISBN: 0814408117.