« Méthodes de génie logiciel avec Ada/Première partie » : différence entre les versions
Contenu supprimé Contenu ajouté
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 74 :
==Notion de saut sémantique==
Le cahier des charges d'un problème informatique représente une description de haut niveau de la solution souhaitée.
Dans un problème simple, un tel saut peut s'accomplir directement : des méthodes intermédiaires sont donc inutiles.
On le remplace par une succession de petits sauts (communément appelée ''escalier''), individuellement faisables, et dont la somme permet d'accomplir la descente souhaitée.▼
De même en génie logiciel, il faudra définir des étapes de conception intermédiaires destinées à abaisser graduellement le niveau sémantique depuis le niveau du cahier des charges jusqu'à celui du langage de programmation.▼
▲du problème à sa solution. Or que fait-on dans la vie courante lorsque l'on est en présence d'un saut
▲sauts (communément appelée ''escalier''), individuellement faisables, et dont la somme permet
▲conception intermédiaires destinées à abaisser graduellement le niveau sémantique depuis le niveau
==Surmonter la complexité==
Comment faire pour réaliser ces différents «sauts» qui constituent l'essentiel d'une méthode de conception ?
{{BlocCitation|
''et qu'il serait requis pour les mieux résoudre. [Des37]''<ref>R. Descartes. ''Discours de la méthode.'' Leyde, 1637.</ref>▼
et qu'il serait requis pour les mieux résoudre.
▲
Informatiquement parlant, ceci signifie que l'on divisera un programme en modules, qui seront des unités de programme pouvant être considérées individuellement par le programmeur.
''Dans le reste de ce chapitre, nous utiliserons ce terme de «module» pour désigner l'unité de structuration conceptuelle'', même si cela ne correspond pas forcément à la notion informatique de «quantité compilable individuellement».▼
▲''reste de ce chapitre, nous utiliserons ce terme de «module» pour désigner l'unité de structuration''
Ce que Descartes ne dit pas, c'est le nombre requis de telles divisions (''autant qu'il serait requis…'' voilà qui ne nous avance guère !).
Or il n'en est rien ; le fait de diviser un programme introduit un niveau de complexité supplémentaire : celui dû aux relations nécessaires entre les parties. Supposons une échelle arbitraire, où 7 représenterait la limite de ce qui peut être raisonnablement fait par une seule personne ; si un programme est de complexité 14, il faudra non pas deux, mais trois personnes pour le résoudre, la troisième étant chargée de gérer la communication entre les deux autres. Ceci va en fait limiter le gain pouvant être obtenu de la décomposition. Considérons en effet deux cas extrêmes :
* Nombre de modules = 1. Aucune complexité de relation, mais complexité interne au module maximale.
Ligne 382 ⟶ 368 :
end loop;
</syntaxhighlight>
Je ne tentai même pas de m'aventurer dans une telle explication, car l'étudiant aurait pensé (comme le lecteur le pense actuellement) que le typage fort ne fait qu'apporter des complications au malheureux utilisateur en l'obligeant à écrire une boucle explicite. La conversation continua comme ceci :
|