İşlevsel mi yoksa işlevsel olmayan gereklilik mi?


34

İşlevsel veya işlevsel olmayan gereksinimleri merak ediyorum. Bu terimler için birçok farklı tanım buldum ve gereksinimlerimin bir kısmını uygun kategoriye atayamıyorum.

Örneğin, bazı işlemlerle bağlantılı olmayan veya bazı ek koşullara sahip olmayan gereksinimleri merak ediyorum.

  1. Seçilen cihazlar listesinde cihaz tekrarlanabilir.
  2. Veritabanı en az 100 öğe içermelidir
  3. Bir değerin para birimi ABD Doları cinsinden olmalıdır.
  4. Cihazın Watt cinsinden bir adı ve güç tüketimi değeri olmalıdır.

Bu gereksinimler işlevsel mi, işlevsel değil mi?


4
"İşlevsel" ve "işlevsel olmayan" arasındaki farkın yanıltıcı olduğunu ve yazılımın kötü çalışabilirliği bırakma eğiliminde olduğunu düşünüyorum. "Son kullanıcı özellikleri" ve "işletme özellikleri" hakkında düşünmenin daha iyi yazılımlara yol açtığını gördüm : blog.softwareoperability.com/2013/04/08/… ( yazım )
Matthew Skelton

@MatthewSkelton (2.) 'nin bir kullanıcı özelliği mi, yoksa işletme özelliği mi olduğunu söyleyemedim. Bir "test özelliği" gibi görünüyor.
Martin Thoma

@moose - DB'nin belirli parametreler dahilinde / 100 üründe çalışması / çalıştırılması gerekliliği daha fazla operasyonel bir gerekliliktir, ancak performansın düşmesi halinde son kullanıcı deneyimini etkileyebilir. Nihayetinde muhtemelen OP’deki F ve NF’ye ayrılma gereklilikleri konusunda biraz daha içeriğe ihtiyacımız olacaktı, ancak - ima ettiğim gibi - bunun bir şekilde sahte bir ayrım olduğunu düşünüyorum :)
Matthew Skelton

Yanıtlar:


41

İşlevsel tanımları Ne spesifik olarak (ya da başka bir sistemle müşteri), harici bir etkileşim bağlamında - sistem veya uygulama yapacaktır.

Yeni bir sipariş verirken, sistem toplam maliyeti göstermeli ve kullanıcıdan onay istemelidir. Bu işlevsel bir gerekliliktir; sistemin bir fonksiyonunu açıklar .

Daha fazla ayrıntı için Wikipedia'ya bakın .

Sigara fonksiyonel gereksinimleri herhangi gereksinimleri yoktur sistemin giriş / çıkış davranışını tanımlar. Not hala bahsediyoruz olduğunu gereksinimleri değil, uygulama ayrıntıları biz anlamına gelmez "işlevsel olmayan" ifadesini kullanıyoruz bu yüzden, sırf bir şey o bölümdeki koymak adil oyun.

Göreceğiniz en yaygın işlevsel olmayan gereksinim türleri, sistemin çalışması (kullanılabilirlik, süreklilik, DR), performans (verimlilik, gecikme süresi, depolama kapasitesi) ve güvenlik (kimlik doğrulama, yetkilendirme, denetim, gizlilik) ile ilgilidir.

Bunların hepsi, her "özelliği" etkileyen, ancak aslında kendileri olmayan, kesişen endişelerdir; daha çok özellik meta verilerine benziyorlar, yalnızca sistemin yapması gerekeni yapıp yapmadığını değil , aynı zamanda ne kadar iyi yaptığını açıklamaya yardımcı oluyorlar . Bu analojiyi çok ileri götürmeyin, yine de - sadece bir analoji.

İşlevsel olmayan gereksinimler, burada bazılarının önerdiğinin aksine, öznel ya da el dalgası değildir . Aslında, aslında kendilerine bağlı sert bir metriğe sahip olmaları gerekir (yani 100 ms'den daha uzun olmayan tepki süresi). UF gereklilikleri aynı zamanda uygulama detayları veya "ORM çerçevesini yükseltme" gibi görevler de değildir - kimsenin bu fikri nereden alacağına dair hiçbir ipucu yok.

Wikipedia'da daha fazla ayrıntı : İşlevsel Gereksinim .


Sorudaki örnekleri özellikle ele almak için:

  1. Seçilen cihazlar listesinde cihaz tekrarlanabilir.

    • Açıkça fonksiyonel bir gereksinim. Sistem çıktısının nasıl göründüğünü açıklar.
  2. Veritabanı en az 100 öğe içermelidir

    • Bir iş kuralı gibi geliyor, aynı zamanda işlevsel bir gereksinim. Ancak, eksik görünüyor. Bu kuralın sebebi nedir? Veritabanında 100'den az öğe varsa, ne olacak / ne olacak?
  3. Bir değerin para birimi ABD Doları cinsinden olmalıdır.

    • İşlevsel gereksinim, ancak gerçekten doğru bir şekilde ifade edilmemiş. Daha kullanışlı bir ifade şöyle olacaktır: Sistem bir para birimini (USD) destekleyecektir. Açıkçası, birden fazla para biriminin desteklenmesi gerekiyorsa ve sonra şart, para birimi dönüşümleri hakkında bilgi içermesi gerekiyorsa değiştirilecektir.
  4. Cihazın Watt cinsinden bir adı ve güç tüketimi değeri olmalıdır.

    • Gerçekten herhangi bir gereksinim değil, bu teknik bir özellik gibi. Güç derecesinin Watt olarak kabul edildiği varsayımıyla işlevsel bir gereklilik belirtilecektir . Birden fazla UOM varsa, para biriminde olduğu gibi, işlevsel gereksinimler birim dönüşümleri, nerede / nasıl yapılandırıldıkları vb. İle ilgili bölümlere sahip olmalıdır (varsa).

Güzel! Ekleyeceğim şey, işlevsel gereksinimlerin yalnızca dış çevre ile etkileşimlerle ilgilenmesi gerekmediğidir (ilgili kavram, diğer sistemlerle “arayüz gereksinimleridir”). Bunun için bir örnek, "Sistem her 60 dakikada bir kullanıcı veritabanını endekslemelidir" olacaktır. Bu açıkça içseldir.
Aram Kocharyan

2
@AramKocharyan: Bu işlevsel bir gereklilik değil. Açıkçası orada bir yerde saklanan bir müşteri SLA'sı var ve bu işlevsel gereksinimdir. "İrtibat güncellemeleri, zamanında müşteri hizmetini / pazarlamasını desteklemek için 60 dakika içinde gerçekleştirilmelidir" - bu dahili, işlevsel bir gereksinimdir. "Kullanıcı veritabanını endeksle" hiç bir gereklilik değil, bir uygulama; örneğin, söz konusu SLA'yı karşılamanın başka bir yolu, gerçek zamanlı arka plan indekslemesini kullanmak veya tamamen bir hizmet brokerı veya veri yolu kullanarak endeksleme ihtiyacını ortadan kaldırmak ve gerçek zamanlıya yakın güncellemeleri işlemek olabilir.
Aaron,

1! İşlevsel olmayan gereksinimlerin öznelliği ile ilgili olarak, bunların çok katı RESTful mimarisinin çekirdeğinde bulunduğunu belirtmek yeterli olabilir en.wikipedia.org/wiki/…
fr_andres

18

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.


Ayrıntılar için +1. Sizce (1) deki görüşünüze katılmıyorum, "bu bir gereklilik değil" diyorsunuz. Bence bu bir zorunluluktur ama iş analisti takımın kendisine bağlı olmadan önce “ölçülebilir” bir zorunluluk haline getirmesi gerekiyor. Ayrıca "dilek" kelimesini kullanımınızı ve "dilek" ile "ihtiyaçlar" arasındaki
farkınızı da çok beğendim

@Emmad Kareem: Haklısın. Kendimi tamamen teknik şartlara, yani geliştiricilerin ve KG'nin kullanabileceği şartlara sınırlandırıyorum. İş analistleri için, işler biraz farklıdır ve gereksinim olmadığımı belirttiğim bazı öğeler gerçekten geçerli olanlar olacaktır.
Arseni Mourzenko

"Uygulama C # ile yazılmıştır." bir kısıtlamadır, işlevsel bir gereklilik değildir, çünkü sistemin davranışını tanımlamaz fakat çözüm alanına bir sınırlama getirir.
Aram Kocharyan

@AramKocharyan: bu yüzden bu ifadenin bir gereklilik olup olmadığını bilmediğimizi söyledim.
Arseni Mourzenko

3

Bir fonksiyonel gereklilik sistemi ile etkileşim sonucunu açıklar (hangi sistem verilen durumlarda yapar) ise, işlevsel olmayan gereklilik genellikle vb performans, kapasite, tepki süresi, ayrıntılarına ... işlevselliğini temsil etmemektedir şeylere bir ifade etmektedir sistemdeki süreç veya bir etkileşimin sonucu.

Bunu açıkladıysanız, açıkladığınız işlevsel olmayan gereksinim aslında teknik bir belirtime sahip işlevsel bir gereksinimdir (bu aslında kötü bir gereksinim yaratacaktır). Davanız için işlevsel olmayan bir gereksinim örneği şunun gibi olabilir:

- Zar animasyonu çalışırken UI kilitlenmemelidir.

Kullanıcı gereksinimleri genellikle içeriğe bağlı olarak işlevsel veya işlevsel olmayan özel UI gereksinimleri olup, sistem gereksinimleri (örneğin eşzamanlı kullanıcı kapasitesi) genellikle işlevsel olmayan zamandır.


2

İşlevsel olmayan gereksinimlerin bazen "ilities" olarak adlandırılan mevcut bazı iyi cevapları eklemek için - sistemin sade işlevselliğine ek olarak sahip olması gereken nitelikler. "ilities" kullanılabilirliği, kullanılabilirliği, güvenliği, esnekliği ve hatta daha öznel estetiği içerir.

Bunlardan bazılarının belirlenmesi ve değerlendirilmesi çok zordur. Yine de önemli. Onları sözleşmeye bağlı olarak imzalıyorsanız, anlamsız el dalgalı versiyonlarından kaçınmak isteyeceksiniz, örneğin, "Sistem güvenli olmalı". Bu tür gereklilikleri azaltmaya çalışmakla ilgili sorun, insanların önemli olan şeylerden ziyade kolayca ölçülebilen şeyleri çekmeye meyilli olmalarıdır (ve gereklilikler ilgili uzmanlıklara dayanağı olmayan insanlar tarafından da yazılabilir). ). Sonuçta, genellikle güvenli olmayan, kullanılamaz veya esnek olmayan sistemler elde edersiniz (kullanılabilirliği belirtmek ve ölçmek zor olmasa da, yine de birçok baş ağrısına neden olur).

Burada sözleşmelerle ve resmi işlerle uğraşanlar ile daha genel analiz, mimarlık, araştırma vb. İşleriyle uğraşanlar arasında kültürel farklılıklar var. İfade ettiği için, belirsiz bir el dalgalı gereksinimi hala bir gerekliliktir . Müşteri için önemli olan hususlar, sözleşmeye bağlı kişilere tamamen sempati duysalar bile , detaylı bir şekilde incelenip iyice çürütülmeden önce yararlı bir sözleşme gereği olmadığına inanmaktadır .

Son bir nokta - “ility” nin objektif bir ölçüsünü bulamadıysanız, bu müşterinin ihtiyaç duymadığı anlamına gelmez. Belirsiz! = Gereksiz. Bununla birlikte, bu tür şeyleri ölçmek için daha iyi yöntemler geliştirmemiz, fonksiyonel olmayan gereksinimleri artımlı olarak artırmanız ve iyileştirmeniz veya her şey için önceden hedef tedbirler almadan çalışabilecek şekillerde (Çevik vb.) Sözleşme yapmamız gerektiği anlamına gelebilir.


0

Bu yorumların hepsi çok iyi, ancak aşırı pişmişlar ve çalışmak için net bir şablon sunmuyorlar. Bunu belirtmek açık olmaz mıydı:

Kanımca, uygulamayı kullanırken kullanıcının yaşadığı şey işlevsel bir gerekliliktir. Bir geliştirici bunu sıfırdan uygulamaya çalıştığında, geliştirmelerde veya modifikasyonlar yaparken, karşılanması gereken şarttır. Örneğin: kullanıcının giriş yapması gerekir. Diyelim ki uygulamayı bir komut istemi üzerinden çalıştırmak için yeni bir yol eklerseniz, kullanıcının hala giriş yapması gerekir.

Kaputun altında işlevsel olmayan bir gereksinim var. Kullanıcı bunun farkında değil, ancak uygulandığı halde orada olmak zorunda. Örneğin: Uygulama C # ile geliştirilmelidir. Başka bir dilde geliştirilmişse, kullanıcı farketmez. Ancak bu bir gereklilik olabilir çünkü mevcut koda dayanmaktadır. Başka bir örnek, belirli bir sunucuya kurulması gerektiğidir. Hareketli sunucular kullanıcı tarafından farkedilmez.


-1

İşlevsel mi, işlevsel değil mi? Ben de söyleyemem. Çoğu, listelenen örneklerin tümü bana iş kurallarına benzemiyorsa (süreçle ilgili kısıtlamaları ve sistem işlemlerinin uyması gereken karar kurallarını belirtin).

İş kuralları genellikle iş analizinin bir parçası olarak toplandığından (ve genellikle dışarıdan referans almak yerine işlevsel gereksinim özelliklerine gömülür), mühendislerin çoğu hakkında unutmadığı veya farkında olmadığı bir şeydir.


Neden listelenen örnekler size iş kuralları gibi görünüyor?
Ocak'ta

-4

İşlevsel bir gereksinim, tipik olarak sistemin yapabileceği veya yapacağı bir şeydir. Bir eylemin sonucu olarak ifade edilebilir (Olumsuz bir sonucun). Fonksiyonel olmayan bir gereksinim, müşteri / son kullanıcının umurunda olmadığı ve sonucu etkilemeyeceği bir şeydir - örneğin
, Windows, pembe noktalarla mavi bir kenarlığa sahip olacaktır. - Program Java ile yazılacaktır
- Kodlama standartları, yöntemleri ve işlemleriyle ilgili herhangi bir şey.

İşlevsel olmayan gereksinimlerin müşteriler tarafından işlevsel gereksinimlere dönüştürülebileceği konusunda uyarılmalıdır. örnekler olabilir - Program Erlang'da yazılacaktır çünkü müşteri üzerine bir dergi makalesi okur ve Erlang'da yazılmasını ister. - Program DB 2'yi kullanmalıdır, çünkü müşteri mevcut DB 2 sistemlerinde çalıştıracaktır, yılların tecrübesine ve bu platforu bilen bir BT ekibine sahip olacaktır.
- Kaynak kod tüm MISRA tavsiyelerini geçmelidir.

Özetle - müşteri bunu önemsiyorsa, işlevsel bir gereksinimdir, aksi takdirde işlevsel değildir ya da muhtemelen bir gereksinim değildir.


1
-1. Hem müşteriler ve son kullanıcılar yapmak doğrudan kendi verimliliğini etkileyen beri, işlevsel olmayan gereksinimler hakkında bakım. Ayrıca, işlevsel olmayan gereksinimler müşteriler tarafından işlevsel gereksinimlere dönüştürülemez: bir gereksinimin işlevsel olup olmadığını seçmek müşteriye bağlı değildir.
Arseni Mourzenko

Ayrıca, sigara işlev "gelişme" (geliştiriciler örneğin sürdürülebilirliği, bakım) ve "operasyonel" nitelikleri (kullanıcılar, örneğin kullanışlılık bakımı) ayrılabilir olabilir
Aram Koçaryan

-4

Fonksiyonel gereklilikleri, sistemi ve davranışını tanımlayan gerekli bir şey olduğunu düşünüyorum, ancak fonksiyonel olmayan gereklilikler sistem için gerekli değildir ve sistemin tasarlanması müzakereleri sırasında toplanmamaktadır. , yerleşik sistemden güvenlik, bakım vb.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.