Développement des systèmes informatiques
Introduction
Qu’est-ce que nous attendons de la documentation
interne ?
- savoir la structure de données complète
- savoir le sens intentionnel de la structure de données concrète
- savoir comment elle peut être interprétée comme une structure de données abstraite
- savoir comment chaque programme affectera ces données
- être capable de vérifier le design, sans regarder le code
- être capable de vérifier que le code est consistant avec le design
- être capable de maintenir la consistance du code avec le design
Comment décrivons-nous formellement une structure de données ?
- pour chaque structure de données il existe plusieurs interprétations possibles
- "reviewers" et "maintainers" doivent savoir laquelle était assumée
- pour chaque état de cette structure il existe seulement une valeur abstraite associée avec elle par les programmes
- l’ensemble des états possibles de la structure de données constitue le domaine de la fonction d’abstraction
- l’ensemble des traces canoniques constitue l’image de la fonction d’abstraction
- la fonction d’abstraction définit la sémantique de la structure de données
Comment documenter le design interne du module ?
- décrire la structure de données, les objets implémentés par d’autres modules inclus
- définir la fonction entre les états de données et les traces canoniques (fonction d’abstraction)
- définir une relation entre les états "avant" et "après" pour chaque programme (fonction de programme)
Le document de conception interne de module est bien fait si le diagramme ci-dessus commute.
Exemple : pile d’entiers
structure de données : int A[6]
fonction d’abstraction af: int A[6] → <pile>
af(A) = [PUSH(*,A[i])]i=1..A[0]
Pour le contenu suivant du tableau A
af(A) = PUSH(2).PUSH(3).PUSH(1).PUSH(2)
et pour la valeur suivante de A
af(A) = _
Exemple : pile d’entiers
structure de données : int A[6]
af(A) = [PUSH(*,A[5-i])]i=1..A[5]
Pour le contenu suivant du tableau A
af(A) = PUSH(2).PUSH(1).PUSH(3).PUSH(2).PUSH(4)