les derniers
articles

Index &
Sommaire
 

Articles « Info » : architecture

 


DÉCOLLAGE !


Présentation du
site WEB AILES
 


Architecture :
définitions, origines et enjeux

[Architecture],
[SEI], [UMLGuide], [UMLAction], [MSDN], [XPLB]


Cet article est là pour extraire de ces définitions ce qui est à la base de l'architecture, ce dont vous devez, jeune concepteur et codeur, être conscient pour bien intégrer votre travail dans l'environnement de l'application sur laquelle vous travaillez.

Quels sont les caractéristiques de base (en jaune sur fond rouge) de ce que l'on appelle "architecture" ?
Et pourquoi une telle activité est nécessaire ? D'où vient-elle ?


 



Lisez-moi et
réagissez !



Écrivez à AILES !



Retour vers le sommaire Architecture
 
Propriétés de base d'une architecture
    On trouvera dans la figure suivante les 5 propriétés de base d'une architecture, que l'on retrouve mentionnée dans la plupart des définitions de [SEI] (qui n'en comporte pas moins de... 80! Deux "livresques", 8 classiques, 18 bibliographiques et 52 proposées par des visiteurs de [SEI])

 
    (ce diagramme est détaillé dans la modélisation de l'Architecture)
    Toutes ces définitions parlent au minimum d'une "organisation" de :
- point de vue (le point de vue d'un acteur constitue une vue architecturale, comme des spécifications fonctionnelles, des spécifications logicielles, point de vue structurel et organisationnel, matériel, déploiement, exploitation) ; cette notion est illustrée par l'article sur les caractéristiques de bases avec l'exemple d'une architecture en 4+1 vues.
- composants (ensemble indépendant et concret d'éléments d'architecture, par exemple logiciels, comme un ORB - CORBA) ; cette notion est détaillée dans l'article sur les caractéristiques de bases,
Cf. aussi - dans le Questionnaire Langage - les réponses concernant la notion de Composant.
- connexions entre ces composants, donc une topologie aussi bien logicielle (connexion via marshalling d'objet - transformation d'un donnée structurée en tableau de bytes - comme c'est le cas dans un ORB ou connexion via un streaming comme pour MQSeries...) que matérielle (connexion locale ou distribuée),
- contraintes sur le comportements dynamique (en terme, par exemple, de temps de réponses, de synchronisation, ...).

    Concernant ces caractéristiques de base (composant, connexions, contraintes...), Benjamin LEE (Software Programmer, IHS Solutions Sdn Bhd) résumait le tout en disant :
« L'architecture, c'est comme une équipe de foot. On y retrouve des composants (une équipe, avec des éléments, les joueurs), des connections (4-4-2 ou 4-3-3, l'ailier passe à l'attaquant), des contraintes de comportement dynamique (jeu à une touche de passe, ou en contre-attaque) ».
    Toutefois, il ne s'agit pas de jouer au foot, mais bien de répondre aux exigences ("requirements") du maître d'ouvrage (donc du client et de ceux qui "ont des intérêts" ("Stakeholder") dans la réalisation du système).

D'où une première définition :
« Description, au besoin selon plusieurs points de vue, de l'organisation des composants, de leur connexions et de leur dynamiques, afin de répondre à toutes les exigences du client. »
Si cette définition mentionne les éléments de base (qui sont détaillés dans Caractéristiques de bases), elle n'intègre pas encore les raisons même qui justifient l'Architecture. La suite de l'article étudie ces raisons et les enjeux qu'elles impliquent, avant de proposer une définition plus complète.

Au fait, pourquoi l'Architecture ?
    C'est vrai qu'en tant que jeune ingénieur, vous aller d'abord vous trouver confronté à des architectures "simples" :
- environnement mono-machine (allez, au hasard, que des PC sous NT),
- accès à l'information unique et bien défini (par exemple, via un ORB comme Orbix, une implémentation de CORBA),
- éventuellement, une base de données tout aussi unique et définie (par exemple, Oracle ou Sybase, ou ...).
    Et hop, avec ces éléments techniques, vous pouvez commencer à analyser, voir à concevoir votre application.
Vous pourrez après faire un joli dessin "d'architecture", décrivant la distribution de votre application. Par exemple :

 
...
Cela s'appelle de l'architecture descriptive.
Il s'agit de décrire, pendant ou après la conception du logiciel, une architecture qui "rend compte" des choix effectués.
Et avec cela, vous passez à côté de (au moins) 2 détails d'importance.

1/ Les exigences ("Requirements"). Il faut bien se rendre compte qu'elles sont de 2 types :
- exigences fonctionnelles (celles directement issues des "fonctionnalités" décrites dans le cahier des charges, comme accéder à un compte client),
- exigences non-fonctionnelles, comme la disponibilité du système, la montée en charge, l'administration, ... ce sont celles-là que l'on risque de négliger le plus facilement, si on ne les a pas soigneusement étudiées avant d'analyser et concevoir le système.
(cf. aussi les caractéristiques de bases : Enjeux)
2/ Les vues (cf. article caractéristiques de bases : Vues) : le dessin ci-dessus ne rend compte que d'une vue architecturale, ou encore "point de vue" (ici, la vue "déploiement" représenté par son diagramme UML correspondant). Mais il en existe bien d'autres.
Classiquement, on distinguera au minimum l'architecture fonctionnelle qui s'occupe de l'organisation des différents composants logiciels entre eux, et l'architecture technique qui rend compte de la topologie des machines (composant matériel) et de leur moyens de communication. Mais il existe des points de vue bien plus détaillés (cf. caractéristiques de bases : Vues). 
    Il est toutefois intéressant de noter que la plupart des 80 définitions de [SEI] ne parlent que de "System Software Architecture", soit "Architecture du système logiciel". Le terme anglais "System" est ici à interpréter comme un système complet (logiciel + matériel). Toutefois, ces deux notions - logiciel et matériel - sont à la base des deux points de vues majeurs exposés dans l'article sur la les points de vue des architectures

    Donc, l'architecture est là, comme la première définition le mentionne, pour répondre aux exigences client en adoptant les points de vues (vues architecturales) qui permettent de décrire de telles solutions. Mais son origine illustre une autre raison d'être de cette activité.
    Le paragraphe suivant détaille cette origine, centrée sur la production de services logiciels, mais d'autres aspects comme l'agrégation ou l'hétérogénéité technique sont abordés dans l'article Pourquoi l'Architecture ?

Et ça vient d'où, l'Architecture ?
    [SAPF2000] situe l'apparition d'un intérêt pour cette activité dans les années 1970, à partir du moment où la réalisation des logiciels a franchi un certain seuil de complexité.
A ce moment, on se rendait bien compte que les ingénieurs en charge de cette réalisation... perdaient le contrôle, et ce notamment car :
- les spécifications étaient imprécises (ce qui est souvent le cas pour de "petits" projets, comme cela est rappelé dans l'article sur les spécifications)
- le code grossissait de façon monolithique, et ce même si les ajouts n'avaient rien à voir avec les fonctionnalités initialement codées (on a peur de toucher à ce qui existe, alors on empile...), du coup, plus personne n'était sûr des fonctionnalités précises de telle ou telle partie,
- l'intégration devenait impossible. Rajouter, par exemple, un nouveau type de base de donnée entraînait des problèmes dont la correction n'aboutissait toujours que... sur d'autres problèmes. Les effets de bords étaient trop nombreux, puisque toutes les parties du systèmes étaient bien trop couplées entre elles (chacune à besoin des autres... et la moindre correction est très dangereuse : les dangers du couplage ont déjà été dénoncés notamment dans l'article sur le codage).
- la mise en parallèle des tâches étaient risquées, puisque tout se tenait, il était difficile à une équipe d'avancer alors qu'elle dépendait des résultats d'une deuxième... elle-même attendant la première! (encore le couplage!...)
- la diversification des produits logiciels étaient compliquée. Qu'est-ce que la diversification ? Cela prend la forme soit :
    * d'une famille de produit (comme la suite bureautique Office de Microsoft, dont une bonne partie du code est aujourd'hui commune entre ses différents produits). Certes, ce n'est pas tous les jours que vous seriez amené à développer pareille "suite",
    * d'une gestion de configuration d'un logiciel (je livre une version 4.1 à telle date, une 4.2 à telle autre et je dois corriger des problèmes sur la 3.5). Et cela peut parfaitement être votre lot quotidien. Si le code à gérer en terme de configuration n'est pas suffisamment modulaire et découplé... c'est le cauchemar.

Enjeux
    le paragraphe précédent met clairement en évidence un premier enjeux : 
l'architecture est avant tout un guide pour aider les concepteurs d'un logiciel a en maîtriser sa complexité
.
    L'article sur les caractéristiques de bases : Structures indique où se situe cette complexité et précise le rôle du guide. 
    Mais l'article sur l'intranet (à venir) démontre que de nouvelles architectures viennent se greffer sur d'ancienne, que de nouvelles sources d'informations peuvent venir compléter d'ancienne... (Rq : ce phénomène d'empilement monolithique existe toujours, mais cette fois, on n'a plus peur de remplacer des pans entiers d'architecture par d'autres, notamment lors de "l'intranisation" de certaines "vieilles" bases d'information).
    Regardez le schéma ci-dessus (celui du paragraphe précédent illustrant une architecture client-serveur) et posez-vous la question : que se passe-t-il si vous complétez votre ORB (qui permet la communication via des objets) par une communication HTML de type "Internet" pour que votre client accède à d'autres types de données distribuées ?
Ce client sera-t-il impacté par cette nouvelle source de données ? Ou bien cet ajout sera-t-il complètement transparent ? 
    Le deuxième enjeu concerne donc l'évolutivité et il faut bien prendre conscience que, derrière ce terme, il ne s'agit pas de "tout prévoir" lorsque l'on conçoit une architecture. Il s'agit "simplement" de vérifier si la solution retenue n'est pas fermée. Pour cela, chaque composant d'une architecture (comme, par exemple, les composants "client", "serveur d'application" et "base de données" d'une application intranet) doivent pouvoir être remplacées par un composant similaire mais de technologie différente tout en gardant un impact mineur (par exemple, toujours dans le cadre d'une application intranet, la base de données doit pouvoir changer sans que le poste client s'en aperçoive).
    Comme le dit, dans [SEI], Matthew GREAM, ingénieur australien, l'architecture doit couvrir :
- le passé, en se servant de formalismes généraux existant qui aident à mieux comprendre les problèmes architecturaux du projet actuel (encore cette notion de guide),
- le présent, en décrivant l'architecture retenue pour ce projet au travers de diagrammes, textes, etc,
- le futur, en fournissant suffisamment d'informations sur la maintenance de l'intégrité architecturale lors de la vie d'un logiciel une fois livrée. Ces informations constituent un véritable référant qui n'est pas figé mais au contraire en constante évolution.

    Ces deux enjeux (guide et évolutivité) sont les justifications majeures de l'architecture. Celle-ci doit alors être prescriptive, donc être une étude préalable qui englobe tous les aspects du "système" à analyser.
    Seul ce type d'architecture (qui nécessite un véritable architecte et non quelques croquis avec des boites et des lignes) apporte l'assurance de répondre à tous les problèmes initiaux et de prendre en compte l'évolution du système.
    L'article sur l'intranet (à venir) en est une bonne illustration.
    Toutes ces caractéristiques de base sont repris et détaillés dans l'article suivant : Caractéristiques de bases.

Pour résumer
    Nous avons vu que :
- l'architecture peut être descriptive, mais elle doit surtout être prescriptive et intervenir avant la conception proprement-dite du système,
- elle est là pour maîtriser la complexité d'un système, dans le but de répondre à toutes les exigences du client, qu'elles soient fonctionnelles ou non.
    La définition évolue et prend en compte les enjeux de l'Architecture.
« Description, au besoin selon plusieurs points de vue, de l'organisation des composants, de leur connexions et de leur dynamiques, et guide permettant la mise en place des réponses aux exigences du client concernant un système et son évolution dans le temps. »
    Notre diagramme initial évolue également pour faire apparaître ces nouvelles notions :

 
    (ce diagramme est rappelé dans la modélisation de l'Architecture)
    Si l'architecture (bleue sur fond rouge) est détaillée, ainsi qu'une des caractéristiques de base (les exigences, en jaune sur fond rouge), on retrouve aussi les deux enjeux en vert sur fond rouge (guide et évolution).
Définition standard ?
    La définition donnée ci-dessus ne s'est donc pas basée, au moment de sa rédaction (mi-2001) sur une "définition standard"... et pour cause, en ce domaine, il n'y en avait pas vraiment.
    Microsoft nous rappelle, dans son MAO (Microsoft Architecture Overview, cf. [MSDN]) que la définition de "Enterprise Architecture" existe, et est définie par l'ANSI/IEEE Std 1471-2000 (créée mi-2001) :
"the fundamental organization of a system, embodied in its components, their relationships to each other and the environment, and the principles governing its design and evolution.
    Mmmm... j'crois qu'c'estclair, y compris au niveau de la définition : au travers des termes "oraganization", "components", "relationships", "design" et "evolution", on retrouve bien les notions d'organisation, de composants, de connexions, d'exigences du client (auxquelles le"design" doit répondre"), et d'évolution dans le temps de la définition de cet article !
    Donc, y z'ont copié !!! (je blague, oeuf corse).
    Ce qui suit est issu du MAO (Microsoft Architecture Overview, cf. [MSDN] de Microsoft). Mes remarque sont en [italique rouge entre ]
    Microsoft précise qu'une architecture d'entreprise est un outil conceptuel qui permet de comprendre leurs propres structures et leur fonctionnement. 
[Très vrai et cela ne date pas d'hier : il s'agit de la Loi de Conway, rappelée dans [XPLB], et qui observe - dès 1968 - que la structure d'un programme ou système informatique reflète nécessairement celle de l'entreprise ou de l'organisation qui l'a créée.]
    Elle leur fournit une cartographie de l'entreprise et un guide pour planifier les changements de métier et de technologie.
Elle comprend un ensemble cohérent de modèles qui décrivent la structure et les fonctions de l'entreprise.
Un modèle, toujours selon Microsoft, est arrangé selon un niveau de détail croissant et incluant :
- ses objectifs et buts;
- ces process et organisations;
- ses systèmes et données;
- ses technologies employés.
    [Remarque : on retrouve les 4 sphères architecturales (métier, fonctionnelle, applicative et technique).]



               
 
Avertissement !
 
Décollage !  |  Présentation du site web "AILES"  | 
Infos générales  |  articles "Informatique"