Les objectifs de la conception
Eviter les phénomènes de dégénérescence de l'application
Du point de vue de la conception, trois risques principaux pénalisent les activités de développement :
La rigidité : chaque évolution est susceptible d'impacter de nombreuses parties de l'application.
- Le développement est de plus en plus coûteux, ce qui introduit des risques au cours même du développement (ironiquement, c'est au moment où les échéances de livraison approchent et où la pression monte sur le projet que l'application devient la plus difficile à modifier).
- Le coût des modifications étant élevé, le logiciel a peu de chances d'évoluer après sa mise en production.
La fragilité : la modification d'une partie de l'application peut provoquer des erreurs dans une autre partie de l'application.
- Le logiciel est peu robuste, et le coût de maintenance reste élevé.
- Les modifications étant de plus en plus risquées, le logiciel a peu de chances d'évoluer après sa mise en production.
L'immobilité : il est difficile d'extraire une partie de l'application pour la réutiliser dans une autre application.
- Le coût de développement de chaque application reste élevé puisqu'il faut repartir de zéro à chaque fois.
Bien sûr, ces problèmes sont d'autant plus sensibles que l'application est volumineuse. Ils sont déjà perceptibles pour des applications de quelques milliers de lignes de code.
La clé du problème : la gestion des dépendances
Les
problèmes ci-dessus trouvent le plus souvent leur source dans une multiplication
des dépendances : tous les modules (classes, packages) de l'application
finissent par dépendre de tous les autres modules, ce qui aboutit progressivement
au fameux "spaghetti effect"(1).
Tous les principes qui suivent permettent de contrôler les dépendances
des modules de l'application. Un contrôle strict des dépendances
est en effet indispensable pour aboutir aux
qualités recherchées de :
- Robustesse : les changements n'introduisent pas de régressions.
- Extensibilité : il est facile d'ajouter de nouvelles fonctionnalités.
- Réutilisabilité : il est possible de réutiliser certaines parties de l'application pour construire d'autres applications.
_____
1.
Voir à ce propos l'article "Big
Ball of Mud" de Brian Foote et Joseph Yoder.