# Spécification (norme technique)

Une spécification est un ensemble explicite d'exigences à satisfaire par un matériau, produit ou service. Si un matériau, produit ou service ne parviennent pas à satisfaire à une ou plusieurs des spécifications applicables, il peut être désigné comme étant hors spécification.
Une spécification technique peut être développée en privé, par exemple, par une société, un organisme de réglementation, ou une organisation militaire, ou bien elle peut être développée par des organismes de normalisation qui sont souvent plus amenés à développer des normes volontaires (ces normes volontaires pouvant devenir obligatoires si elles sont adoptées par un du gouvernement ou un contrat d'entreprise).

## Attentes et exigences exprimées dans l'étude préalable

La phase de spécification doit être précédée par une étude préalable, qui décrit l'existant et les attentes et exigences générales exprimées par les utilisateurs pour le domaine à informatiser.
Les spécifications reprendront ces exigences pour les décrire plus en détail.
Un exemple d'attente à prendre en compte à ce stade est la langue du logiciel, qui doit être adaptée à l'utilisateur. Dans le cas où l'on s'oriente vers un progiciel, il faut s'assurer qu'il est possible et peu coûteux d'adapter les pages-écran, les états, la documentation utilisateur et les aides en ligne à la langue de l'utilisateur. Ces exigences seront détaillées en phase de spécifications.

## Typologie
### Spécification fonctionnelle

Rédigée par un analyste fonctionnel, la spécification fonctionnelle décrit les processus métier dans lesquels le produit informatique devra intervenir. Les tâches prises en charge par le produit informatique, son interaction avec les autres intervenants — utilisateurs et autres produits — et les règles des interactions.
Exemple : le calcul de prévision se base sur une date. Seule une date future est autorisée. Si l'utilisateur entre une date passée, alors le logiciel devra afficher un message « date non autorisée ».
Il existe deux niveaux de spécifications fonctionnelles :
* les spécifications fonctionnelles générales décrivent les différentes procédures d'un même processus métier (les cas qui peuvent se présenter), ainsi que le modèle conceptuel, le modèle logique, et le modèle physique des données associés ; elles sont généralement élaborées par la maîtrise d'ouvrage ;
* les spécifications fonctionnelles détaillées décrivent dans le détail les opérations et les tâches à exécuter par les utilisateurs, et les composants à développer pour accomplir ces tâches; elles peuvent être élaborées par la maîtrise d'œuvre.

### Spécification d'architecture

Rédigée par un architecte informatique, la spécification d'architecture décrit le système informatique dans lequel le produit sera implanté, son interaction avec les autres composants du système informatique – par exemple SGBD. La spécification d'architecture décrit également l'organisation générale du produit informatique, sa subdivision en modules et en couches.
La spécification d'architecture est quelquefois appelée étude technique dans la méthode Merise. L'étude technique décrit sous l'angle technique le système à développer (les langages informatiques, les caractéristiques des bases de données, les champs, les consignes, etc.).
La spécification d'architecture ou l'étude technique ne sont pas toujours vraiment nécessaires, si l'application à développer est de taille modeste et s'inscrit dans un cadre de développement plus large, en particulier dans une organisation où les standards techniques sont déjà définis. De bonnes spécifications détaillées peuvent alors suffire.

## Utilisation

* Pour l'utilisateur : la spécification explique en détail les attentes du futur utilisateur, le produit qu'il espère voir être construit.
* Pour le budget et le planning : la spécification sert de base pour calculer le coût de réalisation et la durée, informations clés pour établir le budget et le planning.
* Pour le développeur : la spécification fonctionnelle explique le but à atteindre et la spécification d'architecture explique les moyens techniques à mettre en œuvre pour y parvenir.
* Pour la garantie : une demande de modification pourra être faite sous garantie du moment que cette demande est déjà expliquée dans les documents de spécification — voir Bug informatique.

## Exemples

* Analyse fonctionnelle descendante
* Méthode B

## Validation de spécification

Quand on se demande si le texte formel « dit bien » ce que l'on veut qu'il dise, s'il « traduit » bien la demande informelle faite par celui qui commande le logiciel, on dit que l'on fait de la validation. La validation ne peut pas être automatisée.
Ou bien, lorsque celui qui commande le logiciel le fait de manière formelle (par exemple pour un avion, une exigence formelle pourrait être que l'« accélération ne dépasse pas une certaine valeur », ce qui traduit formellement la phrase informelle « l'avion ne se crashe pas ») (par exemple, par un modèle mathématique non implémentable directement (du fait qu'il n'existe pas de compilateur (traducteur automatique) permettant de traduire un modèle écrit dans ce langage mathématique vers un code écrit en langage d'implémentation, ou langage d'automatisation de la construction et du montage pour la partie mécanique)), alors on parle de validation du modèle lorsque l'on vérifie la cohérence (la non-contradiction) du système ou que l'on prouve (à l'aide d'un logiciel assistant de preuve) que, sous réserve que les variables externes du système (ex. : température) restent bien dans une plage correspondant à une utilisation réaliste, les états possibles du système restent bien parmi les états admis par les contraintes définies dans la spécification (en reprenant l'exemple de l'avion : un état possible peut être la variable d'état « accélération » du système) (la validation peut aussi consister à passer des tests sur une simulation issue du modèle issu de la spécification, ces tests peuvent permettre de détecter des erreurs de la spécification).