Introdução à Arquitetura de Software

2,822 views

Published on

An introduction to software architecture.

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,822
On SlideShare
0
From Embeds
0
Number of Embeds
13
Actions
Shares
0
Downloads
99
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide
  • Vitruvius = Marco VitruviusA arquitetura se manifesta de dois modos diferentes: a atividade (a arte, o campo de trabalho do arquiteto) e o resultado físico (o conjunto construído de um arquiteto, de um povo e da humanidade como um todo).Arquitetura, no seu sentido primeiro e mais amplo, refere-se, em uma acepção tradicional, à arte e técnica de organizar e configurar espaços a fim de construir o meio-ambiente propício à vida humana. Arquitetura é música petrificada,Johann Wolfgang von Goethe
  • Arquitetura Cultural é uma metodologia de planejamento e construção de empreendimentos e políticas privadas sustentáveis, que gerem impacto sociocultural positivo, alicerçados na visão estratégica, no valor sócio-econômico do negócio e no compromisso ético da empresa com a sociedade e com o desenvolvimento humano.A arquitetura cenográfica (cênica) ocupa-se mais especificamente da geração dos cenários arquitetônicos internos ou externos.A arquitetura de computadores é a teoria por detrás do desenho de um computador.A Arquitetura de Informações consiste no design de ambientes informacionais compartilhados e resistentes à entropia, que vem a ser o estado de desordem natural de qualquer sistema, na ausência de uma força organizadora.Arquitetura de rede é como se designa um conjunto de camadas e protocolos de rede
  • Pioneiros
  • Distinguish the development of software systems from the development of physical systems. With software, time matters. Software is all about state and changing state. There are usually a large number of states the software can exist in, and the software behavior may be very complex, which makes it difficult to analyze all of the different state combinations. This is different than with physical systems where even moving elements have a finite number of states.Physical systems are constrained and governed by the laws of physics. On the other hand, with software systems, you can do anything you want. This makes visible and physical systems easier to architect.Many physical systems such as buildings, are static structures. Software systems have both static and dynamic perspectives.Software is assumed to evolve and hence it is built in such a way that applying changes should be inexpensive. Adaptability is the rule for software. In fact, adaptability is the very nature of expert systems. Physical systems are not really built to change over time. Per physical systems engineering standards, software systems are perpetually in the design and prototyping stage. At some point, a running version is good enough to be released. Since the replication and distribution costs are very low (e.g., just burn a CD), new releases can be produced very frequently (we are not saying that this is desirable). In other words, software development is a continuous design process, where the manufacturing cost is effectively zero. This is unlike hardware systems where you build once and spend the rest of the time manufacturing.Software architecting is less predictable and more risk-building that hardware architecting. Thus, software is becoming more complex and difficult to build than hardware.
  • Architecture is many things to many different stakeholdersEnd userCustomerSys adminProject managerSystem engineerDeveloperArchitectMaintainerTesterOther systemsArchitecture defines major componentsArchitecture defines component relationships (structures) and interactionsArchitecture omits content information about components that does not pertain to their interactions Behavior of components is a part of architecture insofar as it can be discerned from the point of view of another componentEvery system has an architecture (even a system composed of one component)Architecture defines the rationale behind the components and the structureArchitecture definitions do not define what a component isArchitecture is not a single structure -- no single structure is the architecture
  • Functional/logic viewCode/module viewDevelopment/structural viewConcurrency/process/thread viewPhysical/deployment viewUser action/feedback viewData view
  • A system’s architecture ultimately resides in executable codeA system’s architecture may be visualized in modelsEvery system has an architecture; some architectures are made manifest and visible, many others are notAll architecture is design, but not all design is architectureInfrastructure is an integral and important part of architecture, but there is more to architecture than just infrastructureA given technology only serves to implement some dimension of an architectureTechnology shapes an architecture, but a resilient architecture should never be bound to all of the technologies that form itConceptual integrity is essential, but the complexity of most interesting systems leads development to be a team sportMultiple stakeholders with multiple concerns lead to multiple views with multiple blueprintsThere exists only a modest body of knowledge about software architectureScientific and analytical methods are lacking; those that do exist are hard to applyThere is no perfect design; architecture involves the management of extreme ambiguity and contradictionExperience counts: the best architects are grown, not bornEven the best architects copy solutionsThe “artsy” part of software architecture is minimal
  • FunctionalityUsabilityPerformanceScalabilityChangeabilityComprehensibility / Habitability (Patterns of Software)EcosystemModularityReusabilitySecurityReliability
  • Introdução à Arquitetura de Software

    1. 1. Introdução à Arquitetura de Software Rodrigo Veiga – PUC-Rio 05/04/2009 1
    2. 2. Agenda • Arquitetura – Definição • Histórico – Evolução do Desenvolvimento – Trabalhos Pioneiros em Arquitetura de Software – Processo de Maturação • Conceitos – Definição – Termos Relacionados – Conceitos errados – Architectural Concerns – Architectural Styles • Critérios para uma boa Arquitetura • O Papel de Arquiteto de Software • Arquitetura Hoje • Grupos e Sites sobre o assunto • Bibliografia 2
    3. 3. Arquitetura • “The art or science of building” (Oxford Dictionary) • “Is an imitation of Nature” (Vitruvius on Architecture) • “Should have Beauty (Venustas), Firmness (Firmitas) and Utility (Utilitas)” (Vitruvius on Architecture) • “Arte ou a técnica de projetar e edificar o ambiente habitado pelo ser humano” (Wikipedia) 3
    4. 4. Arquitetura • “Arte ou técnica de organizar e configurar espaços” (Wikipedia) • “Se manifesta de duas formas: a atividade e o resultado físico” (Wikipedia) • “Architecture defines the essential structure and organization of something abstracted in an appropriate pattern” (Rob Beckmann , Caro Systems) 4
    5. 5. “Every thing has an architecture” (Grady Booch) “In all disciplines, architecture provides a mean for solving a common problem: assuring that a building, or bridge, or composition, or book, or computer, or network, or system has certain properties and behaviors when it has been built” (Beautiful Architecture) 5
    6. 6. Desenvolvimento de Software Evolução ao longo das últimas décadas Extraído de: An Introduction to Software Architecture, David Garlan and Mary Shaw, 1994 6
    7. 7. Arquitetura de Software • Trabalhos Pioneiros – Edgar Dijkstra, 1968 • A Case against the GO TO Statement – Não apenas programar uma solução satisfatória – Introduz a idéia de que “a layered system results in ease of development and maintenance” – Fred Brooks Jr., 1975 • The Mythical Man-Month – “Every part must reflect the same philosophies and the same balancing of desiderata….Ease of use, then, dictates unity of design, conceptual integrity (Simplicity and Straightforwardness)” 7
    8. 8. Arquitetura de Software • Trabalhos Pioneiros – David Lorge Parnas, 1972: • On the Criteria to Be Used in Decomposing Systems into Modules – “Information Hiding as the basis of decomposition for ease of maintenance and reuse” – “The separation of Interface from implementation of components” – Wolfram Bartussek e David Lorge Parnas, 1978: • Using Assertions About Traces to Write Abstract Specifications for Software Modules – Princípios para detecção e tratamento de erros (assertivas, exceções, etc) 8
    9. 9. Arquitetura de Software Processo de Maturação da Arquitetura de Software Extraído de: The Golden Age of Software Architecture, Mary Shaw and Paul Clements, 2006 9
    10. 10. Arquitetura de Software • “Software architecture is what software architects do” (Kent Beck at OOPSLA 92) • “Software Architecture is a game of trade-offs - a decision that improves one characteristic often diminishes another” (Beautiful Architecture) • “Architecting software is different from physical systems” (Grady Booch) • “A set of architectural (or design) elements that have a particular form” ou “Architecture = {elements, form, rationale}” (Perry and Wolf, 1992) 10
    11. 11. Arquitetura de Software • “A software system architecture comprises – A collection of software and system components, connections, and constraints – A collection of system stakeholders' need statements – A rationale which demonstrates that the components, connections, and constraints define a system that, if implemented, would satisfy the collection of system stakeholders' need statements” (Boehm et al., 1995) • “Software architecture is 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” (IEEE 1471-2000) • “Is a set of principal design decisions made about the system” (Software Architecture Foundations, Theory and Practice) 11
    12. 12. Arquitetura de Software • “Architecture establishes the context for design and implementation” (Grady Booch) “Architectural decisions are the most fundamental decisions; changing them will have significant ripple effects.” (Grady Booch) 12
    13. 13. Arquitetura de Software • Termos Relacionados – Components • “An architectural element that encapsulates a subset of system’s funcionality and/or data” (Software Architecture) – Connections • “An architectural element that effects and regulates interactions among components” (Software Architecture) – Stakeholders • “Is an individual, team, or organization with interests in a system (or part of it)” (Grady Booch) – Models • “Is a simplification of reality, created in order to better understand the system being created; a semantically closed abstraction of a system” (Grady Booch) – Views / Dimensions • “A view is a representation of a whole system from the perspective of a related set of concerns” (Grady Booch) 13
    14. 14. Arquitetura de Software • Termos Relacionados (cont.) – Concerns • “Interests related with aspects that are important to one or more stakeholders” (Grady Booch) – Patterns • “Is a kind of rule that states a problem to be solved and a solution to that problem” (Patterns of Software) – Architecture Erosion / Entropy • “The consequences of actions that disorganizes a software architecture over time” (Stephen J. Mellor foreword to Beautiful Architecture) – Architecture Style • “Style is the classification of an architecture according to those with similar patterns” (Grady Booch) – Reference Architecture • “Is a set of principal design decisions that are simultaneously applicable to multiple related systems” (Software Architecture) 14
    15. 15. Conceitos Errados sobre Arquitetura de Software • “Architecture is just paper • Architecture and design are the same things • Architecture and infrastructure are the same things • <my favorite technology> is the architecture • A good architecture is the work of a single architect • Architecture can be represented in a single blueprint (or is flat) • Architecture is a science • Architecture is an art” (Handbook of Architecture, Grady Booch) 15
    16. 16. Arquitetura de Software • Architectural Concerns (Adaptado de Beautiful Architecture e Patterns of Software) Functionality Ecosystem Usability Security Modularity Performance Habitability Reusability Changeability Scalability Reliability 16
    17. 17. Arquitetura de Software • Architectural Styles (Software Architecture) Language • Main Program and Subrotines Influenced Styles • Object-Oriented • Virtual Machines Layered • Client-Server • Batch-sequential Dataflow • Pipe-and-filter Implicit • Publish-subscribe Invocation • Event-based Peer-To-Peer • P2P 17
    18. 18. Critérios para uma boa Arquitetura  “One fact in one place  Automatic Propagation  High Modularity  Simplicity: Simple but not Simpler  Versatility  Conceptual Integrity / Resist Entropy  Elegance (Doing the most with least)  Use of Patterns  Standard Compliance  Habitability / Comprehensibility  Productivity  Interoperability” (Adaptado de: Beautiful Architectures, Handbook of Architecture, Patterns of Software) 18
    19. 19. O Papel de Arquiteto de Software • Responsabilidades – Responsável pela Arquitetura – Manter a integridade da Arquitetura – Definir e validá-la – Facilitar a comunicação entre equipes – Atuar como mentor dos times • Características – Tem que ter flexibilidade / adaptabilidade – Comunicação e Liderança – Não deve impor as regras / Saber ouvir – Visão holística (Handbook of Software Architecture, Grady Booch) 19
    20. 20. O Papel de Arquiteto de Software • Maus hábitos – Perfeccionismo – Inflexibilidade – Micromanagement – Isolacionismo (Software Architecture) 20
    21. 21. Arquitetura de Software Hoje • Crescimento de ferramentas e mecanismos que ajudam a manter a integridade da Arquitetura – Model Driven Design – Menos código para implementar mais funcionalidades • Maior interoperabilidade – Orientação a serviços – Utilização de Agentes – Cada vez mais sistemas heterogêneos (várias linguagens) • Virtualização, Cloud Computing • Processos – Arquitetura deixando de ser encarada como uma fase de projeto, mas como uma necessidade de ponta a ponta • Web 2.0 – Novos níveis de exigência 21
    22. 22. Grupos e Sites sobre o assunto – Pangea (http://pangeanet.org) – Highscalability (http://highscalability.com) – Infoq (http://www.infoq.com) – The Server Side (http://www.theserverside.com) 22
    23. 23. Referências • Diomidis Spinellis & Georgios ousios, Beautiful Architecture, O’Reilly 2009 • Revista MundoJava, edições 15 e 25 • Richard N. Taylor, Nenrad Medvidovic, Eric M. Dashofy, Software Architecture – Foundations, Theory and Practice, Wiley 2009 • Richard P. Gabriel, Patterns of Software, 1996 • Handbook of Software Architecture, Grady Booch, IBM • Mary Shaw and Paul Clements, The Golden Age of Software Architecture, 2006 • Visão Geral de Arquitetura de Software, Marco Aurélio S. Mendes, Instituto GTI • David Garlan and Mary Shaw, An Introduction to Software Architecture, 1994 • Dewayne E. Perry & Alexander L. Wolf, Foundations for the Study of Software Architecture, 1992 • Ane Cristina Varoto, Visões em arquitetura de software, 2002 23
    24. 24. Referências • Wikipedia – http://pt.wikipedia.org/wiki/Arquitetura, Acesso em 04/2009 – http://pt.wikipedia.org/wiki/Arquitetura_de_software, Acesso em 04/2009 – http://pt.wikipedia.org/wiki/Arquitetura_(desambigua%C3%A 7%C3%A3o), Acesso em 04/2009 • Scaling Twitter: Making Twitter 10000 Percent Faster | High Scalability, http://highscalability.com/scaling-twitter-making- twitter-10000-percent-faster, Acesso em 04/2009 • A Quick Look at Architectural Styles and Patterns; http://www.infoq.com/news/2009/02/Architectural-Styles- Patterns, Acesso em 04/2009 • Architectural Styles, Patterns, and Metaphors; http://shapingsoftware.com/2008/08/10/architectural-styles- patterns-and-metaphors, Acesso em 04/2009 24

    ×