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. 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. 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. “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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. O Papel de Arquiteto de Software
• Maus hábitos
– Perfeccionismo
– Inflexibilidade
– Micromanagement
– Isolacionismo
(Software Architecture)
20
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. 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. 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. 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
Editor's Notes
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
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