Conception et Architecture Logicielles
La conception et l'architecture logicielles traitent de la manière dont un système logiciel est structuré en composants et connecteurs, de la décomposition des responsabilités, et de la façon dont les décisions de conception répondent aux besoins fonctionnels et aux attributs de qualité.
Definition
La conception logicielle est le processus de définition de l'architecture, des composants, des interfaces et d'autres caractéristiques d'un système, tandis que l'architecture logicielle est l'ensemble des structures comprenant les éléments du système, leurs relations et les propriétés de ces derniers.
Scope
Ce domaine couvre les styles et modèles architecturaux (en couches, client-serveur, microservices, événementiel, tuyaux et filtres) ; les principes de conception tels que la modularité, le masquage d'information, la cohésion, le couplage et la séparation des préoccupations ; la conception orientée objet et basée sur les composants ; les patrons de conception ; les attributs de qualité architecturaux et leurs compromis ; ainsi que les notations de modélisation telles que UML utilisées pour exprimer les conceptions.
Sub-topics
Core questions
- Comment un système devrait-il être décomposé en modules et composants ?
- Quel style architectural soutient le mieux les attributs de qualité requis ?
- Comment les principes de conception tels que le couplage et la cohésion guident-ils une bonne structure ?
- Comment les problèmes de conception récurrents sont-ils résolus par des patrons réutilisables ?
Key theories
- Masquage d'information et modularité
- Parnas a soutenu que les modules devraient être définis pour masquer les décisions de conception susceptibles de changer derrière des interfaces stables, de sorte que le changement soit localisé ; ce principe sous-tend la modularité, l'encapsulation et un faible couplage.
- Attributs de qualité architecturaux et compromis
- L'architecture est guidée par des attributs de qualité tels que la performance, la modifiabilité, la disponibilité et la sécurité ; comme ceux-ci peuvent être en conflit, l'architecture consiste fondamentalement à raisonner sur des compromis guidés par des tactiques et des patrons.
- Patrons de conception (Design patterns)
- Les problèmes de conception récurrents ont des solutions bien comprises et nommées — patrons de création, structurels et comportementaux — qui capturent la pratique experte et fournissent un vocabulaire partagé pour la conception orientée objet.
Clinical relevance
Les décisions architecturales sont les plus difficiles à modifier ultérieurement et déterminent le plus fortement les attributs de qualité d'un système. Ainsi, une conception et une architecture solides peuvent réduire les coûts de maintenance à long terme, permettre l'évolutivité et l'évolution, et influencer l'organisation des équipes.
Evidence & guidelines
La norme ISO/IEC/IEEE 42010 standardise la description de l'architecture, et le domaine de connaissances de la conception logicielle du SWEBOK (Software Design knowledge area) ainsi que des textes de référence tels que Software Architecture in Practice fournissent des orientations consensuelles.
History
Les principes de conception modulaire ont été articulés par Parnas au début des années 1970. La conception orientée objet et les patrons de conception (design patterns) ont mûri dans les années 1980 et 1990, l'architecture logicielle a émergé comme une discipline distincte avec les travaux de Shaw et Garlan au milieu des années 1990, et les styles orientés services et microservices ont suivi dans les années 2000 et 2010.
Debates
- Architecture monolithique versus microservices
- La question de savoir s'il faut construire des systèmes comme un monolithe unique déployable ou comme de nombreux services déployables indépendamment est largement débattue ; les microservices offrent une mise à l'échelle et un déploiement indépendants au prix d'une complexité de système distribué, de sorte que le bon choix dépend de l'échelle et de la structure organisationnelle.
Key figures
- David Parnas
- Mary Shaw
- Len Bass
- Erich Gamma
- Grady Booch
Related topics
Seminal works
- parnas1972
- gamma1994
- bass2012
Frequently asked questions
- Quelle est la différence entre conception et architecture ?
- L'architecture concerne les structures de plus haut niveau et les décisions dont le coût de modification est le plus élevé — les composants majeurs, leurs interactions et les attributs de qualité à l'échelle du système — tandis que la conception couvre la structure interne plus détaillée de ces composants ; la frontière est une question de signification plutôt qu'une ligne nette.
- Pourquoi les patrons de conception (design patterns) sont-ils importants ?
- Les patrons capturent des solutions éprouvées à des problèmes de conception récurrents et offrent aux ingénieurs un vocabulaire partagé, ce qui facilite la communication, le raisonnement et l'évolution des conceptions ; ils constituent des lignes directrices à appliquer avec discernement, et non des recettes obligatoires.