Architecture des logiciels
Transcription
Architecture des logiciels
Architecture des logiciels Bernard Lang – 2 mars 2006 Ceci est un bref mémo, très simplificateur, sur les pratiques de programmation et sur l'architecture des logiciels. La création de logiciels est principalement de nature compositionnelle. À partir de fonctionnalités élémentaires présentes dans les langages de programmation et dans les systèmes d'exploitation des ordinateurs (opérations arithmétiques, structures de contrôle d'exécution, utilisation de la mémoire, lecture et rangement sur disque ou sur réseau, etc.), on crée des fonctionnalités plus élaborées (algorithmes variés, bases de données, résolution d'équations, ...). Chacune de ces créations peut à son tour servir à des créations plus complexes. Créer pour permettre la réutilisation dans des contextes nouveaux est une règle fondamentale, tant pour l'efficacité productive que pour la fiabilité et la maintenabilité des logiciels produits. Pour cela, il est essentiel que les créations répondent à une stricte logique fonctionnelle, la plus simple et la plus propre possible. Et l'expérience montre que nul ne peut préjuger de l'usage qui sera fait des logiciels produits ... exactement et ce n'est pas par hasard comme nul ne peut préjuger des usages qui seront faits d'un résultat mathématique. C'est en ce sens que la technique doit rester neutre : on ne peut présumer de son usage, et interférer avec elle pour des raison extratechniques ne peut qu'avoir des effets négatifs sur son utilité, dans des contextes souvent inattendus. Même l'Internet a été construit sur ce principe, selon ce que l'on a appelé le principe de bout en bout ("endtoend principle"). L'idée est essentiellement de ne présumer en rien des usages qui seront faits du réseau, en créant une fonctionnalité de pure communication et en rejetant vers les logiciels situés aux extrémités la responsabilité de spécialiser les usages. C'est grâce à cette décision que l'Internet a pu avoir la flexibilité que nous lui connaissons et a permis cette explosion d'usages originaux, cette créativité qui en fait un moteur de la croissance, et surtout d'une croissance plus durable que celle de bien d'autres industries. Ces briques logicielles sont utilisées en gros sous trois formes : 1. Comme des fonctions (de bibliothèque) destinées à être mises en oeuvre par des programmes plus vastes auxquelles elles sont intégrées. Ces programmes sont réalisés dans des langages de programmation classiques généralement compilés, c'estàdire traduits en code exécutable non lisible par un programmeur. 2. Comme des commandes ajoutées au système d'exploitation et pouvant être invoquées isolément en tapant des instructions sous forme textuelle immédiatement exécutables dans ce que l'on appelle la ligne de commande, qui n'est généralement utilisée que par des professionnels. En fait, ces commandes jouent aussi le même rôle de création compositionnelle que les fonctions de bibliothèque, mais principalement pour des langages de programmation dits langages de script, qui le plus souvent ne sont pas compilés mais exécutés directement (mais moins efficacement) depuis la forme source lisible par le programmeur. Elles peuvent être aussi invoquées comme les fonctions de bibliothèque du (1) dans des programmes écrits avec la plupart des langages de programmation classiques (c'estàdire compilés). Cette forme est essentielle pour le travail des ingénieurs système et réseau car c'est elle qui permet le prototypage rapide d'application, ou la création rapide de petits programmes pour résoudre des problèmes spécifiques, pour effectuer des tests, pour automatiser une tâche répétitive occasionnelle, etc. 3. Comme des applications fermées, encapsulées dans des interfaces hommemachine sur des écrans graphiques, d'utilisation plus conviviale pour l'utilisateur appartenant au grandpublic, mais se prêtant mal à la création compositionnelle d'applications dérivées plus complexes. Ces versions facilement utilisables sont créées en rajoutant devant les logiciels décrits en (1) ou en (2) une couche de programme (l'interface graphique) destinée à faciliter l'interaction en guidant l'utilisateur, en favorisant son intuition et sa compréhension par l'image et l'animation, en lui indiquant les informations nécessaires dans des formulaires, en lui signalant ses erreurs, en lui fournissant divers mécanismes d'assistance, d'automatisation, d'explication et de documentation simple. Typiquement, au lieu de taper la commande "cp mon-document ~/travail/mon-repertoire/" comme il le ferait en (2) pour une copie de fichier d'un répertoire dans un autre, l'utilisateur va avoir des images des répertoires et des fichiers et va bouger l'image d'un fichier d'un point à un autre de l'écran avec l'aide de la souris. L'interface graphique peut être vue comme un petit programme qui d'un côté communique avec l'utilisateur, et de l'autre communique avec la fonction à mettre en oeuvre qui est disponible sous la forme (1) ou la forme (2). Les interfaces graphiques utilisées en (3) sont un emplacement naturel pour toute information et notification que l'on peut vouloir fournir à l'usager sur ce qu'il est en train de faire. Par contre, cela perturberait la fonction naturelle des logiciels dans les cas (1) et (2), car ce ne sont là que des briques destinées à être intégrées dans des constructions plus vastes pour des usages qui restent à définir. Architecture compositionnelle des logiciels Acteur Médium Composants logiciels Langages de programmation compilés Composants logiciels – bibliothèques de fonctions Programmeur Langage de programmation pile IP protocole HTTP Ingénieur systèmes et réseaux Langage de script Ligne de commande Protocole SMTP afficheur pdf afficheur HTML gestion du courrier script de typage Environnement graphique Professionnel . . . Non programmable – pas de composition Interfaces graphiques de mise en œuvre Utilisateur grandpublic composition Compétences requises Langages de scripts Commandes en ligne Filtre à courrier Domaine programmable Lecteur de courrier Domaine non programmable Facilité d'utilisation navigateur Grandpublic Décomposition fonction - interface un composant fonctionnel Interface graphique un autre composant fonctionnel Dans le premier diagramme les flèches indiquent les chemins d'activation des composants (petits rectangles jaune pâle), qui pour les utilisateurs grandpublic passent par des interfaces graphiques (ovales violet pâle). Dans le deuxième diagramme, les flèches indiquent les chemins de circulation de l'information pour un utilisateur grandpublic. L'interface voit passer requêtes et réponses et « sait » ce que font les composants fonctionnels. Il peut donc agir (par exemple au moyen d'un composant supplémentaire) sur le traitement effectué ou sur ses résultats.