Développement des systèmes informatiques
Introduction
- La documentation de différents systèmes / programmes /
fonctions est pleine d'inconsistances et de formulations
contradictoires !
- Nous avons besoin de spécifications de programme.
- La spécification constitue un document de référence non ambigu qui peut être vu comme un contrat entre le client et le développeur.
- Les spécifications peuvent être traitées par des outils informatiques; les possibilités de
- vérifier la cohérence du problème posé
- vérifier que la mise en oeuvre est correcte par rapport à la spécification
- produire automatiquement du code exécutable
Comment définir l'effet d'un programme ?
- Nous devons savoir la relation entre l'état de départ et l'état d'arrêt.
- Nous ne devons pas savoir la séquence d'états intermédiaires.
Exercice
Exprimer le fait que le tableau T de longueur N est trié.
Exercice
Exprimer le fait que le programme P trie le tableau T de longueur N.
Quand utilisons-nous des spécifications de programme ?
Nous voulons avoir des spécifications pour
- les programmes d’accès (fonctions visibles d'un module)
- un module est spécifié
- une structure de données et une fonction d’abstraction fixées
- les fonctions internes (auxiliaires) d'un module
Qu’est-ce qu’une spécification doit révéler ?
- Pas de données abstraites
- L’effet du programme sur les données
- Les états possibles d’arrêt pour chaque état de départ
- Les conditions pour lesquelles l’arrêt est certain
- Les conditions pour lesquelles l’arrêt est possible
Quelles sont les qualités recherchées d'une spécification ?
- Claire, sans ambiguïté et facile à comprendre
- Cohérente (pas de paradoxe)
- Complète : elle comprend la définition de la terminologie et des nouveaux concepts
- On vise les mêmes qualités qu'un système (facilité d'utilisation et maintenabilité)
Comment les écrire ?
- De façon:
- formelle (ex. automates à états finis, petri-nets, expressions logiques, fonctions),
- informelle (ex. langage naturel),
- ou semi-formelle (ex. diagrammes de flux de données, cas d'utilisation UML).
- En décrivant le comportement ou les propriétés observés.
- En utilisant un modèle boîte noire (black-box), boîte blanche (clear box) ou boîte à états (state box).
Spécifications de programmes déterministes sous forme de fonctions
(fonctions de programme)
Qu’est-ce que l’état (de données) d’un programme ?
- Chaque variable est un automate à états finis.
- L’état "avant" est l’état des variables "avant".
- L’état "après" est l’état des variables "après".
- Remarquez que des programmes peuvent changer la structure de l’espace d’états.
- Programmes peuvent ajouter des variables.
- Programmes peuvent supprimer des variables.
- Ça change la représentation de l’état.
Comment une fonction peut-elle décrire un
programme ?
- Quel est le domaine de la fonction ?
- Quelle est l’image de la fonction ?
- Qu’est-ce qui se passe si le programme n’arrête pas ?
- Des états qui ne mènent pas à la terminaison ne sont pas dans le domaine.
- Des états dans lesquels le programme ne termine jamais ne sont pas dans l’image.
Comment une fonction peut-elle être décrite ?
- Ensemble de couples ordonnés
(1,1),(2,2),(3,2), ...
- Un prédicat décrivant les pré-conditions et les
post-conditions
x’ = ‘y + 1 et y’ = ‘x + 1
Les pré-conditions et les post-conditions sont souvent lourdes et mènent à l’introduction de variables supplémentaires.
- Affectations multiples
x, y := y+1, x+1
- Tables