Processo de Desenvolvimento de Software - Design de Software, Interface, Arquitetura e Algoritmos
Arquitetura de Software
-
Upload
tiagosilva -
Category
Documents
-
view
214 -
download
0
description
Transcript of Arquitetura de Software
Arquitetura de Software
Definição
• O conceito de Arquitetura de Software surgiu nos anos 60 (com Dijkstra), mas se tornou popular nos anos 90.
• Perry e Wolf (92) Arquitetura é um conjunto de elementos arquiteturais (de dados, de processamento, de conexão) que possuem alguma organização. Os elementos e sua organização são definidos por decisões tomadas para satisfazer objetivos e restrições.
Definição
• “Uma arquitetura é um conjunto de decisões significativas sobre a organização de um sistema de software, a seleção dos elementos estruturais e suas interfaces pelas quais o sistema é composto, juntamente com seu comportamento, como especificado nas colaborações entre esses elementos, a composição desses elementos estruturais e comportamentais em subsistemas progressivamente maiores, e o estilo arquitetural que dirige essa organização – esses elementos e suas interfaces, suas colaborações e sua composição”. (Larman).
Definição
• O artigo Working Group on Architecture da IEEE define a arquitetura como "o conceito de nível mais alto de um sistema em seu ambiente”.
• Nessa definição o artigo não se limita a um enfoque interno, mas leva em consideração o sistema como um todo em seu ambiente de usuário e de desenvolvimento.
Definição
• “A arquitetura de software é um nível de design voltado para questões que vão além dos algoritmos e das estruturas de dados da computação. A projeção e a especificação da estrutura geral do sistema emergem como um novo tipo de problema. As questões estruturais incluem organização total e estrutura de controle global; protocolos de comunicação, sincronização e acesso a dados; atribuição de funcionalidade a elementos de design; distribuição física; composição de elementos de design; escalonamento e desempenho; e seleção entre as alternativas de design." (Garlan e Shaw)
Definição
• No RUP, a arquitetura de um sistema de software é a organização ou a estrutura dos componentes significativos do sistema que interagem por meio de interfaces, com elementos constituídos de componentes e interfaces sucessivamente menores.
Outras Definições
• Astudillo (1998): é a interface entre o problema do negócio e a solução técnica.
• Jazayere et al (2000): conjunto de componentes e seus relacionamentos, que deve satisfazer os requisitos funcionais e não funcionais do sistema.
• ISO/IEEE 1471-2000 - Arquitetura é a organização fundamental de um sistema incorporada em seus componentes, seus relacionamentos com o ambiente, e os princípios que conduzem seu design e evolução.
Documento da Arquitetura de Software
• Fornece uma visão geral de arquitetura abrangente do sistema, usando diversas visões de arquitetura para descrever diferentes aspectos do sistema;
• A documentação da arquitetura do software facilita a comunicação entre os stakeholders, registra as decisões iniciais acerca do projeto de alto-nível, e permite o reúso;
• O Documento de Arquitetura de Software é desenvolvido basicamente durante a fase de elaboração;
• O arquiteto de software é o responsável pela elaboração da documentação da arquitetura de software;
Stakeholders
• Todas as partes interessadas no projeto;
• Acionistas, donos, investidores, concorrentes, governos, empregados, imprensa, etc.
Visão da Arquitetura de Software
• É uma representação da informação, ou parte dela, para facilitar o entendimento em relação às necessidades de um ou mais interessados.
• Ela facilita o entendimento por parte do interessado, uma vez que vai filtrar e formatar a informação. – Por exemplo, a visão fornecida pelos casos de uso do sistema, pode interessar ao cliente/usuário. A visão de implementação aos programadores, etc.
Modelo de Visão (RUP)
• Visão de Casos de Uso: obrigatória
• Visão Lógica: obrigatória
• Visão de Implementação: opcional
• Visão de Processos: opcional
• Visão de Implantação: opcional
Visão de Casos de Uso
• Mostra subconjunto do Modelo de Casos de Uso;
• Mostra os atores significativos para o sistema.
Visão Lógica
• Permite compreender a estrutura e a organização do design do sistema;
• É utilizada no fluxo de trabalho, na qual existe somente uma visão lógica do sistema, que ilustra as principais realizações de caso de uso, subsistemas, pacotes e classes que abrangem o comportamento significativo em termos de arquitetura;
• Subconjunto das classes, subsistemas, pacotes e realizações de caso de uso;
• Refinada a cada iteração.
Visão de Implementação
• Mostrar decisões de arquitetura tomadas para a implementação;
• Usa diagramas de componentes que ilustram como os subsistemas são organizados em camadas e hierarquias;
• Atribuir o trabalho de implementação a indivíduos e equipes;
• Avaliar a quantidade de código que será desenvolvida, modificada ou excluída;
• Discutir a reutilização.
Visão de Processos
• Usa diagramas de classes, diagramas de interação, diagramas de atividades e diagramas de estados, com enfoque nas classes que representam threads e processos;
• Indicado quando o sistema possui mais de um thread de controle e se os threads separados interagem ou são dependentes entre si.
Visão de Implantação
• Usado para sistema distribuído;
• Subconjunto do Modelo de Implantação;
• Mostra a distribuição física do processamento no sistema.
Participantes da Arquitetura de Software (Stakeholders)
• Analista de requisitos: identifica os requisitos do sistema;
• Arquiteto de software: cria a arquitetura, pode ser uma equipe com um arquiteto líder;
• Projetista ou Desenvolvedor: implementa os componentes.
Focos da Arquitetura
• Evolução do sistema: passagem para o próximo ciclo de desenvolvimento;
• Reutilização da arquitetura, ou de partes dela, no contexto de uma linha de produto;
• Avaliação das qualidades suplementares, como desempenho, disponibilidade, portabilidade e segurança;
• Atribuição do trabalho de desenvolvimento a equipes ou subcontratantes;
• Decisões sobre a inclusão dos componentes desenvolvidos internamente e adquiridos prontos para serem usados;
• Inserção em um sistema mais amplo.
Habilidades de um Arquiteto de Software
• Compreender as tecnologias disponíveis na atualidade;
• Dominar técnicas de modelagem e metodologias de desenvolvimento;
• Entender as estratégias de negócios da instituição onde trabalha;
• Conhecer produtos, processos e estratégias de concorrentes;
• Reconhecer estruturas comuns em sistemas já desenvolvidos;
Habilidades de um Arquiteto de Software
• Usar o conhecimento sobre arquiteturas existentes para tomar decisões de projeto em novos sistemas;
• Realizar uma descrição formal da arquitetura de um sistema a fim de analisar as propriedades do sistema;
• Apresentar a arquitetura para outras pessoas.