Aaronaught ha già un'ottima risposta, ma poiché c'erano altre risposte, ora rimosse, che erano totalmente sbagliate su ciò che è un requisito non funzionale, penso che sarebbe utile aggiungere alcune spiegazioni per evitare gli errori su ciò che un requisito non funzionale è.
Un requisito non funzionale è "una qualità o proprietà che il prodotto deve avere" ¹. James Taylor afferma che un requisito non funzionale "[...] è [nondimeno] un requisito ed è importante per il cliente, a volte anche più importante di un requisito funzionale" . Dà quindi due esempi: il logo del prodotto e l'accuratezza e l'affidabilità dell'attrezzatura. Questi due esempi mostrano molto bene che:
- I requisiti non funzionali non sono un jibber-jabber di marketing come: "Internet è importante al giorno d'oggi e vogliamo un sito Web".
- I requisiti non funzionali riguardano i clienti, poiché possono avere un forte impatto sulla loro produttività e sulla capacità stessa di utilizzare il prodotto.
- I requisiti non funzionali sono totalmente obiettivi.
L'ultimo punto è essenziale. Se il requisito è soggettivo, non ha nulla a che fare nell'elenco dei requisiti. Sarebbe impossibile costruire test di validazione da qualcosa di soggettivo . L'unico scopo dell'elenco dei requisiti è quello di elencare le aspettative non ambigue del cliente. "Voglio che questo quadrato sia rosso" è un requisito. "Voglio che questo quadrato abbia un bel colore" è un desiderio che richiede una spiegazione.
Ricorda che l'elenco dei requisiti è come un contratto (e nella maggior parte dei casi fa parte di un contratto). È firmato dal cliente e dalla società di sviluppo e, in caso di controversia, verrà utilizzato legalmente per determinare se hai svolto correttamente il tuo lavoro. Che cosa succede se ti ordino un prodotto software, specifica che "il prodotto deve essere eccezionale" e rifiuta di pagare al termine del prodotto, perché per me ciò che hai effettivamente fatto non è eccezionale prodotto ?
Quindi, vediamo alcuni esempi.
1. Il prodotto software risponde all'utente finale.
Questo non è un requisito. Non funzionale. Non non funzionale. Non è solo un requisito. Affatto. Ha valore zero. Non è possibile verificare se il sistema software soddisfa questo requisito durante i test di convalida. Né tu - il dipartimento QA, né il cliente.
2. Il ricaricamento delle statistiche utente esegue il 90% delle volte al di sotto di 100 ms. quando testato sulla macchina con le prestazioni specificate nell'appendice G parte 2 e il carico inferiore al 10% per la CPU, inferiore al 50% per la memoria e nessuna operazione di disco R / W attiva.
È un requisito. Se l'appendice G parte 2 è abbastanza precisa, posso prendere la macchina con l'hardware simile ed eseguire il test di validazione nel dipartimento di controllo qualità e otterrò sempre un risultato binario: superato o fallito.
È un requisito funzionale? No. Non specifica cosa deve fare il sistema. Probabilmente prima esistevano requisiti funzionali, che specificavano che l'applicazione software doveva essere in grado di ricaricare le statistiche degli utenti.
È un requisito non funzionale? È. Specifica una proprietà che deve avere un prodotto, ovvero il tempo di risposta massimo / medio, data la soglia percentuale.
3. L'applicazione è scritta in C #.
È un requisito? Non lo sappiamo davvero senza contesto. Potrebbe essere un desiderio dello sviluppatore principale, che, inserendo questo requisito, desidera evitare in seguito una discussione con i suoi colleghi sulla lingua da utilizzare. Potrebbe anche essere un requisito basato su hardware / software, elementi legacy o di compatibilità. Non lo sappiamo.
4. La base di codice C # del prodotto segue le Regole minime consigliate di Microsoft e le Regole di globalizzazione di Microsoft.
Questa è una cosa strana Personalmente, preferirei non definirlo un requisito e inserirlo in un documento separato che specifica gli standard e le migliori pratiche.
5. La finestra principale dell'applicazione ha un bordo blu (# 00f) 10px con cerchi rosa (#fcc) riempiti, quei cerchi posizionati sul bordo interno del bordo e con un diametro di 3px, separati da 20px l'uno dall'altro.
È un requisito e non funzionale. Specifica qualcosa che possiamo testare durante il test di validazione e specifica una proprietà del prodotto, non ciò che il prodotto è destinato a fare.
6. Il sistema di localizzazione del veicolo misura la velocità con una precisione di ± 0,016 mph.
Anche un requisito non funzionale. Fornisce una soglia misurabile della precisione del sistema. Non dice cosa deve fare il sistema, ma dice quanto preciso sta facendo il suo lavoro. Ma aspetta? Dice che il sistema di localizzazione del veicolo misura la velocità, no? Quindi è anche un requisito funzionale? Bene, no, poiché mettiamo l'accento sulla precisione della misurazione, non sul fatto che la misurazione sia stata eseguita.
7. Il sistema di localizzazione del veicolo misura la velocità del veicolo.
Ora è un requisito funzionale. Non dice come funziona il sistema, ma cosa sta facendo. Attraverso requisiti funzionali, potremmo apprendere che il sistema di localizzazione del veicolo misura la velocità, la potenza della batteria, la pressione di non so cosa e se le luci sono accese o meno.
8. Le pagine del sito Web richiedono 850 ms. caricare.
Questo non è un requisito. Cerca di essere uno, ma è totalmente non valido. Come valuteresti questo? Quali pagine? Tutti? Testato attraverso una rete locale da 1 Gbps su una macchina client quad-core e un server a otto core con SSD utilizzati al 2% o tramite un modem di un laptop vecchio e scadente mentre il sito Web è ospitato da un piccolo server utilizzato al 99% ? Cosa si intende per "caricare"? Significa scaricare la pagina? Scaricarlo e visualizzarlo? Invio della richiesta POST con alcuni dati di grandi dimensioni, quindi caricamento della risposta e visualizzazione?
Per concludere, un requisito non funzionale è sempre un requisito, il che significa che descrive qualcosa che è totalmente obiettivo e può essere verificato attraverso un test di validazione automatizzato o manuale, ma invece di dire cosa sta facendo il sistema, spiega come il sistema sta facendo qualcosa o come è il sistema stesso .
¹ Gestione dei progetti informatici: applicazione delle strategie di gestione dei progetti alle iniziative di software, hardware e integrazione, James Taylor, ISBN: 0814408117.