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:
- Sur la liste des périphériques sélectionnés, le périphérique peut être répété.
- La base de données doit contenir au moins 100 éléments.
- Les devises d’une certaine valeur doivent être en dollars US.
- L'appareil doit avoir un nom et une valeur de consommation d'énergie en Watts.
Ces exigences sont-elles fonctionnelles ou non?
requirements
Piotr Müller
la source
la source
Réponses:
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:
Sur la liste des périphériques sélectionnés, le périphérique peut être répété.
La base de données doit contenir au moins 100 éléments.
Les devises d’une certaine valeur doivent être en dollars US.
L'appareil doit avoir un nom et une valeur de consommation d'énergie en Watts.
la source
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:
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.
la source
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.
la source
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.
la source
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.
la source
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).
la source
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.
la source
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.
la source