Points clés
1. L’architecture logicielle, socle de la qualité et du succès d’un système
L’architecture porte les décisions de conception les plus précoces, donc les plus fondamentales et les plus difficiles à modifier.
Définir l’architecture. L’architecture logicielle désigne les structures de haut niveau d’un système logiciel, la discipline qui consiste à créer ces structures, ainsi que leur documentation. Elle englobe l’ensemble des décisions majeures concernant l’organisation d’un système logiciel, notamment :
- Le choix des éléments structurels et de leurs interfaces
- Le comportement défini par les collaborations entre ces éléments
- La composition de ces éléments en sous-systèmes plus vastes
- Le style architectural qui guide cette organisation
L’importance de l’architecture. Une architecture bien conçue est essentielle pour :
- Répondre aux exigences des attributs de qualité (performance, sécurité, modifiabilité, etc.)
- Faciliter la réflexion et la gestion des évolutions du système
- Permettre une communication efficace entre les parties prenantes
- Servir de base à la réutilisation et au développement de lignes de produits
- Autoriser des estimations fiables des coûts et des délais
2. Les attributs de qualité orientent les décisions et compromis architecturaux
La capacité d’un système à satisfaire ses attributs de qualité souhaités (ou requis) dépend largement de son architecture.
Attributs de qualité clés. Parmi les attributs de qualité que l’architecte doit impérativement prendre en compte figurent :
- La performance
- La scalabilité
- La disponibilité
- La sécurité
- La modifiabilité
- La testabilité
- L’utilisabilité
Tactiques architecturales. Pour atteindre ces attributs, l’architecte met en œuvre des tactiques spécifiques, par exemple :
- Performance : gestion des ressources, contrôle de la demande en ressources
- Disponibilité : détection des fautes, récupération, prévention
- Sécurité : résistance aux attaques, détection, réaction
- Modifiabilité : localisation des changements, prévention des effets de bord
Compromis. L’atteinte d’un attribut de qualité peut impacter d’autres. L’architecte doit donc équilibrer des compromis tels que :
- Performance versus modifiabilité
- Sécurité versus utilisabilité
- Disponibilité versus coût
3. Modifiabilité et testabilité, garantes de la pérennité du système
Environ 80 % du coût total d’un système logiciel typique survient après son déploiement initial.
Concevoir pour le changement. Les tactiques de modifiabilité permettent de maîtriser coûts et complexité des évolutions futures :
- Encapsulation et dissimulation de l’information
- Usage d’interfaces et d’intermédiaires
- Séparation des préoccupations
- Report du moment de liaison des décisions de conception
Considérations sur la testabilité. Une architecture testable réduit les coûts et améliore l’efficacité des tests :
- Mécanismes pour contrôler et observer l’état du système
- Conception favorisant l’automatisation des tests
- Isolation des dépendances pour les tests unitaires
- Support des tests d’intégration et de système
Équilibre à trouver. L’architecte doit concilier besoins fonctionnels immédiats et maintenabilité à long terme :
- Investir dès le départ dans la modifiabilité et la testabilité
- Utiliser des patrons et tactiques favorisant les évolutions futures
- Documenter les décisions et leurs justifications pour les équipes à venir
4. Performance et scalabilité exigent une planification architecturale rigoureuse
La performance est souvent liée à la scalabilité, c’est-à-dire la capacité à accroître la charge de travail tout en maintenant de bonnes performances.
Tactiques de performance. Les stratégies clés pour garantir une bonne performance incluent :
- Gestion des ressources : ordonnancement, concurrence, mise en cache
- Contrôle de la demande en ressources : réduction des surcharges, gestion des taux d’échantillonnage
- Algorithmes et structures de données efficaces
Approches de scalabilité. L’architecte doit anticiper la croissance de l’usage du système :
- Scalabilité horizontale (ajout d’instances)
- Scalabilité verticale (augmentation des capacités)
- Répartition de charge et équilibrage
- Mise en cache et réseaux de diffusion de contenu (CDN)
Mesure et optimisation. La surveillance continue et l’ajustement sont indispensables :
- Établir des références de performance et des accords de niveau de service (SLA)
- Utiliser des outils de profilage et de monitoring
- Identifier et résoudre les goulets d’étranglement
- Considérer les compromis avec d’autres attributs (sécurité, modifiabilité)
5. Sécurité et sûreté doivent être intégrées dès la conception architecturale
La sécurité mesure la capacité du système à protéger les données contre tout accès non autorisé tout en assurant l’accès aux utilisateurs et systèmes légitimes.
Tactiques de sécurité. Les stratégies essentielles pour bâtir des systèmes sécurisés sont :
- Authentifier et autoriser les utilisateurs
- Chiffrer les données sensibles
- Mettre en œuvre des protocoles de communication sécurisés
- Détecter et réagir aux attaques
- Isoler et compartimenter les composants du système
Considérations de sûreté. Pour les systèmes où la défaillance peut causer des dommages :
- Réaliser une analyse approfondie des risques
- Mettre en place des mécanismes de détection et de récupération des fautes
- Concevoir pour une dégradation maîtrisée
- Utiliser redondance et diversité dans les composants critiques
- Valider et vérifier les fonctions critiques pour la sûreté
Approche globale. Sécurité et sûreté doivent être prises en compte à tous les niveaux :
- Architecture et conception
- Pratiques d’implémentation et de codage
- Procédures opérationnelles et surveillance
- Audits réguliers et tests d’intrusion
6. Le cloud et l’informatique distribuée posent de nouveaux défis architecturaux
Un système distribué est tel que la panne d’un ordinateur dont vous ignoriez même l’existence peut rendre votre propre machine inutilisable.
Patrons d’architecture cloud. Exploiter les modèles natifs du cloud pour scalabilité et résilience :
- Architecture microservices
- Conteneurisation et orchestration (ex. Kubernetes)
- Informatique sans serveur (serverless)
- Architectures pilotées par événements
Défis des systèmes distribués. Traiter les problématiques clés en environnement distribué :
- Cohérence et cohérence éventuelle
- Tolérance aux partitions
- Latence et pannes réseau
- Transactions distribuées
- Découverte de services et équilibrage de charge
Spécificités du cloud. Adapter les choix architecturaux aux environnements cloud :
- Multi-location et partage des ressources
- Élasticité et auto-scalabilité
- Stratégies de stockage et mise en cache des données
- Optimisation des coûts et gestion des ressources
- Conformité et souveraineté des données
7. Interfaces efficaces et documentation sont indispensables à l’intégration
Tous les éléments possèdent des interfaces. Tous interagissent avec des acteurs ; sinon, à quoi bon leur existence ?
Principes de conception d’interfaces. Créer des interfaces claires et efficaces :
- Respecter le principe du moindre étonnement
- Concevoir des interfaces petites et cohésives
- Utiliser des conventions de nommage cohérentes
- Fournir une gestion claire des erreurs et des retours
Bonnes pratiques de documentation. Assurer une documentation complète et utile :
- Documenter interfaces, composants et leurs interactions
- Utiliser plusieurs vues (logique, processus, déploiement)
- Inclure les justifications des décisions clés
- Maintenir la documentation à jour avec le système
Stratégies d’intégration. Prévoir une intégration fluide des composants :
- Employer des protocoles de communication standardisés
- Favoriser un couplage lâche entre composants
- Concevoir pour l’interopérabilité et l’extensibilité
- Mettre en œuvre des tests d’intégration et des pratiques d’intégration continue
8. Le déploiement continu et les pratiques DevOps façonnent les architectures modernes
DevOps regroupe des pratiques visant à réduire le délai entre la validation d’un changement et sa mise en production, tout en garantissant une haute qualité.
Pipeline de déploiement continu. Concevoir des architectures favorisant des livraisons rapides et fréquentes :
- Automatiser les processus de compilation, test et déploiement
- Mettre en place des bascules de fonctionnalités et des déploiements progressifs (canary releases)
- Utiliser l’infrastructure en tant que code pour des environnements cohérents
- Concevoir pour la surveillance et l’observabilité
Considérations DevOps. Aligner l’architecture sur les principes DevOps :
- Concevoir pour la testabilité et l’automatisation
- Faciliter les retours en arrière et la récupération
- Intégrer dès le départ la journalisation et la surveillance
- Permettre une gestion aisée de la configuration
Changement culturel. Prendre en compte l’impact sur les équipes et processus :
- Favoriser la collaboration entre développement et exploitation
- Insister sur la responsabilité partagée de la qualité du système
- Encourager l’expérimentation et l’apprentissage des échecs
- Aligner les décisions architecturales sur les objectifs et indicateurs métier
9. L’évaluation architecturale et la gestion de la dette garantissent la viabilité à long terme
L’évaluation architecturale est une activité de réduction des risques.
Méthodes d’évaluation. Évaluer régulièrement les décisions architecturales :
- Méthode d’analyse des compromis architecturaux (ATAM)
- Méthode d’analyse coûts-bénéfices (CBAM)
- Revues actives pour les conceptions intermédiaires
- Techniques d’évaluation basées sur des scénarios
Gestion de la dette technique. Traiter proactivement les faiblesses architecturales :
- Identifier et suivre les sources de dette technique
- Prioriser le remboursement en fonction de l’impact métier
- Refactoriser et moderniser l’architecture par étapes
- Trouver un équilibre entre développement de nouvelles fonctionnalités et réduction de la dette
Amélioration continue. Considérer l’architecture comme un artefact vivant :
- Revoir et mettre à jour régulièrement la documentation architecturale
- Mener des analyses post-mortem sur les défaillances et quasi-accidents
- Se tenir informé des nouvelles technologies et patrons
- Promouvoir une culture de réflexion architecturale dans toute l’organisation
Les lecteurs ont aussi lu
FAQ
What's Software Architecture in Practice about?
- Comprehensive Overview: Software Architecture in Practice by Len Bass provides a detailed exploration of software architecture, emphasizing its critical role in software development.
- Quality Attributes Focus: It discusses how architecture influences quality attributes like performance, security, and modifiability, linking them to business goals.
- Practical Methods: The book introduces methods such as the Attribute-Driven Design (ADD) and Architecture Tradeoff Analysis Method (ATAM) to guide architects in designing and evaluating architectures.
Why should I read Software Architecture in Practice?
- Essential Knowledge: Understanding software architecture is crucial for software engineers, as it directly impacts project success.
- Real-World Applications: The book offers practical advice and case studies, making it relevant for both students and professionals.
- Industry Insights: Authors provide insights based on extensive experience, aligning with current industry practices and challenges.
What are the key takeaways of Software Architecture in Practice?
- Architecture's Importance: The book emphasizes that architecture is vital for achieving quality attributes and managing change effectively.
- Quality Attribute Scenarios: It introduces scenarios to specify and analyze quality requirements, aiding in informed design decisions.
- Tactics and Patterns: A catalog of tactics and patterns is provided to enhance system performance, security, and modifiability.
What is the definition of software architecture according to Software Architecture in Practice?
- Set of Structures: Software architecture is defined as "the set of structures needed to reason about the system," focusing on relationships and properties.
- Reasoning Tool: It serves as a tool for reasoning about functionality and quality attributes, encompassing ongoing design considerations.
- Abstraction: Architecture is an abstraction, emphasizing public interfaces and relationships while managing complexity.
What is the Attribute-Driven Design (ADD) method in Software Architecture in Practice?
- Systematic Approach: ADD guides architects through the design process, focusing on achieving specific quality attributes.
- Iterative Steps: It involves steps like reviewing inputs, selecting design concepts, and defining interfaces, ensuring alignment with requirements.
- Quality Focus: The method prioritizes quality attributes, helping architects create effective and efficient designs.
How does Software Architecture in Practice define quality attributes?
- Non-Functional Requirements: Quality attributes are non-functional requirements like performance, security, and usability, crucial for system success.
- Scenarios for Clarity: Quality attribute scenarios illustrate how attributes will be measured and achieved, aiding in design understanding.
- Balancing Trade-offs: The book discusses trade-offs between attributes, emphasizing careful balancing to meet stakeholder needs.
What is the Architecture Tradeoff Analysis Method (ATAM) in Software Architecture in Practice?
- Evaluation Framework: ATAM evaluates architectures based on quality attribute scenarios, identifying risks and trade-offs.
- Collaborative Process: It involves presenting the architecture, identifying goals, and analyzing scenarios with stakeholder engagement.
- Valuable Outputs: The method produces insights like risks and recommendations, guiding informed architectural decisions.
How does Software Architecture in Practice address the concept of modifiability?
- Ease of Change: Modifiability is the "ease with which changes can be made," crucial for reducing costs and risks.
- Enhancing Tactics: Tactics like increasing cohesion and reducing coupling are provided to design adaptable systems.
- Trade-offs Consideration: Achieving modifiability involves trade-offs with other attributes, requiring careful design decisions.
What are some tactics for achieving availability in software systems according to Software Architecture in Practice?
- Fault Detection: Tactics include monitoring system health and implementing heartbeat checks to identify faults early.
- Fault Recovery: Strategies like using redundant spares and rollback mechanisms maintain availability during failures.
- Preventing Faults: Proactive measures, such as removing components from service, enhance overall system availability.
How does Software Architecture in Practice suggest handling long tail latency in cloud systems?
- Understanding the Phenomenon: Long tail latency refers to requests taking longer than average, impacting performance.
- Hedged Requests: Issuing multiple requests and canceling unnecessary ones ensures timely processing.
- Alternative Requests: Additional requests for slow responses help maintain performance in unpredictable conditions.
What are the best quotes from Software Architecture in Practice and what do they mean?
- "Architecture is a means to an end.": Highlights that architecture's purpose is to deliver stakeholder value by meeting needs.
- "Design is hard.": Reflects the complexity of creating effective architectures, navigating trade-offs and uncertainties.
- "Documentation is a love letter you write to your future self.": Emphasizes thorough documentation for understanding and maintenance.
How does Software Architecture in Practice suggest managing architecture debt?
- Identifying Hotspots: Use design structure matrices to find architecture debt hotspots that increase maintenance costs.
- Quantifying Debt: Analyze revision history and issue tracking to quantify debt, justifying refactoring efforts.
- Refactoring Strategies: Implement specific strategies to address debt, improving architecture quality and reducing costs.