Escolar Documentos
Profissional Documentos
Cultura Documentos
13/06/2016 lucineia@inf.ufrgs.br 2
Projeto e Implementação
PROJETO DE SOFTWARE
13/06/2016 lucineia@inf.ufrgs.br 3
Projeto
• Especificação de requisitos dizem O QUÊ o
sistema deve fazer
• Projeto trata de COMO o sistema fará isto
– Decomposição do sistema
– Determina como
• requisitos funcionais serão atingidos
• dentro das restrições dos requisitos não funcionais
– Define plataformas e tecnologias
– Permite dividir o trabalho entre uma equipe de
desenvolvedores
13/06/2016 lucineia@inf.ufrgs.br 4
Projeto
1. O caso de uso inicia quando o
cliente informa um termo de busca
2. O sistema exibe todos os produtos
cujo nome ou descrição contenham
aquele tema (exibir foto, preço,
etc.) ...
13/06/2016 lucineia@inf.ufrgs.br 5
Projeto
1. O caso de uso inicia quando o
cliente informa um termo de busca
2. O sistema exibe todos os produtos
cujo nome ou descrição contenham
aquele tema (exibir foto, preço,
etc.) ...
Produto
codigo
*
CTRLPesquisa nome
IUPesquisa
descricao
preco
estoque
...
13/06/2016 lucineia@inf.ufrgs.br 6
1. O caso de uso inicia quando o cliente informa um
termo de busca
RNF
- Plataforma web
- Browser IE, Forefox, Safari
- Desk/Laptop e tablet
- 90% das pesquisas com tempo de resposta inferior
a 1 s.
- MTF de 5 minutos
- 10.000 usuários simultâneos
- Interface intuitiva, sem treinamento prévio
- etc ….
13/06/2016 lucineia@inf.ufrgs.br 7
Projeto – Níveis
• Arquitetural (high level design)
– Estrutura principal
• Sistemas e subsistemas
• Interfaces e dependências
– Cobre a essência dos principais casos de uso
– Atende os requisitos não funcionais
– Uma vez definido, tende a ser mais estável
• Projeto detalhado (low level design)
– Estrutura interna em termos de componentes
– Leva em conta características/idiossincrasias de linguagens
de programação
– Detalhado o suficiente para guiar/facilitar a
implementação
13/06/2016 lucineia@inf.ufrgs.br 8
Projeto
Sommerville
13/06/2016 lucineia@inf.ufrgs.br 9
Projeto: Por que é tão difícil?
• Análise
– Foca no domínio da aplicação
• Projeto
– Foca no domínio da solução
– Dependente de conhecimento e experiência
– Plataformas tecnológicas têm vida curta
• 3‐5 anos
• Novas linguagens, novos frameworks, novos serviços, novos paradigmas
• Considerações que justificaram uma escolha mudam com a evolução tecnológica
– e.g. Desempenho, produtividade, testabilidade
– Janela de tempo
• Tempo disponível para decisões
• Levam em conta o que se sabe (até o momento) e o que se prevê
– Conhecimento das características do projeto e suas consequências evolui
• Evolução
• Projetar para acomodar mudanças
13/06/2016 lucineia@inf.ufrgs.br 10
Projeto – Objetivos
• Reliability • Good documentation
• Modifiability (confiabilidade) • Well‐defined interfaces
• Maintainability • User‐friendliness
• Adaptability • Reuse of components
• Reusability • Rapid development
• Efficiency • Minimum # of errors
• Portability • Readability
• Traceability of requirements • Ease of learning
• Fault Tolerance • Ease of remembering
• Backward‐compatibility • Ease of use
• Cost‐effectiveness • Increased productivity
• Robustness • Low‐cost
• High‐performance • Flexibility
13/06/2016 lucineia@inf.ufrgs.br 11
Fonte: Kostas Kontogiannis
Projeto – Objetivos: Relações
13/06/2016 lucineia@inf.ufrgs.br 12
Fonte: Kostas Kontogiannis
Projeto – Objetivos
• Eficiência vs. Portabilidade (a facilidade de
transferir software entre ambientes operacionais)
• Custo vs. Robustês (habilidade de um software
funcionar mesmo em condições anormais)
• Funcionalidade vs. Usabilidade
• Desenvolvimento rápido vs. Funcionalidade
• Custo vs. Reusabilidade
• Reuso
• Etc.
13/06/2016 lucineia@inf.ufrgs.br 13
Eficiência vs. Portabilidade
Eficiência Interoperabilidade
• Uso dos recursos em tempo de • Um software frequentemente
execução, e seus impactos em deve interagir com outros
termos de tempo de resposta sistemas que formam seu
e consumo de memória ambiente
• Mais do que algoritmos • Arquiteturas que lidem com as
sofisticados, eficiência tem a dificuldades técnicas de
ver com a equilibrada componentes desenvolvidos para
distribuição de diferentes
responsabilidades, e o linguagens/plataformas
acoplamento entre • Oferecer acessos bem definidos a
componentes funcionalidades que devem ser
• Eficiência é frequentemente observáveis externamente
contraditória com outras • Exemplo
propriedades
– Computador/celular/embarcado
13/06/2016 lucineia@inf.ufrgs.br 14
Projeto e Implementação
PROJETO ARQUITETURAL
13/06/2016 lucineia@inf.ufrgs.br 15
Arquitetura de Software
• Sem definição consensual
– http://www.sei.cmu.edu/architecture/definitions.html
• Duas definições modernas
– "The software architecture of a program or computing system is the
structure or structures of the system, which comprise software
elements, the externally visible properties of those elements, and the
relationships among them.”
[Bass et al., 2003]
– “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, 2000]
• E ainda
– 9 definições “clássicas”, 18 definições nos livros, 100+ definições
adotadas pela comunidade…
13/06/2016 lucineia@inf.ufrgs.br 16 16
Arquitetura de Software
• Dois níveis de abstração
– Architecture in the small
• Lida com a arquitetura de programas individuais
• Programa decomposto em componentes
– Architecture in the large
• Lida com a arquitetura de sistemas complexos
(enterprise systems)
– Incluem outros sistemas, programas componentes
• Sistemas
– Distribuídos em diferentes computadores
– Pertencem e são gerenciados por diferentes empresas
13/06/2016 lucineia@inf.ufrgs.br 17
Arquitetura de Software
• Todo sistema TEM uma arquitetura
– Mesmo que não documentada ou não conhecida
• Vantagens de um projeto e documentação
explícita
– Comunicação com stakeholders
– Análise do sistema
– Reuso em larga escala
• Tópico de pesquisa
– Architecture Recovery and Discovery
13/06/2016 lucineia@inf.ufrgs.br 18
Decisões de Arquitetura
• Existe uma arquitetura genérica de aplicação que pode atuar como
um template para sistema sendo projetado?
• Como o sistema vai ser distribuído em uma série de núcleos ou
processadores?
• Que padrões ou estilos arquiteturais serão usados?
• Qual será a abordagem fundamental usada para estruturar o
sistema?
• Como componentes estruturais do sistema serão decompostos em
subcomponentes?
• Que estratégia será usada para controlar a operação de
componentes no sistema?
• Que organização arquitetural é melhor para estar de acordo com os
requisitos não funcionais?
• Como o projeto arquitetural será avaliado?
• Como a arquitetura do sistema deve ser documentada?
13/06/2016 lucineia@inf.ufrgs.br 19
Projeto Arquitetural: Atividades Genéricas
• Decisões estratégicas de alto nível
– Estruturação de sistema
• Sistema decomposto em vários subsistemas principais
• Comunicação entre esses subsistemas é identificada
– Modelagem de controle
• Estabelecimento de um modelo geral dos relacionamentos de
controle entre as partes do sistema
– Decomposição modular
• Subsistemas identificados são decompostos em módulos
• Projetista deve decidir sobre o tipo de módulo e suas interconexões
• Arquitetura de software precisa ser mantida consistente no
desenvolvimento de software
– Capacidade de evoluir com o software e seu desenvolvimento
– Compreensível pela equipe
13/06/2016 lucineia@inf.ufrgs.br 20
Decomposição de Sistemas
• Subsistemas
– UML: Subsistema, Pacote, Componentes
– Organiza componentes de software
– Fonte
• Coleção interrelacionadas de classes, associações, operações, eventos e restrições
• Serviço de um subsistema
– Responsabilidades genéricas
– Grupos de operações fornecidas
– Fonte
• Casos de uso
• Interface de Subsistema
– UML: Interface, dependência
– Define fluxo de interação e controle entre subsistemas
– Bem definidos e pequenos
– Às vezes chamado de API
• Termo deve ser reservado para a etapa de implementação
13/06/2016 lucineia@inf.ufrgs.br 21
Suporte da UML: Diagrama de Pacotes
13/06/2016 lucineia@inf.ufrgs.br 22
Suporte da UML: Diagrama de Deployment
13/06/2016 lucineia@inf.ufrgs.br 23
Princípios Básicos para Arquiteturas
• Modularização
– Decomposições de um sistema em grupos de
subsistemas e componentes
– Empacotamento físico das entidades que constituem
a lógica
• Separação de Preocupações
– Separation of Concerns
– Isolamento de responsabilidades diferentes ou sem
relacionamento entre elas
– Se um componente desempenha diferentes papéis em
distintos contextos, então estes devem ser isolados
13/06/2016 lucineia@inf.ufrgs.br 24
Princípios Básicos para Decomposição
• Abstração
– Características essenciais de um componente que permite
distingui‐lo dos demais, e que portanto permite definir de
forma detalhada suas fronteiras conceituais
– Melhor tipo de abstração é a de dados
• Ocultamento de Informações
– Esconder a complexidade e detalhes internos de um
componente de seus clientes, minimizando o acoplamento
• Encapsulamento
– Agrupamento de elementos em uma abstração que
constitui sua estrutura e comportamento
– Unidade fisicamente distinguível
13/06/2016 lucineia@inf.ufrgs.br 25
Princípios Básicos para Decomposição
• Alta coesão
– Interface dirigida a um único objetivo global
– Pequenas interfaces
– Melhor forma de coesão é a funcional
• Baixo acoplamento
– Poucas interdependências
• Dependência de poucas interfaces
– Acoplamento alto prejudica a compreensão e manutenção
de um sistema
• Dependências explícitas
• Suficiência, completude
– Em relação à abstração que captura
13/06/2016 lucineia@inf.ufrgs.br 26
Fonte:
csis.pace.edu/~marchese/CS
616/Lec11/se_l11.htm
Exemplo de
Arquitetura em
Camadas
13/06/2016 lucineia@inf.ufrgs.br 27
Fonte:
csis.pace.edu/~marchese/CS
616/Lec11/se_l11.htm
13/06/2016 lucineia@inf.ufrgs.br 28
13/06/2016 lucineia@inf.ufrgs.br 29
Testabilidade
• Arquitetura deve facilitar a avaliação do bom
funcionamento
– Melhor detecção, isolamento e correção de
problemas
– Planejar e organizar testes ao longo do tempo
– Integração contínua
– Facilitar integração de componentes
13/06/2016 lucineia@inf.ufrgs.br 30
Capacidade de Mudança
• “Manutenção”: erros
– Capacidade de localizar as mudanças
– Minimizar o impacto da mudança nos demais componentes
• Extensibilidade: novas propriedades, versões melhoradas
– Componentes com fraco acoplamento
– Troca de componentes sem afetar seus cliente
• Reestruturação: reorganização dos componentes e de seus
relacionamentos
– Flexibilidade na configuração
• Portabilidade
– Adaptação do sistema a novas interfaces, plataformas,
– Poucas dependências de software/hardware
13/06/2016 lucineia@inf.ufrgs.br 31
Capacidade de Mudança
13/06/2016 lucineia@inf.ufrgs.br 32
Capacidade de Mudança
13/06/2016 lucineia@inf.ufrgs.br 33
Capacidade de Mudança
• Dá melhor apoio à construção de variantes de configuração de
software conforme usuário
• Cuidado com excessos
– Aumenta a complexidade (desenvolver, manter)
– Deteriora o desempenho
– Consome mais recursos
– Decidir as partes prioritárias a serem projetadas para acomodar
mudanças, e quais partes permanecem relativamente mais estáticas
– Se estas decisões não se revelarem acertadas com o tempo,
reestruturar o software para flexibilizar os
componentes/relacionamentos críticos
– É mais barato que projetar total flexibilidade desde o início
• Métodos ágeis costumam não planejar extensivamente para
acomodação de mudanças
13/06/2016 lucineia@inf.ufrgs.br 34
Escolhendo Subsistemas
• Subsistema
– Possui bastante autonomia e pouca dependência de outros
componentes
– Pouca interação para cumprir seu objetivo
– Alta coesão, baixo acoplamento
– Análise de Dependências
• Subsistema depende de outros?
• Depende de quais?
• Quais dependem dele?
• Pergunta principal
– Qual é o serviço (papel) do subsistema?
– O que a sua interface deve oferecer a outros subsistemas?
• Questão complementar
– Existe alguma ordem/hierarquia entre os subsistemas?
– Qual o melhor modelo para representar esta ordem/hierarquia?
13/06/2016 lucineia@inf.ufrgs.br 35
Referências
• Sommervile, Ian. Engenharia de software. 9ª
edição. Pearson Education. São Paulo, 2011.
– Capítulo 6 – Projeto de Arquitetura
– Capítulo 7 – Projeto Detalhado
• Literatura Opcional
– F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad,
and M. Stal. Pattern‐Oriented Software Architecture.
A System of Patterns. John Wiley & Sons Ltd.,
Chichester, UK, 1996
– M. Shaw and D. Garlan. Software Architecture:
Perspectives on a Emerging Discipline. Prentice Hall,
Englewood Cliffs, NJ, 1996
13/06/2016 lucineia@inf.ufrgs.br 36
Perguntas?
• Este material tem
contribuições de
– Ingrid Nunes
– Karin Becker
– Lucinéia Thom
– Marcelo Pimenta
13/06/2016 lucineia@inf.ufrgs.br 37