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.