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

  1. Definição e Importância da Arquitetura de Software
  2. Diferença entre Design e Arquitetura de Software
  3. Visão Geral dos Estilos Arquiteturais
  4. Ciclo de Vida da Arquitetura de Software

Módulo 2: Estilos Arquiteturais

  1. Arquitetura em Camadas
  2. Arquitetura de Microserviços
  3. Arquitetura Orientada a Serviços (SOA)
  4. Arquitetura de Eventos
  5. Arquitetura de Sistemas Distribuídos

Módulo 3: Padrões Arquiteturais

  1. Padrões de Criação (Singleton, Factory, Builder)
  2. Padrões Estruturais (Adapter, Composite, Decorator)
  3. Padrões Comportamentais (Observer, Strategy, Command)
  4. Padrões de Integração (Broker, Bridge, Façade)

Módulo 4: Planejamento e Documentação de Arquitetura de Software

  1. Domain Driven Design (DDD)
  2. Importância da Documentação
  3. Modelagem de Arquitetura com UML e outros Diagramas
  4. Ferramentas para Documentação Arquitetural

Módulo 5: Avaliação de Arquitetura de Software

  1. Métodos e Técnicas de Avaliação
  2. Estudos de Caso - arquitetura de engenharia de dados

Módulo 6: Desafios e Tendências em Arquitetura de Software

  1. Escalabilidade e Desempenho
  2. Segurança Arquitetural
  3. Manutenção e Evolução de Arquiteturas
  4. 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
  1. Apresentações: Cada aula, um aluno/Dupla apresenta discussão de artigos e trabalhos de um tema específico de arquitetura de software.
  2. 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:

  1. Bass, L., Clements, P., & Kazman, R. (2013). Software Architecture in Practice (3rd ed.). Addison-Wesley.
  2. Richards, M., & Ford, N. (2020). Fundamentals of Software Architecture: An Engineering Approach. O’Reilly Media.
  3. Shaw, M., & Garlan, D. (1996). Software Architecture: Perspectives on an Emerging Discipline. Prentice Hall.
  4. Buschmann, F., Meunier, R., Rohnert, H., Sommerlad, P., & Stal, M. (1996). Pattern-Oriented Software Architecture: A System of Patterns. Wiley.

Bibliografia Complementar:

  1. Rozanski, N., & Woods, E. (2011). Software Systems Architecture: Working with Stakeholders Using Viewpoints and Perspectives (2nd ed.). Addison-Wesley.
  2. Kruchten, P. (2004). The Rational Unified Process: An Introduction (3rd ed.). Addison-Wesley.
  3. Taylor, R. N., Medvidovic, N., & Dashofy, E. M. (2009). Software Architecture: Foundations, Theory, and Practice. Wiley.