Une exigence est, dans le domaine de l'ingénierie, un besoin, une nécessité, une attente auquel un produit ou un service doit répondre ou une contrainte qu'il doit satisfaire. L'exigence peut être exprimée par une partie prenante (utilisateur, client, commercial, analyste de marchés, gestionnaire de produits, etc.) ou déterminée par les processus d'ingénierie et en particulier les activités d'études.
L'approche commune à tous les domaines d'ingénierie est de définir les besoins, d'envisager des solutions, et de livrer la solution la plus appropriée[1]. Plus précisément, les activités consistent à définir le problème, collecter les informations pertinentes, générer des idées de solutions possibles, les analyser et choisir la plus appropriée, et mettre la solution en œuvre[2]. Les exigences forment la clé de voute de ces activités. En effet, le besoin ou le problème nécessite d'être traduit en exigences pour la solution, et les informations collectées, l'analyse, et des résultats expérimentaux au cours de la réalisation sont susceptibles d'affiner et d'enrichir ces exigences.
Tout au long du cycle d'ingénierie, l'ingénieur va gérer les exigences en utilisant les termes, les formes et les techniques propres au domaine d'ingénierie considéré. Cette activité consiste en principe à les[3] :
Le développement des exigences peut avoir été précédé par une étude de faisabilité, ou un cadrage du projet. Lorsque le produit ou le service est réalisé à la commande, les exigences initiales exprimées par le client sont documentées, soit lors de la procédures d'appel d'offres public ou privé, soit dans les documents contractuels.
Dans l'approche classique de l'ingénierie, les exigences sont considérées comme des prérequis pour les étapes de conception et de développement du produit ou du service. Par contre, pour l'ingénierie simultanée et les approches agiles, la gestion des exigences est intégrée avec les autres activités tout au long du projet pour tenir compte de l'élaboration progressive du produit ou du service, et la découverte de nouvelles exigences qui en découle.
Dans l'ingénierie système, une exigence peut être la description de ce qu'un système doit faire. Ce type d'exigence spécifie quelque chose que le système livré doit être capable de faire. Un autre type d'exigence spécifie quelque chose sur le système lui-même, et de quelle manière il exécute ses fonctions. De telles exigences s'appellent souvent « exigences non fonctionnelles », « exigences de performance » ou « exigences de qualité de service ». Exemples de ce type d'exigences : la disponibilité, la testabilité, la facilité de maintenance et la facilité d'utilisation.
Un ensemble d'exigences définit les caractéristiques ou propriétés du système désiré (exigé). Une « bonne » liste d'exigences évite de spécifier la manière pour le système de mettre en œuvre ces exigences, laissant ce genre de décision pour les activités de conception. Un élément parmi les exigences qui décrit comment mettre en œuvre le système s'appelle un biais.
En ingénierie logicielle, la même signification d'« exigences » est utilisée, à la différence près que l'attention se porte sur le logiciel lui-même.
Les projets sont soumis à trois sortes d'exigences :
Les exigences produit et de processus sont liées. Les exigences de processus sont souvent imposées pour atteindre les exigences produit de haut niveau. Par exemple un coût maximum de développement (qui est une exigence de processus) peut être imposé afin d'atteindre une exigence sur le prix de vente minimum (qui est une exigence produit). Une exigence de maintenabilité du produit (exigence produit) est souvent accompagnée d'exigences de suivre un certain style de programmation (exigence de processus) telles que la programmation orientée objet, les motifs de conception ou encore le respect de charte de nommage.
Les trois types d'exigences sont vitaux pour tout développement de système.
Les exigences sont classées généralement en trois catégories :
Les exigences sont notoirement difficiles à présenter à un niveau idéal. Souvent, des experts (voir en:expert users) sont employés pour établir la relation entre les utilisateurs et les développeurs. Ces experts sont en principe capables d'exprimer des exigences fonctionnelles d'une façon qui soit facilement interprétable dans les caractéristiques de conception du système, et de plus compréhensible par les utilisateurs finaux. L'analyse de la valeur a été créée dans le but notamment d'interroger et de qualifier ce niveau d'exigence.
De bonnes exigences doivent être [4] :
La qualité des exigences peut être évaluée par revue (relecture par des pairs) ou par des outils de vérification de la qualité des exigences. Selon le formalisme utilisé pour exprimer les exigences (langage naturel, modèles formels ou semi-formels...) les outils seront capables de détecter certaines erreurs :
La plupart des exigences doivent être vérifiables par des tests. Si ce n'est pas possible, une autre méthode de vérification doit pouvoir être utilisée (par exemple, analyse, inspection, ou analyse de la méthode de conception). Des exigences testables sont une composante importante de la validation.
Certaines exigences, de par leur structure même, ne sont pas testables. Elles comprennent par exemple les exigences qui disent que le système ne montrera jamais ou qu'il montrera toujours telle propriété. Un test adéquat d'une telle exigence demanderait une infinité de cycles de test. Ce genre d'exigence est souvent réécrit en donnant une période de temps finie et réaliste.
Des exigences non-fonctionnelles non-testables peuvent être gardées comme documentation à l'usage des clients ; cependant, elles sont habituellement liées à des exigences de processus destinées à être un moyen pratique de les obtenir.
Par exemple, on peut satisfaire une exigence non-fonctionnelle consistant à s'affranchir des portes dérobées (backdoors) en la remplaçant par une exigence de processus qui utilise la programmation en binôme. Les logiciels d'avionique avec leurs exigences complexes de sûreté doivent suivre le processus de développement DO-178C.
L'aptitude aux tests consiste essentiellement à donner de la clarté, qui est effectivement nécessaire mais peut détourner l'attention par rapport à d'autres problèmes importants. Une exigence peut être apte aux tests mais incorrecte ; et l'évaluation de l'aptitude aux tests ne détectera souvent pas des exigences incorrectes. De plus, l'aptitude aux tests n'a pas de sens par rapport à une exigence qui a été ignorée. La pure analyse, l'inspection, ou la revue seules pourront répondre à ces problèmes mais généralement plus faiblement qu'on ne le fait habituellement. Il y a plus de 21 moyens plus puissants de tester ou d'évaluer l'adéquation d'exigences et plus de 15 moyens de renforcer les tests ou l'évaluation du bien-fondé d'une conception.[réf. nécessaire]
Les exigences doivent être écrites de telle manière qu'elles orientent la création et la modification d'un système selon les règles métier (ou règles de gestion) appropriées au contexte et au domaine et dans lequel le système doit être utilisé.
Les systèmes doivent normalement se conformer au domaine d'activité dans lequel ils sont exploités.
Les exigences sont sujettes à des problèmes d'ambiguïté, d'imperfections, et d'incohérence. Des techniques telles qu'une inspection de logiciel rigoureuse ont été présentées pour aider à traiter de tels problèmes. Lorsque les ambiguïtés, les imperfections, et les incohérences sont résolues dans la phase d'exigences, l'ordre de grandeur du coût de correction est moins élevé que lorsque ces mêmes problèmes se retrouvent dans des étapes ultérieures de développement du produit. L'analyse des exigences s'efforce de résoudre ces problèmes.
Il y a une distinction en ingénierie entre les exigences qui sont trop vagues, et celles qui sont si détaillées qu'elles :
Avec le temps, les exigences peuvent évoluer : c'est ce qui est pris en compte dans les re conception de mi-vie d'un produit.
De même durant un projet, un cahier des charges peut être revu. Dans ce cas, la modification du cahier des charges contractuel fait l'objet d'un avenant au contrat.
Dans tous les cas, une fois les exigences définies et approuvées, elles doivent être gérées, vérifiées (contrôle qualité) et suivies (Contrôle des modifications en:change control). Dans le cas de projets difficiles, des exigences peuvent ne pas être atteintes ou peuvent être altérées avant que le système ne soit terminé. Cette caractéristique des exigences a conduit à des études et des pratiques sur la gestion des exigences (en:Requirements Management).
En ingénierie informatique, les exigences sont traditionnellement de trois types appelés : spécifications générales, spécifications détaillées, et spécifications techniques. On retrouve sensiblement les trois types d'exigences métier, produit, et processus.
Des méthodologies modernes en ingénierie logicielle comme l'Extreme programming posent la question du besoin de décrire rigoureusement les exigences logicielles, qu'elles considèrent comme un objectif mouvant.
Ces méthodologies décrivent les exigences d'une façon informelle, en utilisant des retours d'expérience (REX), qui peuvent être appelés dans certains cas « user stories » (résumés concis relatifs à une page indexée qui explique un aspect de ce que le système devrait faire), et composée d'une série de cas de tests de validation pour ces retours d'expérience.
La typologie d'utilisation des systèmes doit diriger vers telle ou telle méthode. Un système de pilotage automatique d'avion ne pourra pas être développé par retour d'expérience utilisateur. D'autre part, un site web dynamique dont on ignore encore le public avant sa conception ne pourra pas faire l'objet d'exigences métiers formulées.
Les exigences formulées dans le cadre d'un appel d'offres pour l'achat et la mise en œuvre d'un progiciel peuvent inclure des critères relatifs à la langue du progiciel.
En France, il existe un dispositif réglementaire qui impose aux services et établissements publics de l'État d'utiliser les termes de la langue française publiés au Journal officiel dans tous les documents administratifs (articles 11 et 12 du décret du 3 juillet 1996 relatif à l'enrichissement de la langue française).
Gestion des exigences
La plupart des outils intègrent le référentiel, c'est-à-dire que les exigences sont rédigées, enregistrées et maintenues dans le format propriétaire du logiciel :
Gestion de la traçabilité des exigences
Ces outils exploitent un référentiel externe sous la forme de documents Microsoft WORD :
Qualité rédactionnelle des exigences
Ces outils analysent les exigences et accompagnent les rédacteurs vers une meilleure qualité rédactionnelle