Arquitetura de Software
Disciplina: Arquitetura de Software - PPCA
Carga Horária: 60 horas
Professora: Carla Rocha (www.carlarocha.org)
Contato: caguiar@unb.br
Ementa: Esta disciplina oferece uma visão abrangente sobre os conceitos, princípios e práticas de arquitetura de software. Aborda estilos arquiteturais, padrões, documentação, avaliação de arquiteturas e estudos de caso de sistemas complexos. Visa capacitar os alunos a projetar, avaliar e evoluir arquiteturas de software robustas e escaláveis.
Objetivos:
- Compreender os princípios fundamentais da arquitetura de software.
- Identificar e aplicar estilos e padrões arquiteturais.
- Desenvolver habilidades para documentar e comunicar arquiteturas de software.
- Avaliar a qualidade de arquiteturas de software e realizar melhorias.
- Aplicar conceitos de arquitetura em projetos reais.
Conteúdo Programático:
Módulo 1: Introdução à Arquitetura de Software
- Definição e Importância da Arquitetura de Software
- Diferença entre Design e Arquitetura de Software
- Visão Geral dos Estilos Arquiteturais
- Ciclo de Vida da Arquitetura de Software
Módulo 2: Estilos Arquiteturais
- Arquitetura em Camadas
- Arquitetura de Microserviços
- Arquitetura Orientada a Serviços (SOA)
- Arquitetura de Eventos
- Arquitetura de Sistemas Distribuídos
Módulo 3: Padrões Arquiteturais
- Padrões de Criação (Singleton, Factory, Builder)
- Padrões Estruturais (Adapter, Composite, Decorator)
- Padrões Comportamentais (Observer, Strategy, Command)
- Padrões de Integração (Broker, Bridge, Façade)
Módulo 4: Planejamento e Documentação de Arquitetura de Software
- Domain Driven Design (DDD)
- Importância da Documentação
- Modelagem de Arquitetura com UML e outros Diagramas
- Ferramentas para Documentação Arquitetural
Módulo 5: Avaliação de Arquitetura de Software
- Métodos e Técnicas de Avaliação
- Estudos de Caso - arquitetura de engenharia de dados
Módulo 6: Desafios e Tendências em Arquitetura de Software
- Escalabilidade e Desempenho
- Segurança Arquitetural
- Manutenção e Evolução de Arquiteturas
- Arquiteturas Emergentes e Futuras Tendências
Metodologia de Trabalho:
- Aulas expositivas dadas pelo professor
- Seminários apresentados pelos alunos
- Discussão de textos
- Escrita de um artigo IEEE de um estudo de caso de refatoração de uma arquitetura de software
- Apresentações: Cada aula, um aluno/Dupla apresenta discussão de artigos e trabalhos de um tema específico de arquitetura de software.
- Estudo de Caso: Análise e crítica de arquiteturas de sistemas reais.
Aulas (semanas):
- S0 - Apresentação do plano de ensino, conteúdo geral
- S1 - Aula teórica - Estilo Arquitetural
- S2 - Aula teórica - Padrões Arquiteturais
- S3 - Aula teórica - DDD
- S4 - Aula teórica - Avaliação de Arquitetura de Software
- S5 - Aula teórica - Desafios e tendência
- S6 - Aula teórica - Estudo de Caso
- S7 - Aula teórica - Estudo de Caso
- S8 - Aula teórica - Entrega final do Projeto Final
Projeto Final O projeto final consiste na escrita de um artigo, no formato do IEEE (template ICSE), de 6 páginas, escritas preferencialmente em ingles (pode ser em portugues também), com os seguintes requisitos:
- Metodologia de Pesquisa: estudo de caso
- Contexto: contexto da sua empresa/caso conhecido
-
Apresentar o contexto da empresa/negócio, a arquitetura de software atual. Aplicar o DDD para uma refatoração arquitetural, apresente a nova arquitetura e apresente as melhorias e lições aprendidas.
- Entrega por email no último dia de aula (13/07)
Seminário A cada aula, uma pessoa/dupla vai fazer um seminário na segunda metade da aula. Os temas serão alocados de acordo com o interesse, ou por sorteio. Para cada seminário, a pessoa que vai apresentar o seminário deve compartilhar um artigo referência (com boa reputação) para toda a turma com 1 semana de antecedência para que TODOS possam ler o artigo com antecedência. Aqui estão os temas propostos:
- Padrões Arquiteturais - Teoria e pratica
- Domain Driven Design - Guia prático
- Arquitetura Data Mesh, Data Fabric, Data Warehose - arquitetura de dados (conceitos, ferramentas)
- Arquitetura com modulos de machine learning - conceitos, boas práticas
- Quando NÃO usar microsserviços? Quando o monolito é a melhor solução.
-
Coreografia de serviços - https://www.ime.usp.br/~kon/papers/Choreographies-ConcurrencyAndComputation2020.pdf
- Slides, material de apoio enviados por email
Repositório
Método de Avaliação:
- Participação e Discussão em Aula: 20%
- Seminário: 30%
- Projeto Final: 50%
Bibliografia Básica:
- Bass, L., Clements, P., & Kazman, R. (2013). Software Architecture in Practice (3rd ed.). Addison-Wesley.
- Richards, M., & Ford, N. (2020). Fundamentals of Software Architecture: An Engineering Approach. O’Reilly Media.
- Shaw, M., & Garlan, D. (1996). Software Architecture: Perspectives on an Emerging Discipline. Prentice Hall.
- Buschmann, F., Meunier, R., Rohnert, H., Sommerlad, P., & Stal, M. (1996). Pattern-Oriented Software Architecture: A System of Patterns. Wiley.
Bibliografia Complementar:
- Rozanski, N., & Woods, E. (2011). Software Systems Architecture: Working with Stakeholders Using Viewpoints and Perspectives (2nd ed.). Addison-Wesley.
- Kruchten, P. (2004). The Rational Unified Process: An Introduction (3rd ed.). Addison-Wesley.
- Taylor, R. N., Medvidovic, N., & Dashofy, E. M. (2009). Software Architecture: Foundations, Theory, and Practice. Wiley.