Table des matières

Architectures techniques et l'integration de composants, (conception générale)

Discussion

L'intégration des composants logiciels est devenue une pratique courante dans le développement logiciel aujourd'hui. L'introduction de la programmation Orienté Objet et de la programmation modulaire a contribué à codifier et populariser d'autant plus ces bonnes pratiques. Mais celle-ci ne va pas sans poser problème dans la mesure où elle questionne la qualité de l'architecture globale et la justesse de ses interfaces.

Dès lors quelles sont les méthodes et les règles à appliquer pour définir les architectures logicielles et le partage de composants ?

Le groupe de travail qui s’est tenu le 30 septembre a regroupé 11 personnes de divers instituts et de diverses expériences. Le débat s’est déroulé autours de thèmes principaux : les méthodes pour créer de bonnes architectures, les bonnes pratiques pour rendre les composants réutilisables et, enfin, les outils utilisés pour construire les architectures et contrôler la qualité d’intégration.

Méthodes

Les méthodes de développement logiciel ont une grande influence sur la façon d’architecturer le logiciel. La discussion s’est tournée vers 2 principales méthodes :

Les méthodes Agiles donnent une architecture émergente tout au long du projet. La définition de l’architecture se construit en même temps que les besoins se précisent.

La méthode de développement piloté par les modèles (Model Development Driven ou MDD) dont le principe est de définir l’architecture définitive en premier à l’aide des outils UML.

En effet quel que soit la méthode choisie en amont (tdd, mdd, agilité, ?), chacune présente ses avantages et inconvénients. Savoir en extraire les concepts fondamentaux et l'esprit de chacune d'elles, en fonction des contraintes de terrain et du projet, doit primer sur une approche rigoriste en toute circonstance. Il peut être intéressant aussi de savoir astucieusement s'inspirer des différentes méthodes de manière adaptée aux objectifs du cahier des charges.

Bonnes pratiques

Dans le cadre d’une architecture et de partage de composants, la discussion renvoie presque toujours à la notion de dépendance avec pour objectif un faible couplage entre les classes.

Quelques principes ont émergé lors de notre rencontre :

Dans l’optique d’une éventuelle réutilisabilité, le suivi de bonnes pratiques devrait suffire. A ce titre l'hyper-réutilisabilité systématique des composants peut même s’avérer pénalisante.

Les bonnes pratiques définies ci-dessus ne sont que des pistes à suivre et il en existe sûrement d’autres à partager …

Partage de composant

Le concept de l'intégration n'est-il pas trop abstrait ?

Les contraintes d’un composant (performances, complexité algorithmique, mémoire consommée …) doivent être connues avant de l’intégrer dans une application. De plus divers paramètres contraignent le partage : le langage, l’intégration, le cycle de vie …

Enfin, il reste des questions que nous n’avons pu aborder en profondeur comme la forme du partage : Doit-il se faire sous la forme d’une librairie, d’un framework, d’une application externe … ?

Outils

Ils existent des outils pour aider à développer, à partager, à contrôler …

Parmi lesquels :

Enfin les IDE actuels, comme Eclipse, intègrent les outils pour aider le développement des architectures.

Conclusion

Le groupe de travail a montré la forte demande dans le partage de connaissances. La mise en place d’un forum de discussion ou d’une mailing-lits, ainsi que le partage d’articles permettrait d’échanger les différentes expériences.

En même temps, l’aspect collectif de la discussion a permis de faire émerger des solutions pragmatiques, issues de l’expérience de chacun. Cette expérience devrait être renouvelée.

Références

SoC : http://en.wikipedia.org/wiki/Separation_of_concerns

KISS : http://en.wikipedia.org/wiki/KISS_principle

Single Responsability : http://en.wikipedia.org/wiki/Single_responsibility_principle

Agile : http://en.wikipedia.org/wiki/Agile_software_development

TDD : http://en.wikipedia.org/wiki/Test-driven_development

CI : http://en.wikipedia.org/wiki/Continuous_integration

MDD : http://en.wikipedia.org/wiki/Model-driven_development

Sonar : http://www.sonarsource.org/

Bouml : http://bouml.free.fr/

Plume : http://www.projet-plume.org/fr

Modelio : http://www.modelio.org/