En informatique, la spécification est un modèle d'un logiciel. C'est aussi l'étape en génie logiciel qui consiste à décrire ce que le logiciel doit faire. Plus généralement une spécification peut aussi représenter n'importe quel système dynamique comme un circuit électronique.
On distingue :
Les spécifications font souvent partie d'une méthode de Génie logiciel (comme UML ou Merise) ou d'une méthode formelle.
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.
Celui qui prouve fait un raisonnement formel. Celui qui spécifie en disant " il est évident que " et en sautant des étapes dans ses preuves, fait un raisonnement rigoureux. Autre exemple : On peut faire une spécification formelle en B. Puis faire un développement (passage au code exécutable) rigoureux.
Les commentaires d'une spécification formelle sont écrits en langage naturel, mais en évitant les irrégularités (source : Thèse de Y. Toussaint, Méthodes informatiques et linguistiques pour l'aide à la spécification de logiciel, oct. 1992, U.P.S. Toulouse).
Mais celles-ci ne sont pas toujours un défaut !