Wymagania funkcjonalne czy niefunkcjonalne?

34

Zastanawiam się nad wymaganiami funkcjonalnymi lub niefunkcjonalnymi. Znalazłem wiele różnych definicji tych terminów i nie mogę przypisać niektórych moich wymagań do właściwej kategorii.

Zastanawiam się nad wymaganiami, które nie są związane z jakąś akcją lub mają dodatkowe warunki, na przykład:

  1. Na liście wybranych urządzeń urządzenie można powtórzyć.
  2. Baza danych musi zawierać co najmniej 100 pozycji
  3. Waluta o pewnej wartości musi być wyrażona w USD.
  4. Urządzenie musi mieć nazwę i wartość zużycia energii w watach.

czy te wymagania są funkcjonalne czy niefunkcjonalne?

Piotr Müller
źródło
4
Myślę, że rozróżnienie między „funkcjonalnym” a „niefunkcjonalnym” jest mylące i powoduje, że oprogramowanie ma słabą funkcjonalność. Przekonałem się, że myślenie o „funkcjach użytkownika końcowego” i „funkcjach operacyjnych” prowadzi do lepszego oprogramowania: blog.softwareoperability.com/2013/04/08/… (mój post)
Matthew Skelton
@MatthewSkelton Nie mogłem stwierdzić, czy (2.) jest funkcją użytkownika lub operacją. Wydaje się być „funkcją testową”.
Martin Thoma,
@moose - wymaganie od DB, aby / działało w ramach określonych parametrów / biorąc pod uwagę 100 pozycji, jest bardziej wymaganiem operacyjnym, chociaż może to mieć wpływ na wrażenia użytkownika końcowego, jeśli wydajność zostanie obniżona. Ostatecznie prawdopodobnie potrzebowalibyśmy nieco więcej kontekstu na temat wymagań w OP, aby móc podzielić się na F i NF, chociaż - jak już wspomniałem - myślę, że i tak jest to trochę fałszywe rozróżnienie :)
Matthew Skelton

Odpowiedzi:

41

Wymagania funkcjonalne określają, co zrobi system lub aplikacja - szczególnie w kontekście interakcji zewnętrznej (z użytkownikiem lub z innym systemem).

Podczas składania nowego zamówienia system wyświetla całkowity koszt i wymaga potwierdzenia od użytkownika. Jest to wymóg funkcjonalny; opisuje funkcję systemu.

Więcej informacji można znaleźć w Wikipedii: Wymagania funkcjonalne .

Wymagania niefunkcjonalne to wszelkie wymagania, które nie opisują zachowania wejścia / wyjścia systemu. Zauważ, że wciąż mówimy o wymaganiach , a nie szczegółach implementacji , dlatego to, że używamy wyrażenia „niefunkcjonalny”, nie oznacza, że w tej sekcji wszystko jest uczciwą grą.

Najczęstsze rodzaje wymagań niefunkcjonalnych, które zobaczysz, będą dotyczyć działania systemu (dostępność, ciągłość, DR), wydajności (przepustowość, opóźnienia, pojemność pamięci) i bezpieczeństwa (uwierzytelnianie, autoryzacja, audyt, prywatność).

Są to kwestie przekrojowe, które wpływają na każdą „funkcję”, ale same w sobie nie są tak naprawdę; są bardziej jak metadane funkcji, pomagając opisać nie tylko to, czy system robi to, co powinien, ale także, jak dobrze to robi. Nie bierz jednak tej analogii za daleko - to tylko analogia.

Wymagania niefunkcjonalne nie są subiektywne ani falujące, w przeciwieństwie do tego, co sugerują niektórzy ludzie. W rzeczywistości powinny mieć dołączone twarde wskaźniki (tj. Czas odpowiedzi nie dłuższy niż 100 ms). Wymagania NF również nie szczegóły realizacji lub zadania jak „modernizacja ram ORM” - pojęcia, gdzie każdy dostanie ten pomysł.

Więcej informacji na Wikipedii: Wymagania niefunkcjonalne .


Aby konkretnie odnieść się do przykładów w pytaniu:

  1. Na liście wybranych urządzeń urządzenie można powtórzyć.

    • Wyraźnie wymóg funkcjonalny. Opisuje, jak wygląda wyjście systemu.
  2. Baza danych musi zawierać co najmniej 100 pozycji

    • Brzmi jak reguła biznesowa, a więc także wymóg funkcjonalny. Wydaje się to jednak niekompletne. Jaki jest powód tej reguły? Co się stanie / powinno się stać, jeśli baza danych zawiera mniej niż 100 pozycji?
  3. Waluta o pewnej wartości musi być wyrażona w USD.

    • Wymóg funkcjonalny, ale nie jest to właściwie poprawnie określony. Bardziej użytecznym sformułowaniem byłoby: System będzie obsługiwał jedną walutę (USD). Oczywiście zostałoby to zmienione, gdyby potrzebna była obsługa więcej niż jednej waluty, a następnie wymóg musiałby zawierać informacje o przeliczaniu walut i tak dalej.
  4. Urządzenie musi mieć nazwę i wartość zużycia energii w watach.

    • Nie jest to żaden wymóg, jest to raczej specyfikacja techniczna. Wymóg funkcjonalny zostałby określony, ponieważ zakłada się, że moc znamionowa jest w watach. Jeśli istnieje więcej niż jeden JM, to podobnie jak w przypadku waluty, wymagania funkcjonalne powinny zawierać sekcje dotyczące konwersji jednostek, gdzie / jak są skonfigurowane itp. (Jeśli dotyczy).
Aaronaught
źródło
Miły! Dodam jednak, że wymagania funkcjonalne nie muszą dotyczyć tylko interakcji ze środowiskiem zewnętrznym (powiązaną koncepcją są „wymagania dotyczące interfejsu” z innymi systemami). Przykładem tego może być „System musi indeksować bazę danych użytkowników co 60 minut”. To jest wyraźnie wewnętrzne.
Aram Kocharyan
2
@AramKocharyan: To nie jest wymóg funkcjonalny. Najwyraźniej ukrywa się gdzieś SLA klienta, i to jest wymóg funkcjonalny. „Aktualizacje kontaktów muszą zostać przetworzone w ciągu 60 minut, aby wesprzeć terminową obsługę klienta / marketing” - to wewnętrzny wymóg funkcjonalny. „Indeksowanie bazy danych użytkowników” wcale nie jest wymogiem, jest implementacją; na przykład innym sposobem spełnienia wspomnianej umowy SLA może być zastosowanie indeksowania w tle w czasie rzeczywistym lub wyeliminowanie potrzeby indeksowania w całości za pomocą brokera usług lub magistrali i przetwarzania aktualizacji w czasie prawie rzeczywistym.
Aaronaught
+1! jeśli chodzi o subiektywność wymagań niefunkcjonalnych, może być wystarczające wskazanie, że są one rdzeniem bardzo solidnej architektury RESTful en.wikipedia.org/wiki/…
fr_andres SupportsMicaicaCellio
18

Istnieje już doskonała odpowiedź Aaronaught, ale ponieważ zostały usunięte inne odpowiedzi, które były całkowicie błędne co do tego, co jest wymogiem niefunkcjonalnym, myślę, że warto byłoby dodać kilka wyjaśnień, aby uniknąć błędów na temat wymóg niefunkcjonalny to.


Wymaganiem niefunkcjonalnym jest „jakość lub właściwość, którą musi posiadać produkt” ¹. James Taylor mówi, że niefunkcjonalne wymaganie „[...] jest [mimo to] wymaganiem i jest ważne dla klienta - czasami nawet ważniejsze niż wymaganie funkcjonalne” . Następnie podaje dwa przykłady: logo produktu oraz dokładność i niezawodność sprzętu. Oba przykłady pokazują bardzo dobrze, że:

  • Niefunkcjonalne wymagania nie są marketingowym gadżetem typu: „Internet jest obecnie ważny i chcemy mieć stronę internetową”.
  • Wymagania niefunkcjonalne dotyczą klientów, ponieważ mogą mieć duży wpływ na ich produktywność i zdolność do korzystania z produktu.
  • Wymagania niefunkcjonalne są całkowicie obiektywne.

Ostatni punkt jest niezbędny. Jeśli wymaganie jest subiektywne, nie ma nic wspólnego z listą wymagań. Nie byłoby możliwe zbudowanie testów walidacyjnych z czegoś, co jest subiektywne . Jedynym celem listy wymagań jest wyliczenie niejednoznacznych oczekiwań klienta. „Chcę, aby ten kwadrat był czerwony” jest wymogiem. „Chcę, aby ten kwadrat miał ładny kolor” to życzenie, które wymaga wyjaśnienia.

Pamiętaj, że lista wymagań jest jak umowa (w większości przypadków jest częścią umowy). Jest podpisany przez klienta i firmę deweloperską, aw przypadku sporu zostanie wykorzystany zgodnie z prawem, aby ustalić, czy poprawnie wykonałeś swoją pracę. Co się stanie, jeśli zamówię Ci oprogramowanie, określ, że „produkt musi być świetny” i odmówię zapłaty, gdy produkt zostanie wykonany, ponieważ dla mnie to, co faktycznie zrobiłeś, nie jest świetnym produktem?

Zobaczmy kilka przykładów.

  1. Oprogramowanie reaguje na użytkownika końcowego.

To nie jest wymóg. Nie działa. Nie jest niefunkcjonalny. To po prostu nie jest wymagane. W ogóle. Ma wartość zerową. Nie można sprawdzić, czy system oprogramowania spełnia to wymaganie podczas testów sprawdzania poprawności. Ani ty - dział kontroli jakości, ani klient.

  2. Przeładowanie statystyk użytkownika wykonuje 90% czasu poniżej 100 ms. podczas testowania na maszynie o wydajnościach określonych w załączniku G część 2 i obciążeniu poniżej 10% dla procesora, poniżej 50% dla pamięci i bez aktywnych operacji dyskowych R / W.

To jest wymóg. Jeśli dodatek 2 część G jest wystarczająco precyzyjny, mogę zabrać maszynę z podobnym sprzętem i przeprowadzić test walidacyjny w dziale kontroli jakości, i zawsze otrzymam wynik binarny: pozytywny lub negatywny.

Czy to wymóg funkcjonalny? Nie. Nie określa, co system musi zrobić. Prawdopodobnie wcześniej istniały wymagania funkcjonalne, określające, że aplikacja musi być w stanie ponownie załadować statystyki użytkownika.

Czy jest to wymóg niefunkcjonalny? To jest. Określa właściwość, którą musi posiadać produkt, tj. Maksymalny / średni czas reakcji, biorąc pod uwagę próg procentowy.

  3. Aplikacja napisana jest w C #.

Czy to wymóg? Tak naprawdę nie wiemy bez kontekstu. Może być życzeniem wiodącego programisty, który poprzez wprowadzenie tego wymogu chce uniknąć późniejszej dyskusji z kolegami na temat używanego języka. Może to być również wymaganie oparte na sprzęcie / oprogramowaniu, starszych elementach lub elementach kompatybilności. Nie wiemy

  4. Baza kodu C # produktu jest zgodna z minimalnymi zalecanymi regułami firmy Microsoft i regułami globalizacji firmy Microsoft.

To dziwna rzecz. Osobiście wolałbym nie nazywać tego wymogiem i umieścić go w osobnym dokumencie określającym standardy i najlepsze praktyki.

  5. Główne okno aplikacji ma niebieską (# 00f) ramkę 10px z różowymi (#fcc) wypełnionymi kółkami, przy czym koła te są umieszczone na wewnętrznej krawędzi ramki i mają średnicę 3px, oddzielone od siebie o 20px.

Jest to wymóg i niefunkcjonalny. Określa ona coś możemy przetestować podczas testów walidacji i określa właściwości produktu, nie co produkt jest przeznaczony do zrobienia.

  6. System śledzenia pojazdu mierzy prędkość z dokładnością ± 0,016 mil na godzinę.

Również wymóg niefunkcjonalny. Daje mierzalny próg precyzji systemu. Nie mówi, co system musi zrobić, ale mówi, jak precyzyjnie wykonuje swoją pracę. Ale poczekaj? Mówi, że system śledzenia pojazdu mierzy prędkość, prawda? Czy to także wymóg funkcjonalny? Cóż, nie, ponieważ kładziemy nacisk na precyzję pomiaru, a nie na fakt, że pomiar jest wykonywany.

  7. System śledzenia pojazdu mierzy prędkość pojazdu.

Teraz jest to wymóg funkcjonalny. Nie mówi, jak działa system, ale co robi. Dzięki wymaganiom funkcjonalnym mogliśmy dowiedzieć się, że system śledzenia pojazdu mierzy prędkość, moc akumulatora, ciśnienie Nie wiem co i czy światła są włączone, czy nie.

  8. Strony witryny zajmują 850 ms. załadować.

To nie jest wymóg. Próbuje być jednym, ale jest całkowicie nieważny. Jak byś to zasłużył? Jakie strony Wszystko? Testowany przez lokalną sieć 1 Gb / s na czterordzeniowym komputerze klienckim i ośmiordzeniowym serwerze z dyskami SSD używanymi w 2% lub przez modem starego i gównianego laptopa, gdy witryna jest hostowana przez mały serwer używany w 99% ? Co należy rozumieć przez „ładowanie”? Czy to znaczy, że pobierasz stronę? Pobieranie i wyświetlanie? Wysyłasz żądanie POST z dużymi danymi, a następnie ładujesz odpowiedź i wyświetlasz ją?

Podsumowując, wymóg niefunkcjonalny jest zawsze wymogiem, co oznacza, że ​​opisuje coś, co jest całkowicie obiektywne i można je sprawdzić za pomocą automatycznego lub ręcznego testu sprawdzającego, ale zamiast powiedzieć, co robi system, wyjaśnia, w jaki sposób system robi coś lub jak sam system jest .


¹ Zarządzanie projektami informatycznymi: stosowanie strategii zarządzania projektami do inicjatyw w zakresie oprogramowania, sprzętu i integracji, James Taylor, ISBN: 0814408117.

Arseni Mourzenko
źródło
+1 za szczegóły. Nie zgadzam się z twoją opinią w (1), mówisz „to nie jest wymóg”. Myślę, że jest to wymóg, ale analityk biznesowy musi uczynić go „wymiernym” wymogiem, zanim zespół się do niego zaangażuje. Podobało mi się również użycie słowa „życzenie” i rozróżnienie między „życzeniami” a „wymaganiami”
NoChance
@Emmad Kareem: masz rację. Ograniczam się do wymagań czysto technicznych, tj. Wymagań, które będą stosowane przez programistów i kontrolę jakości. Dla analityków biznesowych sprawy wyglądają nieco inaczej, a niektóre elementy, które zakwalifikowałem jako nie będące wymaganiami, byłyby w rzeczywistości całkowicie poprawne.
Arseni Mourzenko
Argumentowałbym: „Aplikacja jest napisana w języku C #”. jest ograniczeniem, a nie wymogiem funkcjonalnym, ponieważ nie opisuje zachowania systemu, ale ogranicza przestrzeń rozwiązania.
Aram Kocharyan
@AramKocharyan: dlatego powiedziałem, że nie wiemy, czy to stwierdzenie jest w ogóle wymogiem.
Arseni Mourzenko
3

Wymaganie funkcjonalne opisuje rezultat interakcji z systemem (co system robi w danej sytuacji), natomiast wymaganie niefunkcjonalne zazwyczaj odnosi się do specyfiki wydajności, pojemności, czasu reakcji, itp ... rzeczy, które nie reprezentują funkcjonalność, a proces w systemie lub wynik interakcji.

To powiedziawszy, niefunkcjonalne wymaganie, które opisujesz, jest w rzeczywistości wymaganiem funkcjonalnym ze specyfikacją techniczną (co faktycznie uczyniłoby to złym wymogiem). Przykładem niefunkcjonalnego wymagania dla twojej sprawy może być coś takiego:

- Interfejs użytkownika nie może być zablokowany podczas animacji kości.

Wymagania użytkownika są zwykle specyficznymi wymaganiami interfejsu użytkownika, które w zależności od kontekstu byłyby funkcjonalne lub niefunkcjonalne, podczas gdy wymagania systemowe (na przykład pojemność użytkownika współbieżnego) są zazwyczaj w większości niefunkcjonalne.

Juan Carlos Eduardo Romaina Ac
źródło
2

Aby dodać do niektórych istniejących dobrych odpowiedzi, że niefunkcjonalne wymagania są czasem nazywane „ilities” - cechy, które system musi posiadać oprócz swojej zwykłej funkcjonalności. „podobieństwa” obejmują dostępność, użyteczność, bezpieczeństwo, elastyczność - a nawet bardziej subiektywną estetykę.

Niektóre z nich są bardzo trudne do określenia i oceny. Niemniej mają znaczenie. Jeśli zapisujesz się do nich na podstawie umowy, będziesz chciał uniknąć bezsensownych, falistych wersji, np. „System musi być bezpieczny”. Problem z próbą spełnienia takich wymagań polega na tym, że ludzie mają skłonność do rzeczy, które są łatwe do zmierzenia, a nie do rzeczy, które mają znaczenie (a wymagania mogą być napisane przez osoby, które nie mają podstaw w odpowiednich specjalizacjach ). W efekcie powstają systemy, które nie są ani bezpieczne, użyteczne ani elastyczne (dostępność nie jest tak trudna do określenia i zmierzenia, choć wciąż powoduje wiele problemów).

Istnieją tutaj różnice kulturowe między ludźmi, którzy zajmują się umowami i formalnymi sprawami, a ludźmi, którzy zajmują się bardziej ogólnymi analizami, architekturą, badaniami itp. Niejasne wymaganie dotyczące falistości rąk jest nadal wymogiem, jeśli chodzi o to ostatnie, ponieważ wyraża rzeczy, które są ważne dla klienta, nawet jeśli całkowicie sympatyzują z ludźmi umowy, że nie jest to przydatny wymóg umowny, dopóki nie zostanie szczegółowo zbadany i dokładnie przybity.

Ostatni punkt - jeśli nie możesz (jeszcze) wymyślić obiektywnej miary „zdolności”, to nie znaczy, że klient jej nie potrzebuje. Niejasne! = Niepotrzebne. Może to jednak oznaczać, że musimy opracować lepsze metody pomiaru takich rzeczy, stopniowo zwiększać i udoskonalać niefunkcjonalne wymagania lub zawierać umowy (zwinne itp.), Które mogą działać bez obiektywnych środków z góry wszystko.

DNA
źródło
0

Te komentarze są bardzo dobre, ale są nadmiernie ugotowane i nie oferują przejrzystego szablonu do pracy. Czy nie byłoby jasne określenie go jako:

Moim zdaniem wymóg funkcjonalny jest tym, czego doświadcza użytkownik podczas korzystania z aplikacji. Jest to wymóg, który należy spełnić, gdy programista próbuje wdrożyć to od podstaw, wprowadzić ulepszenia lub modyfikacje. Na przykład: użytkownik powinien się zalogować. Powiedzmy, że jeśli dodasz nowy sposób uruchamiania aplikacji za pomocą wiersza polecenia, użytkownik nadal będzie musiał się zalogować.

Pod maską pojawia się wymóg niefunkcjonalny. Użytkownik nie jest tego świadomy, ale musi tam być, jednak jest zaimplementowany. Na przykład: Aplikacja powinna zostać opracowana w języku C #. Jeśli zostanie opracowany w innym języku, użytkownik tego nie zauważy. Ale może to być wymagane, ponieważ opiera się na istniejącym kodzie. Innym przykładem może być to, że musi być zainstalowany na pewnym serwerze. Przenoszenie serwerów nie zostanie zauważone przez użytkownika.

Mehrdad Ordoukhani
źródło
-1

Funkcjonalny czy niefunkcjonalny? Nie powiedziałbym ani jednego. Większość, jeśli nie wszystkie z wymienionych przykładów, wyglądają dla mnie jak reguły biznesowe (określające ograniczenia związane z procesem i reguły decyzyjne, których muszą przestrzegać procesy systemowe).

Są czymś, o czym wielu inżynierów zapomina lub nie wie, ponieważ reguły biznesowe są zwykle gromadzone w ramach analizy biznesowej (i często osadzone w specyfikacjach wymagań funkcjonalnych, a nie zewnętrznie).

Kanwar
źródło
dlaczego wymienione przykłady wyglądają dla Ciebie jak reguły biznesowe?
komara
-4

Wymóg funkcjonalny jest zwykle czymś, co system może lub zrobi. Można to wyrazić jako wynik działania (wyniku ujemnego). Niefunkcjonalne wymaganie to coś, na czym nie zależy klient / użytkownik końcowy i nie wpływa na wynik - np.
- Windows będzie miał niebieską ramkę z różowymi kropkami. - Program zostanie napisany w Javie
- Wszystko, co dotyczy standardów kodowania, metod i procesów.

Ostrzegamy jednak, że wymagania niefunkcjonalne mogą zostać przekształcone w wymagania funkcjonalne przez klientów. przykładami mogą być - program zostanie napisany w Erlang, ponieważ klient przeczytał o nim artykuł w magazynie i chce, aby został napisany w Erlang. - Program musi korzystać z DB 2., ponieważ klient zamierza uruchomić go na swoich istniejących systemach DB 2, ma wieloletnie doświadczenie i zespół IT obeznany z tą platformą.
- Kod źródłowy musi przejść wszystkie zalecenia MISRA.

Podsumowując - jeśli klient się tym przejmuje, jest to wymóg funkcjonalny, w przeciwnym razie jest to wymóg niefunkcjonalny lub być może nawet wymóg.

mattnz
źródło
1
-1. Oba klienci i użytkownicy końcowi zrobić opieki temat wymagań niefunkcjonalnych, gdyż wpływają one bezpośrednio ich produktywność. Ponadto niefunkcjonalne wymagania nie mogą zostać przekształcone w wymagania funkcjonalne przez klientów: to klient nie musi decydować, czy wymaganie jest funkcjonalne czy niefunkcjonalne.
Arseni Mourzenko
również funkcje niefunkcjonalne można rozbić na cechy „programistyczne” (opieka programistów, np. łatwość konserwacji) i „operacyjne” (opieka użytkowników, np. użyteczność)
Aram Kocharyan
-4

uważam, że wymagania funkcjonalne są konieczną rzeczą opisującą system i jego zachowanie, ale wymagania niefunkcjonalne nie są konieczne dla systemu, a nie zebrane podczas negocjacji przy projektowaniu systemu, to po prostu wynik systemu, taki jak jakość pokrycia prędkości , bezpieczeństwo, łatwość konserwacji itp. z wbudowanego systemu.

Tibakula Dawson
źródło