Exigence fonctionnelle ou non fonctionnelle?

34

Je m'interroge 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 comportent des conditions supplémentaires, par exemple:

  1. Sur la liste des périphériques sélectionnés, le périphérique peut être répété.
  2. La base de données doit contenir au moins 100 éléments.
  3. Les devises d’une certaine valeur doivent être en dollars US.
  4. L'appareil doit avoir un nom et une valeur de consommation d'énergie en Watts.

Ces exigences sont-elles fonctionnelles ou non?

Piotr Müller
la source
4
Je pense que la distinction entre "fonctionnel" et "non fonctionnel" est trompeuse et tend à laisser les logiciels avec une opérabilité médiocre. J'ai découvert que penser aux "fonctionnalités pour les utilisateurs finaux" et aux "fonctionnalités opérationnelles" conduit à de meilleurs logiciels: blog.softwareoperability.com/2013/04/08/… (mon message)
Matthew Skelton,
@ MatthewSkelton Je ne pouvais pas dire si (2.) est une fonctionnalité utilisateur ou une fonctionnalité opération. Semble être une "fonctionnalité de test".
Martin Thoma
@moose - l'exigence pour la base de données de fonctionner avec certains paramètres / 100 éléments donnés est davantage une exigence opérationnelle, bien que cela puisse avoir une incidence sur l'expérience de l'utilisateur final si les performances étaient dégradées. En fin de compte, nous aurions probablement besoin d'un peu plus de contexte sur les exigences du PO pour pouvoir scinder F et NF, bien que - comme je l'ai laissé entendre - je pense qu'il s'agit d'une fausse distinction de toute façon :)
Matthew Skelton

Réponses:

41

Les exigences fonctionnelles définissent ce que le système ou l'application va faire - en particulier dans le contexte d'une interaction externe (avec un utilisateur ou avec un autre système).

Lors du passage d'une nouvelle commande, le système doit afficher le coût total et exiger la confirmation de l'utilisateur. C'est une exigence fonctionnelle. il décrit une fonction du système.

Reportez-vous à Wikipedia: Exigences fonctionnelles pour plus de détails.

Les exigences non fonctionnelles sont toutes les exigences qui ne décrivent pas le comportement d'entrée / sortie du système. Notez que nous parlons toujours d' exigences , pas de détails d'implémentation , donc le fait que nous utilisions l'expression "non fonctionnel" ne signifie pas que rien n'est juste qu'il convient de mettre dans cette section.

Les types les plus courants d'exigences non fonctionnelles 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 caractéristiques, ce qui permet de décrire non seulement si le système fait ce qu'il est censé faire, mais aussi comment il le fait. Ne poussez pas cette analogie trop loin - c'est juste une analogie.

Les exigences non fonctionnelles ne sont ni subjectives ni vagues, contrairement à ce que semblent suggérer certaines personnes. En fait, ils devraient effectivement avoir une métrique dur attaché à eux (temps de réponse -à- dire de plus de 100 ms). Les exigences NF ne sont pas non plus des détails de mise en œuvre ou des tâches telles que "mettre à niveau le cadre ORM" - aucun indice où quiconque aurait cette idée.

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


Pour aborder spécifiquement les exemples dans la question:

  1. Sur la liste des périphériques sélectionnés, le périphérique 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 de gestion, 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. Les devises d’une certaine valeur doivent être en dollars US.

    • Exigence fonctionnelle, mais pas vraiment formulée correctement. Une formulation plus utile serait la suivante: Le système prend en charge une devise (USD). Bien entendu, cela serait modifié si plusieurs devises devaient être prises en charge, puis l'obligation d'inclure des informations sur les conversions de devises, etc.
  4. L'appareil doit avoir un nom et une valeur de consommation d'énergie en Watts.

    • Pas vraiment n'importe quel type d'exigence, cela ressemble plus à une spécification technique. Une exigence fonctionnelle serait indiquée car la puissance est supposée être en watts. S'il y a plus d'une unité de mémoire, comme dans la devise, les exigences fonctionnelles doivent comporter des sections sur les conversions d'unités, leur emplacement / mode de configuration, etc. (le cas échéant).
Aaronaught
la source
Agréable! Ce que j’ajouterais, c’est que les exigences fonctionnelles ne doivent pas nécessairement traiter uniquement des interactions avec l’environnement externe (un concept connexe est celui des "exigences d’interface" avec d’autres systèmes). Un contre-exemple à cela serait "Le système doit indexer la base de données des utilisateurs toutes les 60 minutes". Ceci est clairement interne.
Aram Kocharyan
2
@AramKocharyan: Ce n'est pas une exigence fonctionnelle. Il est clair qu’un contrat de niveau de service client se cache quelque part, c’est l’exigence fonctionnelle. "Les mises à jour des contacts doivent être traitées dans un délai de 60 minutes pour que le service clientèle / le marketing soit efficace" , c’est une exigence fonctionnelle interne. "Indexer la base de données des utilisateurs" n'est pas une obligation, c'est une implémentation; Par exemple, une autre façon de respecter ledit contrat de niveau de service peut être d'utiliser une indexation d'arrière-plan en temps réel ou d'éliminer le besoin d'indexation entièrement en utilisant un courtier de service ou un bus et en traitant les mises à jour en temps quasi réel.
Aaronaught
+1! en ce qui concerne la subjectivité des exigences non fonctionnelles, il suffira peut-être de souligner que celles-ci sont au cœur de la très solide architecture RESTful fr.wikipedia.org/wiki/…
fr_andres SupportsMonicaCellio
18

Aaronaught a déjà une excellente réponse, mais comme il y avait d’autres réponses, maintenant supprimées, totalement fausses quant à la nature d’une exigence non fonctionnelle, je pense qu’il serait utile d’ajouter quelques explications afin d’éviter les erreurs exigence non fonctionnelle est.


Une exigence non fonctionnelle est "une qualité ou une propriété que le produit doit avoir" ¹. James Taylor a expliqué qu'une exigence non fonctionnelle "[...] est [néanmoins] une exigence et qu'elle est importante pour le client - parfois même plus que l'exigence fonctionnelle" . Il donne ensuite deux exemples: le logo du produit, ainsi que 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-jabber marketing comme celui-ci: "Internet est important de nos jours et nous voulons un site Web".
  • Les exigences non fonctionnelles concernent les clients car elles peuvent avoir un impact important sur leur productivité et sur leur capacité à utiliser le produit.
  • Les exigences non fonctionnelles sont totalement objectives.

Le dernier point est essentiel. Si l'exigence est subjective, il n'y a rien à faire 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.

Rappelez-vous que la liste des exigences est comme un contrat (et dans la plupart des cas, fait partie d'un contrat). Il est signé par le client et la société de développement. En cas de litige, il sera utilisé légalement pour déterminer si vous avez correctement effectué votre travail. Que se passe-t-il si je vous commande un produit logiciel, précisez que "le produit doit être excellent" et refuse de payer lorsque le produit est terminé, car pour moi, ce que vous avez réellement fait n'est pas un excellent produit?

Voyons quelques exemples.

  1. Le logiciel répond à l'utilisateur final.

Ce n'est pas une obligation. Pas fonctionnel. Pas un non-fonctionnel. Ce n'est 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. lorsqu’il est testé sur une machine présentant les performances spécifiées à l’annexe G, partie 2 et une 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 un matériel similaire et effectuer le test de validation dans le département d'assurance qualité, et j'obtiendrai toujours un résultat binaire: réussi ou échoué.

Est-ce une exigence fonctionnelle? Non, cela ne précise pas ce que le système doit faire. Il y avait probablement une exigence fonctionnelle auparavant, spécifiant que l'application logicielle doit pouvoir 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, en fonction du seuil de pourcentage.

  3. L'application est écrite en C #.

Est-ce une exigence? Nous ne savons pas vraiment sans contexte. Le développeur principal peut souhaiter souhaiter, en insérant cette exigence, éviter par la suite une discussion avec ses collègues sur le langage à utiliser. Il peut également s'agir d'une exigence reposant sur des éléments matériels / logiciels, hérités ou de compatibilité. Nous ne savons pas

  4. La base de code C # du produit est conforme aux règles minimales recommandées par Microsoft et aux règles de globalisation Microsoft.

C'est une chose étrange. Personnellement, je préférerais ne pas appeler cela une exigence et la placer dans un document séparé spécifiant les normes et les meilleures pratiques.

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

C'est une exigence et une non-fonctionnelle. Il spécifie quelque chose que nous pouvons tester lors des tests de validation et une propriété du produit, et non 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 mi / h.

Aussi 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 avec quelle précision il fait son travail. Mais attendez? Cela indique que le système de localisation des véhicules mesure la vitesse, n'est-ce pas? Donc, c'est aussi une exigence fonctionnelle? Eh bien, non, puisque nous mettons l'accent sur la précision de la mesure et non sur le fait que la mesure est effectuée.

  7. Le système de localisation du véhicule mesure la vitesse du véhicule.

Maintenant, c'est une exigence fonctionnelle. Cela ne dit pas comment le système fonctionne, 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 charge de la batterie, la pression de Je ne sais pas quoi et si les phares sont allumés ou non.

  8. Les pages du site web prennent 850 ms. charger.

Ce n'est pas une obligation. Est-ce que tente d'être un, mais est totalement invalide. Comment pourriez-vous en tirer parti? Quelles pages? Tout? Testé via un réseau local de 1 Gbps sur une machine cliente à quatre cœurs et un serveur à huit cœurs avec SSD utilisés à 2%, ou via le modem d'un ordinateur portable ancien et misérable alors que le site Web est hébergé par un petit serveur utilisé à 99%. ? Que veut-on dire par "charger"? Est-ce que cela signifie télécharger la page? Le télécharger et l'afficher? Envoyer la demande POST avec des données volumineuses, puis charger la réponse et l'afficher?

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 au moyen d'un test de validation automatisé ou manuel, mais au lieu de dire ce que fait le système, il explique comment 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 relatives aux logiciels, au matériel informatique et à l’intégration, James Taylor, ISBN: 0814408117.

Arseni Mourzenko
la source
+1 pour plus de détails. Je suis en quelque sorte en désaccord avec votre opinion dans (1), vous dites "ceci n'est pas une exigence". Je pense que c'est une exigence, mais l'analyste métier doit en faire une exigence "mesurable" avant que l'équipe ne s'y soit engagée. J'ai aussi aimé votre utilisation du mot "souhait" et votre distinction entre "souhaits" et "exigences"
NoChance
@Emmad Kareem: vous avez raison. Je me limite aux exigences purement techniques, c'est-à-dire aux exigences qui seraient utilisées par les développeurs et le contrôle qualité. Pour les analystes métier, les choses sont légèrement différentes et certains éléments que je qualifierais de non-exigences seraient en fait parfaitement valables.
Arseni Mourzenko
Je dirais que "l'application est écrite en C #". est une contrainte et non une exigence fonctionnelle, car elle ne décrit pas le comportement du système, mais impose une limitation à l’espace de la solution.
Aram Kocharyan
@AramKocharyan: c'est pourquoi j'ai dit que nous ne savons pas si cette déclaration est une exigence du tout.
Arseni Mourzenko
3

Une exigence fonctionnelle décrit le résultat d'une interaction avec le système (ce que le système fait dans des situations données), tandis qu'une exigence non fonctionnelle fait généralement référence à des spécificités de performances, de capacité, de temps de réponse, etc. 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 (qui en ferait en réalité une mauvaise exigence). Voici un exemple d’exigence non fonctionnelle pour votre cas:

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

Les exigences des utilisateurs sont généralement des exigences spécifiques de l'interface utilisateur, qui, selon le contexte, seraient fonctionnelles ou non fonctionnelles, tandis que les exigences système (la capacité utilisateur simultanée, par exemple) sont généralement non fonctionnelles.

Juan Carlos Eduardo Romaina Ac
la source
2

Juste pour ajouter à quelques bonnes réponses existantes que des exigences non fonctionnelles sont parfois appelées "ilities" - des qualités que le système doit posséder en plus de ses fonctionnalités simples. Les "compétences" incluent la disponibilité, la convivialité, la sécurité, la flexibilité et même une esthétique plus subjective.

Certaines sont très difficiles à spécifier et à évaluer. Néanmoins, ils comptent. Si vous vous y connectez de manière contractuelle, vous voudrez éviter les versions sans signification, telles que "Le système doit être sécurisé". Le problème en essayant d'imposer de telles exigences est que les gens ont tendance à s'intéresser aux choses qui sont facilement mesurables, plutôt qu'aux choses qui comptent (et les exigences peuvent très bien être écrites 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, même si elle cause toujours beaucoup de maux de tête).

Il existe des différences culturelles ici entre gens qui traitent des contrats et des trucs formels, et les gens qui traitent de l'analyse plus générale, l' architecture, la recherche , etc. Une exigence à la main ondulé vague est encore une exigence dans la mesure où celle - ci est concerné, car elle exprime Ce qui compte pour le client, même si celui-ci comprend parfaitement le fait que ce n’est pas une obligation contractuelle utile tant qu’il n’a pas été exploré en détail et minutieusement défini.

Un dernier point - si vous ne pouvez pas (encore) arriver à une mesure objective de la "gravité", cela ne signifie pas que le client n'en a pas besoin. Vague! = Inutile. Cependant, cela peut signifier que nous devons développer de meilleurs moyens de mesurer ces éléments, de déterminer et de raffiner progressivement les exigences non fonctionnelles ou de contracter (Agile, etc.) de manière à pouvoir fonctionner sans mesures objectives immédiates pour tout.

ADN
la source
0

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

À mon avis, une exigence fonctionnelle est ce que l'utilisateur expérimente lorsqu'il utilise l'application. Il est impératif de satisfaire à cette exigence lorsqu'un développeur tente de mettre en œuvre cette solution, de l'améliorer ou de la modifier. Par exemple: l'utilisateur doit se connecter. Supposons que si vous ajoutez également un nouveau moyen d'exécuter l'application via une invite de commande, l'utilisateur doit toujours se connecter.

Une exigence non fonctionnelle survient sous le capot. L'utilisateur n'est pas au courant, mais il doit être présent quelle que soit l'application. 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 du code existant. Un autre exemple serait qu'il doit être installé sur un serveur donné. Le déplacement des serveurs ne serait pas remarqué par l'utilisateur.

Mehrdad Ordoukhani
la source
-1

Fonctionnel ou non fonctionnel? Je dirais ni l'un ni l'autre. La plupart, si ce n'est tous les exemples énumérés, me ressemblent par des règles de gestion (spécifiant les contraintes liées au processus et les règles de décision que les processus système doivent suivre).

De nombreux ingénieurs l'ignorent ou ne le savent pas, car les règles métier sont généralement collectées dans le cadre d'une analyse métier (et souvent intégrées à des spécifications d'exigences fonctionnelles plutôt que référencées de manière externe).

Kanwar
la source
pourquoi les exemples énumérés ressemblent-ils à des règles de gestion?
moucher
-4

Une exigence fonctionnelle est généralement quelque chose que le système peut ou va faire. Il peut être exprimé à la suite d'une action (d'un résultat négatif). Une exigence non fictive est quelque chose que le client / utilisateur final ne se soucie pas et n'affecte pas le résultat - par exemple
- Windows aura une bordure bleue avec des points roses. - Le programme sera écrit en Java
- Tout ce qui concerne les normes de codage, les méthodes et les processus.

Soyez averti cependant que les exigences non fonctionnelles peuvent être transformées en exigences fonctionnelles par les clients. des exemples pourraient être - Le programme sera écrit à Erlang car le client a lu un article de magazine à ce sujet et le souhaite écrit à Erlang. - Le programme doit utiliser DB 2. car le client l'exécutera sur ses systèmes DB 2 existants, dispose de nombreuses années d'expérience et d'une équipe informatique familiarisée avec cette plate-forme.
- Le code source doit respecter toutes les recommandations de MISRA.

En résumé - si le client le souhaite, il s’agit d’une exigence fonctionnelle, sinon c’est une exigence non fonctionnelle ou peut-être même pas une exigence.

Mattnz
la source
1
-1. Les clients et les utilisateurs finaux font attention sur les exigences non fonctionnelles, puisqu'elles touchent directement leur productivité. Les exigences non fonctionnelles ne peuvent pas non plus être transformées en exigences fonctionnelles par les clients: ce n'est pas au client de choisir si une exigence est fonctionnelle ou non.
Arseni Mourzenko
En outre, non func pourrait être divisé en « développement » (développeurs de soins, par exemple maintenabilité) et « opérationnel » (utilisateurs de soins, par exemple facilité d' utilisation) qualités
Aram Kocharyan
-4

Je pense vraiment que les exigences fonctionnelles sont nécessaires pour décrire le système et son comportement, mais que les exigences non fonctionnelles ne sont pas nécessaires pour le système et ne sont pas collectées lors des négociations sur la conception du système. , sécurité, maintenabilité, etc., à partir du système construit.

Tibakula Dawson
la source