Introdução à Arquitetura de Software

Post on 07-Jun-2015

2.294 views 3 download

description

An introduction to software architecture.

Transcript of Introdução à Arquitetura de Software

1

Introdução à Arquitetura de Software

Rodrigo Veiga – PUC-Rio

05/04/2009

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

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)

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)

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)

6

Desenvolvimento de Software

1950 – linguagens de máquina

1958 – Fortran / operações agrupadas

1970s – Surgimento de Interfaces

Arquitetura de Software

Evolução ao longo das últimas décadas

Extraído de: An Introduction to Software Architecture, David Garlan and Mary Shaw, 1994

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)”

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)

9

Arquitetura de Software

Extraído de: The Golden Age of Software Architecture, Mary Shaw and Paul Clements, 2006

Processo de Maturação da Arquitetura de Software

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)

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)

12

Arquitetura de Software• “Architecture establishes the context for design

and implementation” (Grady Booch)

CODE

implementation

design

architecture

“Architectural decisions are the most fundamental decisions; changing them will have significant ripple effects.”(Grady Booch)

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)

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)

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)

16

Arquitetura de Software

• Architectural Concerns(Adaptado de Beautiful Architecture e Patterns of Software)

Functionality

Usability

Modularity

Performance

Reusability

ScalabilityChangeability

Reliability

Habitability

Ecosystem

Security

17

Arquitetura de Software

• Architectural Styles (Software Architecture)

•Main Program and Subrotines•Object-Oriented

Language Influenced Styles

•Virtual Machines•Client-ServerLayered•Batch-sequential•Pipe-and-filterDataflow•Publish-subscribe•Event-based

Implicit Invocation

•P2PPeer-To-Peer

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)

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)

20

O Papel de Arquiteto de Software

• Maus hábitos– Perfeccionismo– Inflexibilidade– Micromanagement– Isolacionismo

(Software Architecture)

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

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)

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

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