web-dev-qa-db-fra.com

Exigence fonctionnelle ou non fonctionnelle?

Je me pose des questions sur les exigences fonctionnelles ou non fonctionnelles. J'ai trouvé beaucoup de définitions différentes pour ces termes et je ne peux pas attribuer certaines de mes exigences à la catégorie appropriée.

Je m'interroge sur les exigences qui ne sont pas liées à une action ou qui ont des conditions supplémentaires, par exemple:

  1. Dans la liste des appareils sélectionnés, l'appareil peut être répété.
  2. La base de données doit contenir au moins 100 éléments
  3. La devise d'une certaine valeur doit être en USD.
  4. L'appareil doit avoir un nom et une valeur de consommation électrique en watts.

ces exigences sont-elles fonctionnelles ou non fonctionnelles?

34
Piotr Müller

Les exigences fonctionnelles définissent quoi le système ou l'application fera - spécifiquement dans le contexte d'une interaction externe (avec un utilisateur ou avec un autre système).

Lors de la passation d'une nouvelle commande, le système affichera le coût total et devra être confirmé par l'utilisateur. C'est une exigence fonctionnelle; il décrit une fonction du système.

Reportez-vous à Wikipedia: Functional Requirement pour plus de détails.

Les exigences non fonctionnelles sont toutes les exigences qui ne le faites pas décrivent le comportement d'entrée/sortie du système. Notez que nous parlons toujours de exigences, pas détails d'implémentation, donc juste parce que nous utilisons l'expression "non fonctionnel" ne signifie pas que n'importe quoi est un jeu équitable à mettre dans cette section.

Les types d'exigences non fonctionnelles les plus courants que vous verrez concernent le fonctionnement du système (disponibilité, continuité, reprise après sinistre), les performances (débit, latence, capacité de stockage) et la sécurité (authentification, autorisation, audit, confidentialité).

Ce sont toutes des préoccupations transversales qui ont un impact sur chaque "fonctionnalité" mais ne sont pas vraiment des fonctionnalités elles-mêmes; elles ressemblent davantage à des métadonnées de fonctionnalité, aidant à décrire non seulement si le système fait ce qu'il est censé faire, mais aussi à quel point il le fait. Ne prenez pas trop cette analogie - c'est juste une analogie.

Les exigences non fonctionnelles ne sont pas subjectives ou ondulantes, contrairement à ce que certaines personnes semblent suggérer ici. En fait, ils devraient ont en fait une métrique dure qui leur est attachée (c'est-à-dire un temps de réponse ne dépassant pas 100 ms). Les exigences NF ne sont pas non plus des détails d'implémentation ou des tâches comme "mettre à niveau le cadre ORM" - aucun indice où quiconque aurait cette idée.

Plus de détails sur Wikipedia: Exigence non fonctionnelle .


Pour répondre spécifiquement aux exemples de la question:

  1. Dans la liste des appareils sélectionnés, l'appareil peut être répété.

    • Clairement une exigence fonctionnelle. Décrit à quoi ressemble la sortie du système.
  2. La base de données doit contenir au moins 100 éléments

    • Cela ressemble à une règle commerciale, donc aussi une exigence fonctionnelle. Cependant, cela semble incomplet. Quelle est la raison de cette règle? Que se passera-t-il/devrait-il se passer si la base de données contient moins de 100 éléments?
  3. La devise d'une certaine valeur doit être en USD.

    • Exigence fonctionnelle, mais pas vraiment formulée. Une formulation plus utile serait: Le système prend en charge une devise (USD). Évidemment, cela serait modifié si plus d'une devise devait être prise en charge, et alors l'exigence devrait inclure des informations sur les conversions de devises et ainsi de suite.
  4. L'appareil doit avoir un nom et une valeur de consommation électrique en watts.

    • Pas vraiment une sorte d'exigence, cela ressemble plus à une spécification technique. Une exigence fonctionnelle serait indiquée comme la puissance nominale est supposée être en watts. S'il y a plus d'une UdM, comme pour la devise, les exigences fonctionnelles devraient avoir des sections sur les conversions d'unités, où/comment ils sont configurés, etc. (le cas échéant).
41
Aaronaught

Il y a déjà une excellente réponse d'Aaronaught, mais comme il y avait d'autres réponses, maintenant supprimées, qui étaient totalement erronées sur ce qu'est une exigence non fonctionnelle, je pense qu'il serait utile d'ajouter quelques explications pour éviter les erreurs sur ce qu'un l'exigence non fonctionnelle est.


Une exigence non fonctionnelle est "une qualité ou une propriété que le produit doit avoir" ¹. James Taylor dit qu'une exigence non fonctionnelle "[...] est [néanmoins] une exigence, et elle est importante pour le client - parfois même plus importante qu'une exigence fonctionnelle" . Il donne ensuite deux exemples: le logo du produit, et la précision et la fiabilité de l'équipement. Ces deux exemples montrent très bien que:

  • Les exigences non fonctionnelles ne sont pas un jibber marketing Jabber comme: "Internet est important de nos jours et nous voulons avoir un site web".
  • Les exigences non fonctionnelles concernent les clients, car elles peuvent avoir un impact important sur leur productivité et leur capacité à utiliser le produit.
  • Les exigences non fonctionnelles sont totalement objectives.

Le dernier point est essentiel. Si l'exigence est subjective, elle n'a rien à voir dans la liste des exigences. Il serait impossible de construire des tests de validation à partir de quelque chose de subjectif. Le seul objectif de la liste des exigences est d'énumérer les attentes non ambiguës du client. "Je veux que ce carré soit rouge" est une exigence. "Je veux que ce carré ait une belle couleur" est un souhait qui nécessite une explication.

N'oubliez pas que la liste des exigences est comme un contrat (et dans la plupart des cas, elle fait partie d'un contrat). Il est signé par le client et la société de développement, et en cas de litige, il sera utilisé légalement pour déterminer si vous avez bien fait votre travail. Et si je vous commande un produit logiciel, spécifiez que "le produit doit être génial" et refusez de payer lorsque le produit est terminé, car pour moi, ce que vous avez réellement fait n'est pas un grand produit?

Voyons donc quelques exemples.

1. Le produit logiciel est sensible à l'utilisateur final.

Ce n'est pas une exigence. Pas fonctionnel. Pas un non fonctionnel. Ce n'est tout simplement pas une exigence. Du tout. Il a une valeur nulle. Vous ne pouvez pas vérifier si le système logiciel répond à cette exigence lors des tests de validation. Ni vous - le service d'assurance qualité, ni le client.

2. Le rechargement des statistiques utilisateur s'effectue 90% du temps en dessous de 100 ms. Lors d'un test sur machine avec les performances spécifiées en annexe G partie 2 et la charge inférieure à 10% pour le CPU, inférieure à 50% pour la mémoire et aucune opération de disque R/W active.

C'est une exigence. Si l'annexe G partie 2 est suffisamment précise, je peux prendre la machine avec le matériel similaire et effectuer le test de validation dans le département QA, et j'obtiendrai toujours un résultat binaire: réussi ou échoué.

Est-ce une exigence fonctionnelle? Non. Il ne spécifie pas ce que le système doit faire. Il y avait probablement une exigence fonctionnelle auparavant, spécifiant que l'application logicielle devait être capable de recharger les statistiques des utilisateurs.

Est-ce une exigence non fonctionnelle? C'est. Il spécifie une propriété qu'un produit doit avoir, c'est-à-dire le temps de réponse maximum/moyen, étant donné le seuil de pourcentage.

. L'application est écrite en C #.

Est-ce une exigence? Nous ne savons pas vraiment sans contexte. C'est peut-être le souhait du développeur principal qui souhaite, en insérant cette exigence, éviter plus tard une discussion avec ses collègues sur la langue à utiliser. Il peut également s'agir d'une exigence basée sur des éléments matériels/logiciels, hérités ou de compatibilité. Nous ne le savons pas.

4. La base de code C # du produit suit les règles minimales recommandées Microsoft et les règles de mondialisation Microsoft.

C'est une chose étrange. Personnellement, je préfère ne pas appeler cela une exigence et le mettre dans un document séparé précisant les normes et les meilleures pratiques.

5. La fenêtre principale de l'application a une bordure bleue (# 00f) 10px avec des cercles remplis roses (#fcc), ces cercles étant placés sur le bord intérieur de la bordure et ayant un diamètre de 3px, séparés par 20px les uns des autres.

C'est une exigence et non fonctionnelle. Il spécifie quelque chose que nous pouvons tester pendant les tests de validation, et il spécifie une propriété du produit, pas ce que le produit est destiné à faire.

6. Le système de suivi des véhicules mesure la vitesse avec une précision de ± 0,016 mph.

Également une exigence non fonctionnelle. Il donne un seuil mesurable de la précision du système. Il ne dit pas ce que le système doit faire, mais indique à quel point il fait son travail avec précision. Mais attendez? Il indique que le système de suivi des véhicules mesure la vitesse, n'est-ce pas? C'est donc aussi une exigence fonctionnelle? Eh bien, non, puisque nous mettons l'accent sur la précision de la mesure, pas sur le fait que la mesure est effectuée.

7. Le système de suivi des véhicules mesure la vitesse du véhicule.

C'est maintenant une exigence fonctionnelle. Il ne dit pas comment fonctionne le système, mais ce qu'il fait. Grâce aux exigences fonctionnelles, nous pourrions apprendre que le système de suivi des véhicules mesure la vitesse, la puissance de la batterie, la pression de Je ne sais pas quoi et si les feux sont allumés ou non.

8. Les pages du site Web prennent 850 ms. À charger.

Ce n'est pas une exigence. Il essaie d'en être un, mais est totalement invalide. Comment feriez-vous cela? Quelles pages? Tout? Testé via un réseau local à 1 Gbit/s sur une machine cliente à quatre cœurs et un serveur à huit cœurs avec des SSD utilisés à 2%, ou via un modem d'un ordinateur portable vieux et merdique pendant que le site Web est hébergé par un petit serveur utilisé à 99% ? Qu'entend-on par "charger"? Est-ce que cela signifie télécharger la page? Le télécharger et l'afficher? Envoi de la demande POST avec des données volumineuses, puis chargement de la réponse et affichage de celle-ci?

Pour conclure, une exigence non fonctionnelle est toujours une exigence, ce qui signifie qu'elle décrit quelque chose qui est totalement objectif et peut être vérifiée par un test de validation manuel ou automatisé, mais au lieu de dire quoi le système fait, il explique comment le système fait quelque chose ou comment le système est lui-même .


¹ Gestion des projets de technologie de l'information: Application de stratégies de gestion de projet aux initiatives logicielles, matérielles et d'intégration, James Taylor, ISBN: 0814408117.

18
Arseni Mourzenko

A exigence fonctionnelle décrit le résultat de l'interaction avec le système (ce que fait le système dans des situations données), tandis que exigence non fonctionnelle fait généralement référence à des spécificités de performance, de capacité, de réponse temps, etc ... des choses qui ne représentent pas une fonctionnalité, un processus dans le système ou le résultat d'une interaction.

Cela dit, l'exigence non fonctionnelle que vous décrivez est en fait une exigence fonctionnelle avec une spécification technique (ce qui en fait en fait une mauvaise exigence). Un exemple d'une exigence non fonctionnelle pour votre cas serait quelque chose comme ceci:

- L'interface utilisateur ne doit pas être verrouillée pendant que l'animation des dés est en cours.

exigences utilisateur sont généralement des exigences d'interface utilisateur spécifiques, qui selon le contexte seraient fonctionnelles ou non fonctionnelles, tandis que exigences système (capacité utilisateur simultanée, par exemple) sont généralement la plupart des le temps non fonctionnel.

Juste pour ajouter à certaines bonnes réponses existantes que les exigences non fonctionnelles sont parfois appelées "unités" - qualités que le système doit posséder en plus de ses fonctionnalités simples. Les "ilités" incluent la disponibilité, l'utilisabilité, la sécurité, la flexibilité - et une esthétique encore plus subjective.

Certains d'entre eux sont très difficiles à spécifier et à évaluer. Néanmoins, ils comptent. Si vous vous y inscrivez contractuellement, alors vous voudrez éviter les versions sans signification ondulées à la main, par exemple "Le système doit être sécurisé". Le problème lorsque l'on essaie de fixer ces exigences est que les gens ont tendance à se concentrer sur les choses qui sont facilement mesurables, plutôt que sur les choses qui comptent (et les exigences peuvent bien être rédigées par des personnes qui n'ont aucune connaissance des spécialités pertinentes). ). Le résultat final est que vous vous retrouvez généralement avec des systèmes qui ne sont ni sécurisés, ni utilisables, ni flexibles (la disponibilité n'est pas si difficile à spécifier et à mesurer, bien qu'elle cause toujours beaucoup de maux de tête).

Il y a des différences culturelles ici entre les gens qui traitent des contrats et des choses formelles, et les gens qui traitent de l'analyse plus générale, de l'architecture, de la recherche, etc. Une vague exigence vague est toujours une exigence pour autant que le ce dernier est concerné, car il exprime des choses qui importent au client, même s'il sympathise complètement avec les contractuels que ce n'est pas un exigence contractuelle utile jusqu'à ce qu'il soit exploré en détail et bien cloué.

Un dernier point - si vous ne pouvez pas (encore) trouver une mesure objective d'un "ilité", cela ne signifie pas que le client n'en a pas besoin. Vague! = Inutile. Cependant, cela peut signifier que nous devons développer de meilleures façons de mesurer de telles choses, susciter et affiner les exigences non fonctionnelles de manière incrémentielle, ou contracter de manière (Agile, etc.) qui peut fonctionner sans mesures objectives initiales pour tout.

2
DNA

Ces commentaires sont tous très bons, mais ils sont bien trop cuits et n'offrent pas de modèle clair pour travailler. Ne serait-il pas clair de le spécifier comme:

À mon avis, une exigence fonctionnelle est ce que l'utilisateur éprouve lors de l'utilisation de l'application. C'est une exigence qui doit être satisfaite lorsqu'un développeur essaie de l'implémenter à partir de zéro, d'apporter des améliorations ou des modifications. Par exemple: l'utilisateur doit se connecter. Supposons que si vous ajoutez également une nouvelle façon d'exécuter l'application via une invite de commande, l'utilisateur doit toujours se connecter.

Une exigence non fonctionnelle se produit sous le capot. L'utilisateur n'en est pas conscient, mais il doit être présent quelle que soit sa mise en œuvre. Par exemple: l'application doit être développée en C #. S'il est développé dans une autre langue, l'utilisateur ne le remarquera pas. Mais cela peut être une exigence car il est basé sur le code existant. Un autre exemple serait qu'il doit être installé sur certains serveurs. Le déplacement des serveurs ne serait pas remarqué par l'utilisateur.

0
Mehrdad Ordoukhani