« Méthodes de génie logiciel avec Ada/Première partie » : différence entre les versions

Contenu supprimé Contenu ajouté
JerePff (discussion | contributions)
JerePff (discussion | contributions)
Ligne 91 :
 
==Surmonter la complexité==
 
Comment faire pour réaliser ces différents «sauts» qui constituent l'essentiel d'une méthode de
conception ? Le problème, qui n'est pas propre à l'informatique, a été résolu par des moyens connus
depuis Descartes :
 
'' ... diviser chacune des difficultés que j'examinerais en autant de parcelles qu'il se pourrait
''et qu'il serait requis pour les mieux résoudre. [Des37]''<ref>R. Descartes. ''Discours de la méthode.'' Leyde, 1637.</ref>
 
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».
 
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 !). On pourrait croire qu'il suffit de diviser le problème en un grand
nombre de modules pour surmonter la complexité. 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.
* Nombre de modules = autant que d'instructions (chaque module ne contient qu'une seule
instruction). Aucune complexité interne, mais énorme complexité de relation. En fait, la
complexité globale dans ce cas est équivalente au cas précédent ; on n'a fait que ''transformer''
une complexité interne en complexité de relation.
 
==Caractérisation des méthodes==
==Méthodes de conception et langages==