Prévia do material em texto
Disciplina Arquitetura de Software Unidade 1 Introdução à arquitetura de software Aula 1 Fundamentos de arquitetura de software Introdução Olá, estudante! Boas-vindas à nossa aula sobre Fundamentos da Arquitetura de Software! Você está interessado em aprender a projetar um software de alta qualidade que atenda às necessidades de seus usuários? Quer aprender a usar a arquitetura de software para atingir esse objetivo? Junte-se a mim para uma aula que explora os conceitos e princípios essenciais da arquitetura de software e como ela pode ser usada para desenvolver o melhor software possível. Você aprenderá sobre os conceitos fundamentais de arquitetura de software, o padrão ISO/IEEE 1471-2000 e muito mais. Ao �nal desta aula, você terá uma sólida compreensão dos fundamentos da arquitetura de software e do padrão ISO/IEEE 1471-2000 e estará pronto para uma visão mais afundo do tema! Bons estudos! Disciplina Arquitetura de Software Conceitos fundamentais de arquitetura de software Às vezes, quando pensamos em arquitetura de software, é comum fazer analogia com a construção civil, pois também realizamos essa comparação com a engenharia de software com as outras engenharias (ZENKER et al., 2019). A arquitetura de software é a base de qualquer projeto de software bem-sucedido. Ela abrange o design de alto nível e a organização de um sistema de software, e de�ne os relacionamentos e interações entre seus componentes. Apesar de realizar analogias com a construção civil, para você, estudante, é importante entender que a arquitetura de software não é uma área independente. Pressman e Maxim (2021, p. 253) esclarecem que a arquitetura de software de um programa ou sistema computacional “abrange os componentes de software, as propriedades externamente visíveis desses componentes e as relações entre eles”. Para Perry e Wolf (1992), a arquitetura de software é um conjunto de elementos arquiteturais (dados, processamento e conexão), que estão organizados de certa forma. Essa organização é de�nida por tomadas de decisões para contentar os objetivos e restrições. Pressman e Maxim (2021, p. 182) destacam três principais razões pelas quais a arquitetura de software é importante: “A arquitetura de software fornece uma representação que facilita a comunicação entre todos os envolvidos; A arquitetura destaca desde o início as decisões de projeto que terão profundo impacto no trabalho de engenharia de software que se segue; Disciplina Arquitetura de Software A arquitetura constitui um modelo relativamente pequeno como os componentes do sistema que estão estruturados e trabalham em conjunto.” Para Pressman e Maxim (2021, p. 182) “o modelo de projeto de arquitetura e os padrões de arquitetura são transferíveis, ou seja, representam um conjunto de abstrações que permitem aos engenheiros de software descrever a arquitetura de modo previsível”. Padrões de arquitetura Um padrão de arquitetura resulta em uma transformação do projeto de arquitetura. Segundo Pressman e Maxim (2021, p. 186), ele difere de um estilo em alguns modos fundamentais, como: o escopo de um padrão é menos abrangente; um padrão impõe uma regra sobre a arquitetura, descrevendo como o software vai tratar um aspecto de sua funcionalidade em termos de infraestrutura; os padrões de arquitetura tendem a tratar de questões comportamentais e especí�cas no contexto de arquitetura, por exemplo, aplicações em tempo real que tratam a sincronização ou interrupções. Nesta aula, abordaremos o padrão ISO/IEEE 1471-2000, também conhecida como “Prática Recomendada para Descrição Arquitetural de Sistemas Intensivos em Software”. Ele fornece uma estrutura para descrever e avaliar a arquitetura de um sistema de software, e de�ne os seguintes termos: Visão arquitetural: uma representação da arquitetura de um sistema a partir de uma perspectiva particular ou ponto de vista das partes interessadas. Por exemplo, um desenvolvedor pode usar uma visão de componente para descrever a estrutura do sistema, enquanto um stakeholder do negócio pode usar uma visão funcional para descrever os recursos do sistema. Ponto de vista arquitetônico: uma especi�cação das convenções, regras e preocupações que governam a construção, interpretação e uso de uma visão arquitetônica. Elas servem para capturar as preocupações e interesses de diferentes partes interessadas no sistema. Descrição da arquitetura: o conjunto de visualizações e pontos de vista arquitetônicos que descrevem a arquitetura de um sistema. Ela deve ser uma descrição abrangente e coerente da arquitetura do sistema. Compreendendo a arquitetura de software Disciplina Arquitetura de Software A arquitetura de software é como a planta de um prédio. Assim como um projeto que ajuda arquitetos e construtores a entender como um prédio será construído, a arquitetura de software permite que os desenvolvedores de software entendam como um sistema de software será construído, o que deve ser seguido e como deve ser feito (ZENKER et al., 2019). A arquitetura de software garante que as diferentes partes de um sistema de software funcionem juntas adequadamente. É como um quebra-cabeça, com muitas peças diferentes que precisam se encaixar perfeitamente (PERRY; WOLF, 1992). Por exemplo, se você estiver construindo um sistema de software para uma loja, precisará garantir que o sistema de estoque, o sistema de checkout e o sistema de pagamento funcionem conjuntamente sem problemas. Uma boa arquitetura de software é importante porque garante que o sistema de software funcione bem e seja fácil de manter. Assim como um prédio bem construído dura muito tempo, um sistema de software bem projetado será mais con�ável e durará mais. Compreendendo a arquitetura do software, os desenvolvedores podem garantir que o software que construíram funcione bem e atenda às necessidades das pessoas que o utilizam. Também os ajuda a se comunicar melhor com outras pessoas envolvidas na construção do software, como designers, analista de negócios e/ou gerentes de produto. O padrão ISO/IEEE 1471-2000 fornece uma estrutura para descrever e avaliar a arquitetura de software. Ele de�ne diferentes perspectivas ou “visões” do sistema de software, dependendo dos interesses e preocupações dos diferentes stakeholders. Por exemplo, um desenvolvedor de software pode usar uma “visão de componente” para entender como as diferentes partes do Disciplina Arquitetura de Software sistema serão construídas, enquanto uma parte interessada do negócio pode usar uma “visão funcional” para entender como o sistema atenderá às necessidades dos usuários (ISO/IEEE, 2000). O padrão ISO/IEEE 1471-2000 também de�ne princípios para uma boa arquitetura de software. Isso inclui abstração, que signi�ca focar nas partes mais importantes do sistema;, separação de interesses, que signi�ca dividir o sistema em partes menores que atendam a interesses especí�cos; modularidade, que signi�ca organizar o sistema em módulos independentes; e hierarquia, que signi�ca organizar o sistema em níveis de abstração. Ao seguir o padrão ISO/IEEE 1471-2000, os desenvolvedores podem garantir que o software criado por eles atenda aos altos padrões de qualidade e con�abilidade. Também os ajuda a se comunicar melhor com outras pessoas envolvidas na construção do software. Compreendendo a arquitetura de software e o padrão ISO/IEEE 1471-2000, os desenvolvedores podem criar sistemas de software escaláveis, sustentáveis e que atendam às necessidades de seus usuários e stakeholders. Eles também podem se comunicar efetivamente com outros stakeholders, como proprietários de empresas, designers e outros desenvolvedores, usando uma linguagem e uma estrutura comuns. Adotando o padrão ISO/IEEE 1471-2000 Disciplina Arquitetura de Software O padrão ISO/IEEE 1471-2000 para arquitetura de software fornece uma estrutura que os desenvolvedores de software podem usar para projetar e construir sistemas de software con�áveis e de alta qualidade (IEEE ARCHITECTURE WORKING GROUP et al., 2000). Seguindo o padrão, desenvolvedorespodem criar softwares fáceis de manter, que atendam às necessidades de seus usuários e sejam consistentes com as melhores práticas de desenvolvimento de software. Para aplicar o padrão ISO/IEEE 1471-2000, desenvolvedores devem seguir um conjunto de etapas que servirão de orientação no processo de projeto e construção de um sistema de software. São elas, (IEEE ARCHITECTURE WORKING GROUP et al., 2000): Passo 1: entenda as diferentes visões da arquitetura de software O padrão ISO/IEEE 1471-2000 fornece diferentes visões de arquitetura de software, que mostram diferentes aspectos do sistema de software. Essas visões incluem: A visão funcional, que mostra o que o software faz e como o faz. A visão de componentes, que mostra como as diferentes partes do sistema estão conectadas. A exibição de implantação, que mostra como o software é instalado e usado. Para aplicar o padrão, desenvolvedores devem entender cada uma dessas visões e como elas se relacionam entre si. Etapa 2: de�nir a arquitetura do software Depois que os desenvolvedores entenderem as diferentes visões da arquitetura de software, eles devem criar um plano de como o sistema de software funcionará. Isso envolve a de�nição dos componentes do sistema, como eles interagem entre si e como serão implementados. Os desenvolvedores podem usar as diferentes visualizações do padrão para ajudá-los a criar esse plano. Passo 3: avalie a arquitetura Depois de criar um plano para o sistema de software, os desenvolvedores devem avaliá-lo para garantir que atenda às necessidades do software. Eles devem considerar fatores como usabilidade, desempenho e capacidade de manutenção e garantir que a arquitetura seja consistente com as melhores práticas de desenvolvimento de software. Os desenvolvedores podem usar os princípios de uma boa arquitetura de software, como: abstração, separação de preocupações, modularidade e hierarquia, para avaliar o plano e garantir que seja de alta qualidade. Etapa 4: comunicar a arquitetura Para construir um sistema de software que atenda às necessidades de seus usuários, os desenvolvedores precisam comunicar a arquitetura de forma nítida a todas as partes interessadas no projeto. Isso inclui designers, responsáveis por negócios e outros desenvolvedores. Ao comunicar de forma clara o plano, todos podem estar na mesma página e trabalhar juntos para construir o software. Etapa 5: atualizar a arquitetura À medida que o sistema de software é construído e testado, desenvolvedores podem precisar fazer alterações na arquitetura. Ao seguir o padrão ISO/IEEE 1471-2000, desenvolvedores podem garantir que quaisquer alterações feitas sejam consistentes com o plano geral do software. Eles podem avaliar as mudanças usando os princípios da boa arquitetura de software e certi�car-se Disciplina Arquitetura de Software de que as mudanças não comprometam a con�abilidade, manutenibilidade ou usabilidade do sistema de software. Em conclusão, o padrão ISO/IEEE 1471-2000 para arquitetura de software fornece um conjunto de diretrizes e princípios que os desenvolvedores de software podem usar para projetar e construir sistemas de software de alta qualidade. Seguindo as etapas descritas acima, os desenvolvedores podem criar um software fácil de manter, que atenda às necessidades de seus usuários e seja consistente com as melhores práticas de desenvolvimento de software. Videoaula: Fundamentos de arquitetura de software Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Nesta videoaula, você aprenderá sobre os princípios fundamentais da arquitetura de software e do padrão ISO/IEEE 1471-2000 em seus projetos. Você obterá uma compreensão profunda das diferentes visões da arquitetura de software e como criar um plano de arquitetura e�caz que atenda às necessidades de seus usuários. Saiba mais Disciplina Arquitetura de Software 1. Arquitetura de Software: nesse link, você poderá acessar uma aula da professora Silvia Regina Vergilio, da UFPR, sobre arquitetura de software, com de�nições de outros autores. 2. A importância do arquiteto de software: nesse link, você terá acesso a características do papel de um pro�ssional de arquitetura de software. Referências https://www.inf.ufpr.br/andrey/ci163/IntroduzArquiteturaAl.pdf https://www.inf.ufpr.br/andrey/ci163/IntroduzArquiteturaAl.pdf https://www.devmedia.com.br/a-importancia-do-arquiteto-de-software/27794 Disciplina Arquitetura de Software IEEE ARCHITECTURE WORKING GROUP et al. IEEE recommended practice for architectural description of software-intensive systems. IEEE std, v. 1471, 2000; MEDVIDOVIC, Nenad; TAYLOR, Richard N. Software architecture: foundations, theory, and practice. In: Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering – Volume 2, 2010. p. 471-472. PERRY, Dewayne E.; WOLF, Alexander L. Foundations for the study of software architecture. ACM SIGSOFT Software engineering notes, v. 17, n. 4, p. 40-52, 1992. PRESSMAN, Roger S.; MAXIM, Bruce R. Engenharia de software. Porto Alegre: Grupo A, 2021. E- book. ISBN 9786558040118. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9786558040118/. Acesso em: 14 ago. 2023; ZENKER, Aline M.; SANTOS, Jailson Costa dos; COUTO, Júlia M C.; et al. Arquitetura de sistemas. Porto Alegre: Grupo A, 2019. E-book. ISBN 9788595029767. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788595029767/. Acesso em: 14 ago. 2023. Aula 2 Decompondo a de�nição de arquitetura de software Introdução Disciplina Arquitetura de Software Olá, estudante! Nesta aula, exploraremos os conceitos fundamentais da arquitetura de software, incluindo sua de�nição, elementos-chave e processos essenciais de tomada de decisão. Também discutiremos o papel crítico que a qualidade arquitetônica e os atributos de visão desempenham na formação do sucesso de um projeto de software. Ao longo desta aula, usaremos exemplos para ilustrar como diferentes decisões arquiteturais podem impactar o processo de desenvolvimento e o produto. Ao �nal dela, você terá uma compreensão da de�nição da arquitetura de software e do papel crucial que ela desempenha na criação de software e�ciente e e�caz. Prepare-se para embarcar nessa jornada no mundo da arquitetura de software! Bons estudos! Revelando a arquitetura de software Disciplina Arquitetura de Software Elementos arquiteturais De acordo com Perry e Wolf (1992), os elementos arquiteturais são os blocos de construção da arquitetura de software. Esses elementos são os componentes básicos usados para criar a arquitetura de um sistema de software. Exemplos de elementos arquiteturais incluem módulos, componentes, conectores e modelos de dados. Os elementos arquiteturais fornecem a base para o projeto e desenvolvimento do sistema de software. A relação entre os elementos arquiteturais é crucial para o sucesso de um sistema de software. Os componentes e conectores devem trabalhar juntos para garantir que o sistema funcione conforme o esperado. Portanto, os arquitetos de software devem considerar cuidadosamente o projeto e a utilização dos elementos arquiteturais para garantir que o sistema funcione conforme esperado pelo usuário �nal (PERRY; WOLF, 1992). Compreender os diferentes elementos arquiteturais e seus relacionamentos é essencial para criar um sistema de software bem projetado. À medida que os sistemas de software se tornam cada vez mais complexos, é ainda mais difícil ter uma profunda compreensão dos elementos arquiteturais e suas interdependências. Ao dominar os elementos fundamentais da arquitetura de software, os arquitetos podem criar sistemas de software e�cientes, con�áveis e sustentáveis ao longo do tempo. Decisões arquiteturais Para Pressman e Maxim (2021), “as decisões sobre a arquitetura do software identi�cam importantes problemas do projeto e o raciocínio por trás das soluções arquiteturais escolhidas”.As decisões são realizadas por meio da organização do sistema de software, por exemplo, das escolhas de padrões arquiteturais e suas interfaces, através de suas colaborações e da composição desses elementos em subsistemas cada vez maiores. As decisões arquiteturais nada mais são do que as escolhas realizadas por arquitetos de software no planejamento da estrutura de sistemas de software. De acordo com Perry e Wolf (1992), essas decisões envolvem: Disciplina Arquitetura de Software A seleção de quais componentes usar. Como serão as interações. Quais técnicas devem ser usadas para atingir a qualidade desejada do sistema. As decisões tomadas no nível de arquitetura impactarão signi�cativamente todo o sistema de software, incluindo seu desempenho, manutenibilidade e escalabilidade. Os arquitetos devem considerar uma ampla gama de fatores, como requisitos de projeto, restrições de recursos e necessidades do usuário ao tomar decisões arquiteturais. Com decisões arquiteturais conscientes e bem pensadas, os arquitetos de software poderão criar sistemas mais con�áveis, e�cientes e econômicos. Atributos de qualidade arquiteturais Atributos de qualidade de arquitetura são os critérios que os arquitetos de software usam para avaliar a qualidade de um sistema de software. Eles re�etem as características do sistema que são as mais importantes para os stakeholders, como desempenho, segurança, con�abilidade e usabilidade. Esses atributos são críticos para garantir que o sistema de software atenda às necessidades de seus usuários, além da manutenção e durabilidade dele. De acordo com Perry e Wolf (1992), identi�car e priorizar atributos de qualidade arquiteturais é uma etapa essencial no processo de projeto de arquitetura de software. Se essa etapa for ignorada, pode resultar em sistemas de baixa qualidade, difíceis de manter e evoluir. Visão arquitetural A visão arquitetural é uma descrição de alto nível das metas e objetivos da arquitetura de um sistema de software. Ele fornece um roteiro para a equipe de desenvolvimento e os stakeholders seguirem, a �m de garantir que o sistema atenda aos objetivos esperados para o usuário �nal (PRESSMAN; MAXIM, 2021). Descodi�cando a arquitetura de software Disciplina Arquitetura de Software Exemplos de elementos arquiteturais Cada elemento arquitetural tem suas próprias responsabilidades especí�cas e interações com outros elementos, e eles determinam coletivamente o comportamento do sistema e os atributos de qualidade. De acordo com Pressman e Maxim (2021), nesse âmbito, podemos elencar três elementos fundamentais para qualquer projeto de software: 1. Componentes: unidades essenciais do sistema; podem ser de�nidos por módulos de software com responsabilidades especí�cas dentro do sistema, como gerenciamento de dados ou processamento de entrada do usuário. 2. Propriedades: elementos que são de�nidos pelas particularidades de cada componente, como desempenho e con�abilidade 3. Conectores: são identi�cados como mecanismos pelos quais os componentes se comunicam entre si, por meio de chamadas de função ou de mensagens. Para entender melhor como esses três componentes funcionam juntos, imagine um motor de carro. O próprio motor é um componente, sua potência e e�ciência de combustível são suas propriedades, e os vários tubos e cabos que o conectam ao resto do carro são seus conectores. Ao entender esses elementos e como eles interagem, os arquitetos podem projetar sistemas de software con�áveis, e�cientes e fáceis de manter. Exemplos de decisões arquiteturais Escolher uma linguagem de programação, selecionar um sistema de gerenciamento de banco de dados, determinar a escalabilidade do sistema e projetar os recursos de segurança do sistema, Disciplina Arquitetura de Software são exemplos de decisões arquiteturais realizadas pelo arquiteto de software. Vamos entender um pouco mais? Escolha de uma linguagem de programação: selecionar uma linguagem de programação pode afetar o desempenho e a manutenção do sistema, pois algumas linguagens são mais adequadas para tarefas especí�cas do que outras. Seleção de um sistema de gerenciamento de banco de dados: a escolha de um sistema de gerenciamento de banco de dados pode afetar a capacidade de o sistema armazenar e recuperar dados com e�ciência. Determinar a escalabilidade do sistema: decidir sobre a escalabilidade do sistema pode afetar a capacidade de o sistema lidar com um número crescente de usuários ou dados. Recursos de segurança: projetar os recursos de segurança do sistema pode afetar a capacidade do sistema de se proteger contra-ataques cibernéticos. Portanto, os arquitetos devem considerar cuidadosamente essas decisões e seu impacto no design e na função geral do sistema. Pressman e Maxim (2021) enfatizam a importância de tomar decisões arquiteturais de forma correta, pois os arquitetos podem garantir que o sistema de software atenda aos objetivos desejados e possa ser facilmente adaptado às mudanças nos requisitos. Por que devemos entender os atributos de qualidade arquiteturais e visão arquitetural? De acordo com Pressman e Maxim (2021), os atributos de qualidade arquiteturais referem-se às características de um sistema de software que determinam sua e�cácia e e�ciência. Exemplos incluem desempenho, segurança, con�abilidade e escalabilidade. A visão arquitetural, por outro lado, refere-se a um entendimento compartilhado das metas e objetivos de um sistema de software, que orienta seu projeto e implementação. Inclui elementos como a �nalidade, o escopo e os stakeholders do sistema. Para obter um sistema de software bem-sucedido, é crucial considerar os atributos de qualidade arquitetural e a visão desde o início do processo de design. Ao fazer isso, podemos garantir que o sistema atenda aos seus requisitos funcionais e não funcionais, alinhando-se com os objetivos gerais do projeto. Vamos entender arquitetura mais a fundo? Disciplina Arquitetura de Software A arquitetura de software é uma parte essencial do desenvolvimento de software. Envolve o uso de elementos arquiteturais, decisões arquitetônicas, visão arquitetural e atributos de qualidade para desenvolver um sistema de software que atenda aos requisitos do usuário. Elementos de arquitetura referem-se aos componentes, propriedades e conectores que compõem um sistema de software. As decisões de arquitetura, por outro lado, são as escolhas feitas pelos arquitetos de software para alcançar as propriedades desejadas do sistema, como con�abilidade, segurança e capacidade de manutenção (PRESSMAN; MAXIM, 2021). A visão arquitetural refere-se aos objetivos de longo prazo de um sistema de software, enquanto os atributos de qualidade referem-se aos requisitos não funcionais do sistema, como desempenho, escalabilidade e usabilidade. Por exemplo, um sistema de software projetado para uma plataforma de comércio eletrônico deve ter alta disponibilidade, con�abilidade e segurança para garantir a satisfação do cliente. Para aplicar esses conceitos de forma e�caz, os arquitetos de software precisam usar uma combinação de ferramentas, princípios e classi�cações. De acordo com Pressman e Maxim (2021) a Uni�ed Modeling Language (UML) é uma dessas ferramentas que os arquitetos usam para projetar sistemas de software. O modelo de visão 4+1, desenvolvido por Kruchten (1995), é outra ferramenta que ajuda os arquitetos a projetar sistemas de múltiplas perspectivas, como visão lógica, visão de processo, visão física e visão de desenvolvimento. Os princípios que os arquitetos de software usam para projetar sistemas de software incluem modularidade, encapsulamento, abstração e separação de preocupações. Esses princípios garantem que os sistemas de software sejam fáceis de manter, entender e modi�car. A Disciplina Arquitetura de Software classi�cação dos estilos de arquitetura de software inclui camadas, cliente-servidor, microsserviços e arquitetura orientada a eventos. Vamos para um exemplo prático? Vamos imaginar que uma equipe esteja construindo uma nova plataformade comércio eletrônico. Sua visão arquitetural é criar uma plataforma escalável, segura e fácil de usar, e que possa lidar com um grande volume de transações. Para atingir essa visão, eles tomam várias decisões arquiteturais, como usar uma arquitetura baseada em micros serviços e implantar a plataforma em uma infraestrutura baseada em nuvem. Para implementar essas decisões, eles identi�cam vários elementos arquiteturais, como: autenticação do usuário, processamento de pagamentos, catálogo de produtos e funcionalidade de pesquisa. Eles de�nem as propriedades desses elementos, como desempenho, disponibilidade e segurança. Também determinam os conectores entre esses elementos, como APIs e �las de mensagens, para garantir a comunicação e a coordenação adequadas entre eles. Finalmente, eles de�nem vários atributos de qualidade arquiteturais que desejam que a plataforma tenha, como alto desempenho, disponibilidade, segurança e usabilidade. Eles desenvolvem e implementam casos de teste e métricas de desempenho para avaliar a conformidade da plataforma com esses atributos. Em conclusão, a arquitetura de software desempenha um papel crítico no desenvolvimento de sistemas de software que atendam aos requisitos dos usuários. Os arquitetos devem usar uma combinação de ferramentas, princípios e classi�cações para projetar sistemas de software e�cazes. Eles também devem tomar decisões arquiteturais corretas e manter uma visão arquitetural nítida em mente para garantir o sucesso do sistema a longo prazo. Por �m, os arquitetos devem equilibrar os atributos de qualidade arquitetural para garantir que o sistema funcione de maneira ideal enquanto atende aos requisitos do usuário (PRESSMAN; MAXIM, 2021). Seguindo essas diretrizes, os arquitetos podem desenvolver sistemas de software con�áveis, seguros e e�cientes. Videoaula: Decompondo a de�nição de arquitetura de software Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Nesta videoaula, vamos de�nir as decisões arquiteturais, a visão arquitetural, os elementos arquiteturais e os atributos de qualidade. Também vamos explorar a importância desses conceitos na engenharia de software e como eles podem ser aplicados para criar sistemas de software e�cazes e e�cientes. Esta aula fornecerá insights valiosos de práticas para melhorar suas habilidades de arquitetura de software. Disciplina Arquitetura de Software Saiba mais 1. Arquitetura de Software:. Aprenda os conceitos e a importância da arquitetura de software. 2. Arquitetura de Software: atributos para decisões do projeto arquitetural. Conheça um conjunto de informações que podem subsidiar decisões de projeto arquitetural de sistemas de software. Referências https://www.devmedia.com.br/arquitetura-de-software-desenvolvimento-orientado-para-arquitetura/8033 https://www.devmedia.com.br/arquitetura-de-software-atributos-para-decisoes-do-projeto-arquitetural/16121 https://www.devmedia.com.br/arquitetura-de-software-atributos-para-decisoes-do-projeto-arquitetural/16121 Disciplina Arquitetura de Software KRUCHTEN, Philippe B. The 4+ 1 view model of architecture. IEEE software, v. 12, n. 6, p. 42-50, 1995. PERRY, Dewayne E.; WOLF, Alexander L. Foundations for the study of software architecture. ACM SIGSOFT Software engineering notes, v. 17, n. 4, p. 40-52, 1992; PRESSMAN, Roger S.; MAXIM, Bruce R. Engenharia de software. Porto Alegre: Grupo A, 2021. E- book. ISBN 9786558040118. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9786558040118/. Acesso em: 14 ago 2023; ZENKER, Aline M.; SANTOS, Jailson Costa dos; COUTO, Júlia M C.; et al. Arquitetura de sistemas. Porto Alegre: Grupo A, 2019. E-book. ISBN 9788595029767. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788595029767/. Acesso em: 14 ago 2023. Aula 3 Visões da arquitetura Introdução Disciplina Arquitetura de Software Olá, estudante! Nesta aula, exploraremos o conceito de documento de arquitetura e sua importância no desenvolvimento de software. Discutiremos os benefícios que ela traz, as di�culdades envolvidas e por que documentar a arquitetura de software é crucial. Então, do que se trata este documento de arquitetura? É como um projeto que descreve como um sistema de software deve ser construído. Isso nos ajuda a organizar nossas ideias, comunicar de forma e�caz e orientar o processo de desenvolvimento. A documentação da arquitetura de software tem seus benefícios. Traz clareza para a equipe, facilitando o entendimento e a manutenção do sistema. Também permite escalabilidade, garantindo que o software possa crescer com o negócio. Agora, você deve estar se perguntando, por que deveríamos nos preocupar em documentar a arquitetura? Vamos descobrir juntos? Então, prepare-se para explorar o fascinante mundo da arquitetura de software e descobrir como ela molda o cenário digital! Bons estudos! Desvendando as visões de arquitetura Disciplina Arquitetura de Software Documento de arquitetura De acordo com Pressman e Bruce (2014), o documento de arquitetura é um artefato vital, um modelo para projetar e construir sistemas de software. Ele fornece uma visão de alto nível da estrutura, componentes e interações do sistema. O documento de arquitetura serve como referência para desenvolvedores, interessados e futuros mantenedores, garantindo um entendimento compartilhado do design do sistema. Agora, vamos nos aprofundar nos benefícios de documentar a arquitetura de software. Wiegers e Beatty (2013) enfatizam que uma arquitetura bem documentada traz clareza ao projeto. O documento de arquitetura ajuda as partes interessadas a visualizar a estrutura e a funcionalidade do sistema, reduzindo mal-entendidos e permitindo uma comunicação e�caz entre os membros da equipe. Além disso, documentar a arquitetura do software aumenta a capacidade de manutenção do sistema, conforme mencionado por Pressman e Bruce (2014). Ao documentar a arquitetura, os desenvolvedores podem compreender facilmente o design do sistema, permitindo solução e�ciente dos problemas, correção de bugs e aprimoramentos. Esta documentação atua como um ponto de referência, orientando futuras modi�cações e garantindo que o sistema permaneça adaptável ao longo do tempo. No entanto, documentar a arquitetura de software pode apresentar desa�os. Wiegers e Beatty (2013) observam que capturar a complexidade da arquitetura com precisão é uma dessas di�culdades. O documento de arquitetura deve fornecer uma visão abrangente do sistema, mantendo-se conciso e compreensível. Equilibrar esses requisitos pode ser desa�ador, exigindo atenção cuidadosa aos detalhes e habilidades de comunicação e�cazes. Disciplina Arquitetura de Software Manter a exatidão da documentação é outro desa�o destacado por Pressman e Bruce (2014). Os sistemas de software evoluem e as atualizações são feitas para atender a novos requisitos ou para melhorar a funcionalidade existente. É crucial manter o documento de arquitetura atualizado, re�etindo essas mudanças com precisão. Deixar de fazer isso pode levar a confusão e a inconsistências entre a arquitetura documentada e o sistema real. Agora, você pode se perguntar, por que é importante documentar a arquitetura de software? Segundo Pressman e Bruce (2014), a documentação promove o compartilhamento do conhecimento dentro da equipe. O documento garante que todos os envolvidos tenham uma compreensão clara da estrutura e funcionalidade do sistema. Esse conhecimento compartilhado aprimora a colaboração, minimiza a dependência de indivíduos especí�cos e promove a comunicação e�caz. Além disso, a documentação da arquitetura de software permite a rastreabilidade, conforme descrito por Booch et al. (2005). O documento de arquitetura permite a rastreabilidade das decisões de projeto e a lógica por trás delas. Ele fornece um registro histórico da evolução do sistema, ajudando as futurasequipes a aprender com as experiências passadas e a tomar decisões informadas. A documentação da arquitetura de software dá suporte à evolução do sistema, conforme enfatizado por Pressman e Bruce (2014). À medida que o sistema cresce e muda, o documento de arquitetura atua como um guia para incorporar novos recursos, modi�car os existentes ou atender a requisitos emergentes. Ele garante que essas alterações se alinhem com a arquitetura geral, evitando inconsistências e preservando a integridade do sistema. Explorando documentos arquiteturais Disciplina Arquitetura de Software Exemplos de documentos arquiteturais De acordo com Clements et al. (2002), os documentos arquiteturais desempenham um papel fundamental no desenvolvimento de software. Vejamos alguns exemplos desses documentos: Diagrama de arquitetura: esse diagrama mostra a organização dos componentes do sistema e suas relações. Por exemplo, em um sistema de comércio eletrônico, o diagrama de arquitetura pode incluir componentes como banco de dados, servidor web, aplicativo de front-end e sistemas externos de pagamento. Esses componentes são interligados por meio de interfaces e troca de dados. Documentação de interfaces: esse tipo de documentação descreve como os diferentes componentes se comunicam entre si. No sistema de comércio eletrônico, por exemplo, pode haver uma interface entre o aplicativo de front-end e o servidor web, de�nindo os métodos e parâmetros necessários para a troca de informações. Modelo de componentes: esse modelo descreve os diferentes componentes do sistema e suas interações. Em uma rede social, por exemplo, o modelo de componentes pode incluir componentes como per�l do usuário, feed de notícias, sistema de mensagens e sistema de busca. Fluxo de dados: esse tipo de documento mostra como os dados são processados e movimentados dentro do sistema. Em um sistema de gerenciamento de estoque, por exemplo, o �uxo de dados pode descrever como os pedidos de compra são recebidos, processados e registrados no banco de dados. Disciplina Arquitetura de Software Características dos documentos arquiteturais Para Kruchten (1995), os documentos arquiteturais possuem características importantes que garantem sua e�cácia como ferramentas de comunicação e referência. São elas: 1. Clareza e compreensibilidade: os documentos arquiteturais devem ser elaborados de forma clara e compreensível para todos os envolvidos no projeto, independentemente do nível de conhecimento técnico. A linguagem utilizada deve ser acessível, evitando jargões e terminologia técnica complexa, permitindo que desenvolvedores, gerentes de projeto e clientes entendam facilmente a arquitetura do sistema. 2. Atualização e precisão: os documentos arquiteturais devem ser atualizados conforme o sistema evolui. É importante re�etir as mudanças nos requisitos, funcionalidades e componentes na documentação. Manter a documentação atualizada garante sua relevância e precisão, evitando inconsistências entre a documentação e o sistema real. 3. Coerência e consistência: os documentos arquiteturais devem manter coerência e consistência interna. As informações apresentadas nos diferentes documentos e diagramas devem estar alinhadas e não apresentar contradições. Isso garante a con�abilidade da documentação como referência para o sistema em desenvolvimento. 4. Abordagem modular: os documentos arquiteturais devem adotar uma abordagem modular, destacando as diferentes partes do sistema e suas interações. Isso permite uma compreensão clara da estrutura do sistema, identi�cando componentes, módulos e camadas envolvidas. A abordagem modular facilita a manutenção e a evolução do sistema, pois as partes podem ser modi�cadas independentemente umas das outras. 5. Integração com outros artefatos: os documentos arquiteturais devem ser integrados a outros artefatos e documentos relacionados ao desenvolvimento do software, como requisitos, casos de uso, diagramas de sequência e planos de testes. Essa integração proporciona uma visão completa do sistema e garante consistência entre as diferentes partes do processo de desenvolvimento. Essas características garantem que os documentos arquiteturais sejam valiosos recursos para comunicar e compreender a arquitetura do sistema, permitindo que todos os envolvidos tenham uma visão clara e consistente dele. Um exemplo de aplicação para o documento de arquitetura Disciplina Arquitetura de Software Imagine que você faz parte de uma equipe de desenvolvimento de software em uma empresa de tecnologia. Vocês estão trabalhando em um projeto para criar um sistema de gerenciamento de pedidos online para uma empresa de comércio eletrônico. O objetivo é permitir que os clientes façam pedidos de forma fácil e e�ciente, enquanto a empresa acompanha e gerencia os pedidos de forma automatizada. De acordo com Pressman e Bruce (2014), para garantir o sucesso do projeto, é crucial que todos os membros da equipe tenham uma compreensão clara da estrutura e das interações do sistema. Nesse sentido, você decide utilizar um documento de arquitetura com várias visões dentro dele para representar e documentar as informações essenciais sobre o sistema. Vamos ver como fazer isso? Um dos documentos arquiteturais que você cria é o diagrama de arquitetura. Nesse diagrama, você representa gra�camente a estrutura geral do sistema, incluindo os principais componentes e como eles se relacionam entre si. Por exemplo, você identi�ca componentes como a interface do usuário, o banco de dados, o servidor web e o sistema de pagamentos. Você mostra como esses componentes estão interconectados e como as informações �uem entre eles. Isso ajuda a equipe a visualizar a arquitetura do sistema e entender como os diferentes componentes se relacionam para fornecer a funcionalidade desejada. Além disso, você cria uma documentação de interfaces. Nessa documentação, você descreve em detalhes como os diferentes componentes se comunicam entre si. Por exemplo, você explica como a interface do usuário interage com o servidor web, quais Disciplina Arquitetura de Software dados são transmitidos e quais ações são realizadas. Você também descreve como o servidor web se comunica com o banco de dados para armazenar e recuperar informações. Essa documentação de interfaces é fundamental para garantir a integração e a correta comunicação entre os componentes do sistema. Outro documento importante que você desenvolve é o modelo de componentes. Nesse modelo, você descreve cada um dos principais componentes do sistema em detalhes. Por exemplo, para o componente de interface do usuário, você descreve as diferentes telas e funcionalidades disponíveis para os usuários. Para o componente de banco de dados, você descreve as tabelas e os relacionamentos entre elas. Esse modelo de componentes ajuda a equipe a entender as responsabilidades de cada componente e como eles se encaixam no contexto geral do sistema. Além disso, você cria um �uxo de dados para ilustrar como as informações são processadas e movimentadas dentro do sistema. Por exemplo, você descreve o �uxo desde o momento em que um cliente faz um pedido na interface do usuário, passando pela validação e processamento no servidor web, até o armazenamento no banco de dados. Esse �uxo de dados ajuda a equipe a entender como as informações percorrem o sistema e como são transformadas ao longo do processo. Ao desenvolver esses documentos arquiteturais detalhados, você garante que todos os membros da equipe tenham uma visão compartilhada e precisa do sistema em desenvolvimento. Esses documentos servem como uma referência fundamental durante todo o ciclo de vida do projeto, desde o planejamento até a implementação e a manutenção. Eles facilitam a comunicação e a colaboração entre os membros da equipe, além de fornecerem uma base sólida para tomar decisões de projeto e realizar ajustes quando necessário. Documentos arquiteturais promovem a colaboração e�caz, facilitam a tomada de decisões e contribuem para o sucesso do projeto como um todo. Videoaula;Visões da arquitetura Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Convidamos você para uma videoaula sobre documentos arquiteturais na prática. Aprenda a projetar sistemas de software de forma e�ciente e a entender sua estrutura e interações. Compartilharemos um exemplo real e explicaremos como criar e utilizar esses documentos. Descubra as melhores práticas e como elas impulsionam o desenvolvimento de software. Não perca essa oportunidade de expandir seus conhecimentos e se destacar na área! Disciplina Arquitetura de Software Saiba mais Aprofunde seus conhecimentos com: Uma abordagem para Inspeção de Documentos Arquiteturais Baseada em Checklist. Princípios e Práticas em Arquitetura de Software. Referências https://www.cos.ufrj.br/index.php/pt-BR/publicacoes-pesquisa/details/15/1922 https://www.machado.mg.gov.br/files/concursos/1cf11cf161fe4eb688dfeec880d6b4d9.pdf Disciplina Arquitetura de Software BOOCH, Grady; et al. The uni�ed modeling language. Unix Review, v. 14, n. 13, p. 5, 1996. CLEMENTS, Paul C. Software architecture in practice. Pittsburgh: Software Engineering Institute, 2002. KRUCHTEN, Philippe B. The 4+ 1 view model of architecture. IEEE software, v. 12, n. 6, p. 42-50, 1995. PRESSMAN, Roger S.; MAXIM, Bruce R. Engenharia de software. Porto Alegre: Grupo A, 2021. E- book. ISBN 9786558040118. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9786558040118/. Acesso em: 14 ago. 2023. PRESSMAN, R. S.; BRUCE, M. Software Engineering: A Practitioner’s Approach. 8a edição. Nova York: McGraw-Hill Education, 2014. WIEGERS, Karl; BEATTY, Joy. Software requirements. Londres: Pearson Education, 2013. Aula 4 Stakeholders Introdução Disciplina Arquitetura de Software Olá, estudante! Nesta aula, mergulharemos no mundo dos stakeholders e exploraremos sua importância no desenvolvimento de projetos. Os stakeholders são indivíduos ou grupos que possuem interesse ou são afetados pelo resultado de um projeto. Eles desempenham um papel crucial na de�nição de requisitos, tomada de decisões e sucesso geral do projeto. Ao longo de nossa jornada, examinaremos os diferentes tipos de stakeholders, suas expectativas e como gerenciar efetivamente suas necessidades. Vamos discutir estratégias de engajamento e comunicação, além de abordar os desa�os e benefícios de envolver os stakeholders desde o início até o �m do projeto. Prepare-se para aprender e descobrir como maximizar a colaboração e o suporte dos stakeholders. Bons estudos! De�nição de stakeholders Disciplina Arquitetura de Software Quando falamos de um sistema de software, é importante entender que existem várias pessoas e grupos que têm interesse ou são afetados por ele. Essas pessoas e grupos são chamados de interessados, ou stakeholders. Mas quem são eles? Os stakeholders são indivíduos, ou organizações, que têm algum tipo de interesse no sistema de software. Isso signi�ca que eles podem se bene�ciar ou serem afetados pelo sistema de alguma forma. Os interessados podem incluir clientes, usuários �nais, gerentes, desenvolvedores, analistas de negócios e até mesmo fornecedores de hardware ou software. Agora que sabemos quem são os interessados, é importante entender a importância deles. Os interessados desempenham um papel fundamental no desenvolvimento e sucesso de um sistema de software. Eles têm necessidades, expectativas e preocupações especí�cas em relação ao sistema. O Guia PMBOK (2013), que é uma referência importante na área de gerenciamento de projetos, aborda os interessados como parte do processo de gerenciamento das partes interessadas. Ele destaca a importância de identi�car, analisar e gerenciar os interessados ao longo de todo o ciclo de vida do projeto de software. Os interessados têm uma grande in�uência nos atributos de qualidade de um sistema de software. Por exemplo, os usuários �nais desejam um sistema fácil de usar, com uma interface amigável. Os clientes podem estar preocupados com a con�abilidade e segurança do sistema. Os gerentes podem estar interessados na escalabilidade e e�ciência do sistema. Disciplina Arquitetura de Software Existem diferentes tipos de interessados, cada um com suas próprias necessidades e expectativas em relação ao sistema de software. Alguns exemplos de tipos de interessados incluem: 1. Clientes: são aqueles que solicitam o desenvolvimento do sistema de software e têm interesse direto no seu funcionamento. Eles são responsáveis por de�nir os requisitos e fornecer orientações sobre o que esperam do sistema. 2. Usuários �nais: são as pessoas que realmente utilizarão o sistema de software. Eles têm interesse em um sistema intuitivo, fácil de usar e que atenda às suas necessidades especí�cas. 3. Desenvolvedores: são os pro�ssionais responsáveis por construir o sistema de software. Eles têm interesse em um sistema bem documentado, com código de qualidade e que possa ser facilmente mantido e atualizado. 4. Analistas de negócios: são responsáveis por entender as necessidades dos clientes e traduzi-las em requisitos claros para o sistema de software. Eles têm interesse em um sistema que atenda aos requisitos de negócio e agregue valor para a organização. 5. Fornecedores: são as empresas ou indivíduos que fornecem hardware, software ou serviços relacionados ao sistema de software. Eles têm interesse em um sistema compatível com suas soluções e que possa integrar-se de forma e�ciente ao ambiente existente. A relação entre os interessados e os atributos de qualidade é fundamental para o sucesso do sistema de software. Cada interessado tem suas próprias necessidades e expectativas em relação ao sistema, e é importante considerar esses aspectos ao de�nir e desenvolver os atributos de qualidade do sistema. Em resumo, os interessados são pessoas ou grupos que têm interesse ou são afetados por um sistema de software. Eles desempenham um papel fundamental no desenvolvimento e sucesso do sistema, in�uenciando os atributos de qualidade. Identi�car, analisar e gerenciar os interessados ao longo do projeto é essencial para garantir o alinhamento de expectativas e a satisfação de todas as partes envolvidas. Partes interessadas no projeto Disciplina Arquitetura de Software Na gestão de projetos, compreender o papel das partes interessadas é fundamental para o sucesso de qualquer empreendimento. As partes interessadas são indivíduos ou grupos que têm interesse, in�uência ou são afetados pelo projeto. Elas podem variar de acordo com o projeto em questão, mas geralmente incluem clientes, membros da equipe, gerentes, acionistas, usuários �nais e até mesmo a comunidade em que o projeto está inserido. Cada uma dessas partes interessadas possui expectativas e necessidades especí�cas que devem ser levadas em consideração ao longo do ciclo de vida do projeto. Uma parte importante do papel da equipe de projeto é identi�car e engajar as partes interessadas de forma e�caz. Isso envolve a compreensão das suas necessidades e expectativas, bem como a comunicação clara e constante para manter todas as partes alinhadas. Uma comunicação e�caz é essencial para garantir que as informações relevantes sejam compartilhadas, o feedback seja ouvido e quaisquer problemas ou preocupações sejam abordados prontamente. A comunicação também permite que as partes interessadas se sintam envolvidas e tenham con�ança de que suas perspectivas estão sendo consideradas. A Figura a seguir, presente no Guia PMBOK (2013), ilustra a relação entre o projeto, a equipe e as diversas partes interessadas, destacando a importância de uma comunicação e�caz e um relacionamento sólido para o sucesso do projeto. Disciplina Arquitetura de Software Relação entre as partes interessadas e o projeto. Fonte: PMBOK (2013, p. 25). As partes interessadas desempenham um papel fundamental no sucesso do projeto, pois podem fornecer informações valiosas,in�uenciar decisões importantes e contribuir com recursos. Por exemplo, os clientes são partes interessadas cruciais, pois solicitam o projeto e �nanciam sua execução. Eles têm interesse direto no sucesso do projeto e esperam que suas necessidades sejam atendidas de forma adequada. Os usuários �nais também são partes interessadas essenciais, pois são aqueles que utilizarão o produto do projeto. Satisfazer suas expectativas é vital para garantir a aceitação e a utilidade do produto. O Guia PMBOK (2013) é uma referência importante para a gestão de projetos e fornece diretrizes especí�cas para o gerenciamento das partes interessadas. O guia destaca a importância de identi�car todas as partes interessadas relevantes, analisar suas expectativas e necessidades, bem como determinar o nível de in�uência e poder que cada uma possui. Essa análise é fundamental para priorizar as partes interessadas e alocar recursos de forma e�ciente. Além disso, as partes interessadas podem ser classi�cadas de acordo com sua in�uência e poder no projeto. Algumas têm um impacto direto e signi�cativo, enquanto outras têm uma in�uência indireta ou menos expressiva. É essencial identi�car e envolver as partes interessadas com maior poder e in�uência, pois suas decisões e ações podem afetar consideravelmente o andamento e o resultado do projeto. Outro aspecto importante é a compreensão dos diferentes interesses das partes interessadas. Cada uma delas tem seus próprios objetivos e expectativas em relação ao projeto. Por exemplo, alguns podem estar mais preocupados com o resultado, enquanto outros podem enfatizar o cumprimento dos prazos, controle de custos ou qualidade do produto. Conhecer essas Disciplina Arquitetura de Software expectativas permite que a equipe do projeto desenvolva estratégias adequadas para atender às necessidades de todas as partes interessadas envolvidas. Stakeholders na prática Na gestão de projetos, os stakeholders desempenham um papel fundamental. Eles são indivíduos ou grupos que têm interesse, in�uência ou podem ser afetados pelo projeto. São essenciais para o sucesso do projeto, pois sua participação e suporte são fundamentais para alcançar os objetivos estabelecidos. Para entender melhor o conceito de stakeholders, vamos considerar um exemplo prático de um projeto de desenvolvimento de um novo produto tecnológico, como um smartphone avançado. Nesse caso, os stakeholders podem incluir: 1. Clientes: são os consumidores �nais do produto, aqueles que vão comprar e utilizar o smartphone. Eles têm interesse direto no produto e suas necessidades devem ser atendidas para garantir a satisfação do cliente e o sucesso do projeto. 2. Acionistas: são os investidores ou proprietários da empresa que está desenvolvendo o smartphone. Eles têm interesse no retorno �nanceiro do projeto e esperam que o produto seja bem-sucedido no mercado, gerando lucro para a empresa. 3. Equipe do projeto: são os pro�ssionais envolvidos no desenvolvimento do smartphone, como engenheiros, designers, especialistas em marketing, entre outros. Eles têm interesse Disciplina Arquitetura de Software em entregar um produto de qualidade dentro do prazo e orçamento estabelecidos. 4. Fornecedores: são as empresas ou indivíduos que fornecem os componentes, materiais e serviços necessários para o desenvolvimento do smartphone. Eles têm interesse em fornecer produtos de alta qualidade e cumprir os prazos acordados. 5. Governo e reguladores: são as entidades governamentais e órgãos reguladores responsáveis por estabelecer normas e regulamentos para a indústria de tecnologia. Eles têm interesse em garantir que o produto atenda aos requisitos de segurança, qualidade e conformidade. �. Comunidade: é a comunidade local onde a empresa está sediada ou onde o produto será lançado. A comunidade pode ter interesse em questões como impacto ambiental, empregos gerados pelo projeto, responsabilidade social da empresa, entre outros. A interação e o envolvimento desses stakeholders ao longo do projeto são cruciais para o seu sucesso. A comunicação e�caz é essencial para entender suas expectativas, necessidades e preocupações. Além disso, é importante estabelecer canais de comunicação abertos e transparentes para garantir que todas as partes interessadas sejam ouvidas e suas contribuições sejam consideradas. No exemplo do projeto do smartphone, os stakeholders podem ser envolvidos em várias fases, desde a concepção e design do produto até sua produção, lançamento e suporte pós-venda. Por exemplo, os clientes podem ser convidados a participar de pesquisas de mercado e testes de usabilidade para garantir que o produto atenda às suas necessidades e expectativas. Os acionistas podem acompanhar o progresso do projeto por meio de relatórios e reuniões periódicas. A equipe do projeto pode se comunicar regularmente com os fornecedores para garantir que os materiais e componentes sejam entregues no prazo. Em resumo, os stakeholders desempenham um papel fundamental na gestão de projetos. Eles têm interesses, in�uência e expectativas que podem impactar diretamente o sucesso do projeto. É essencial identi�car, engajar e gerenciar os stakeholders de forma e�caz, estabelecendo uma comunicação clara e estreitando relacionamentos sólidos. Um envolvimento adequado dos stakeholders aumenta as chances de alcançar os objetivos do projeto e garantir a satisfação de todas as partes envolvidas. Videoaula: Stakeholders Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Nesta videoaula, vamos explorar exemplos reais de projetos e discutir como identi�car, analisar e gerenciar os stakeholders de forma e�caz. Aprenda como selecionar, engajar e satisfazer as Disciplina Arquitetura de Software diferentes partes interessadas, garantindo o sucesso do projeto. Não perca essa oportunidade de aprimorar suas habilidades em gestão de stakeholders! Saiba mais Aprofunde seus conhecimentos com: 1. Gestão de stakeholders: o que é, por que é importante fazer e 4 dicas para implementar na sua empresa. 2. Stakeholders, o que são, exemplos, importância e tipos. Referências https://www.siteware.com.br/gestao-estrategica/gestao-de-stakeholders/ https://www.siteware.com.br/gestao-estrategica/gestao-de-stakeholders/ https://neilpatel.com/br/blog/stakeholders-o-que-sao/ https://neilpatel.com/br/blog/stakeholders-o-que-sao/ Disciplina Arquitetura de Software PMBOK. Um guia de conhecimento em gerenciamento de projetos. São Paulo: Editora Saraiva, 2014. E-book. ISBN 9788502223745. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788502223745/. Acesso em: 14 ago. 2023. Aula 5 Revisão da Unidade Revisão da introdução à arquitetura de software Disciplina Arquitetura de Software Olá, estudante! A habilidade de compreender e de�nir a arquitetura de software é de extrema importância para os pro�ssionais da área de desenvolvimento. Uma das abordagens que nos auxiliam nessa tarefa é o padrão ISO/IEEE 1471-2000. Vamos explorar os conceitos fundamentais desse padrão e como eles nos ajudam a criar sistemas de alta qualidade. A arquitetura de software é a estrutura organizacional fundamental de um sistema, englobando seus componentes, interações e restrições. Ela nos dá uma visão abrangente do sistema, permitindo compreender seus elementos e relacionamentos. Nesse contexto, o padrão ISO/IEEE 1471-2000 fornece uma abordagem sistemática para a de�nição, documentação e comunicação da arquitetura de software. Um dos principais aspectos abordados pelo padrão é a identi�cação dos stakeholders. Stakeholders são as partes interessadas no sistema, como usuários, clientes, desenvolvedores, gerentes, entre outros. Compreender suas necessidades e expectativas é essencial para de�nir uma arquitetura que atenda aos requisitos e objetivos estabelecidos. O padrão nos orienta a identi�car e descrever os stakeholders deforma clara e precisa. Outro conceito importante do padrão é a de�nição de visões arquiteturais. As visões arquiteturais são perspectivas especí�cas da arquitetura que permitem uma compreensão mais aprofundada do sistema. Cada visão representa uma preocupação ou interesse particular dos stakeholders. Por exemplo, uma visão pode focar na segurança, enquanto outra na usabilidade. O padrão ISO/IEEE 1471-2000 nos guia na criação de diferentes visões arquiteturais para representar essas perspectivas. Além disso, o padrão destaca a importância da documentação arquitetural. A documentação é essencial para comunicar e compartilhar a arquitetura com a equipe de desenvolvimento e os Disciplina Arquitetura de Software stakeholders envolvidos no projeto. Ela proporciona um registro claro e compreensível da estrutura, comportamento e restrições do sistema. A documentação arquitetural pode incluir diagramas, descrições textuais, especi�cações técnicas e outros artefatos relevantes. Ao aplicar o padrão ISO/IEEE 1471-2000, somos capazes de de�nir a arquitetura de software de forma precisa e abrangente. Consideramos as necessidades e expectativas dos stakeholders, desenvolvemos visões arquiteturais que representam suas perspectivas e documentamos a arquitetura de maneira clara e acessível. Isso resulta em sistemas mais robustos, �exíveis e de alta qualidade. Em resumo, a competência de compreender e de�nir a arquitetura de software utilizando o padrão ISO/IEEE 1471-2000 é essencial para os pro�ssionais da área. A aplicação desse padrão nos permite criar sistemas que atendam às expectativas dos stakeholders e evoluam de forma contínua. Portanto, é fundamental estudar e aplicar os conceitos desse padrão em nossos projetos, visando à excelência na arquitetura de software. Esperamos que esse resumo tenha sido útil para você compreender melhor esse tema. Continue se aprofundando nos conceitos e pratique a aplicação do padrão ISO/IEEE 1471-2000 em seus projetos. Com o tempo e a experiência, você se tornará um arquiteto de software habilidoso na de�nição de arquiteturas sólidas e e�cientes. Videoaula: Revisão da Unidade Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Nossa videoaula fará um resumo sobre a de�nição da arquitetura de software usando o padrão ISO/IEEE 1471-2000. Você aprenderá os conceitos-chave, termos e técnicas necessárias para compreender e documentar arquiteturas de software de forma precisa e abrangente. Descubra como identi�car stakeholders, visões arquiteturais e documentos arquiteturais signi�cativos. Não perca a oportunidade de fortalecer seus conhecimentos e aprimorar suas habilidades na área de arquitetura de software. Junte-se a mim nessa jornada de aprendizado! Estudo de Caso Disciplina Arquitetura de Software Arquitetura de software para uma plataforma de streaming Descrição do cenário: você foi contratado como arquiteto de software por uma empresa de entretenimento para desenvolver uma nova plataforma de streaming de vídeos. O objetivo é criar uma arquitetura sólida e e�ciente para o aplicativo, que possa lidar com muitos usuários e fornecer uma experiência de streaming de alta qualidade. O foco é utilizar o padrão IEEE 1471- 2000 para a elaboração da arquitetura, considerando as visões arquiteturais, envolvimento dos stakeholders e documentos arquiteturais. Situação-problema 1: um dos desa�os enfrentados é garantir a escalabilidade da plataforma para lidar com muitos usuários simultâneos. Como arquiteto de software, você precisa de�nir uma visão arquitetural que aborde essa questão, considerando a distribuição de carga, o dimensionamento horizontal e a utilização de tecnologias escaláveis. Como garantir que a plataforma possa crescer de forma e�ciente e atender à demanda de um grande público? Situação-problema 2: outro desa�o é assegurar a disponibilidade e con�abilidade do serviço de streaming. A plataforma deve ser capaz de lidar com falhas de componentes e garantir a continuidade do serviço sem interrupções para os usuários. Como arquiteto de software, você precisa de�nir uma visão arquitetural que aborde a resiliência do sistema, incluindo a utilização de redundância, monitoramento e recuperação de falhas. Como garantir que a plataforma seja con�ável e ofereça uma experiência de streaming contínua? Situação-problema 3: a plataforma de streaming precisa oferecer uma ampla variedade de conteúdos, incluindo vídeos, músicas e podcasts. Além disso, é necessário fornecer recursos como recomendações personalizadas e a capacidade de criação de listas de reprodução. Como arquiteto de software, você precisa de�nir uma visão arquitetural que aborde a �exibilidade e a extensibilidade do sistema, permitindo a inclusão de novos tipos de conteúdo e recursos adicionais. Como garantir que a plataforma seja adaptável às mudanças nas demandas dos usuários e possa ser facilmente expandida no futuro? Disciplina Arquitetura de Software Estudante, utilize as ferramentas vistas em aula para indicar como resolver as questões abordadas nas situações propostas, aplicando os conhecimentos adquiridos. Utilize essas ferramentas como insumos para identi�car soluções adequadas e apresentar uma abordagem e�caz para lidar com os desa�os apresentados nas situações propostas. Neste estudo de caso, você terá a oportunidade de enfrentar desa�os reais ao desenvolver a arquitetura de software para uma plataforma de streaming. Essa experiência prática vai estimular sua leitura, raciocínio lógico e capacidade de resolver problemas, enquanto fortalece seus conhecimentos teóricos. Para começar, é fundamental entender a importância de uma arquitetura sólida e e�ciente para lidar com muitos usuários e fornecer uma experiência de streaming de alta qualidade. Ao aplicar o padrão IEEE 1471-2000, você terá uma estrutura guia para elaborar a arquitetura, considerando as visões arquiteturais, envolvimento dos stakeholders e documentos arquiteturais. Ao analisar as situações-problema, você perceberá a necessidade de uma arquitetura escalável, capaz de suportar o crescimento da plataforma. Isso envolve distribuição de carga, dimensionamento horizontal e utilização de tecnologias escaláveis. Além disso, a disponibilidade e con�abilidade do serviço são aspectos cruciais a serem considerados, incluindo a resiliência do sistema, redundância, monitoramento e recuperação de falhas. Outra questão é a �exibilidade e extensibilidade da plataforma. É essencial projetar uma arquitetura que permita a inclusão de novos tipos de conteúdo e recursos adicionais, garantindo a adaptabilidade às mudanças nas demandas dos usuários e a facilidade de expansão futura. Ao mergulhar nesse estudo de caso, você vivenciará uma situação complexa da realidade pro�ssional, aplicando seus conhecimentos teóricos e habilidades práticas. Lembre-se de buscar soluções alinhadas com as diretrizes do padrão IEEE 1471-2000. No �nal, você terá a satisfação de ter contribuído para o desenvolvimento de uma plataforma de streaming robusta e de alta qualidade. Resolução do Estudo de Caso Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Para resolver essas situações-problema, é necessário aplicar os conceitos do padrão IEEE 1471- 2000. A seguir, estão algumas sugestões de ações a serem realizadas: Situação-problema 1: garantir a escalabilidade da plataforma para lidar com muitos usuários simultâneos. Identi�cação dos stakeholders: realizar uma análise dos stakeholders envolvidos, como usuários �nais, produtores de conteúdo, anunciantes e administradores da plataforma. Disciplina Arquitetura de Software De�nição das visões arquiteturais: elaborar visões arquiteturais relevantes, como a visão de implantação, descrevendo a infraestruturade hardware e software necessária para suportar a plataforma, incluindo servidores, serviços de armazenamento e serviços de streaming. Consideração da escalabilidade, disponibilidade e �exibilidade: Avaliar soluções tecnológicas escaláveis, como a utilização de serviços em nuvem e arquiteturas de microsserviços. Implementar mecanismos de balanceamento de carga, monitoramento de desempenho e recuperação de falhas para garantir a disponibilidade e con�abilidade do serviço. Situação-Problema 2: assegurar a disponibilidade e con�abilidade do serviço de streaming. Elaboração dos documentos arquiteturais: desenvolver documentos arquiteturais, como diagramas de contexto, diagramas de componentes e diagramas de sequência, para descrever a arquitetura proposta. Consideração da escalabilidade, disponibilidade e �exibilidade: implementar mecanismos de balanceamento de carga, monitoramento de desempenho e recuperação de falhas para garantir a disponibilidade e con�abilidade do serviço. Situação-Problema 3: oferecer uma ampla variedade de conteúdos e recursos na plataforma de streaming. De�nição das visões arquiteturais: elaborar visões arquiteturais relevantes, como a visão de informação, detalhando a estrutura de dados utilizada, como metadados de vídeos, músicas e informações do usuário. Elaboração dos documentos arquiteturais: desenvolver documentos arquiteturais, como diagramas de contexto, diagramas de componentes e diagramas de sequência, para descrever a arquitetura proposta; Consideração da escalabilidade, disponibilidade e �exibilidade: adotar padrões e práticas de desenvolvimento que permitam a extensibilidade e a modularidade do sistema, facilitando a inclusão de novos conteúdos e recursos. Ao aplicar essas ações, você utilizará os conceitos do padrão IEEE 1471-2000 para resolver as situações-problema do estudo de caso. Essa abordagem permitirá a criação de uma arquitetura de software robusta e e�ciente para a plataforma de streaming, considerando as necessidades dos stakeholders e seguindo as diretrizes estabelecidas. Lembre-se de utilizar as ferramentas vistas em aula como insumos para identi�car soluções adequadas e apresentar uma abordagem e�caz na resolução dos desa�os propostos. Resumo Visual Disciplina Arquitetura de Software Fonte: elaborada pela autora. Referências Disciplina Arquitetura de Software ISO/IEC/IEEE. Systems and software engineering–architecture description. ISO/IEC/IEEE 42010: 2011 (E)(Revision of ISO/IEC 42010: 2007 and IEEE Std 1471-2000), v. 2011, p. 1-46, 2011; PRESSMAN, Roger S.; MAXIM, Bruce R. Engenharia de software. Nova York: McGraw Hill Brasil, 2021; , Unidade 2 Arquitetura de Software e o Modelo de Qualidade Aula 1 Atributos de qualidade e suas relações Introdução Disciplina Arquitetura de Software Olá, estudante! O objetivo principal desta aula é ajudá-lo a entender como os desejos dos clientes são transformados em um documento que servirá de base para os programadores. Vamos explorar o processo de levantamento de requisitos, suas etapas, os artefatos gerados e, principalmente, os padrões de qualidade que de�nem o sucesso de um produto. Ao �nal desta aula, você estará apto a aplicar os principais conceitos e criar um artefato que englobe o levantamento de requisitos e os padrões de qualidade. Leia atentamente o conteúdo da aula e não deixe de conferir o material da bibliogra�a para se aprofundar no assunto. Bons estudos! Levantamento de requisitos e atributos de qualidade Disciplina Arquitetura de Software A etapa de levantamento de requisitos é, sem dúvidas, uma das mais importantes do processo de desenvolvimento de sistemas. Nessa fase, de�nimos o escopo do produto, ou seja, o que o sistema deve ter e como deve se comportar. O levantamento de requisitos é uma atividade que começa durante a comunicação e continua na fase de modelagem. É importante adaptar essa etapa às necessidades do processo, projeto, produto e pessoas envolvidas no trabalho (PRESSMAN; MAXIM, 2021, p. 132). Portanto, é natural que os requisitos possam sofrer alterações ao longo do desenvolvimento. Requisitos podem ser entendidos como as características que o sistema deve possuir, desde as tarefas que deve desempenhar até o ambiente em que o sistema será executado. Nesse contexto, os requisitos podem ser divididos em requisitos funcionais e não funcionais (NFR, sigla do inglês: nonfunctional requirement). Os requisitos funcionais estão diretamente ligados ao funcionamento do sistema, ou seja, são as funcionalidades que o software deve oferecer. Por exemplo, o sistema deve permitir o cadastro de usuários, o envio de e-mail de con�rmação de conta, rede�nição de senha, entre outras funcionalidades. O levantamento de requisitos tem três objetivos primordiais: expressar as necessidades do cliente, fornecer a base para a etapa de desenvolvimento e estabelecer uma base de funções que poderão ser validadas quando o sistema estiver pronto (PRESSMAN; MAXIM, 2021). Já os requisitos não funcionais são aqueles que não se relacionam diretamente com o que o sistema deve fazer, mas sim com como ele deve fazer. Podemos dizer que que os NFRs expressam premissas ou restrições do software. Eles podem estar relacionados a atributos de qualidade, desempenho, segurança ou restrições diversas. Alguns exemplos de requisitos não funcionais são: O sistema deve estar adaptado para uso em dispositivos móveis. É necessário que o software possibilite a navegação na interface sem o uso do mouse. Disciplina Arquitetura de Software Deve oferecer suporte para modo o�ine. Precisa ter uma resposta rápida para cada ação do usuário. Esses são apenas alguns exemplos que destacam como os NFRs vão além das funcionalidades básicas do sistema. A medição da qualidade do software é um dos principais desa�os no processo de desenvolvimento. É nesse contexto que se consideram os atributos de qualidade, os quais podem ser de�nidos como um conjunto de características que precisam ser atendidas ao �nal do processo de desenvolvimento para o produto satisfazer as necessidades dos usuários �nais. Esses atributos estão diretamente relacionados à lista de requisitos do sistema. Os padrões de qualidade de software estão de�nidos pela norma internacional ISO/IEC 9126, corroborados pela norma nacional NBR 13596, e incluem um modelo com seis atributos de qualidade de software, conforme apresentado no Quadro 1. ATRIBUTO DESCRIÇÃO Funcionalidade O grau com que o software satisfaz as necessidades declaradas, incluindo: adequabilidade, exatidão, interoperabilidade, conformidade e segurança. Con�abilidade A disponibilidade do software ao longo do tempo, incluindo: maturidade, tolerância a falhas e facilidade de recuperação. Usabilidade O grau de facilidade de uso do software, incluindo: compreensibilidade, facilidade de aprendizado e operabilidade. E�ciência O grau de otimização do uso de recursos pelo software, incluindo: desempenho em relação ao tempo e aos recursos. Facilidade de manutenção A facilidade com que correções e modi�cações podem ser realizadas no software, incluindo: análise, realização de mudanças, estabilidade, testabilidade. Portabilidade A facilidade com que o software pode ser transferido de um ambiente para outro, incluindo: adaptabilidade, facilidade de instalação, conformidade, substituição. Quadro 1 | Atributos de qualidade do software. - Fonte: adaptado de Pressman e Maxim (2021, p. 418). Disciplina Arquitetura de Software O atendimento dos atributos de qualidade interessa a todos os stakeholders, tanto os envolvidos no processo de desenvolvimento quanto no uso �nal. Ao mesmo tempo que esses atributos satisfazem as necessidades do usuário, agregam valor ao produto da empresa. Os atributos de qualidade estão diretamente ligados às funcionalidades do sistema. São os atributos que validam se uma funcionalidade está de acordo com o que foi apurado durante a fase do levantamento de requisitos. Em diversos sistemas, as funcionalidades podem ter limites conforme o per�l de usuário queo está acessando. Um per�l de usuário pode ter acesso a determinadas funcionalidades que não estarão disponíveis para outro per�l. Portanto, os atributos de qualidade também estão relacionados a limitações nas funcionalidades. Etapas para a modelagem de requisitos e atributos de qualidade Ao desenvolver um software, é crucial ter um escopo bem de�nido, ou seja, os requisitos necessários para atender às necessidades das partes interessadas (stakeholders). Nem sempre os usuários têm uma compreensão clara do que desejam que o software faça e, muitas vezes, essas necessidades podem mudar ao longo do processo de desenvolvimento. Por isso, estudante, o levantamento de requisitos desempenha um papel fundamental nesse processo. É nessa etapa que entendemos o contexto do software a ser desenvolvido, as necessidades que ele deve atender, as prioridades e os comportamentos esperados. O levantamento de requisitos pode ser dividido em sete fases, que podem ocorrer simultaneamente e devem ser adaptadas às necessidades do projeto: concepção, levantamento, elaboração, negociação, especi�cação, validação e gestão de requisitos. Cada uma dessas fases desempenha um papel importante no processo, como descrito no Quadro 2. ETAPA DESCRIÇÃO Concepção Compreender o problema de forma preliminar, identi�car os interessados e o problema que Disciplina Arquitetura de Software deve ser solucionado. Levantamento Estabelecer as metas de negócio, envolver os interessados para expor suas necessidades e de�nir as prioridades, também conhecidas como valor de negócio. Elaboração Criar e re�nar os cenários que descrevem como os usuários vão interagir com o software, podendo incluir a criação de casos de uso. Negociação Lidar com solicitações con�itantes dos clientes e usuários, avaliar custos e riscos, eliminar ou modi�car requisitos e de�nir as prioridades para atingir a satisfação de todos os envolvidos. Especi�cação Apresentar os requisitos levantados de forma clara e compreensível, seja por meio de documentos escritos, grá�cos, cenários de uso ou protótipo. Validação Avaliar a qualidade do levantamento de requisitos, veri�car se os requisitos foram declarados corretamente, sem inconsistências, sem erros, informações ausentes ou requisitos em con�ito. Gestão de requisitos Identi�car, controlar e acompanhar as mudanças nos requisitos ao longo do projeto. Quadro 2 | Fases do Levantamento de Requisitos. - Fonte: adaptado de Pressman e Maxim (2021, p. 133-138). Na etapa de concepção, é importante identi�car os envolvidos, os interessados no sistema e em sua qualidade. Inicialmente, podemos criar uma lista das pessoas envolvidas, que pode ser ampliada à medida que o processo avança. Em seguida, iniciamos o levantamento, que geralmente é realizado de forma colaborativa com os envolvidos. Cada stakeholder contribui com sua visão sobre o que é necessário para o sistema. A ideia é reunir todos os interessados em um ambiente propício para a discussão de ideias. Nesta etapa, diversas ferramentas podem ser utilizadas, como planilhas, �ip charts, notas adesivas, quadro branco, bate-papo online, fóruns virtuais, entre outras. O importante é que todos tenham condições de participar e expressar suas necessidades, com a mediação de um facilitador. O objetivo é identi�car problemas, propor soluções, negociar diferentes perspectivas e estabelecer um conjunto preliminar de requisitos. Vale ressaltar que essa fase pode abranger etapas posteriores, como elaboração, negociação e especi�cação. Disciplina Arquitetura de Software Ao �nal dessas etapas, temos uma visão geral das funções e características do sistema, mas ainda não temos uma forma de visualizar como essas funções e características serão usadas pelos diferentes per�s de usuários. É nesse momento que podemos construir os cenários de uso (ou casos de uso), que são diagramas com descrições de como o sistema será utilizado. Na etapa de validação, as funcionalidades e suas limitações ou permissões são testadas de acordo com o levantamento de requisitos. Ao �nal da etapa, pode-se certi�car de que o software atende aos interesses de todos os envolvidos. Requisitos e atributos de qualidade na prática Agora que conhecemos as etapas do processo de levantamento de requisitos e as de�nições de qualidade de software, vamos expandir nossos estudos com exemplos práticos. Após levantar requisitos e atributos de qualidade, precisamos criar cenários de uso, também conhecidos como casos de uso, para tornar mais clara a interação do usuário com o sistema. É preciso lembrar que o atendimento dos atributos de qualidade interessa a todos os envolvidos, tanto usuários quanto empresa desenvolvedora. O primeiro passo é de�nir os atores envolvidos, que são todos que interagem com o sistema em diferentes papéis. De acordo com Pressman e Maxim (2021) um ator não é necessariamente apenas um usuário, é qualquer coisa que se comunica com o sistema e que é externa ao sistema. Por exemplo, um usuário pode ter um per�l “padrão” e ao mesmo tempo ser administrador do sistema. Os atores primários são aqueles que interagem diretamente com o sistema, enquanto os atores secundários têm papel de suporte para os primários. É importante destacar que a construção de Disciplina Arquitetura de Software diagramas de casos de uso utilizando a Linguagem de Modelagem Uni�cada (UML) é um passo importante nesse contexto. Figura 1 | Diagrama de casos de uso. - Fonte: Pressman e Maxim (2021, p. 135). Na Figura 1, que representa os casos de uso para um sistema de segurança residencial, podemos perceber a presença de um ator primário: o proprietário. Os atores secundários são as câmeras, que fornecem os pré-requisitos para as ações dos atores primários. Disciplina Arquitetura de Software Figura 2 | Diagrama de classe. - Fonte: Pressman e Maxim (2021, p. 140). Na Figura 2, vemos a classe Sistema, que inclui os atributos (idSistema, statusSistema, etc.) e as operações de responsabilidade da classe (programar, exibir, etc.). Essa forma de representação pode auxiliar os programadores durante o processo de codi�cação, visto que é mais próximo da linguagem utilizada por eles. Já os atributos de qualidade podem ser elaborados com base em um diagrama de árvore, como exempli�cado no caso de um sistema web, na Figura 3. Nele, temos o objetivo mais à esquerda, alguns atributos de qualidade estabelecidos pela ISO/IEC 9126 ao centro e, à direita, as rami�cações correspondentes à cada um dos atributos. Por exemplo, o processamento correto dos links web é um comportamento esperado quando falamos de um atributo de Con�abilidade. Disciplina Arquitetura de Software Figura 3 | Diagrama de árvore dos atributos de qualidade. - Fonte: Pressman e Maxim (2021, p. 284). Esses exemplos práticos nos ajudam a visualizar como o processo de levantamento de requisitos e as características de qualidade são aplicados na prática, satisfazendo as aspirações de todos os interessados no produto. É importante salientar que o diagrama de atributos de qualidade deve representar as funcionalidades e suas limitações e permissões, contemplando os diversos níveis de acesso, caso levantados nos requisitos. Videoaula: Atributos de qualidade e suas relações Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Neste vídeo, vamos explorar as etapas essenciais do levantamento de requisitos e dos atributos de qualidade. Você entenderá a importância desses atributos para o sucesso do produto. Além disso, veremos, na prática, como transformar uma lista de requisitos em um documento sólido que será a base para o desenvolvimento do sistema. Não deixe de assistir e aprofundar seus conhecimentos nesse tema fundamental. Disciplina Arquitetura de Software Saiba mais Sobre os atributos de qualidade, um artigo interessante para expandir os seus estudos é Qualidade de Software - Engenhariade Software 29. Para criar os diagramas de casos de uso, você pode optar por inúmeras ferramentas disponíveis no mercado. Entre as ferramentas gratuitas, indicamos a Draw.io. Referências https://www.devmedia.com.br/qualidade-de-software-engenharia-de-software-29/18209 https://app.diagrams.net/ Disciplina Arquitetura de Software PRESSMAN, Roger S.; MAXIM, Bruce R. Engenharia de software. Porto Alegre: Grupo A, 2021. E- book. ISBN 9786558040118. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9786558040118/. Acesso em: 17 jul. 2023. ZENKER, Aline M.; SANTOS, Jailson Costa dos; COUTO, Júlia M C.; et al. Arquitetura de sistemas. Porto Alegre: Grupo A, 2019. E-book. ISBN 9788595029767. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788595029767/. Acesso em: 17 jul. 2023. Aula 2 Modelo de qualidade e atributos de negócio Introdução https://integrada.minhabiblioteca.com.br/#/books/9786558040118/ https://integrada.minhabiblioteca.com.br/#/books/9788595029767/ Disciplina Arquitetura de Software Olá, estudante! O objetivo dessa aula é explorar a importância da validação e qualidade no contexto dos negócios e do valor agregado de um produto. Você entenderá os principais conceitos desse processo, como time-to-market, vida útil do sistema, agenda de lançamento e gestão da qualidade, que desempenham um papel crucial na entrega de um produto de qualidade. Compreender esses aspectos permitirá que você aplique os conceitos aprendidos e crie um diagrama de atributos de qualidade alinhado com os requisitos do sistema. Certi�que-se de ler todo o conteúdo da aula e não deixe de conferir o material da bibliogra�a para se aprofundar no assunto. Bons estudos! Características do controle de qualidade Disciplina Arquitetura de Software Quando se trata de qualidade de software, o foco principal é atender às necessidades dos usuários com base nas etapas de concepção e levantamento. Para um produto ser considerado de qualidade, ele não deve apenas cumprir suas funções, mas também apresentar con�abilidade e ausência de erros do sistema. No entanto, a qualidade tem um preço, tanto para a empresa desenvolvedora quanto para os usuários, que podem ter que lidar diariamente com erros que di�cultam seu trabalho. Certamente, é mais barato para a empresa reduzir custos de qualidade durante a fase de desenvolvimento e usar os clientes como “testadores” do software, corrigindo bugs à medida que surgem durante o uso do produto. No entanto, em um mercado cada vez mais competitivo, uma empresa que não seja sinônimo de qualidade tende a perder espaço (PRESSMAN; MAXIM, 2021). Existem vários tipos de custos associados aos processos de qualidade no desenvolvimento de software. Podemos citar os custos de prevenção (como o planejamento dos testes e treinamento); os custos de avaliação (como revisões técnicas); os custos de materiais utilizados na modelagem, coleta de dados, avaliação de métricas e execução dos testes; os custos de falhas internas (quando um erro é detectado antes da entrega do produto); os custos de falhas externas (que envolvem defeitos encontrados após a entrega do produto); e custo do suporte ao cliente. Os custos de falhas internas e externas também podem aumentar os custos dos outros tipos, uma vez que o software precisará ser validado novamente após a correção dos erros. É importante lembrar que os processos de qualidade devem estar presentes ao longo de toda a vida útil do produto, não apenas durante o processo de desenvolvimento, mas também nas etapas de operação e manutenção, desde a de�nição dos requisitos até o término de seu uso. Na aula anterior, discutimos sobre os atributos de qualidades de�nidos na ISO/IEC 9126-1:2001. Eles são seis atributos ao total: funcionalidade, con�abilidade, usabilidade, e�ciência, facilidade de manutenção e portabilidade. No caso de aplicações web, podemos acrescentar mais quatro: segurança (para evitar acesso não autorizado), disponibilidade (porcentagem de tempo em que o Disciplina Arquitetura de Software aplicativo está disponível para uso), escalabilidade (facilidade de redimensionar os servidores de acordo com a demanda) e time-to-market (tempo necessário para lançar o produto no mercado, que não é necessariamente um atributo de qualidade técnica, mas aumenta a qualidade comercial do produto) (PRESSMAN; MAXIM, 2021). Podemos entender o time-to-market como o tempo decorrido entre a concepção do produto até sua disponibilização aos clientes, ou seja, o tempo total de desenvolvimento. Vale ressaltar que o produto que chegar primeiro ao mercado tende a conquistar uma maior fatia do mercado-alvo. Nesse ponto, há um con�ito entre os atributos de qualidade e os objetivos de negócio. Para os analistas de negócio, é importante ter um produto minimamente funcional para lançar rapidamente no mercado-alvo, preferencialmente à frente dos concorrentes. Aproveitar uma janela oportuna de lançamento oportuna certamente é bené�co para os negócios, mas os processos de qualidade nem sempre favorecem a rapidez, o que resulta em um maior tempo de desenvolvimento. É nesse momento que entra em cena a negociação, de�nindo valores de negócio para funcionalidades que vão atrair mais a atenção dos usuários e, posteriormente, incrementando o software com novas funcionalidades, que, embora não sejam tão impactantes, agregam valor ao produto. Questionamento importantes no processo de qualidade Disciplina Arquitetura de Software Reduzir o time-to-market e aproveitar uma agenda de lançamento oportuna é, sem dúvida, um desa�o para as equipes de desenvolvimento. É importante ter em mente que ter um software funcional e em conformidade com os padrões de qualidade gera valor ao produto. A questão é como conciliar os atributos de qualidade com os atributos de negócio – esse pode ser o segredo do sucesso. Na fase de levantamento de requisitos, surgirão diversos requisitos que os stakeholders consideram importantes para o sistema. No entanto, a cada requisito adicionado, o escopo do desenvolvimento aumenta, assim como o tempo necessário, não apenas para a codi�cação, mas também para os processos de qualidade. É nesse ponto que a negociação desempenha um papel crucial. O responsável pelo produto deve atribuir valor aos requisitos que trarão retorno mais imediato ao negócio. Não devemos esperar que um software chegará “pronto” para ser lançado no mercado, pois essa abordagem é inviável do ponto de vista comercial, devido ao longo tempo de desenvolvimento. Dessa forma, os responsáveis precisam avaliar o custo-benefício e priorizar funcionalidades mais relevantes. Reconhecendo que o software é um produto em constante evolução, sob a perspectiva de um desenvolvimento iterativo, é possível focar em poucas funcionalidades e realizar o processo de controle de qualidade de maneira mais e�caz, entregando um produto de qualidade dentro do prazo de lançamento planejado. A etapa de controle de qualidade deve seguir os princípios estabelecidos na ISO/IEC 9126- 1:2001. Vamos analisar os atributos e como eles se encaixam no processo. O atributo de funcionalidade diz respeito à forma como o sistema atende os desejos dos usuários. Podemos fazer algumas perguntas para avaliar se o software atende esses requisitos: O software cumpre os padrões de segurança e privacidade dos dados? O sistema executa as operações necessárias para exibir e manipular as informações inseridas pelos usuários? O software atende ao problema que o originou? O atributo de con�abilidade se refere ao tempo que o sistema está disponível ao usuário. Podemos fazer seguintes perguntas: O software é tolerante a falhas? Quando ocorrem falhas, o sistema consegue se recuperar ou fornece ajuda ao usuário? O atributo de usabilidade está relacionado ao grau de facilidade de uso. Podemos fazer as seguintes perguntas: O layout é facilmente compreensível? As funcionalidades são fáceis de aprender e entender? Em relação ao atributo de e�ciência, que mede a otimização do produto, podemos fazer as seguintes perguntas:O tempo necessário entre uma ação e sua resposta é adequado? Os recursos de hardware (memória RAM, uso de processador) estão de acordo com as características do sistema? Disciplina Arquitetura de Software Já o atributo de facilidade de manutenção ou manutenibilidade trata da facilidade de realizar manutenções no sistema. Podemos validar com as seguintes questões: O produto é facilmente mantido ou alterado em relação às regras de negócio? O software é fácil de testar? O atributo de portabilidade trata da facilidade de mover o sistema de um ambiente para outro. Algumas perguntas podem ser feitas nesse sentido: O sistema pode ser adaptado a diferentes ambientes? O software tem facilidade de substituição e/ou atualização? O sistema garante a integridade dos dados em diferentes ambientes? São perguntas simples, mas que, quando validadas adequadamente, podem garantir a qualidade do produto e seu valor no mercado. Processo de qualidade na prática Vimos anteriormente que o time-to-market é o tempo decorrido desde a concepção até a entrega de um produto. Como podemos reduzir esse tempo de entrega e manter a qualidade do produto? Disciplina Arquitetura de Software Existem diversas estratégias que podem ser adotadas, embora não haja um padrão especí�co para medir o time-to-market, pois o ponto de partida pode variar. Algumas empresas consideram o início do desenvolvimento a partir da etapa de codi�cação, enquanto outras entendem que começa na etapa de concepção. O término do processo também é variável: para alguns, é quando o produto está em produção, enquanto, para outros, é a entrega ao usuário. No entanto, podemos de�nir que o processo começa quando há uma de�nição do que será feito e a equipe é alocada para o trabalho, e o ponto �nal pode ser considerado quando a equipe de desenvolvimento e qualidade entrega um MVP (Produto Mínimo Viável) ou a primeira versão do software. O grande diferencial para reduzir esse tempo está no planejamento do processo. Um conceito importante nesse contexto é o lead time, que mede o prazo necessário para atender às demandas dos clientes. Um lead time aceitável pode ser alcançado por meio da padronização do processo e da automatização. Na etapa de concepção, o uso de técnicas como design thinking, user research, lean inception ou brainstorming podem ajudar a levantar os requisitos de maneira mais assertiva. A aplicação de padrões de desenvolvimento, ou design patterns, auxilia os programadores a terem uma referência, um processo bem de�nido de como elaborar o sistema. O uso de um processo padronizado proporciona maior agilidade, fornecendo uma base consistente e independente das pessoas envolvidas no processo. A adoção de testes automatizados, tanto durante o desenvolvimento quanto em incrementos ou manutenções, reduz signi�cativamente a ocorrência de falhas do produto. Embora a criação de testes automatizados possa demandar um esforço inicial maior, a médio prazo, reduz a necessidade de execução manual de testes a cada iteração ou correção do sistema. Portanto, com o uso de ferramentas colaborativas no levantamento de requisitos, a aplicação de padrões durante o desenvolvimento e a adoção de testes automatizados na etapa de validação, é possível reduzir o time-to-market e entregar um produto de qualidade. Além da automatização de testes que validam as funcionalidades em si, a validação dos atributos de qualidade pode ser feita por meio da criação de diagramas de árvore contendo os atributos de qualidade da ISO/IEC 9126-1:2001 e características pertinentes a cada um desses atributos especí�cos ao sistema em questão. Veja a Figura 1, que representa os atributos de qualidade e as características que devem ser validadas, com base nos questionamentos que levantamos anteriormente: Disciplina Arquitetura de Software Figura 1 | Diagrama de atributos de qualidade. - Fonte: elaborada pelo autor. A Figura 1 é apenas exemplo de como podemos abordar a validação dos atributos de qualidade ao avaliar um sistema, de modo a assegurar a qualidade do produto. Portando, ter processos padronizados no desenvolvimento, ter requisitos priorizados e bem de�nidos, utilizar um processo de validação automatizado e ter um claro entendimento dos atributos de qualidade pode contribuir para a redução do tempo de produção e agregar qualidade na entrega do produto. Videoaula: Modelo de qualidade e atributos de negócio Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Neste vídeo, vamos explorar os aspectos essenciais relacionados à qualidade de software, assim como possíveis con�itos que podem surgir entre atributos de qualidade e atributos de negócio. Além disso, abordaremos os conceitos-chave do processo de desenvolvimento como time-to- market, agenda de lançamento e vida útil de um sistema. Prepare-se para aprofundar seu Disciplina Arquitetura de Software entendimento sobre a qualidade de software e os elementos fundamentais do processo de desenvolvimento. Saiba mais No texto desta aula, citamos algumas técnicas para levantamento de requisitos. Seguem materiais interessantes que podem ajudar a expandir seus conhecimentos sobre essa temática: Lean Inception é uma ferramenta colaborativa com o intuito de alinhar um grupo de pessoas para a de�nição de objetivos e/ou escopo de um projeto. Você pode saber mais acessando este link. Design Thinking é outra ferramenta de pensamento criativo focada em gerar soluções para a resolução de problemas com foco no usuário. Saiba mais neste link. User Research é uma metodologia focada na investigação dos usuários e seus requisitos, compreendendo o contexto de uso. Um material explicativo pode ser encontrado neste link. Brainstorming é uma técnica colaborativa para o surgimento de ideias criativas. Acesse este link para saber mais. Sobre os padrões de desenvolvimento ou design patterns, consulte este link. Referências https://caroli.org/lean-inception-saiba-como-alinhar-pessoas-e-construir-o-produto-certo/ https://rockcontent.com/br/blog/design-thinking https://medium.com/senior/mas-afinal-o-que-%C3%A9-ux-research-de-fato-e6e490cd7ce5 https://rockcontent.com/br/blog/brainstorming https://www.hostgator.com.br/blog/design-patterns-e-seus-beneficios Disciplina Arquitetura de Software PRESSMAN, Roger S.; MAXIM, Bruce R. Engenharia de software. Porto Alegre: Grupo A, 2021. E- book. ISBN 9786558040118. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9786558040118/. Acesso em: 17 jul. 2023. ZENKER, Aline M.; SANTOS, Jailson Costa dos; COUTO, Júlia M C.; et al. Arquitetura de sistemas. Porto Alegre: Grupo A, 2019. E-book. ISBN 9788595029767. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788595029767/. Acesso em: 17 jul. 2023. ABNT (ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS). NBR ISO/IEC 9126-1 Engenharia de software – Qualidade de produto – Parte 1: Modelo de qualidade. 2003. Aula 3 Técnicas de design arquitetural Introdução https://integrada.minhabiblioteca.com.br/#/books/9786558040118/ https://integrada.minhabiblioteca.com.br/#/books/9788595029767/ Disciplina Arquitetura de Software Olá, estudante! A arquitetura de software é uma das etapas mais importantes de todo o processo de desenvolvimento. Ela abrange desde a concepção até o desenvolvimento e validação da qualidade do software. O papel do arquiteto de software é considerar uma in�nidade de características e princípios, e tomar decisões que se adequem ao contexto especí�co do projeto. Nesta aula, vamos estudar as técnicas e os princípios que norteiam a arquitetura de um sistema. Vamos elencar os diferentes padrões e estilos arquitetônicos utilizados atualmente e exempli�car como a teoria se aplica na prática, elaborando um documento. O objetivo é entender como uma arquitetura bem projetada é essencial para o sucesso do desenvolvimento de sistemas de alta qualidade. Aplique essesconceitos na prática para criar soluções e�cientes e robustas que atendam às necessidades dos projetos e dos clientes. Bons estudos! Principais conceitos da arquitetura de software Disciplina Arquitetura de Software Podemos dizer que arquitetura de software tem a sua importância de�nida por três motivos principais, de acordo com Zenker et al. (2019): 1. Permite a comunicação de todos os envolvidos no processo. 2. As decisões tomadas na etapa de arquitetura impactarão a forma como o sistema será desenvolvido, podendo levar a limitações ou problemas se essa etapa for mal executada. 3. Fornece a ideia essencial de como o sistema deve ser estruturado e como todos os componentes ou camadas se integrarão para se comunicar. Além disso, através da arquitetura, é possível analisar a efetividade do desenvolvimento no entendimento e aplicação dos requisitos levantados. Para a arquitetura ou design de um software, três elementos são imprescindíveis em qualquer sistema: 1. Componentes: pequenas partes do software, cada uma com uma função especí�ca. 2. Propriedades: características relativas a cada componente do sistema. 3. Conectores: descrevem como os componentes se comunicam entre si, promovendo a integração do sistema por meio de requisições, mensagens, etc. A separação de preocupações é um conceito importante relacionado aos componentes. Basicamente, ele preconiza que o sistema deve ser dividido em componentes, de modo que cada um executa uma tarefa especí�ca, sendo responsável por resolver um problema especí�co, ou fornecer um serviço a outro componente. Outro ponto importante são os estilos arquitetônicos. O estilo de�ne a construção dos componentes, a forma como eles interagem e as propriedades do sistema. O Quadro 1 descreve os estilos arquiteturais mais utilizados e suas características. Disciplina Arquitetura de Software Arquiteturas centralizadas em dados O banco de dados é uma parte central, sendo acessado por outros componentes para leitura e escrita de dados (PRESSMAN, 2016). Arquiteturas de �uxo de dados Os dados de entrada são transformados por outros componentes. antes de prosseguirem para o próximo componente (PRESSMAN, 2016). Arquiteturas de chamadas e retornos É uma estrutura utilizada em projetos mais antigos. Há uma divisão entre programas, de forma que o principal invoca outros subprogramas (PRESSMAN, 2016). Arquiteturas orientadas a objetos Os dados e operações são encapsulados, permitindo que apenas componentes especí�cos tenham acesso para a manipulação. Demais componentes acessam o componente de manipulação para lidar com os dados (PRESSMAN, 2016). Arquiteturas em camadas O sistema é dividido em camadas, cada uma realizando operações distintas, com funcionalidades de interface na camada central e operações externas atendidas pelas camadas externas (PRESSMAN, 2016). Arquiteturas cliente-servidor Uma das mais utilizadas atualmente, com a presença do servidor (backend) responsável por processar e realizar operações conforme recebe requisições do cliente (frontend). Nesse estilo, um servidor pode atender a um número variado de clientes (ZENKER et al., 2019). Quadro 1 | Estilos arquiteturais. - Fonte: adaptado pelo autor a partir de Pressman (2016) e de Zenker et al. (2019). Outro tema importante são os padrões arquiteturais. Os padrões tratam de aspectos mais gerais, orientando como o sistema se comportará em alguma funcionalidade; ou seja, envolvem questões de comportamento. Os principais padrões arquiteturais utilizados atualmente são o MVC, o MVP e o MVVM. O Quadro 2 apresenta os padrões e suas características: Disciplina Arquitetura de Software MVC: Model-View-Controller Separa partes do sistema atribuindo tarefas distintas. O Model trata dos dados; a View, da exibição e interação com o usuário; e a Controller faz a ligação entre a View e o Model. MVP: Model-View-Presenter A tela é disponibilizada pela View, com as requisições capturadas pela Presenter, que se conecta ao Model. Este devolve os dados à Presenter, que os transfere à View para exibição em tela. MVVM: Model-View-ViewModel A camada View de�ne a estrutura exibida ao usuário, enquanto a ViewModel estabelece os atributos e métodos para que a View exiba dados e solicite sua manipulação. O Model contém as regras de negócio e o acesso aos dados. Quadro 2 | Padrões arquiteturais. - Fonte: Zenker et al. (2019). No início do trabalho de arquitetura, é importante de�nir o contexto, descrevendo as entidades externas (pessoas, outros sistemas, dispositivos) que podem interagir com o sistema, com base no levantamento de requisitos. Após a de�nição do contexto, é possível mapear os arquétipos arquiteturais, que representam abstrações dos elementos do sistema, ou seja, funcionalidades. A totalidade desses arquétipos constitui a arquitetura do sistema. Para representar visualmente este trabalho, é construído o diagrama de contexto arquitetural, que demonstra como o sistema vai interagir com as entidades externas. O sistema em desenvolvimento é o centro do processo, enquanto as relações podem ser divididas em: Sistemas superiores: sistemas que utilizam o sistema principal. Sistemas subordinados: sistemas que são utilizados pelo sistema principal. Sistemas do mesmo nível: sistemas que compartilham informações com o principal. Atores: entidades, pessoas ou dispositivos que utilizarão o sistema principal Técnicas utilizadas no processo de arquitetura Disciplina Arquitetura de Software A arquitetura de software é a responsável por garantir que o sistema a ser desenvolvido esteja alinhado com os requisitos e atributos de qualidade. Durante a etapa de arquitetura, são traçados os estilos e padrões arquiteturais usados no projeto. No bloco anterior, vimos os principais estilos, padrões e técnicas que podem ser utilizados pelo arquiteto de software ao elaborar o diagrama arquitetural e outros documentos úteis para o processo. Agora, veremos como esses conceitos se relacionam com o objetivo de construir um software de qualidade. Ao planejar a arquitetura de um sistema, é preciso levar em conta o contexto, compreendendo quem são os envolvidos e quais dispositivos serão utilizados. Entender o contexto de uso é algo imprescindível para de�nir o melhor estilo e padrão para o software a ser desenvolvido. Um sistema deve ser dividido em pequenos sistemas (componentes), de forma que cada um tenha suas características e responsabilidades (propriedades). Estas são integradas por meio de comunicação por mensagens internas, �uxo de dados ou requisições web (conectores). Um componente pode ser de�nido por suas interfaces, ou seja, o que o componente requer para funcionar e o que ele fornece para o sistema. A Figura 1 ilustra o conceito de um componente: Disciplina Arquitetura de Software Figura 1 | Interfaces de um componente. - Fonte: Zenker et al. (2019). Os estilos arquiteturais de�nem de forma especí�ca como o sistema se comportará de acordo com esses princípios fundamentais, incluindo os componentes, as conexões entre eles e as restrições no �uxo de informações entre os diferentes componentes. Dessa forma, após a de�nição do estilo, o arquiteto de software pode compreender o sistema de maneira mais geral. A separação de preocupações ou responsabilidades, outro conceito abordado anteriormente, é encarada de diferentes formas no sistema de acordo com o estilo arquitetural escolhido. Por exemplo, um estilo orientado a objetos (Figura 2) terá a separação de preocupações em suas classes, enquanto um sistema de camadas (Figura 3) dividirá suas funcionalidades de acordo com as camadas. Um estilo centralizado em dados (Figura 4) vai concentrar as funcionalidades em outros componentes, deixando para a camada de dados apenas as funções de leitura e escrita dos dados. Na arquitetura de �uxo de dados (Figura 5), há a transformação dos dados a cada �ltro. Disciplina Arquitetura de Software Figura 2 | Diagrama de comunicação – arquitetura orientada a objetos. - Fonte: Pressman e Maxim (2021). Figura3 | Arquitetura em camadas. - Fonte: Pressman e Maxim (2021). Disciplina Arquitetura de Software Figura 4 | Arquitetura centralizada em dados. - Fonte: Pressman e Maxim (2021). Figura 5 | Arquitetura de �uxo de dados. - Fonte: Pressman e Maxim (2021). Por sua vez, os padrões arquiteturais, diferente dos estilos, tem foco na estruturação do código em si, de�nindo as funções das diferentes funcionalidades e principalmente, como as partes Disciplina Arquitetura de Software devem interagir. Os padrões tratam de questões comportamentais especí�cas no contexto da arquitetura (PRESSMAN; MAXIM, 2016). Padrões MVC (Figura 6) ou o MVP focam em componentes que exibem os dados em tela, controlam as regras de negócio e realizam as ações de leitura, processamento e escrita dos dados. Figura 6 | Padrão MVC. - Fonte: Pressman e Maxim (2021). Portanto, a de�nição do estilo e padrão, o respeito aos princípios da arquitetura e a separação de preocupações entre as partes do sistema, escolhidos pelo arquiteto, são cruciais para que os programadores possam se orientar e desenvolver o sistema de acordo com as necessidades dos usuários, considerando a qualidade e a estrutura criada pela pessoa arquiteta. É importante lembrar também que a construção de um diagrama de contexto arquitetural é parte importante do trabalho da arquitetura. A Figura 7 representa, de maneira genérica, um diagrama de contexto arquitetural, no qual podemos ver as representações do contexto envolvido: Disciplina Arquitetura de Software Figura 7 | Diagrama de contexto arquitetural. - Fonte: Zenker et al. (2019). Artefatos gerados pelo arquiteto de software Disciplina Arquitetura de Software O arquiteto de software deve elaborar diversos artefatos relacionados às de�nições da arquitetura. Nesses artefatos, devem constar os conceitos apresentados anteriormente, tais como componentes, diagrama de contexto, diagrama de arquétipos e de instância, para documentar a etapa de arquitetura de um software. É importante ressaltar que os estilos e padrões arquitetônicos não estarão diretamente representados nos diagramas, mas são eles que de�nirão a forma como os componentes, arquétipos, instâncias e contexto serão organizados. Na Figura 8, vemos a representação de um diagrama de contexto arquitetural de um sistema de vigilância residencial. Esse diagrama engloba todos os componentes, atores e sistemas que interagem com o sistema. Figura 8 | Diagrama de contexto arquitetural de um sistema de vigilância. - Fonte: Pressman e Maxim (2021). Nesse exemplo, a função de vigilância é um sistema de mesmo nível e utiliza a função de segurança (sistema principal). Os sistemas superiores são representados pelo produto em si e por qualquer outro sistema acessado via internet que disponibilize as funções do exemplo. Os painéis de controle e o proprietário são os atores, enquanto os sensores são sistemas subordinados, ou seja, componentes utilizados pelo sistema principal. A Figura 9 apresenta os arquétipos, que são classes ou padrões abstraídos que representam funcionalidades especí�cas do sistema. Nesse contexto, o nó representa os elementos de entrada e saída, que podem ser os sensores e os alarmes. O detector é uma abstração que engloba todos os equipamentos que geram informações de entrada para o sistema. O indicador representa os mecanismos que indicam alguma mensagem do sistema, por exemplo, uma sirene. Já o controlador pode ser entendido como a função de ativar/desativar o sistema. Disciplina Arquitetura de Software Figura 9 | Relacionamentos em UML de arquétipos. - Fonte: Pressman e Maxim (2021). Todo e qualquer requisito levantado deve ser descrito pela arquitetura, visando a obter uma visão geral dos componentes do sistema. Cabe lembrar que um componente re�ete um comportamento do sistema. Podemos representar gra�camente um componente, conforme a Figura 10, que de�ne um componente que coleta e compara dados de um sensor de segurança residencial: Disciplina Arquitetura de Software Figura 10 | Exemplo de diagrama de componente. - Fonte: Zenker et al. (2019). Na interface “Requer”, há a entrada de dados que serão processados de acordo com os métodos da interface “Fornece”. Quanto mais detalhado for o diagrama, mais fácil será a tarefa dos programadores na hora da codi�cação. Além de representar cada componente isolado, é preciso ter uma visão geral de como esses componentes se relacionam. A Figura 11 representa gra�camente a estrutura de componentes gerais de um sistema de monitoramento residencial. Disciplina Arquitetura de Software Figura 11 | Componentes de alto nível. - Fonte: Pressman e Maxim (2021). O diagrama deve representar os principais comportamentos descritos na análise de requisitos. Na imagem, a função de gerenciamento da comunicação externa, por exemplo, é responsável por coordenar a comunicação com entidades externas, como um app ou um painel de controle. Note que cada retângulo representa um componente do sistema. É importante frisar que aqui podemos notar um conceito básico da arquitetura, que é a separação de preocupações. No diagrama, podemos perceber que cada componente do sistema tem uma função única e separada dos demais. Até este ponto, já de�nimos o contexto, os arquétipos, os componentes e a estrutura global do sistema. Sem embargo, ainda precisamos re�nar um pouco mais. Para isso, é preciso expandir o diagrama anterior com as instâncias das funcionalidades. A Figura 12 expande a visão dos componentes. Disciplina Arquitetura de Software Figura 12 | Instância da função de segurança. - Fonte: Pressman e Maxim (2021). Neste diagrama, temos o comportamento real de uma funcionalidade do sistema. O componente “Gerenciamento de detectores”, por exemplo, interage com o componente “Agendador”, que, por sua vez, se conecta com cada um dos sensores existentes. Ao aplicar os princípios e técnicas de design de arquitetura explorados ao longo da aula, o arquiteto terá em mãos um material completo e bem elaborado para que se possa iniciar a fase de desenvolvimento do sistema. Videoaula: Técnicas de design arquitetural Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Neste vídeo, explanaremos um pouco sobre as responsabilidades do arquiteto de software e as técnicas e princípios envolvidos no processo de designs arquitetural de um software. Abordaremos os principais estilos e padrões utilizados atualmente e veremos como transformar esses conceitos em artefatos que contemplarão uma visão bem elaborada do sistema. Disciplina Arquitetura de Software Saiba mais Além dos padrões discutidos nesta aula, há muitos outros, como microsserviços. Você pode conhecer um pouco mais no artigo “Padrões arquiteturais, quais e como usar?”, de Patrick Francis Gomes Rocha. Referências https://www.linkedin.com/pulse/padr%C3%B5es-arquiteturais-quais-e-como-usar-patrick-francis-gomes-rocha/?originalSubdomain=pt Disciplina Arquitetura de Software PRESSMAN, Roger. Engenharia de software: uma abordagem pro�ssional. 8ª ed. Porto Alegre: AMGH, 2016. PRESSMAN, Roger S.; MAXIM, Bruce R. Engenharia de software. Porto Alegre: Grupo A, 2021. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9786558040118/. Acesso em: 17 jul. 2023. ZENKER, Aline M.; SANTOS, Jailson Costa dos; COUTO, Júlia M, C.; et al. Arquitetura de sistemas. Porto Alegre: Grupo A, 2019. E-book. ISBN 9788595029767. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788595029767/. Acesso em: 8 jul. 2023. Aula 4 Táticas de design Introdução https://integrada.minhabiblioteca.com.br/#/books/9786558040118/ https://integrada.minhabiblioteca.com.br/#/books/9788595029767/ Disciplina Arquitetura de Software Olá, estudante! Nesta aula, exploraremos táticas essenciais de design. Abordaremos aspectos importantes da qualidade na arquitetura de software, como desempenho eescalabilidade; segurança e tolerância a falhas; e compreensibilidade, modi�cabilidade e operabilidade. Ao desenvolver um software, é crucial considerar o desempenho e a escalabilidade, garantindo que ele execute tarefas de forma ágil e possa lidar com um aumento na demanda sem comprometer sua e�ciência. A segurança é um aspecto primordial para proteger o sistema e as informações contra ameaças maliciosas, enquanto a tolerância a falhas assegura que o sistema continue funcionando adequadamente mesmo diante de problemas em componentes individuais. Além disso, veremos como tornar um software compreensível, facilitando sua manutenção e evolução, e como torná-lo altamente modi�cável para se adaptar a novos requisitos. Por �m, abordaremos a operabilidade, que torna o software fácil de operar e manter em ambiente de produção. Táticas essenciais para a arquitetura de software Disciplina Arquitetura de Software Ao desenvolver um software, é essencial levar em conta uma série de aspectos para assegurar que ele atenda às necessidades dos usuários e possa evoluir com o passar do tempo. Nesse contexto, algumas táticas de design são fundamentais, tais como o desempenho, a escalabilidade, a segurança, a tolerância a falhas, a compreensibilidade, a modi�cabilidade e a operabilidade (ZENKER et al., 2019). O desempenho de um software diz respeito à sua capacidade de executar tarefas e processos de forma e�ciente e com boa velocidade. Isso signi�ca que o software deve ser rápido e responsivo em relação às solicitações dos usuários e às operações que precisa realizar. As métricas de desempenho incluem tempo de resposta, tempo de processamento e utilização de recursos como CPU, memória e rede (ZENKER et al., 2019). Por outro lado, a escalabilidade do software está relacionada à sua capacidade de lidar com um aumento na demanda sem comprometer o desempenho. Existem duas abordagens principais para escalabilidade: a vertical, que envolve adicionar mais recursos a um único servidor, e a horizontal, que distribui o sistema em vários servidores para atender às demandas crescentes de forma mais e�ciente (ZENKER et al., 2019). A escalabilidade é especialmente importante em sistemas que precisam lidar com muitos usuários simultâneos, como redes sociais, serviços de streaming e sites de comércio eletrônico durante eventos de alto tráfego. Além disso, a segurança do software é um aspecto crucial que visa a proteger o sistema e as informações contra ameaças e ataques maliciosos. Isso envolve autenticação, autorização, criptogra�a, controle de acesso e resiliência contra ameaças como vírus, malware e invasões (ZENKER et al., 2019). Outro aspecto importante é a tolerância a falhas, que permite ao sistema continuar funcionando adequadamente mesmo diante de falhas em alguns de seus componentes. O objetivo é evitar que uma falha isolada cause a interrupção total do sistema (ZENKER et al., 2019). Para garantir que um software seja compreensível, ele deve ser facilmente entendido e interpretado por humanos, especialmente pelos desenvolvedores e mantenedores do sistema. Disciplina Arquitetura de Software Um software compreensível possui uma estrutura clara, organização lógica e é bem documentado, o que facilita a manutenção, a correção de erros e a implementação de novas funcionalidades (PRESSMAN; MAXIM, 2016). A modi�cabilidade é a capacidade de um software ser facilmente modi�cado, adaptado ou estendido para atender a novos requisitos e melhorias. Isso é essencial em um cenário de desenvolvimento contínuo, em que mudanças frequentes são necessárias para acompanhar as demandas do mercado. Um software altamente modi�cável possui uma arquitetura bem de�nida, componentes bem encapsulados, baixo acoplamento entre módulos e uma clara separação de interesses (PRESSMAN; MAXIM, 2016). Por �m, a operabilidade refere-se à facilidade de operar e manter o software em ambiente de produção. Um software operável permite que os operadores, administradores e usuários �nais utilizem-no de forma e�ciente, realizem tarefas sem di�culdades e solucionem problemas de maneira ágil. A operabilidade está relacionada à facilidade de con�guração, instalação, monitoramento, gerenciamento de logs e relatórios de erros (PRESSMAN; MAXIM, 2016). É importante ressaltar que esses aspectos não são independentes e estão frequentemente interligados. Um software compreensível tende a ser mais modi�cável e operável, e um software altamente modi�cável facilita a operação e manutenção e�ciente do sistema. Portanto, ao projetar e manter sistemas de software, é essencial considerar esses aspectos para garantir um produto de qualidade, capaz de atender às necessidades em constante evolução do mercado ao longo do tempo. Principais técnicas para uma aplicação de qualidade A arquitetura de software é uma etapa crucial no desenvolvimento de sistemas e�cientes e escaláveis, capazes de crescer conforme as necessidades. Para alcançar esse objetivo, é fundamental estabelecer requisitos especí�cos de desempenho e escalabilidade, de�nindo metas claras para tempo de resposta, taxa de transferência e utilização de recursos. Uma análise detalhada da carga esperada no sistema é essencial para dimensionar a arquitetura adequadamente. Disciplina Arquitetura de Software Além disso, a escolha das tecnologias apropriadas desempenha um papel fundamental, pois diferentes tecnologias podem ter um impacto direto no desempenho e na escalabilidade do sistema. Aspectos como um projeto de banco de dados escalável, monitoramento contínuo, testes de carga e desempenho, bem como uma estratégia de escalabilidade bem de�nida, são elementos essenciais para garantir o sucesso do sistema em cenários reais de uso (ZENKER et al., 2019). As decisões arquiteturais não podem negligenciar a segurança em nenhum nível. Técnicas como redundância e isolamento de componentes críticos são fundamentais para enfrentar falhas e garantir a integridade do sistema. Medidas como controle de acesso, autenticação e criptogra�a são imprescindíveis para proteger dados sensíveis. Além disso, testes de segurança e de falhas, juntamente com um monitoramento e registros detalhados de eventos, desempenham um papel importante para assegurar a e�cácia das medidas de segurança implementadas. Os conceitos de compreensibilidade, modi�cabilidade e operabilidade são elementos-chave para um desenvolvimento bem-sucedido. Para alcançar esses objetivos, várias práticas podem ser adotadas (PRESSMAN; MAXIM, 2016): Abstração e modularização: dividir o sistema em módulos bem de�nidos, tornando a compreensão e a manutenção mais fáceis. Documentação: criar documentação clara sobre a arquitetura e os padrões de design, facilitando a compreensão dos diferentes aspectos do sistema. Padrões de nomenclatura: utilizar nomes signi�cativos para facilitar a compreensão e a comunicação entre os membros da equipe de desenvolvimento. Desenhar diagramas e modelos: representar a arquitetura por meio de diagramas e modelos visuais, proporcionando uma visão mais clara do sistema como um todo. Uso de padrões de projeto: aplicar padrões de projeto que promovam a modularidade e �exibilidade, facilitando futuras alterações no sistema. Automatização de implantação: automatizar o processo de implantação do software, reduzindo erros humanos e garantindo uma implantação mais rápida e consistente. Gerenciamento de con�guração: ter controle adequado das con�gurações do sistema, garantindo que as mudanças sejam gerenciadas de forma controlada e rastreável. Logs e monitoramento: implementar registro e monitoramento do sistema em produção, permitindo uma análise detalhada do desempenho e possíveis problemas. Projeto para con�abilidade: projetar o sistema com redundância e tolerância a falhas, aumentando a disponibilidade e con�abilidade do sistema. Testes de operação: realizar testes para garantir o desempenho e a operabilidade do sistema em diferentes cenários. Ao adotar esses conceitos e práticas, é possível criar um sistema mais compreensível, modi�cável e operável,facilitando a manutenção e evolução do software ao longo do tempo. Além disso, uma arquitetura bem planejada, segura e escalável é a base para um sistema de sucesso, capaz de atender às necessidades presentes e futuras dos usuários. Portanto, investir tempo e esforço na etapa de arquitetura é fundamental para o desenvolvimento de sistemas e�cientes, con�áveis e adaptáveis. Aplicação das táticas de design Disciplina Arquitetura de Software A aplicação efetiva dos conceitos apresentados anteriormente garantirá não apenas a entrega de um produto funcional, mas também a construção de um sistema con�ável, seguro e de fácil manutenção. Ao considerar cuidadosamente esses fatores desde o início do processo de desenvolvimento, o arquiteto de software poderá criar soluções sólidas que atendam às necessidades dos usuários e se adaptem às mudanças futuras. Abaixo estão alguns exemplos práticos da aplicação dos conceitos de desempenho, escalabilidade, segurança, tolerância a falhas, compreensibilidade, modi�cabilidade e operabilidade na etapa de arquitetura de software (PRESSMAN; MAXIM, 2016; ZENKER et al., 2019): Desempenho e escalabilidade Exemplo: Uma aplicação de comércio eletrônico. Desempenho: utilizar cache para armazenar dados frequentemente acessados, minimizando o tempo de resposta para os usuários. Quando um usuário faz uma solicitação à aplicação, o servidor de aplicação veri�ca se os dados necessários estão armazenados em um cache. Se os dados estiverem no cache, o servidor os recupera diretamente do cache, o que é muito mais rápido do que acessar o banco de dados. Escalabilidade: projetar a arquitetura de forma que a aplicação possa ser facilmente distribuída em múltiplos servidores, a �m de lidar com um aumento substancial de tráfego durante picos de demanda, como vendas sazonais. Dessa forma, a aplicação é capaz de lidar com um maior número de requisições simultâneas, pois a carga é distribuída entre os servidores disponíveis. Além disso, os servidores de aplicação podem ser facilmente Disciplina Arquitetura de Software adicionados ou removidos da arquitetura conforme a necessidade, permitindo que a aplicação seja dimensionada de forma dinâmica para atender às demandas �utuantes de tráfego. Segurança e tolerância a falhas Exemplo: Sistema de gerenciamento de dados con�denciais em uma instituição �nanceira. Segurança: implementar autenticação e autorização robustas, criptografar dados sensíveis em repouso e em trânsito, e realizar auditorias regulares para detectar atividades suspeitas. Tolerância a falhas: utilizar técnicas como replicação de servidores e balanceamento de carga para garantir a disponibilidade contínua do sistema, mesmo em caso de falhas em componentes individuais. A replicação dos servidores de aplicação permite que múltiplas cópias da aplicação sejam executadas em servidores separados. Isso garante que, se um servidor falhar, outros possam assumir o processamento das requisições. Compreensibilidade, modi�cabilidade e operabilidade Exemplo: Sistema de gerenciamento de tarefas em uma equipe de desenvolvimento de software. Compreensibilidade: organizar o código-fonte em módulos bem de�nidos e utilizar padrões de projeto claros para facilitar a compreensão do funcionamento do sistema. Modi�cabilidade: seguir princípios de design, como o da separação de responsabilidades, a �m de tornar o código facilmente modi�cável sem afetar outras partes do sistema. Operabilidade: incluir recursos, como logs detalhados e métricas para monitorar o desempenho do sistema em tempo real, facilitando a identi�cação e correção de problemas operacionais. Esses exemplos ilustram como os conceitos de arquitetura de software podem ser aplicados para garantir que o sistema atenda a requisitos importantes, como desempenho, segurança e facilidade de manutenção. É essencial considerar esses fatores desde o início do processo de arquitetura, para evitar problemas futuros e tornar o software robusto e con�ável. Videoaula: Táticas de design Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Neste vídeo, exploraremos os princípios essenciais de desempenho e escalabilidade, segurança e tolerância a falhas, bem como compreensibilidade, modi�cabilidade e operabilidade. Descobriremos como esses elementos fundamentais se entrelaçam para moldar sistemas Disciplina Arquitetura de Software complexos e aplicações inovadoras. Ao desvendar os segredos por trás dessas áreas-chave, o vídeo oferecerá uma visão panorâmica dos pilares que sustentam a uma aplicação de qualidade. Assista e amplie seu conhecimento nesse importante mundo da arquitetura de software! Saiba mais A seguir, estão algumas ferramentas e recursos que podem fornecer exemplos e auxiliar o aprendizado sobre os temas abordados nesta aula: Desempenho e escalabilidade Apache JMeter: uma ferramenta de teste de carga de código aberto amplamente utilizada para medir o desempenho e a escalabilidade de aplicações web, serviços e servidores. Segurança e tolerância a falhas OWASP WebGoat: uma aplicação web de código aberto propositalmente insegura, desenvolvida para �ns educacionais, que ensina sobre vulnerabilidades de segurança em aplicações web. Chaos Monkey: uma ferramenta de engenharia de caos desenvolvida pela Net�ix, que introduz aleatoriamente falhas em componentes de sistemas distribuídos para testar a tolerância a falhas. Compreensibilidade, modi�cabilidade e operabilidade SonarQube: uma plataforma de análise de código-fonte que identi�ca problemas de qualidade, segurança e compreensibilidade do código, auxiliando na sua modi�cação e operabilidade. https://jmeter.apache.org/ https://www.owasp.org/index.php/OWASP_WebGoat_Project https://netflix.github.io/chaosmonkey/ https://www.sonarqube.org/ Disciplina Arquitetura de Software Docker: uma plataforma de virtualização de contêineres que permite empacotar, distribuir e executar aplicações em ambientes isolados, melhorando a operabilidade e a portabilidade do software. (Observação: os sites indicados estão originalmente em língua inglesa, mas você pode utilizar a opção de tradução automática do seu navegador, se preferir.) Referências PRESSMAN, R. S.; MAXIM, B. R. Engenharia de software: uma abordagem pro�ssional. 8ª ed. Porto Alegre: AMGH, 2016 ZENKER, Aline M.; SANTOS, Jailson Costa dos; COUTO, Júlia M C.; et al. Arquitetura de sistemas. Porto Alegre: Grupo A, 2019. E-book. ISBN 9788595029767. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788595029767/. Acesso em: 17 jul. 2023. Aula 5 Resumo da unidade Técnicas e táticas para um software de qualidade https://www.docker.com/ https://integrada.minhabiblioteca.com.br/#/books/9788595029767/ Disciplina Arquitetura de Software Olá, estudante! Nesta Unidade, você mergulhou em conceitos fundamentais para a criação de sistemas bem-sucedidos. Você aprendeu a distinguir os requisitos funcionais, que descrevem as funcionalidades especí�cas do software, dos requisitos não funcionais, que dizem respeito às características do sistema, como desempenho, segurança, usabilidade, escalabilidade e outros atributos de qualidade que afetam a experiência do usuário. Entendeu que, muitas vezes, melhorar um atributo de qualidade pode exigir um sacrifício em outro, e explorou estratégias para equilibrar esses con�itos. Isso envolveu considerar como aprimorar um atributo de qualidade afeta os demais e como encontrar soluções que otimizem o desempenho geral do sistema. Investigou quem se bene�cia dos atributos de qualidade, abrangendo tanto os usuários �nais, que buscam um software e�ciente e fácil de usar, quanto o negócio, que almeja soluções seguras, escaláveis e que agreguem valor ao produto. Além disso, conheceu o Padrão ISO/IEC 9126-1:2001, que oferece diretrizes para avaliar e medir os atributos de qualidade do software. Compreendeu como as decisões arquiteturaispodem envolver con�itos entre os objetivos dos atributos de qualidade e os requisitos do negócio. Aprendeu a lidar com esses con�itos, encontrando soluções que atendam a ambas as necessidades. Explorou como fatores externos, como o mercado-alvo do software, o tempo disponível para desenvolvimento (time-to-market), o orçamento, os benefícios esperados, a vida útil do sistema e a agenda de lançamento, podem in�uenciar as decisões arquiteturais. Aprofundou-se nos princípios que norteiam a criação de uma arquitetura e�ciente, garantindo uma base sólida para a construção do software. Viu como a separação de preocupações é crucial para lidar com os diferentes aspectos do sistema de forma modular e organizada. Conheceu padrões e estilos arquiteturais comuns, como o Modelo-Visão-Controlador (MVC). Compreendeu como essas abordagens podem ser aplicadas para resolver problemas especí�cos de design e melhorar a manutenibilidade e a escalabilidade do sistema. Disciplina Arquitetura de Software Explorou como projetar o software para alcançar um bom desempenho, garantindo que o sistema seja rápido e e�ciente, mesmo sob carga elevada. Aprendeu sobre técnicas para escalabilidade, permitindo que o software cresça e se adapte às necessidades futuras. Entendeu a importância de garantir a segurança do software, protegendo-o contra ameaças externas e evitando vulnerabilidades. Além disso, aprendeu a projetar sistemas resilientes e com tolerância a falhas, de forma que continuem funcionando mesmo quando ocorrerem problemas inesperados. Conheceu como tornar o software fácil de entender, modi�car e operar, facilitando a manutenção e evolução do sistema ao longo do tempo. Ao �nal desta Unidade, você está equipado com conhecimentos abrangentes sobre a arquitetura de software e os atributos de qualidade que in�uenciam na criação de sistemas bem-sucedidos e adaptáveis. Está preparado para aplicar esses conceitos em seus projetos futuros, visando a entregar soluções de software e�cientes e alinhadas às necessidades do usuário e do negócio. Videoaula: Resumo da unidade Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Neste vídeo, exploraremos os conceitos fundamentais para criar sistemas bem-sucedidos. Serão abordados os requisitos funcionais e não-funcionais, estratégias para equilibrar atributos de qualidade, o Padrão ISO/IEC 9126-1:2001 para medir a qualidade do software e como as decisões arquiteturais podem afetar o negócio. Exploraremos princípios de uma arquitetura e�ciente, padrões arquiteturais e técnicas para melhorar o desempenho e a segurança do software. Estudo de caso Disciplina Arquitetura de Software Você é um empreendedor apaixonado por educação e tecnologia, e decidiu criar uma plataforma de aprendizagem online inovadora para atender às necessidades dos estudantes e pro�ssionais que desejam aprimorar suas habilidades e conhecimentos. O objetivo é fornecer uma experiência de aprendizado interativa, acessível e �exível, que permita aos usuários desenvolverem suas competências de forma personalizada e e�caz. A plataforma de aprendizagem online visa a oferecer cursos em diversas áreas, desde habilidades técnicas como programação e design grá�co, até conhecimentos mais amplos, como empreendedorismo e liderança. Além disso, a plataforma terá um recurso de avaliação de habilidades para ajudar os usuários a identi�carem suas competências e áreas de melhoria. Desa�o: Como uma pessoa empreendedora visionária, você entende a importância de lançar o produto no mercado rapidamente para capturar a atenção dos potenciais usuários e se destacar da concorrência. No entanto, você também reconhece a complexidade de desenvolver uma plataforma completa e robusta desde o início. Seu objetivo neste estudo de caso é criar um MVP (Produto Mínimo Viável) para uma plataforma de aprendizagem online, utilizando uma abordagem de lançamento em partes evolutivas. A ideia é começar com um conjunto básico de recursos e funcionalidades que permitam aos usuários experimentarem a proposta de valor da plataforma, enquanto novos recursos são adicionados ao longo do tempo para aprimorar a experiência do usuário e atingir o “time-to-market” o mais rápido possível. Tarefas: Identi�que os recursos e funcionalidades essenciais que comporão o MVP da plataforma de aprendizagem online. Explique como esses recursos atendem às necessidades dos usuários e contribuem para a proposta de valor do produto. Desenvolva um plano detalhado para o lançamento em partes evolutivas do produto. Divida o desenvolvimento em etapas especí�cas, indicando quais recursos e funcionalidades serão Disciplina Arquitetura de Software incluídos em cada etapa. Justi�que a ordem das etapas e explique como elas vão aprimorar a experiência do usuário ao longo do tempo. Descreva as estratégias que você usará para coletar feedback dos usuários durante o lançamento do MVP. Como você vai analisar e incorporar esse feedback para melhorar o produto nas próximas iterações? Discuta os principais desa�os e riscos que podem surgir durante o desenvolvimento e lançamento do MVP. Proponha soluções para mitigar esses desa�os e garantir o sucesso do projeto. Lembre-se de considerar aspectos técnicos, �nanceiros e de gestão de projetos ao elaborar seu plano para a criação do MVP e o lançamento em partes evolutivas da plataforma de aprendizagem online. Sua análise e estratégias devem ser fundamentadas, com base em pesquisa de mercado e análise das necessidades dos usuários potenciais. _______ Re�ita Assumir a liderança no desenvolvimento de um novo sistema é uma tarefa desa�adora e repleta de responsabilidades. Nesse cenário, é fundamental considerar alguns princípios essenciais para o sucesso do projeto. Primeiramente, ao elaborar a lista de requisitos funcionais e não funcionais, é fundamental manter o foco no propósito do sistema e nas necessidades do negócio. Cada requisito deve ser cuidadosamente avaliado para garantir que esteja alinhado com os objetivos da empresa e com as expectativas dos usuários �nais. Além disso, é importante atentar-se aos atributos de qualidade do sistema. A busca por um equilíbrio entre atributos de qualidade e de negócio é imprescindível para garantir que o sistema atenda às demandas do mercado e proporcione uma experiência positiva aos usuários. Na arquitetura do novo sistema, é crucial evitar complexidade desnecessária, buscando a simplicidade sempre que possível. Optar por padrões de desenvolvimento consolidados pode ser uma estratégia acertada, pois eles oferecem uma base sólida e bem testada para o projeto. Videoaula: Resolução do Estudo de caso Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Para criar um MVP (Produto Mínimo Viável) e�caz para a plataforma de aprendizagem online, é importante focar em um conjunto básico de recursos e funcionalidades que demonstrem a proposta de valor do produto. Com base nas informações fornecidas, sugerimos as seguintes etapas para o lançamento em partes evolutivas: Etapa 1: base do MVP Disciplina Arquitetura de Software Nesta fase inicial, concentre-se em construir os seguintes recursos essenciais: Página inicial e cadastro de usuários: crie uma página de entrada atraente e intuitiva para os usuários se cadastrarem na plataforma. Catálogo de cursos: disponibilize uma seleção inicial de cursos que os usuários poderão explorar e escolher. Sistema de pagamento: implemente um método de pagamento seguro para que os usuários possam se inscrever em cursos pagos. Aulas interativas: Etapa 2: melhorando a experiência Com o MVP básico no ar, é hora de aprimorar a experiência do usuário, adicionando recursos mais avançados: Fóruns de discussão: integre fóruns para que os alunos possaminteragir, compartilhar conhecimentos e tirar dúvidas. Avaliação de habilidades: implemente um sistema de avaliação para que os usuários possam medir seu progresso e identi�car áreas de melhoria. Certi�cados: ofereça certi�cados de conclusão para incentivar os usuários a concluírem os cursos. Personalização: Etapa 3: expansão de conteúdo e recursos Nesta fase, amplie o catálogo de cursos e a variedade de recursos para melhorar a plataforma: Novos cursos e instrutores: colabore com instrutores renomados e parceiros para aumentar o número de cursos disponíveis. Recursos complementares: adicione exercícios práticos, e-books e materiais extras para aprofundar o aprendizado. Funcionalidades sociais: integre recursos de compartilhamento nas redes sociais para ampliar o alcance da plataforma. Sistema de recompensas: Estratégia de feedback e melhoria contínua Para coletar feedback dos usuários, utilize pesquisas, avaliações de cursos e análise de métricas de uso. Com base nos resultados, priorize as melhorias e correções de bugs mais relevantes em cada nova etapa de lançamento. Desa�os e mitigação de riscos Os principais desa�os podem incluir a concorrência acirrada no mercado de educação online e problemas técnicos inesperados. Para mitigar esses riscos, faça uma análise detalhada da concorrência e garanta a estabilidade do sistema por meio de testes rigorosos. Resumo visual Disciplina Arquitetura de Software Fonte: elaborada pelo autor. Referências Disciplina Arquitetura de Software PRESSMAN, R. S.; MAXIM, B. R. Engenharia de software: uma abordagem pro�ssional. 8ª ed. Porto Alegre: AMGH, 2016 ZENKER, Aline M.; SANTOS, Jailson Costa dos; COUTO, Júlia M C.; et al. Arquitetura de sistemas. Porto Alegre: Grupo A, 2019. E-book. ISBN 9788595029767. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788595029767/. Acesso em: 17 jul. 2023. , Unidade 3 Documentação da Arquitetura de Software Aula 1 Documentação da arquitetura Introdução https://integrada.minhabiblioteca.com.br/#/books/9788595029767/ Disciplina Arquitetura de Software Olá, estudante! A arquitetura de software desempenha um papel fundamental ao de�nir a organização dos componentes, as relações entre eles e os princípios orientadores do desenvolvimento de sistemas. Ela proporciona uma visão global do sistema e contribui para a tomada de decisões críticas relacionadas à modularidade, reusabilidade, desempenho, segurança e outros atributos de qualidade. Além disso, a documentação da arquitetura é essencial para comunicar e compartilhar o conhecimento sobre a arquitetura, garantindo que sua visão seja compreendida por todos os membros da equipe. Nesta aula, você aprenderá sobre os elementos que compõem a arquitetura de software, incluindo a documentação, que auxilia no processo de design e ferramentas de comunicação. Além disso, exploraremos a integridade conceitual, que é composta por modelos para análise e ferramenta de rastreabilidade. Com esse conhecimento, você estará preparado para compreender e aplicar de forma efetiva os conceitos e práticas relacionados à arquitetura de software em seus futuros projetos. Bons estudos! Conceitos essenciais de arquitetura de software Disciplina Arquitetura de Software A arquitetura de software desempenha um papel fundamental no desenvolvimento de sistemas de software de qualidade. Ela de�ne a estrutura e organização do sistema, incluindo os componentes principais, as interações entre eles e as decisões de design (BASS; CLEMENTS; KAZMAN, 2012). Essa documentação auxilia o �uxo de comunicação e o ciclo de vida do software. Veremos, nesta aula, a importância da arquitetura de software e discutiremos os principais documentos utilizados para documentar essa arquitetura. Uma arquitetura bem projetada permite a modularidade, a reutilização de componentes, a escalabilidade e a manutenibilidade do sistema. Além disso, ela mitiga riscos técnicos e facilita a comunicação entre a equipe de desenvolvimento (SHAW; GARLAN, 1996). A ideia é provermos uma arquitetura que seja clara e bem de�nida com visão geral da estrutura do sistema, a qual ajude a identi�carmos seus componentes principais e suas interações. Isso faz que os desenvolvedores observem o sistema como um todo, bem como propicia o trabalho em equipe; dessa forma, evitam-se problemas de acoplamento excessivo entre os componentes (FARLEY, 2021). O processo de design é uma fase que pode in�uenciar a arquitetura de software. Farley (2021) explica que esse processo tem o foco em atuar nos requisitos do sistema e envolve a identi�cação e a seleção de estratégias de design apropriadas para atender aos requisitos funcionais e não funcionais do sistema. Durante esse processo, os arquitetos de software utilizam várias técnicas, métodos e ferramentas para criar uma arquitetura sólida e coerente. A integridade conceitual é um tópico importante para o desenvolvimento de software, pois garante que o sistema seja consistente, preciso e atenda aos requisitos estabelecidos. Ela se refere à consistência das de�nições, conceitos e abstrações utilizadas na arquitetura e no design Disciplina Arquitetura de Software do software (BASS; CLEMENTS; KAZMAN, 2012). Para alcançar a integridade conceitual, é necessário estabelecer um modelo para análise e utilizar ferramentas de rastreabilidade. De acordo com Kruchten (2004), o modelo para análise é uma representação estruturada e abrangente do software, que permite identi�car e analisar os componentes, as relações entre eles e suas propriedades. Ele ajuda a compreender a estrutura global do software e a validar sua integridade conceitual. Sommerville (2011) destaca que o modelo para análise pode incluir diagramas arquiteturais, diagramas de classes, diagramas de sequência e outras representações visuais que auxiliam a análise e a validação da arquitetura. Por �m, a utilização de um modelo para análise permite veri�car se os componentes estão corretamente de�nidos, se suas responsabilidades estão adequadamente atribuídas e se as interações entre eles são consistentes com as expectativas do sistema . Para manter a integridade conceitual ao longo do ciclo de vida do software, é fundamental utilizar as ferramentas de rastreabilidade. Essas ferramentas permitem rastrear as relações entre diferentes artefatos do software, desde os requisitos iniciais até as decisões de design e a implementação �nal (SOMMERVILLE, 2011). A rastreabilidade propicia a identi�cação de dependências, a detecção de possíveis impactos de mudanças e a garantia de que todos os elementos do sistema estejam alinhados com os requisitos e com a arquitetura. Essa abordagem ajuda a manter a integridade conceitual do software e facilita a evolução e a manutenção do sistema ao longo do tempo. Processos de design e arquitetura de software Disciplina Arquitetura de Software Vimos anteriormente que a documentação da arquitetura de software é uma atividade essencial para comunicar e preservar as decisões de design tomadas durante o desenvolvimento do sistema. Existem diversos documentos utilizados nesse processo, cada um com sua �nalidade especí�ca. A seguir, destacamos alguns dos principais documentos da arquitetura de software: 1. Visão geral da arquitetura (architecture overview): esse documento descreve uma visão geral do sistema, incluindo seus componentes, suas interações e as decisões arquiteturais fundamentais. 2. Diagramas de arquitetura: os diagramas de arquitetura são representações grá�cas da estrutura do sistema e de suas interações. O Quadro 1 a seguir mostra os principais tipos: Diagrama de Arquitetura Descrição Diagrama de Blocos Representa a arquitetura do sistema em termos de blocos ou componentes e suas interações de alto nível. Diagrama de Componentes Mostra a estrutura do sistema em termos de componentes, suas interfaces e dependências. Diagrama de Sequência Ilustra as interações entre objetos no sistema, destacando a sequência de mensagens trocadas entre eles ao longo do tempo. Diagrama de Casosde Uso Descreve as interações entre atores (usuários ou sistemas externos) e o sistema, mostrando os principais casos de uso e suas relações. Diagrama de Fluxo de Dados Representa o �uxo de dados entre processos e as entidades externas que interagem com o sistema. Quadro 1 | Modelos de diagramas de arquitetura. - Fonte: adaptado pelo autor a partir de Sommerville (2011). 1. Descrição da arquitetura (architecture description): esse documento detalha a arquitetura do sistema de forma mais aprofundada. Ele descreve os componentes individuais do sistema, suas responsabilidades, interfaces, restrições e requisitos não funcionais relevantes (BASS; CLEMENTS; KAZMAN, 2012). 2. Razões e decisões arquiteturais (architectural rationale): esse documento registra as razões e decisões por trás das escolhas arquiteturais feitas durante o desenvolvimento do sistema. Ele ajuda a justi�car as decisões tomadas e a fornecer um histórico para futuras alterações e evoluções da arquitetura (KRUCHTEN, 2004). 3. Padrões arquiteturais (architectural patterns): os padrões arquiteturais são soluções recorrentes para problemas de arquitetura. Eles facilitam o entendimento e a comunicação entre os membros da equipe de desenvolvimento (BASS; CLEMENTS; KAZMAN, 2012). Cervantes e Kazman (2016) destacam os diferentes estilos arquiteturais, como arquitetura em camadas, arquitetura orientada a serviços (SOA), arquitetura baseada em microsserviços, arquitetura cliente-servidor e muitos outros. Na arquitetura em camadas, o sistema é dividido em camadas ou níveis hierárquicos, de modo que cada camada possui uma responsabilidade especí�ca. Geralmente, a comunicação ocorre Disciplina Arquitetura de Software de forma unidirecional, das camadas inferiores para as superiores. Na arquitetura orientada a serviços, mais conhecida em inglês como service-oriented architecture (SOA), o sistema é composto por serviços independentes e reutilizáveis (BASS; CLEMENTS; KAZMAN, 2012). Cada serviço representa uma funcionalidade especí�ca e é projetado para ser autônomo, com interfaces bem de�nidas. Na arquitetura baseada em microsserviços, o sistema é dividido em serviços menores e independentes, que são responsáveis por funcionalidades especí�cas. A comunicação entre eles geralmente ocorre por meio de chamadas de application programming interface (API). Na arquitetura cliente-servidor, o sistema é dividido em duas partes principais: o cliente (que é a interface com o usuário) e o servidor (que fornece os recursos e a lógica de negócio). A comunicação entre o cliente e o servidor ocorre por meio de solicitações e respostas. Por �m, devemos citar a arquitetura em camadas MVC (Model-View-Controller), a qual é um subconjunto do estilo arquitetural em camadas, focado em sistemas de software para interface com o usuário. Esse estilo promove a separação de responsabilidades e facilita a manutenção e a evolução da interface com o usuário. Vale ressaltar que durante o processo de design, a comunicação efetiva entre os membros da equipe de desenvolvimento é essencial. Para isso, é importante utilizar ferramentas adequadas que permitam a colaboração e o compartilhamento de informações sobre a arquitetura do software. Aplicando conceitos de integridade conceitual e ferramentas de rastreabilidade Disciplina Arquitetura de Software Vimos anteriormente conceitos e a importância do uso de diagramas na arquitetura de software. Porém, algumas ferramentas de modelagem e design especí�cas podem dar suporte às implementações. Essas ferramentas oferecem recursos avançados, como a geração automática de diagramas a partir de modelos, a análise de dependências e a rastreabilidade dos requisitos (KRUCHTEN, 2004). Exemplos de ferramentas são Lucidchart, Draw.io, Microsoft Visio, StarUML, Visual Paradigm, e Astah. No entanto, vale ressaltar que a escolha e o uso das ferramentas devem ser adaptados às necessidades e à cultura da equipe de desenvolvimento. O foco deve ser na efetividade da comunicação e na facilidade de uso das ferramentas selecionadas (MAXIM; PRESSMAN, 2021). Por outro lado, as ferramentas de rastreabilidade são usadas para manter a integridade conceitual ao longo do ciclo de vida do software. Essas ferramentas permitem rastrear as relações entre diferentes artefatos do software, desde os requisitos iniciais até as decisões de design e a implementação �nal (SOMMERVILLE, 2011). A rastreabilidade auxilia a identi�cação de dependências, a detecção de possíveis impactos de mudanças e a garantia de que todos os elementos do sistema estejam alinhados com os requisitos e com a arquitetura. Existem diversas ferramentas de rastreabilidade disponíveis no mercado, as quais podem ser utilizadas para registrar e acompanhar as relações entre requisitos, componentes arquiteturais, testes, código-fonte e outros artefatos do sistema. Enterprise Architect: é uma ferramenta de modelagem abrangente que permite criar diagramas e modelos para representar a arquitetura do software. Ela oferece recursos de Disciplina Arquitetura de Software rastreabilidade, permitindo estabelecer links entre requisitos, componentes, testes e outras entidades do sistema (CERVANTES; KAZMAN, 2016). Visual Paradigm: é uma plataforma de modelagem e design que suporta a criação de diversos tipos de diagramas, como diagramas de caso de uso, diagramas de classe e diagramas de sequência. Ela também oferece recursos de rastreabilidade (CERVANTES; KAZMAN, 2016; SOMMERVILLE, 2011). Lucidchart: essa ferramenta foca na diagramação online e permite criar diagramas de arquitetura e estabelecer vínculos entre os elementos do sistema. Embora seja amplamente utilizada para criação de diagramas, também oferece recursos básicos de rastreabilidade (BASS; CLEMENTS; KAZMAN, 2012). JIRA: embora seja conhecida principalmente como uma ferramenta de gerenciamento de projetos e rastreamento de problemas, o JIRA também pode ser usado para rastrear relacionamentos entre requisitos, componentes e outras entidades do software (DOAR, 2011). Ele oferece recursos de rastreabilidade e é amplamente utilizado em ambientes de desenvolvimento ágil. Em conclusão, vamos imaginar um projeto de desenvolvimento de software para uma empresa. Os documentos de arquitetura descreveriam a estrutura do sistema, indicando como os componentes se relacionam, como os usuários interagem com o aplicativo, e quais tecnologias e padrões arquiteturais foram escolhidos. A equipe implementa um processo de design bem de�nido, que inclui a análise de requisitos, a modelagem da arquitetura, a de�nição de interfaces e a implementação. Após isso, a integridade conceitual é aplicada ao garantir que todas as decisões de design estejam em conformidade com os princípios e requisitos de�nidos no início do projeto. A equipe pode ainda utilizar diagramas UML para modelar a estrutura do sistema. Por �m, uma ferramenta de rastreabilidade para acompanhar as mudanças nos requisitos ao longo do tempo. Quando um requisito é modi�cado, a ferramenta registra a alteração, permitindo que a equipe saiba exatamente quando e por que a mudança foi feita. Videoaula: Documentação da arquitetura Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Agora que você está familiarizado com alguns dos conceitos básicos de arquitetura de software, é hora de aprofundar seus conhecimentos assistindo à videoaula sobre este conteúdo. Teremos a oportunidade de explorar algumas fases da arquitetura de software e a importância de sua documentação. Além disso, vamos abordar o processo de design e as ferramentas de Disciplina Arquitetura de Software comunicação, mostrando ainda como o modelo para análise e ferramenta de rastreabilidade são úteis. Saiba mais Sugerimos uma referência para que você possa aprofundar um pouco mais seus conhecimentos sobre arquitetura de software: O que é Arquitetura orientada a serviços?Referências https://aws.amazon.com/pt/what-is/service-oriented-architecture/ Disciplina Arquitetura de Software AMAZON. O que é Arquitetura orientada a serviços? Disponível em: https://aws.amazon.com/pt/what-is/service-oriented-architecture/. Acesso em: 15 jul. 2023. BASS, Len; CLEMENTS, Paul; KAZMAN, Rick. Software Architecture in Practice. 3a ed. Boston: Addison-Wesley, 2012. CERVANTES, Humberto; KAZMAN, Rick. Designing software architectures: a practical approach. Boston: Addison-Wesley Professional, 2016. DOAR, Matthew. Practical JIRA Administration: Using JIRA Effectively: Beyond the Documentation. Sebastopol: O’Reilly Media Inc., 2011. FARLEY, David. Modern Software Engineering: Doing What Works to Build Better Software Faster. Boston: Addison-Wesley Professional, 2021. KRUCHTEN, Philippe. The Rational Uni�ed Process: An Introduction. 3a ed. Boston: Addison- Wesley, 2004. MAXIM, B. R.; PRESSMAN, Roger S. Engenharia de software: uma abordagem pro�ssional. Porto Alegre: Bookman, 2021. SHAW, Mary; GARLAN, David. Software Architecture: Perspectives on an Emerging Discipline. Upper Saddle River: Prentice Hall, 1996. SOMMERVILLE, Ian. Engenharia de software. São Paulo: Pearson Education, 2011. Aula 2 Decisões arquiteturais https://aws.amazon.com/pt/what-is/service-oriented-architecture/ Disciplina Arquitetura de Software Introdução Olá, estudante! A arquitetura de software é um campo essencial no desenvolvimento de sistemas complexos e de larga escala. Ela envolve a tomada de diversas decisões ao longo do processo de criação, desde a concepção até a implementação. Essas decisões têm o poder de moldar a estrutura e o comportamento do sistema, in�uenciando diretamente sua qualidade, desempenho e capacidade de evolução. Nesta aula, focaremos nas decisões que permeiam a arquitetura de software, com destaque para as decisões existenciais, descritivas e executivas. As decisões existenciais são aquelas que determinam a própria existência do sistema, como a escolha entre desenvolver um novo sistema ou adaptar um existente. Já as decisões descritivas são responsáveis por de�nir a estrutura, os componentes e as interações do sistema. Por �m, as decisões executivas englobam a de�nição de estratégias, políticas e diretrizes que guiam o desenvolvimento do sistema. Aproveite essa jornada no mundo da arquitetura de software. Bons estudos! Conceitos de decisões arquitetônicas em softwares Disciplina Arquitetura de Software Barbosa (2009) de�ne uma decisão arquitetural como sendo “uma escolha entre as alternativas de design arquitetural, que se propõe a alcançar um ou mais atributos de qualidade do sistema, por meio de estruturas ou regras que ela envolve ou de�ne”. Para tanto, a seguir, apresentaremos os três tipos principais. O primeiro tipo engloba as decisões existenciais, responsáveis por de�nir a própria existência do sistema. Elas mostram que devem existir um ou mais elementos arquiteturais no projeto da construção do software (BARBOSA, 2009; PFEIFER et al., 2022). Essas decisões estão relacionadas à escolha entre desenvolver um novo sistema ou adaptar um existente, além de determinar o escopo e os objetivos do projeto. Portanto, segundo Kruchten, Lago e Vliet (2006), elas são decisões de arquitetura que podem ser classi�cadas como estruturais e comportamentais e devem ser consideradas de forma positiva para o projeto. Ao enfrentar uma decisão existencial, os arquitetos de software devem considerar uma série de fatores, como a viabilidade técnica e econômica, as necessidades dos usuários e as demandas do negócio. Nesse processo, a avaliação de riscos também desempenha um papel crucial. Segundo Bass, Clements e Kazman (2012), é importante analisar a incerteza associada a cada opção e identi�car os riscos envolvidos, a �m de tomar uma decisão informada. Segundo Hofmeister, Nord e Soni (2000), essa abordagem pode reduzir o tempo de desenvolvimento e os riscos associados a um novo sistema. No entanto, é importante avaliar cuidadosamente a capacidade de o sistema existente suportar as mudanças desejadas e garantir que a arquitetura resultante seja �exível e escalável. O segundo tipo engloba as decisões descritivas, que são responsáveis por de�nir a estrutura, os componentes e as interações do sistema. Essas decisões envolvem a escolha de padrões de Disciplina Arquitetura de Software projeto, estilos arquiteturais, tecnologias e protocolos de comunicação, e têm um impacto signi�cativo na coesão, modularidade e �exibilidade do sistema. No processo de tomada de decisões descritivas, os arquitetos de software devem considerar diversas fontes de informação. Bass, Clements e Kazman (2012) destacam a importância de conhecer as melhores práticas e os padrões estabelecidos no campo da arquitetura de software. Esses conhecimentos podem ser aplicados para selecionar as abordagens mais adequadas para a estruturação do sistema. Além disso, a análise dos requisitos do sistema é essencial para tomar decisões descritivas informadas. É fundamental compreender as necessidades dos usuários, os objetivos do negócio e as restrições técnicas. Hofmeister, Nord e Soni (2000) enfatizam que a arquitetura de software deve ser projetada de forma a atender aos requisitos funcionais e não funcionais, como desempenho, segurança e escalabilidade. Por �m, há ainda as decisões executivas, que são responsáveis por de�nir estratégias, políticas e diretrizes que guiam o desenvolvimento do sistema (KRUCHTEN; LAGO; VLIET, 2006). Kruchten (2004) enfatiza que essas decisões envolvem aspectos relacionados aos processos de negócios, como design do desenvolvimento do software e a tomada de decisão a respeito de quais tecnologias e ferramentas devem ser envolvidas no projeto. Ao tomar decisões executivas, os arquitetos de software devem considerar uma variedade de fatores. Uma dessas considerações é a de�nição de requisitos não funcionais. Os requisitos não funcionais, como desempenho, usabilidade e segurança, têm um impacto direto na qualidade do sistema. Os requisitos devem ter uma de�nição clara e precisa para que sejam orientados da forma correta na arquitetura do software (BASS; CLEMENTS; KAZMAN, 2012). Aprofundando nos tipos de decisões arquiteturais Disciplina Arquitetura de Software Um aspecto importante a ser considerado nas decisões existenciais é o alinhamento com a estratégia de negócio. A escolha da arquitetura de software deve estar alinhada com os objetivos de longo prazo da organização. De acordo com Shaw e Garlan (1996), a arquitetura deve ser vista como uma estratégia para atingir metas organizacionais e permitir a evolução contínua do sistema ao longo do tempo. Além disso, as decisões existenciais também podem estar relacionadas à escolha de soluções comerciais prontas ou desenvolvimento interno. A decisão de adquirir um sistema comercial pode ser apropriada quando o sistema atende à maioria dos requisitos e oferece benefícios em termos de tempo de implementação e suporte. No entanto, é importante considerar a capacidade de personalização e integração dessas soluções com os sistemas existentes. Segundo Cervantes e Kazman (2016), a tomada de decisões existenciais é uma etapa crítica no projeto de arquiteturas de software. A seleção do tipo de sistema a ser desenvolvido, levando em consideração aspectos como custo, tempo e qualidade, pode afetar diretamente o sucesso do projeto. Farley (2021) ressalta que as decisões existenciais também devem considerar o contexto organizacional e a capacidade de a equipe de desenvolvimento lidar com os desa�os técnicos envolvidos. De acordo com Kruchten (2004), as decisões existenciais podem ainda ser in�uenciadas pelo processo de desenvolvimento de software adotado. Nesse sentido, metodologias ágeis de projeto podem favorecer a adaptação de sistemas existentes. Vimos anteriormente que, ao contrário das decisões existenciais, as decisões descritivas não de�nem partes do sistema, mas são responsáveis por de�nir sua estrutura, componentese interações (BARBOSA, 2009). Essas decisões envolvem a escolha de padrões de projeto, estilos Disciplina Arquitetura de Software arquiteturais, tecnologias e protocolos de comunicação, e têm um impacto signi�cativo na coesão, modularidade e �exibilidade do sistema. No processo de tomada de decisões descritivas, os arquitetos de software devem considerar diversas fontes de informação. Bass, Clements e Kazman (2012) destacam a importância de conhecer as melhores práticas e os padrões estabelecidos no campo da arquitetura de software. Esses conhecimentos podem ser aplicados para selecionar as abordagens mais adequadas para a estruturação do sistema. Além disso, a análise dos requisitos do sistema é essencial para tomar decisões descritivas informadas. É fundamental compreender as necessidades dos usuários, os objetivos do negócio e as restrições técnicas. Hofmeister, Nord e Soni (2000) enfatizam que a arquitetura de software deve ser projetada de forma a atender aos requisitos funcionais e não funcionais, como desempenho, segurança e escalabilidade. Farley (2021) destaca a importância de incorporar medidas de segurança em todas as camadas do sistema para garantir a proteção adequada dos dados e a con�dencialidade das informações quando das decisões executivas. Cabe ressaltar a segurança do sistema. A proteção de dados sensíveis, a prevenção de ataques cibernéticos e a conformidade com regulamentações são aspectos que devem ser considerados na arquitetura de software. A escalabilidade é outro atributo importante a ser considerado nas decisões executivas. A capacidade de um sistema lidar com um aumento na carga de trabalho e no número de usuários é fundamental para garantir um desempenho e�ciente. Nesse sentido, a escolha de abordagens escaláveis, como a distribuição de carga e a escalabilidade horizontal, pode permitir que o sistema se adapte às necessidades em constante evolução (HOFMEISTER; NORD; SONI, 2000). Aplicando os conceitos das decisões arquitetônicas Disciplina Arquitetura de Software As decisões existenciais são aquelas que têm um impacto duradouro e fundamental no sistema. Em muitos casos, as decisões existenciais são difíceis de serem modi�cadas posteriormente sem causar grandes impactos. São como a espinha dorsal do software, in�uenciando sua estrutura, escalabilidade e manutenibilidade. Re�itamos sobre um exemplo: imagine um novo projeto para desenvolver um sistema de gerenciamento de projetos em uma empresa de TI. Uma decisão existencial seria escolher entre uma arquitetura monolítica e uma arquitetura baseada em microsserviços. Essa decisão terá um grande impacto na estrutura do sistema, na forma como os componentes se comunicam e na escalabilidade do software. Ela também afetará as equipes de desenvolvimento, pois requer diferentes habilidades e abordagens para implementação e manutenção. Vale ressaltar que, ao tomar decisões existenciais, os arquitetos de software devem buscar um equilíbrio entre os benefícios de desenvolver um novo sistema e os custos e riscos associados a essa abordagem. Essas decisões devem ser baseadas em uma análise cuidadosa das necessidades do negócio, das demandas dos usuários, dos recursos disponíveis e das restrições do projeto. Por sua vez, as decisões descritivas estão relacionadas à documentação e comunicação da arquitetura de software; descrevem como o sistema foi projetado e explicam as decisões existenciais tomadas. Essas decisões são importantes para garantir que todas as partes interessadas, incluindo a equipe de desenvolvimento, gerentes e stakeholders, compreendam a estrutura do sistema e possam colaborar de forma e�caz. Vejamos um exemplo prático: voltando ao cenário que acabamos de apresentar sobre um sistema de gerenciamento de projetos, uma decisão descritiva seria a criação de documentos Disciplina Arquitetura de Software detalhados de arquitetura, incluindo diagramas de alto nível e descrições dos padrões arquiteturais utilizados. Essa documentação ajudaria os membros da equipe a compreender melhor a arquitetura e garantiria que todos estejam alinhados em relação às decisões tomadas. Kruchten (2004) destaca a importância de selecionar o estilo arquitetural mais apropriado com base nas características e nos requisitos do sistema em questão. Cervantes e Kazman (2016) ressaltam que a aplicação correta de padrões de projeto pode melhorar a qualidade, a manutenibilidade e a extensibilidade do sistema. Sobre as decisões executivas, vimos que elas se referem a escolhas feitas durante a implementação, evolução e manutenção do sistema. Elas são tomadas com base nas decisões existenciais e podem ser adaptadas de acordo com as necessidades do projeto e as mudanças nos requisitos. Por isso, Cervantes e Kazman (2016) enfatizam que as decisões sobre as tecnologias a serem utilizadas devem considerar tanto os requisitos técnicos quanto os objetivos do negócio. A seleção adequada de tecnologias, linguagens de programação e frameworks pode in�uenciar a e�ciência e a manutenibilidade do sistema. Além disso, as decisões executivas também devem levar em consideração o desempenho do sistema. KRUCHTEN (2004) destaca a importância de medir e avaliar o desempenho do sistema para identi�car possíveis melhorias. A otimização de recursos, a minimização de gargalos e a melhoria do tempo de resposta são aspectos que podem ser abordados na arquitetura de software. Consideremos um exemplo prático: durante a implementação do sistema de gerenciamento de projetos visto anteriormente, a equipe pode tomar uma decisão executiva de adotar um framework especí�co para lidar com autenticação e autorização dos usuários. Essa decisão é uma implementação detalhada da decisão existencial de escolher uma arquitetura baseada em microsserviços, que exige uma abordagem �exível e descentralizada para gerenciar as permissões de acesso. Videoaula: Decisões arquiteturais Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Agora que você está familiarizado com alguns dos conceitos de arquitetura de software, é hora de aprofundar seus conhecimentos assistindo à videoaula deste conteúdo. Veremos como são feitas as decisões do tipo existenciais, as decisões descritivas, decisões executivas. Elas desempenham um papel fundamental no desenvolvimento de sistemas. Além disso, vamos abordar a aplicação dos atributos das decisões arquitetônicas, mostrando como esses elementos in�uenciam a construção e a evolução de software. Disciplina Arquitetura de Software Saiba mais Sugerimos uma referência para que você possa aprofundar um pouco mais seus conhecimentos sobre a metodologia ágil no processo de arquitetura de software, con�ra a matéria Metodologia Ágil - O que é? Referências https://www.alura.com.br/artigos/o-que-e-metodologia-agil https://www.alura.com.br/artigos/o-que-e-metodologia-agil Disciplina Arquitetura de Software ALURA. Metodologia Ágil – O que é? Disponível em: https://www.alura.com.br/artigos/o-que-e- metodologia-agil. Acesso em: 1 ago. 2023. BARBOSA, Guilherme Mauro Germoglio. Um livro-texto para o ensino de projeto de arquitetura de software. Dissertação (Mestrado em Ciência da Computação) – Universidade Federal de Campina Grande, Centro de Engenharia Elétrica e Informática. Campina Grande, 2009. Disponível em: http://dspace.sti.ufcg.edu.br:8080/xmlui/bitstream/handle/riufcg/12033/GUILHERME%20MAUR O%20GERMOGLIO%20BARBOSA%20- %20DISSERTA%C3%87%C3%83O%20%28PPGCC%29%202009..pdf. Acesso em: 28 jul. 2023. BASS, Len; CLEMENTS, Paul; KAZMAN, Rick. Software Architecture in Practice. 3a ed. Boston: Addison-Wesley, 2012. CERVANTES, Humberto; KAZMAN, Rick. Designing software architectures: a practical approach. Boston: Addison-Wesley Professional, 2016. FARLEY, David. Modern Software Engineering: Doing What Works to Build Better Software Faster. Boston: Addison-Wesley Professional, 2021. HOFMEISTER, Christine;NORD, Robert L.; SONI, Dilip. Applied Software Architecture. Boston: Addison-Wesley Professional, 2000. KRUCHTEN, Philippe. The Rational Uni�ed Process: An Introduction. 3a ed. Boston: Addison- Wesley, 2004. KRUCHTEN, Philippe. LAGO, Patricia; VLIET, Hans van. Building Up and Reasoning About Architectural Knowledge. In: Proceedings of the 2nd international conference on Quality of Software Architectures (QoSA), Västerås, Suécia, p. 43–58, 2006,. PFEIFER, Stefan; AKGÜL, Didem; RÖBENACK, Silke; TIHLARIK, Amelie; ALBERT, Bruno; ANACKER, Harald; DUMITRESCU, Roman. Design Decisions in the Architecture Development of Advanced https://www.alura.com.br/artigos/o-que-e-metodologia-agil https://www.alura.com.br/artigos/o-que-e-metodologia-agil http://dspace.sti.ufcg.edu.br:8080/xmlui/bitstream/handle/riufcg/12033/GUILHERME%20MAURO%20GERMOGLIO%20BARBOSA%20-%20DISSERTA%C3%87%C3%83O%20%28PPGCC%29%202009..pdf http://dspace.sti.ufcg.edu.br:8080/xmlui/bitstream/handle/riufcg/12033/GUILHERME%20MAURO%20GERMOGLIO%20BARBOSA%20-%20DISSERTA%C3%87%C3%83O%20%28PPGCC%29%202009..pdf http://dspace.sti.ufcg.edu.br:8080/xmlui/bitstream/handle/riufcg/12033/GUILHERME%20MAURO%20GERMOGLIO%20BARBOSA%20-%20DISSERTA%C3%87%C3%83O%20%28PPGCC%29%202009..pdf Disciplina Arquitetura de Software Systems: Towards traceable and sustainable Documentation and Communication. Copenhague: NordDesign, 2022. SHAW, Mary; GARLAN, David. Software Architecture: Perspectives on an Emerging Discipline. Upper Saddle River: Prentice Hall, 1996. Aula 3 Visões arquiteturais Introdução Olá, estudante! A documentação de arquitetura de software é de suma importância para o desenvolvimento de sistemas complexos, permitindo uma compreensão clara e detalhada das decisões arquiteturais tomadas durante o processo de projeto. Entre várias abordagens de documentação arquitetural, três modelos têm se destacado como referências importantes na área: o 4+1 de Kruchten, os viewpoints de Rozanski e Woods, e os viewtypes do Software Engineering Institute (SEI). Cada um desses modelos oferece uma perspectiva única para representar a arquitetura, abordando as preocupações especí�cas dos stakeholders e proporcionando uma visão abrangente do sistema em desenvolvimento. No entanto, apesar dos muitos benefícios oferecidos por essas metodologias de documentação, elas também enfrentam desa�os e di�culdades na aplicação prática, exigindo uma abordagem cuidadosa e estruturada para atingir Disciplina Arquitetura de Software resultados efetivos e alinhados com os objetivos do projeto. Nesse sentido, esta aula tem o objetivo de esclarecer cada um desses modelos de forma mais detalhada. Bons estudos! Fundamentos dos modelos arquiteturais O Modelo 4+1 de Kruchten é uma abordagem de arquitetura de software proposta por Philippe Kruchten em 1995 (KRUCHTEN, 2004). Essa abordagem visa a fornecer uma visão completa e abrangente do sistema em desenvolvimento, ajudando os arquitetos de software na compreensão, comunicação e documentação da arquitetura do sistema. Várias organizações têm aplicado esse modelo com sucesso em projetos de diferentes tamanhos e domínios. Esse modelo combina quatro visões principais da arquitetura de software, juntamente com um conjunto adicional de casos de uso para capturar os requisitos funcionais do sistema. Disciplina Arquitetura de Software Figura 1 | Modelo 4+1 de Kruchten. - Fonte: adaptada pelo autor a partir de Kruchten (2004). Os viewpoints são uma abordagem sistemática para capturar diferentes perspectivas sobre a arquitetura de software, levando em consideração as preocupações especí�cas dos stakeholders, ou partes interessadas. Para enfrentar os desa�os inerentes a esse processo, diversos pesquisadores e pro�ssionais têm buscado abordagens inovadoras para capturar, comunicar e documentar a arquitetura de software. Entre essas abordagens, os viewpoints propostos por Rozanski e Woods (2012) se destacam como uma contribuição signi�cativa. O conceito de viewpoints foi introduzido por Garlan e Shaw (1993). Eles destacaram a importância de olhar para a arquitetura de software sob diferentes perspectivas para melhor entender as preocupações dos stakeholders. Essa ideia serviu de base para o desenvolvimento da abordagem de Rozanski e Woods, que aprimoraram essa visão ao fornecer uma estrutura sistemática para a utilização de viewpoints. Bass, Clements e Kazman (2012) destacam a importância da documentação arquitetural como um meio de comunicar a arquitetura de software de forma clara e compreensível para os stakeholders. Ao discutir a utilização de viewpoints e perspectivas, eles ressaltam que a criação de diferentes visões da arquitetura, cada uma com foco em preocupações especí�cas dos stakeholders, é essencial para garantir que todos os envolvidos tenham uma visão clara do sistema. Ao utilizar viewpoints, é possível obter uma visão mais abrangente do sistema, uma vez que cada viewpoint representa uma perspectiva especí�ca sobre a arquitetura (CLEMENTS; KAZMAN; KLEIN, 2002). Através da combinação e análise dessas diferentes visões, os arquitetos podem avaliar a qualidade e a adequação da arquitetura em relação aos requisitos e metas estabelecidas pelos stakeholders. Porém, vale ressaltar que a documentação arquitetural não deve se limitar a uma única visão, mas sim abranger múltiplos viewpoints que representem as perspectivas especí�cas de cada grupo de stakeholders (CLEMENTS et al., 2003). Disciplina Arquitetura de Software O Software Engineering Institute (SEI) é um centro de pesquisa e desenvolvimento patrocinado pelo Departamento de Defesa dos Estados Unidos. Ele se dedica a melhorar as práticas de engenharia de software. O SEI é responsável por instituir o modelo conhecido como Integração do Modelo de Maturidade de Capacidade (CMMI) para melhorar os processos de desenvolvimento de software em organizações. Também desenvolveu alguns modelos e viewtypes que facilitam a documentação e a comunicação das arquiteturas. Dentre os modelos propostos pelo SEI, destacam-se o Modelo de Visões e o Modelo de Viewtypes (CLEMENTS et al., 2003). O Modelo de Viewtypes, o qual é uma extensão do Modelo de Visões, descreve um conjunto especí�co de visões, denominadas “viewtypes”. Cada viewtype é uma representação arquitetural focada em um conjunto particular de elementos e relacionamentos, permitindo uma visualização mais detalhada de aspectos especí�cos do sistema (HOFMEISTER et al., 2002). Os viewtypes são particularmente úteis para organizar a documentação arquitetural e garantir que cada visão do sistema seja adequadamente comunicada aos stakeholders relevantes. Aprofundando nos modelos arquiteturais Vimos anteriormente alguns conceitos de visões declaradas por Kruchten (2004), os quais formam o modelo 4+1. Vamos agora explorar melhor esse modelo. A primeira dessas visões refere-se à visão lógica, por meio da qual seriam identi�cados os componentes principais do sistema, como catálogo de produtos, carrinho de compras e Disciplina Arquitetura de Software processamento de pedidos. Essa visão ajuda a entender como esses componentes estão interconectados e quais funcionalidades são fornecidas por cada um deles. Ela é descrita por meio de diagramas de classes, diagramas de pacotes ou outras notações adequadas para representar a estrutura lógica do software (SHAW; GARLAN, 1996). A próxima visão é a de desenvolvimento e aborda a organização do trabalho de desenvolvimento do software, identi�cando as diferentes unidades de trabalho atribuídas a equipes ou desenvolvedores (BASS; CLEMENTS; KAZMAN, 2012). Nessa visão, os responsáveis implementam cada componente do sistema. Por exemplo, uma equipe poderia ser responsável pelo desenvolvimento do catálogo de produtos, enquanto outra equipe cuidaria do carrinho de compras. A visão física, por sua vez, enfoca os aspectos de implantação e distribuição do sistema, descrevendo como os componentes do sistema são implantados em hardware especí�co (SHAW; GARLAN, 1996). Nessa visão, são ainda identi�cados os servidores,bancos de dados e outros recursos de hardware necessários para implantar o sistema de comércio eletrônico. Por último, a visão de processos concentra-se nos aspectos dinâmicos do sistema, descrevendo os �uxos de dados e as interações entre os diferentes componentes em tempo de execução (BASS; CLEMENTS; KAZMAN, 2012). Por exemplo, quando um cliente adiciona um item ao carrinho de compras, é necessário atualizar o catálogo de produtos e processar o pagamento. Além das quatro visões, o modelo 4+1 também incorpora uma quinta dimensão: os casos de uso. Esses descrevem as interações entre os atores externos e o sistema, representando os requisitos funcionais do software (KRUCHTEN, 2004). Eles são usados para capturar os principais cenários de uso do sistema e ajudar a validar a arquitetura proposta. Por sua vez, a abordagem desenvolvida por Rozanski e Woods (2012) é baseada na utilização de viewpoints para representar diferentes perspectivas do sistema. Cada viewpoint é desenvolvido em torno de um conjunto especí�co de stakeholders e suas necessidades. Essa abordagem garante que as decisões arquiteturais sejam tomadas levando em consideração as preocupações e prioridades de todos os stakeholders relevantes. Os viewpoints propostos por Rozanski e Woods incluem, por exemplo, o viewpoint de contexto (que descreve a relação entre o sistema e seu ambiente externo) e o viewpoint de informações (que se concentra nas necessidades e �uxos de dados dentro do sistema). Outros viewpoints, como o viewpoint de estrutura (que descreve a organização interna do sistema) e o viewpoint de comportamento (que se concentra nas interações e sequências de eventos dentro do sistema), também são fundamentais para uma visão abrangente da arquitetura. Por �m, vimos que o Modelo de Visões do SEI é uma abordagem que promove a representação da arquitetura de software a partir de diversas perspectivas, conhecidas como “visões”. Esse modelo enfatiza a importância de entender a arquitetura de múltiplos pontos de vista para melhor atender aos interesses e necessidades dos stakeholders envolvidos no projeto (ROZANSKI; WOODS, 2012). Cada visão no Modelo de Visões se concentra em uma área especí�ca da arquitetura, como lógica, processos, física e cenários, proporcionando uma compreensão mais abrangente e detalhada do sistema, conforme abaixo. Modelo de Visão Lógica Concentra na estrutura lógica do sistema de software e descreve os componentes principais do sistema, e as ROZANSKI & WOODS (2012) Disciplina Arquitetura de Software pendências funcionais entre eles Modelo de Visão de Processos Concentra nos aspectos relacionados à execução do sistema, como a distribuição de tarefas e a coordenação entre processos e threads HOFMEISTER et al. (2002) Modelo de Visão Física Aborda os aspectos da arquitetura relacionados à implantação do software em hardware especí�co, incluindo a distribuição física dos componentes em diferentes nós de processamento MEDVIDOVIC et al. (2000) Modelo de Visão de Cenários Descreve a arquitetura sob a perspectiva de casos de uso e cenários de interação com o sistema, auxiliando na interação entre os stakeholders e o software em situações especí�cas CLEMENTS, KAZMAN & KLEIN (2002) Modelo de Visão de Informação Foca nos aspectos relacionados à gerência e à organização no sistema CLEMENTS et al. (2003) Quadro 1 | Modelo de visões do SEI. - Fonte: elaborado pelo autor. Aplicando os modelos arquiteturais Disciplina Arquitetura de Software No que tange às ferramentas de mercado que utilizam o modelo 4+1, existem várias opções disponíveis. Por exemplo, o Processo Uni�cado Racional (RUP), descrito por Kruchten (2004), é uma metodologia que incorpora o modelo 4+1 em suas diretrizes de desenvolvimento de software. A RUP fornece um conjunto de práticas e modelos arquiteturais que auxiliam o projeto e a implementação de sistemas de software. O Enterprise Architect, da Sparx Systems, é uma ferramenta popular que permite a criação de diagramas de classes, diagramas de sequência e outros modelos arquiteturais necessários para representar as diferentes visões do sistema. Outras ferramentas, como o Visual Paradigm, MagicDraw e Lucidchart, também oferecem recursos semelhantes para a modelagem de software com base no modelo 4+1. Para aplicar efetivamente a abordagem dos viewpoints de Rozanski e Woods (2012), existem várias ferramentas e métodos disponíveis. A modelagem arquitetural é uma técnica comum para representar os viewpoints em diagramas e outros artefatos visuais. Ferramentas como UML (Uni�ed Modeling Language) e SysML (Systems Modeling Language) são frequentemente Disciplina Arquitetura de Software usadas para criar representações visuais dos viewpoints. Além disso, a utilização de ferramentas de gerenciamento de requisitos e colaboração, como JIRA (DOAR, 2011) ou Con�uence, pode facilitar a coleta e análise das necessidades dos stakeholders, auxiliando a de�nição dos viewpoints relevantes. De forma prática, a utilização de viewtypes propostos pelo SEI ajuda a identi�car problemas potenciais e antecipar desa�os durante o desenvolvimento e a evolução do sistema (CLEMENTS et al., 2003). Traremos agora algumas formas de aplicarmos os viewtypes do SEI em diversos tópicos. Viewtype de segurança: foca em identi�car as medidas de segurança implementadas na arquitetura de software para proteger o sistema contra ameaças e ataques (CLEMENTS; KAZMAN; KLEIN, 2002). Viewtype de desempenho: processo que aborda questões relacionadas ao desempenho do sistema, como tempos de resposta, latência, utilização de recursos e capacidade de escalabilidade (MEDVIDOVIC et al., 2000). Viewtype de interface do usuário: é um serviço que se concentra na representação da interação do sistema com os usuários �nais (GARLAN; SHAW, 1993). Ele inclui elementos como grá�cos, �uxos de navegação e layout. Viewtype de banco de dados: processo que permite descrever a organização e a estrutura do banco de dados do sistema, mostrando como os dados são armazenados, acessados e manipulados pela arquitetura (CLEMENTS et al., 2003). Viewtype de comunicação: processo que ajuda a de�nir os mecanismos e protocolos utilizados para a comunicação entre os componentes do sistema distribuído (ROZANSKI; WOODS, 2012). A parte prática e aplicável dos viewtypes do SEI está relacionada com a adoção dos serviços acima durante o ciclo de desenvolvimento de software. Alguns exemplos de aplicação prática incluem: Em relação às viewtypes de segurança, a equipe pode identi�car possíveis vulnerabilidades e de�nir medidas de segurança para proteger o sistema contra ameaças e ataques, por meio de técnicas de criptogra�a, autenticação de usuários, controle de acesso e proteção contra injeção de código malicioso. Em relação às viewtypes de comunicação, podemos imaginar o uso de sistemas distribuídos, e a equipe pode usar esta visão para de�nir os mecanismos e protocolos de comunicação entre os componentes. Nas viewtypes de interface do usuário, a equipe pode utilizar esta visão para representar como o sistema interage com os usuários �nais. Isso pode incluir a criação de wireframes, protótipos interativos e designs de interface grá�ca. Videoaula: Visões arquiteturais Disciplina Arquitetura de Software Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Você já possui um conhecimento básico sobre visões arquiteturais de software; é hora de aprofundar seus conhecimentos assistindo a esta videoaula, na qual você terá a oportunidade de aprender o modelo 4+1 de Kruchten e os viewpoints de Rozanski e Woods. Também conhecerá os modelos de visões e viewtypes do SEI e quais são os benefícios para as equipes e para os stakeholders do projeto. Saiba mais Para aprofundar seu conhecimento sobre os temas relacionados à Integração do Modelo de Maturidade de Capacidade (CMMI), recomendamos a leitura do capítulo8.6 do livro Gestão de Tecnologia da Informação - Governança de TI: Arquitetura e Alinhamento entre Sistemas de Informação e o Negócio, de Carneiro Ramos Molinaro. Referências https://integrada.minhabiblioteca.com.br/reader/books/978-85-216-1972-7/pageid/144 https://integrada.minhabiblioteca.com.br/reader/books/978-85-216-1972-7/pageid/144 https://integrada.minhabiblioteca.com.br/reader/books/978-85-216-1972-7/pageid/144 Disciplina Arquitetura de Software BASS, Len; CLEMENTS, Paul; KAZMAN, Rick. Software Architecture in Practice. 3a ed. Boston: Addison-Wesley, 2012. CLEMENTS, Paul; KAZMAN, Rick; KLEIN, Mark. Evaluating Software Architectures: Methods and Case Studies. Boston: Addison-Wesley Professional, 2002. CLEMENTS, Paul; GARLAN, David; REED, Little; NORD, Robert; STAFFORD, Judith. Documenting software architectures: views and beyond. In: Proceedings of the 25th International Conference on Software Engineering, IEEE, p. 740-741, 2003. DOAR, Matthew. Practical JIRA Administration: Using JIRA Effectively: Beyond the Documentation. Sebastopol: O’Reilly Media Inc., 2011. GARLAN, David; SHAW, Mary. An Introduction to Software Architecture. Advances in Software Engineering and Knowledge Engineering. Pittsburgh: School of Computer Science, 1993. HOFMEISTER, Christine; NORD, Robert L.; SONI, Dilip. Documenting Software Architectures: Views and Beyond. Boston: Addison-Wesley Professional, 2002. KRUCHTEN, Philippe. The Rational Uni�ed Process: An Introduction. 3a ed. Boston: Addison- Wesley, 2004. MEDVIDOVIC, Nenad; TAYLOR, Richard N.; OREIZY, Peyman. A Classi�cation and Comparison Framework for Software Architecture Description Languages. IEEE Transactions on Software Engineering, 2000. ROZANSKI, Nick; WOODS, Eoin. Software systems architecture: working with stakeholders using viewpoints and perspectives. Boston: Addison-Wesley, 2012. SHAW, Mary; GARLAN, David. Software Architecture: Perspectives on an Emerging Discipline. Upper Saddle River: Prentice Hall, 1996. Disciplina Arquitetura de Software Aula 4 Estudo de caso – sistema de aluguel e streaming de �lmes (SASF) Introdução Olá, estudante! O cenário do entretenimento tem sido profundamente impactado pelo surgimento de plataformas digitais de aluguel e streaming de �lmes. Com o avanço da tecnologia e a crescente busca dos consumidores por conteúdo sob demanda, os sistemas de aluguel e streaming de �lmes (SASF) têm se tornado uma escolha popular para ciné�los e entusiastas do cinema. Nesta aula, exploraremos as funcionalidades do SASF e analisaremos o impacto das transmissões simultâneas, tempos de resposta, tamanho do inventário e o número de operações diárias. Também discutiremos a importância de um inventário bem gerenciado e como o crescimento constante do catálogo de �lmes pode afetar as operações diárias das empresas do setor. Além disso, abordaremos possíveis soluções e estratégias para otimizar a e�ciência e a capacidade de resposta dessas plataformas, garantindo uma experiência de usuário �uida e atraente. Compreender os aspectos do SASF vai prepará-lo para enfrentar os desa�os. Bons estudos! Conceitos do sistemas de aluguel e streaming de �lmes (SASF) Disciplina Arquitetura de Software O sistema de aluguel e streaming de �lmes (SASF) é uma plataforma inovadora que vem transformando a maneira como as pessoas acessam e desfrutam de conteúdo cinematográ�co. Desenvolvido por uma equipe de especialistas em tecnologia, o SASF proporciona aos usuários uma experiência abrangente e diversi�cada no mundo do entretenimento audiovisual. Uma das principais funcionalidades do SASF é o amplo catálogo de �lmes disponíveis para aluguel ou streaming sob demanda. Com a capacidade de acessar uma vasta biblioteca de títulos, desde clássicos do cinema até os lançamentos mais recentes, os usuários têm o poder de escolher entre diferentes gêneros, diretores e estilos cinematográ�cos, conforme suas preferências pessoais. Isso foi possível graças ao trabalho de Smith e Telang (2016), que destacam o impacto da tecnologia de streaming e big data na indústria do entretenimento, e também ao estudo de Barbosa (2009), que abordou a importância do ensino de projeto de arquitetura de software para desenvolver plataformas como o SASF. A interface intuitiva e amigável do SASF permite uma navegação �uida e e�ciente. Os usuários podem facilmente encontrar �lmes por meio de pesquisas, �ltros personalizados e recomendações inteligentes baseadas no histórico de visualizações, algoritmos de aprendizado de máquina e técnicas de análise de dados (RICCI et al., 2011). Essa capacidade de sugestão personalizada é fundamental para engajar os usuários e manter o interesse no serviço ao longo do tempo. Outro destaque do SASF é a sua compatibilidade com várias plataformas e dispositivos, como smartphones, tablets, smart TVs e computadores. Essa �exibilidade garante que os usuários possam desfrutar de seus �lmes favoritos em qualquer lugar e a qualquer momento. Funk (2003) destaca a mobilidade de consumo de mídia, um tema relevante na era digital, e que se refere à capacidade de as pessoas acessarem conteúdo de mídia, como �lmes, programas de TV, músicas e outros tipos de entretenimento, em diferentes dispositivos e locais. Disciplina Arquitetura de Software O sistema de aluguel e streaming de �lmes (SASF) enfrenta diversos desa�os relacionados a transmissões simultâneas, tempos de resposta, tamanho do inventário e número de operações por dia (BARBOSA, 2009). Esses desa�os são inerentes ao contexto da indústria do entretenimento e ao crescimento exponencial do consumo de conteúdo audiovisual através da internet e dispositivos móveis (FUNK, 2003). A alta demanda por �lmes e séries em streaming, associada à necessidade de atender a um grande número de usuários simultaneamente, pode levar a gargalos no sistema e redução do tempo de resposta para as requisições (SMITH; TELANG, 2016). Além disso, a diversidade do catálogo de �lmes e a necessidade de manter constantemente atualizado o inventário de títulos disponíveis representam um desa�o adicional (BARBOSA, 2009). Para enfrentar esses desa�os, o SASF pode adotar uma arquitetura de microsserviços, de modo que cada funcionalidade essencial é tratada por um componente independente (BARBOSA, 2009). Dessa forma, é possível distribuir a carga de trabalho e equilibrar o número de operações por dia, tornando o sistema mais escalável e capaz de atender a um maior número de usuários simultaneamente. Outras características, benefícios e desa�os do SASF Um dos maiores benefícios do SASF é que ele oferece a opção de download temporário de �lmes para visualização o�ine, atendendo à demanda de consumidores que desejam assistir a conteúdo sem depender da conexão à internet. Segundo Barbosa (2019), uma alternativa viável é Disciplina Arquitetura de Software assistir aos �lmes através da internet, utilizando o streaming de vídeo por meio de um dispositivo ou aplicativo que esteja compatível com o SASF. Essa opção dispensa a necessidade de aguardar a entrega física da mídia pelos correios ou o tempo de download do vídeo antes de iniciar a reprodução, uma vez que o conceito do streaming é possibilitar o consumo do arquivo de mídia à medida que ele é transmitido. Outra inovação trazida pelo SASF é a disponibilidade de conteúdo em resolução 4K e até mesmo em formatos de realidade virtual (VR). Tricart (2018) a�rma que essas tecnologias de ponta proporcionam uma experiência imersiva e envolvente aos usuários, permitindo que eles mergulhem no mundo dos �lmes de uma forma nunca antes experimentada. A resolução 4K oferece imagens com maior nitidez e detalhes visuais, aprimorando a qualidade visual das produções cinematográ�cas, enquanto a realidade virtual cria uma sensação de presença e interatividade, fazendo que os espectadores se sintam parte da narrativa. Por �m, a plataforma SASF incorpora sistemas de recomendação baseados em aprendizado de máquina, que, por meio de algoritmos avançados, analisam os padrões de comportamento e preferênciasdos usuários para sugerir �lmes altamente relevantes (MCDONALD; SMITH- ROWSEY, 2016). Funk (2003) destaca que uma estratégia importante para lidar com as transmissões simultâneas é a implementação de uma tecnologia de entrega de conteúdo e�ciente, como content delivery networks (CDNs). Isso possibilita a distribuição do conteúdo para servidores localizados em diferentes regiões geográ�cas, reduzindo a latência e garantindo uma melhor experiência de streaming para os usuários (SMITH & TELANG, 2016). O tamanho do inventário pode ser gerenciado de forma mais e�caz através da utilização de um sistema de cache distribuído. Essa abordagem permite armazenar em memória os títulos mais populares, tornando as consultas de disponibilidade mais rápidas e reduzindo o tempo de resposta do sistema (BARBOSA, 2009). Outra estratégia relevante é a adoção de técnicas de recomendação personalizada, com base no histórico de preferências e comportamento dos usuários (BARBOSA, 2009; RICCI et al., 2011). Ao oferecer sugestões de �lmes e séries mais relevantes para cada usuário, o sistema pode aumentar o engajamento e o número de operações por dia, uma vez que os usuários são direcionados para conteúdos de maior interesse (RICCI et al., 2011). O SASF pode ainda se bene�ciar da utilização de tecnologias emergentes, como realidade virtual (VR), para aprimorar a experiência de streaming de �lmes (TRICART, 2017). Ao oferecer conteúdos em VR, o sistema pode se destacar no mercado, atrair mais usuários e, consequentemente, aumentar o número de operações por dia. Além dos desa�os mencionados anteriormente, o SASF também deve considerar as tendências tecnológicas e mudanças no comportamento do consumidor para garantir sua relevância no mercado em constante evolução (FUNK, 2003). Com o crescimento da indústria de entretenimento digital, os consumidores estão cada vez mais exigentes em relação à qualidade do serviço e à disponibilidade de conteúdos variados e exclusivos (MCDONALD; SMITH-ROWSEY, 2016). Aplicação prática por estudo de caso de SASF Disciplina Arquitetura de Software A empresa de entretenimento Cine�ix lançou recentemente o sistema de aluguel e streaming de �lmes (SASF), que permite aos usuários alugar e assistir �lmes online. Com uma crescente base de clientes, a plataforma oferece um vasto inventário de �lmes licenciados e originais, tornando- se rapidamente popular entre os ciné�los. O SASF permite que vários usuários assistam ao mesmo �lme simultaneamente, e a empresa tem investido em infraestrutura de servidores para suportar a demanda crescente. No entanto, à medida que a base de clientes e o catálogo de �lmes expandem, a empresa começa a enfrentar desa�os de desempenho, como tempos de resposta lentos, problemas de transmissão simultânea e gargalos operacionais. Trazendo à tona o problema, foi visto que, com o rápido crescimento do SASF, o aumento no número de usuários simultâneos está afetando negativamente o desempenho da plataforma. Os tempos de resposta estão mais lentos, resultando em uma experiência de usuário insatisfatória. Além disso, a funcionalidade de transmissão simultânea de �lmes está enfrentando instabilidades, com usuários relatando pausas inesperadas ou interrupções nas sessões de streaming. O tamanho crescente do inventário de �lmes também está gerando gargalos nas operações diárias, tornando a administração e a manutenção da plataforma mais complexas. Nesse sentido, a equipe de engenharia e operações do Cine�ix conduziu uma análise detalhada para identi�car as principais causas dos problemas enfrentados pela plataforma. Observou-se que o aumento signi�cativo no número de usuários simultâneos está sobrecarregando os servidores de streaming e os bancos de dados. Os tempos de resposta lentos e as interrupções no streaming são resultado direto de a infraestrutura atual não conseguir lidar e�cientemente com a carga crescente. Além disso, o tamanho massivo do inventário de �lmes está impactando o gerenciamento de conteúdo e os processos de atualização. A equipe de operações está Disciplina Arquitetura de Software enfrentando desa�os em relação à manutenção do catálogo e à disponibilidade de �lmes para os usuários de forma ágil. Como solução, a empresa Cine�ix resolveu implementar uma série de ações estratégicas. Primeiramente, a empresa investirá em uma infraestrutura de servidores mais robusta e escalável, capaz de lidar com a crescente demanda de usuários simultâneos. Será feita uma parceria com provedores de serviços em nuvem para utilizar recursos elásticos, permitindo que a capacidade de streaming seja ampliada ou reduzida dinamicamente, de acordo com a demanda. Em relação à transmissão simultânea, a equipe de engenharia realizará uma otimização do algoritmo de distribuição de conteúdo, garantindo uma melhor gestão dos dados enviados aos usuários durante a reprodução dos �lmes. Isso reduzirá as pausas e interrupções nas sessões de streaming, melhorando a experiência do usuário. Quanto ao inventário de �lmes, a empresa adotará uma abordagem de gerenciamento de conteúdo mais e�ciente, automatizando processos de atualização e manutenção do catálogo. Com a implementação de ferramentas e �uxos de trabalho aprimorados, será possível adicionar e remover �lmes do inventário de forma mais rápida e con�ável. Por �m, para otimizar as operações diárias, o Cine�ix implementará tecnologias de monitoramento e análise de desempenho em tempo real. Isso permitirá que a equipe identi�que e resolva rapidamente quaisquer problemas operacionais, mantendo a plataforma funcionando de forma suave e con�ável. Em conclusão, com essas soluções implementadas, o sistema de aluguel e streaming de �lmes (SASF) do Cine�ix estará preparado para lidar com o crescimento contínuo de sua base de clientes, oferecendo uma experiência de usuário aprimorada, transmissões simultâneas mais estáveis, tempos de resposta rápidos e uma gestão e�ciente do inventário de �lmes. Videoaula: Estudo de caso – sistema de aluguel e streaming de �lmes (SASF) Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Agora que você conhece e entende os conceitos apresentados em nosso estudo de caso, é hora de aprofundar seus conhecimentos assistindo à videoaula sobre esse conteúdo. Você aprenderá as principais funcionalidades e capacidades do sistemas de aluguel e streaming de �lmes (SASF), além de compreender o impacto causado pelas transmissões simultâneas, os tempos de resposta, tamanho do inventário e número de operações por dia. A videoaula vai enriquecer seu aprendizado e proporcionar uma visão ampla sobre arquitetura de software. Bons estudos! Saiba mais Disciplina Arquitetura de Software Sugerimos uma referência para que você possa aprofundar um pouco mais seu conhecimento sobre serviços de streaming: Como funciona a Net�ix? (do DVD ao streaming). Referências https://tecnoblog.net/responde/como-funciona-a-netflix/ Disciplina Arquitetura de Software BARBOSA, Guilherme Mauro Germoglio. Um Livro-texto para o Ensino de Projeto de Arquitetura de Software. Dissertação de mestrado para o Curso de Pós-Graduação em Ciência da Computação da Universidade Federal de Campina Grande – Campus I, Campina Grande, 2009. Disponível em: http://docs.computacao.ufcg.edu.br/posgraduacao/dissertacoes/2009/Dissertacao_Guilherme MauroGerrmoglioBarbosa.pdf. Acesso em: 15 jul. 2023. FUNK, Jeffrey L. Mobile Disruptions: The Technologies and Applications Driving the Mobile Internet. Hoboken: Wiley, 2003. GOGONI, Ronaldo. Como funciona a Net�ix? (do DVD ao streaming). Technoblog, 2019. Disponível em: https://tecnoblog.net/responde/como-funciona-a-net�ix/. Acesso em: 20 jul. 2023. MCDONALD, Kevin; SMITH-ROWSEY, Daniel. The Net�ix Effect: Technology and Entertainment in the 21st Century. Londres: Bloomsbury Publishing PLC, 2016. RICCI, Francesco; ROKACH, Lior; SHAPIRA, Bracha; KANTOR, Paul B.Recommender Systems Handbook. Nova York: Springer, 2010. SMITH, Michael D.; TELANG, Rahul. Streaming, Sharing, Stealing: Big Data and the Future of Entertainment. Cambridge: The MIT Press, 2016. TRICART, Celine. Virtual Reality Filmmaking: Techniques & Best Practices for VR Filmmakers. Abingdon: Routledge, 2017. Aula 5 Resumo da unidade Gestão da informação http://docs.computacao.ufcg.edu.br/posgraduacao/dissertacoes/2009/Dissertacao_GuilhermeMauroGerrmoglioBarbosa.pdf http://docs.computacao.ufcg.edu.br/posgraduacao/dissertacoes/2009/Dissertacao_GuilhermeMauroGerrmoglioBarbosa.pdf https://tecnoblog.net/responde/como-funciona-a-netflix/ Disciplina Arquitetura de Software Olá, estudante! A arquitetura de software é fundamental para garantir a compreensão, organização e evolução de sistemas complexos. Para desenvolver uma arquitetura sólida, é necessário documentar as decisões e diretrizes tomadas ao longo do processo de design. Os documentos da arquitetura atuam como registros essenciais, permitindo que a equipe de desenvolvimento compreenda a estrutura do sistema e sua evolução ao longo do tempo. Essa documentação é crucial para garantir a integridade conceitual do projeto. Durante o processo de design arquitetônico, várias ferramentas podem ser utilizadas para auxiliar na comunicação e visualização das decisões tomadas. A utilização de modelos para análise e ferramentas de rastreabilidade facilita a identi�cação de dependências entre os diferentes componentes do sistema. Essas ferramentas permitem uma melhor compreensão das complexidades do projeto, possibilitando uma tomada de decisão mais informada. As decisões arquitetônicas podem ser categorizadas em três tipos principais: existenciais, descritivas e executivas. As decisões existenciais de�nem a estrutura fundamental do sistema, como a escolha da plataforma, padrões arquitetônicos e tecnologias a serem utilizadas. Já as decisões descritivas detalham a implementação de componentes especí�cos, como a escolha de bibliotecas e frameworks. As decisões executivas estão relacionadas a questões de negócio, como a priorização de requisitos e o planejamento de entregas. O modelo 4+1 de Philippe Kruchten é uma abordagem de documentação arquitetônica que utiliza cinco pontos de vista diferentes para descrever o sistema: lógico, de desenvolvimento, físico, de processos e de cenários. Essa abordagem permite uma visão holística e abrangente do projeto, garantindo que todos os aspectos importantes sejam considerados durante o processo de design. Os viewpoints são perspectivas especí�cas que destacam diferentes aspectos da arquitetura do sistema. A abordagem de Rozanski e Woods propõe vários viewpoints, como o de contexto, de composição, de informação e de estrutura, entre outros. Essa técnica ajuda a equipe a Disciplina Arquitetura de Software compreender as necessidades e restrições de cada parte interessada, facilitando o processo de design. O Software Engineering Institute (SEI) de�ne viewtypes como representações particulares de uma arquitetura que enfocam aspectos especí�cos, como o viewtype de design, de processos e de casos de uso. Essas visualizações permitem uma análise mais detalhada dos diferentes componentes e funcionalidades do sistema, facilitando a comunicação entre os membros da equipe. Para ilustrar a aplicação dos conceitos arquitetônicos mencionados acima, consideremos o sistema de aluguel e streaming de �lmes (SASF). Esse sistema tem o objetivo de fornecer aos usuários uma plataforma para alugar e transmitir �lmes online. Para projetar essa arquitetura, é necessário tomar diversas decisões existenciais, como a escolha da infraestrutura de nuvem e as tecnologias de streaming a serem utilizadas. Além disso, decisões descritivas, como a de�nição das APIs para interação com o catálogo de �lmes e as funcionalidades de pagamento, são fundamentais. As decisões executivas incluem a priorização dos recursos a serem implementados e o planejamento das entregas, levando em conta fatores como a quantidade de transmissões simultâneas suportadas, tempos de resposta ideais, tamanho do inventário e quantidade de operações por dia. Por �m, ao adotar o modelo 4+1 de Kruchten, os viewpoints de Rozanski e Woods e os viewtypes do SEI, a equipe de desenvolvimento pode documentar a arquitetura do SASF de forma abrangente, garantindo a integridade conceitual e permitindo uma análise detalhada de cada aspecto do sistema. Videoaula: Resumo da unidade Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Convidamos você a assistir a este vídeo que resume os conceitos fundamentais sobre arquitetura de software, abordados durante as aulas da Unidade 3. Nele, você vai compreender aspectos importantes, como design arquitetônico, tipos de decisões arquitetônicas, uso de ferramentas de rastreabilidade e a relevância dos modelos de visão e viewpoints. Além disso, vamos explorar os viewtypes do Software Engineering Institute (SEI), e as características e funcionalidades do sistema de aluguel e streaming de �lmes (SASF). Estudo de caso Disciplina Arquitetura de Software Para contextualizar sua aprendizagem, imagine que você trabalha para a empresa ABC, uma plataforma de e-commerce estabelecida no mercado há vários anos. No entanto, nos últimos tempos, a plataforma tem enfrentado diversos desa�os relacionados à sua arquitetura e à capacidade de evolução do sistema. A equipe de desenvolvimento percebeu que a falta de documentação arquitetônica adequada tem causado di�culdades na compreensão global do sistema e na comunicação entre os diferentes membros da equipe. Além disso, a arquitetura atual apresenta uma série de decisões tomadas ao longo do tempo, sem uma visão clara de como elas se relacionam entre si. Essa falta de uma visão abrangente tem prejudicado a capacidade de analisar o sistema para identi�car pontos de melhoria e para entender o impacto de possíveis mudanças. Para resolver esses desa�os, você será o protagonista na análise detalhada da arquitetura existente e deverá identi�car as principais de�ciências. Algumas etapas-chave dessa análise incluem: 1. Documentos da arquitetura: revisar toda a documentação da arquitetura disponível para identi�car lacunas e inconsistências. Será necessário veri�car se os principais componentes, módulos e �uxos do sistema estão devidamente documentados. Além disso, é importante avaliar a forma como a documentação está sendo compartilhada e atualizada pela equipe. 2. Auxílio ao processo de design e ferramentas de comunicação: analisar as ferramentas e práticas utilizadas pela equipe durante o processo de design da arquitetura. Veri�car se existem padrões de comunicação bem de�nidos e se as ferramentas de documentação e diagramação estão sendo empregadas de maneira adequada. 3. Integridade conceitual e modelo para análise: compreender a arquitetura como um todo e identi�car os principais conceitos e decisões arquitetônicas. Estabelecer um modelo para análise que permita relacionar as decisões e componentes arquitetônicos de forma coesa. Disciplina Arquitetura de Software 4. Ferramenta de rastreabilidade: avaliar a existência de uma ferramenta que permita rastrear as decisões arquitetônicas ao longo do tempo, auxiliando a equipe a entender as motivações por trás de cada escolha e facilitando a tomada de decisões futuras. 5. Decisões existenciais, descritivas e executivas: classi�car as decisões arquitetônicas existentes em categorias, como decisões estratégicas (existenciais) que impactam a direção geral do sistema, decisões descritivas que de�nem a estrutura e comportamento dos componentes, e decisões executivas que envolvem aspectos tecnológicos e de implementação. �. Atributos das decisões arquitetônicas: analisar os atributos das decisões, como a criticidade, estabilidade, �exibilidade e desempenho, para entender o impacto de cada uma naarquitetura e na evolução do sistema. 7. Modelo 4+1 de Kruchten e viewpoints de Rozanski e Woods: utilizar os modelos arquiteturais propostos para entender diferentes perspectivas do sistema e identi�car possíveis problemas e melhorias em cada uma delas. Após essa análise detalhada, a equipe estará mais bem preparada para criar uma solução efetiva para os problemas enfrentados na arquitetura da plataforma de e-commerce. Poderão ser propostas ações concretas para aprimorar a documentação, comunicação e tomada de decisões, garantindo uma arquitetura mais sólida, coesa e adaptável. _______ Re�ita Para auxiliá-lo a entender melhor o estudo de caso apresentado, pense que uma empresa de médio ou grande porte tenha muitos projetos envolvendo softwares. Em empresas com múltiplos projetos de software, a arquitetura desempenha um papel crucial para o sucesso e a e�ciência dos negócios. Ao padronizar o desenvolvimento, ela cria uma base sólida e consistente para todos os projetos, facilitando a colaboração entre as equipes e otimizando o processo de desenvolvimento (BASS; CLEMENTS; KAZMAN, 2012; DOAR, 2011; ROZANSKI; WOODS, 2012). Através da de�nição de padrões, estilos e tecnologias comuns, a arquitetura possibilita a integração entre os sistemas e a reutilização de componentes, evitando a duplicação de esforços e reduzindo custos de manutenção (SHAW; GARLAN, 1996). Além disso, a análise cuidadosa dos requisitos funcionais e não funcionais garante que as decisões arquitetônicas sejam bem fundamentadas, assegurando a escalabilidade, segurança e desempenho dos sistemas. O uso de ferramentas de modelagem e documentação é essencial para visualizar a estrutura dos sistemas e rastrear as decisões arquitetônicas ao longo do tempo, garantindo a integridade conceitual do projeto (KRUCHTEN, 2004). Investir na capacitação da equipe é uma prioridade, permitindo que os pro�ssionais estejam atualizados com as melhores práticas de arquitetura de software e preparados para aplicar soluções inovadoras e e�cazes. Dessa forma, a arquitetura de software é o alicerce para o crescimento sustentável das empresas, proporcionando e�ciência operacional, redução de custos, entrega de soluções inovadoras e destaque em um mercado cada vez mais competitivo. Videoaula: Resolução do estudo de caso Disciplina Arquitetura de Software Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Após realizar a análise detalhada da arquitetura da plataforma de e-commerce ABC e identi�car os problemas, vejamos algumas ações para solucioná-los e melhorar a qualidade geral do sistema. Documentação arquitetônica centralizada: primeiramente, a medida é estabelecer uma documentação arquitetônica centralizada e de fácil acesso para toda a equipe de desenvolvimento. Isso inclui a criação de diagramas de alto nível, descrição de componentes e interfaces, bem como documentação de decisões arquitetônicas importantes. Uma plataforma online de compartilhamento de documentos será utilizada para garantir a atualização constante da documentação, tornando-a uma referência con�ável para a equipe. De�nição de padrões de comunicação: serão estabelecidos padrões de comunicação para garantir que todas as informações relevantes sobre a arquitetura sejam adequadamente compartilhadas. Reuniões regulares de revisão arquitetônica possibilitarão que a equipe discuta e esclareça dúvidas sobre o design da arquitetura e as decisões tomadas. Isso promoverá uma comunicação mais e�ciente e evitará mal-entendidos. Modelo para análise: um modelo arquitetônico claro será proposto. Ele ajudará a entender a integridade conceitual da arquitetura e facilitará a análise de possíveis impactos decorrentes de mudanças futuras. Ferramenta de rastreabilidade: será adotada uma ferramenta de rastreabilidade para registrar as decisões arquitetônicas e suas motivações ao longo do tempo. Isso permitirá que a equipe compreenda o histórico das decisões e suas implicações na evolução da plataforma, contribuindo para a transparência do processo decisório. Classi�cação de decisões arquitetônicas: as decisões arquitetônicas serão classi�cadas em existenciais, descritivas e executivas, considerando seus respectivos atributos de criticidade, estabilidade, �exibilidade e desempenho. Essa classi�cação auxiliará a equipe a priorizar ações de melhoria e a direcionar esforços para as áreas mais críticas. Modelo 4+1 de Kruchten e viewpoints de Rozanski e Woods: ajudará a analisar o sistema sob diferentes perspectivas e garantir uma visão abrangente da arquitetura. Isso permitirá identi�car problemas em áreas especí�cas e propor soluções mais adequadas. Treinamento e capacitação: a equipe receberá treinamentos e capacitação em relação à utilização das ferramentas de comunicação, análise arquitetônica e tomada de decisões. Isso garantirá que todos os membros tenham o conhecimento necessário para aplicar as melhores práticas de arquitetura e alinhar-se aos modelos adotados. Com a implementação dessas ações, a arquitetura da plataforma do e-commerce será aprimorada, tornando-se mais clara, consistente e bem documentada. A equipe de Disciplina Arquitetura de Software desenvolvimento poderá tomar decisões mais informadas, identi�car pontos de melhoria com maior precisão e garantir uma evolução sustentável do sistema ao longo do tempo. Além disso, a comunicação entre os membros da equipe será aprimorada, evitando mal-entendidos e garantindo uma colaboração mais efetiva e e�ciente em todo o processo de desenvolvimento. Lembre-se de re�etir sobre como essas melhorias e soluções podem se adequar à realidade pro�ssional, considerando a diversidade de cenários e possibilidades. A busca contínua por aprimoramento e a aplicação dos conceitos aprendidos serão essenciais para o sucesso na área de arquitetura de software. Resumo visual Disciplina Arquitetura de Software Fonte: elaborada pelo autor. Referências Disciplina Arquitetura de Software BASS, Len; CLEMENTS, Paul; KAZMAN, Rick. Software Architecture in Practice. 3a ed. Boston: Addison-Wesley, 2012. DOAR, Matthew. Practical JIRA Administration: Using JIRA Effectively: Beyond the Documentation. Sebastopol: O’Reilly Media Inc., 2011. KRUCHTEN, Philippe. The Rational Uni�ed Process: An Introduction. 3a ed. Boston: Addison- Wesley, 2004. ROZANSKI, Nick; WOODS, Eoin. Software systems architecture: working with stakeholders using viewpoints and perspectives. Boston: Addison-Wesley, 2012. SHAW, Mary; GARLAN, David. Software Architecture: Perspectives on an Emerging Discipline. Upper Saddle River: Prentice Hall, 1996. , Unidade 4 Arquitetura e design de software Aula 1 Design de software: uma introdução Introdução Disciplina Arquitetura de Software Olá, estudante! Nesta aula, você aprenderá sobre o conceito principal do design de software e suas características essenciais. Exploraremos como o design de software contribui para a criação de soluções tecnológicas e�cientes e de qualidade. Ao longo da aula, analisaremos os elementos do processo de design de software, incluindo a identi�cação de requisitos, a modelagem de sistemas e a escolha de padrões de projeto apropriados. Compreenderemos como o design de software busca características como modularidade, reusabilidade e facilidade de manutenção. Essa aula contribuirá para o seu aprendizado, fornecendo uma base sólida em design de software e capacitando você a criar soluções robustas e e�cazes. Ao aplicar os princípios aprendidos, você poderá desenvolver sistemas escaláveis e intuitivos. Lembre-se de que o aprendizado contínuo é essencial para o crescimento pro�ssional. Aproveite ao máximo esta aula, mantenha-se motivado e curioso para explorar as aplicações práticas do design de software em sua carreira. Bom aprendizado! Princípios de design de software De acordo com Martin (2019), o design de software é um conceito crucial na áreada tecnologia, abrangendo a criação e o planejamento de programas e sistemas. O objetivo é organizar e Disciplina Arquitetura de Software estruturar esses sistemas de forma aprimorada, garantindo um funcionamento e�ciente e facilitando sua manutenção ao longo do ciclo de vida do software. No contexto do design de software, os elementos referem-se aos componentes essenciais e princípios fundamentais que compõem um sistema bem projetado. Esses elementos desempenham um papel crucial na criação de software de qualidade, sustentável e adaptável. Um dos principais elementos do design de software é a modularidade. A modularidade envolve dividir o código em componentes coesos e independentes, conhecidos como módulos. Cada módulo possui uma responsabilidade única e bem de�nida, facilitando alterações isoladas e reduz o impacto em outras partes do sistema. A modularidade promove a reutilização de módulos em diferentes contextos, tornando o sistema mais �exível e escalável. Outro elemento fundamental é a reusabilidade. Ela incentiva a criação de componentes genéricos e bem projetados, que podem ser aproveitados em diferentes projetos. Isso evita a duplicação de esforços e promove a e�ciência no desenvolvimento de software. A reusabilidade também contribui para a consistência e para a padronização, facilitando a compreensão e a manutenção do sistema. A �exibilidade é um elemento essencial no Design de Software. Um software �exível é capaz de se adaptar a mudanças nos requisitos e no ambiente em que está inserido. Isso é alcançado por meio da criação de arquiteturas que permitam a incorporação de novos recursos e acomodam evoluções futuras. A �exibilidade garante que o software permaneça relevante e e�caz ao longo do tempo. Outro elemento importante é a facilidade de manutenção. Sistemas bem projetados são fáceis de entender, depurar e modi�car. Adotar boas práticas de organização do código (como nomes claros e signi�cativos para variáveis, funções e classes) contribui para a manutenibilidade do software. A facilidade de manutenção é essencial para a correção de bugs, implementação de melhorias e atualizações, reduzindo os riscos de introduzir novos problemas durante o processo. Compreender os requisitos do sistema é um elemento-chave para o sucesso do projeto. Isso envolve a análise das necessidades do usuário, dos objetivos de negócio e das restrições técnicas. A modelagem do sistema, por meio de diagramas (como de classes, de sequência e de componentes), auxilia a visualização da estrutura e das interações entre os componentes. A de�nição de uma arquitetura adequada também é um elemento essencial do design de software. A arquitetura de�ne a estrutura global do sistema, incluindo os principais componentes, suas interações e as diretrizes para a implementação. Uma arquitetura bem projetada permite a evolução do sistema de forma controlada, facilitando a adição de novas funcionalidades e acomodando mudanças nos requisitos. Por �m, os padrões de projeto são elementos valiosos no design de software. Eles fornecem soluções para problemas recorrentes de design, baseadas em experiências anteriores. Os padrões de projeto fornecem diretrizes e melhores práticas que podem ser aplicadas em diferentes contextos, economizando tempo e esforço no processo de desenvolvimento. O design de software envolve a consideração cuidadosa e a aplicação desses elementos para criar sistemas e�cientes, �exíveis, fáceis de manter e robustos. Ao adotar esses elementos como princípios norteadores, os pro�ssionais de software podem projetar soluções de qualidade que atendam às necessidades dos usuários e superem os desa�os do desenvolvimento de software. Aprofundando no mundo do design de software Disciplina Arquitetura de Software Vamos nos aprofundar um pouco mais no design de software? Além das características mencionadas anteriormente, existem etapas, ferramentas, princípios, classi�cações e formulações que são fundamentais para o processo de design, de acordo com Fowler (1997), Gamma et al. (1995), Evans (2004) e Martin (2019). Vamos explorá-las para que você possa entender e aplicar esses conceitos de forma mais abrangente. Etapas do design de software: Análise de requisitos: compreender as necessidades do usuário, os objetivos de negócio e as restrições técnicas do sistema a ser desenvolvido. Modelagem: criar representações visuais do software, como diagramas de classes, diagramas de sequência e diagramas de componentes, para visualizar sua estrutura e interações. Arquitetura: de�nir a estrutura global do sistema, incluindo os componentes principais, suas interações e as diretrizes para a implementação. Implementação: codi�car o software com base na arquitetura e nas especi�cações de�nidas. Testes: realizar testes para veri�car se o software atende aos requisitos e funciona corretamente. Manutenção: realizar atividades de correção de bugs, implementação de melhorias e atualizações ao longo do ciclo de vida do software. Ferramentas de design de software: Disciplina Arquitetura de Software Editores de código: softwares que permitem escrever e editar o código fonte do software. Ambientes de desenvolvimento integrado (IDEs): ferramentas que oferecem recursos avançados para desenvolvimento, como depuração, sugestões de código e gerenciamento de projetos. Modelagem UML: ferramentas que auxiliam a criação de diagramas UML para representar a estrutura e o comportamento do software. Princípios de design de software: Princípio da responsabilidade única (SRP): cada módulo ou classe deve ter uma única responsabilidade. Princípio da abstração: esconder detalhes de implementação complexos e fornecer interfaces simpli�cadas. Princípio do aberto/fechado (OCP): o software deve ser aberto para extensão, mas fechado para modi�cação. Princípio da substituição de Liskov (LSP): as classes derivadas devem poder ser substituídas pelas classes base sem alterar o comportamento esperado. Princípio da inversão de dependência (DIP): depender de abstrações em vez de implementações concretas. Classi�cações de design de software: Design estrutural: concentra-se na organização e estrutura do software, como a de�nição de classes, interfaces e relacionamentos entre os componentes. Design comportamental: concentra-se no comportamento do software, como a de�nição de algoritmos, �uxos de controle e interações entre os componentes. Design arquitetural: concentra-se na de�nição da estrutura global do software, incluindo a divisão em camadas, componentes e suas interações. Formulações de design de software: Padrões de projeto: soluções para problemas recorrentes de design, baseadas em experiências anteriores, que fornecem diretrizes e melhores práticas. Princípios SOLID: conjunto de princípios que visam a promover a manutenibilidade, �exibilidade e extensibilidade do software. Após estudar esses elementos do design de software, você será capaz de resolver problemas, classi�car conceitos, interpretar modelos e situar os conhecimentos adquiridos. Essa compreensão profunda do design de software permitirá que você crie soluções robustas e e�cientes, atendendo às necessidades do usuário e do mercado. Continue se dedicando aos estudos e explore a aplicação desses conceitos no seu cotidiano pro�ssional. O design de software é uma habilidade valiosa e cada vez mais requisitada no mercado de tecnologia. Esteja preparado para se destacar e alcançar o sucesso na área. Vejamos um exemplo prático? Disciplina Arquitetura de Software Vamos agora explorar a aplicação do conteúdo sobre: design de software, características de design de software, elementos de design de software e soluções robustas por meio de exemplos práticos. Vejamos como esses conceitos podem ser aplicados no contexto pro�ssional. Imagine que você está trabalhando em um projeto de desenvolvimento de um sistema de gerenciamento de vendas para uma empresa de comércio eletrônico. Nesse caso, você precisará aplicar os princípios do design de software para criar uma solução e�ciente e robusta.Para começar, é fundamental realizar uma análise de requisitos detalhada. Você precisa compreender as necessidades dos usuários, os objetivos do negócio e as restrições técnicas do sistema. A partir dessa análise, você pode de�nir as funcionalidades principais do software e planejar a arquitetura do sistema. No processo de modelagem, você pode criar diagramas de classes para representar as entidades do sistema, como clientes, produtos e pedidos. Além disso, diagramas de sequência podem ser utilizados para visualizar o �uxo de interações entre os diferentes componentes do sistema. Essas representações visuais facilitam o entendimento da estrutura e das interações do software. Ao implementar o sistema, é importante utilizar boas práticas de codi�cação, como a modularização do código. Dividir o software em módulos coesos e independentes permite uma melhor organização e facilita a manutenção futura. Por exemplo, você pode criar um módulo responsável pelo cálculo de descontos e outro módulo para o processamento de pagamentos. Disciplina Arquitetura de Software Dessa forma, é possível realizar alterações isoladas em cada módulo, sem afetar o funcionamento do sistema como um todo. Durante o processo de testes, é essencial veri�car se o software atende aos requisitos estabelecidos e funciona corretamente. É possível criar casos de teste para cada funcionalidade do sistema, veri�cando se os resultados estão de acordo com o esperado. Além disso, a aplicação de técnicas de testes automatizados pode agilizar esse processo, garantindo a qualidade do software. Após o lançamento do sistema, a manutenção se torna uma etapa crucial. É importante realizar correções de bugs, implementar melhorias e atualizar o software de acordo com as necessidades do negócio e feedbacks dos usuários. Nesse sentido, a facilidade de manutenção do software, alcançada por meio de um design bem estruturado, é essencial para agilizar e facilitar essas atividades. Por �m, para garantir soluções robustas, é importante considerar a escalabilidade do sistema. Caso a empresa de comércio eletrônico experimente um aumento signi�cativo de vendas, o software precisa ser capaz de lidar com o aumento da carga de trabalho. Portanto, a escolha de uma arquitetura escalável e o uso de tecnologias adequadas são fundamentais para garantir um desempenho consistente e uma experiência satisfatória para os usuários. Esses exemplos práticos ilustram como os conceitos de design de software podem ser aplicados em situações reais. Ao compreender e aplicar esses princípios, você estará apto a criar soluções e�cientes, �exíveis e fáceis de manter, atendendo às necessidades dos usuários e do mercado. Continue explorando casos práticos, trabalhando em projetos reais e ampliando seus conhecimentos. O design de software é um tópico em constante evolução, e estar atualizado e preparado para os desa�os do mercado é fundamental para o sucesso na área de desenvolvimento de software. Videoaula: Design de software - uma introdução Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Boas-vindas à videoaula que vai transformar sua visão sobre design de software. Vamos mergulhar no fascinante mundo do design, explorando seus conceitos, características e elementos essenciais. Prepare-se para compreender o que é design de software, suas aplicações e como ele in�uencia a criação de soluções robustas. Acompanhe atentamente este vídeo, pois você verá exemplos práticos e receberá um roteiro completo do processo de design de software. Prepare-se para ampliar seus conhecimentos e dominar essa importante habilidade. Vamos começar essa jornada de aprendizado juntos! Disciplina Arquitetura de Software Saiba mais 1. Arquitetura de Software: a diferença entre arquitetura e design: este artigo mostra que a diferença entre arquitetura de software e design de software é frequentemente confusa para muitas pessoas, incluindo desenvolvedores. A arquitetura de software envolve a criação de uma solução estruturada que atenda a requisitos técnicos e de negócios, transformando características como �exibilidade, escalabilidade e segurança em uma solução viável. Por outro lado, o design de software se concentra no nível de código, de�nindo o escopo das classes, as responsabilidades dos módulos e os objetivos das funções. É importante que os desenvolvedores tenham conhecimentos sólidos em design de software e compreendam princípios como SOLID e padrões de design, enquanto os arquitetos de software têm a responsabilidade de planejar a estrutura de alto nível do software, selecionando padrões de arquitetura adequados, como microservices, arquitetura orientada a eventos e arquitetura serverless, para atender aos requisitos comerciais e operacionais. 2. Design de software: programação tática ou estratégica? Este artigo destaca que “o design de software busca isolar complexidades e simpli�car o código, tornando-o adequado para correções, manutenções e reaproveitamentos futuros” (SOTO, [s. d., s. p.]). Referências https://oieduardorabelo.medium.com/arquitetura-de-software-a-diferen%C3%A7a-entre-arquitetura-e-design-964ab38ea61a https://ilegra.com/blog/design-de-software-programacao-tatica-ou-estrategica/ Disciplina Arquitetura de Software EVANS, Eric. Domain-driven design: tackling complexity in the heart of software. Londres: Addison-Wesley Professional, 2004. FOWLER, Martin. Refactoring: Improving the design of existing code. In: 11th European Conference. Jyväskylä, Finlândia, 1997. GAMMA, Erich; et al. Design patterns: elements of reusable object-oriented software. Frankfurt: Pearson Deutschland GmbH, 1995. MARTIN, Robert C. Arquitetura limpa: o guia do artesão para estrutura e design de software. Rio de Janeiro: Alta Books Editora, 2019. SOTO, M. Design de software: programação tática ou estratégica? Ilegra, [s. d.]. Disponível em: https://ilegra.com/blog/design-de-software-programacao-tatica-ou-estrategica/. Acesso em: 14 ago. 2023. Aula 2 Design de software: visão geral Introdução Disciplina Arquitetura de Software Olá, estudante! Nesta aula, exploraremos os fundamentos essenciais do design de software e sua importância na criação de sistemas e�cientes. Abordaremos objetivos, restrições, alternativas, representações e soluções. Veremos como o design de software divide os sistemas em componentes coesos, promovendo modularidade e reusabilidade por meio do encapsulamento e soluções de conquista. Esses elementos são fundamentais para criar sistemas de qualidade, que atendam às necessidades dos usuários e sejam fáceis de manter. Prepare-se para mergulhar no mundo fascinante do design de software e explorar conceitos e práticas que impulsionam o desenvolvimento de software de excelência. Bons estudos! Visão geral e elementos essenciais Disciplina Arquitetura de Software A compreensão da visão geral do design de software é essencial para entender os elementos fundamentais desse processo. De acordo com Martin (2019), o design de software tem como objetivo principal criar soluções e�cientes e funcionais que atendam às necessidades dos usuários e do negócio. Por meio de um planejamento cuidadoso, é possível de�nir a estrutura e o comportamento do software, garantindo um sistema de alta qualidade e desempenho. Durante o processo de design, é importante considerar as restrições impostas, como prazos, recursos disponíveis e requisitos técnicos. Essas restrições ajudam a de�nir o escopo do projeto e a estabelecer limites realistas para o design, permitindo que os engenheiros de software tomem decisões informadas e otimizem o processo. O design de software envolve a exploração de uma variedade de alternativas, como tecnologias, arquiteturas e abordagens de desenvolvimento. A escolha adequada depende dos requisitos e das metas do software, podendo incluir arquiteturas em camadas, cliente-servidor ou orientada a serviços.A representação visual de ideias e conceitos é uma parte crucial do design de software, utilizando diagramas, esquemas e documentação clara e concisa. Essas representações visuais facilitam a comunicação e a compreensão do design, tanto entre os membros da equipe quanto entre a equipe e os stakeholders, além de auxiliar na manutenção do software no futuro. Segundo Martin (2019), a divisão adequada do software em componentes coesos é uma prática importante. Ela permite o desenvolvimento e manutenção independentes de diferentes partes do software, facilitando a escalabilidade e a evolução do sistema como um todo. A modularidade promove a reutilização de código, economizando tempo e esforço durante o processo de desenvolvimento. Disciplina Arquitetura de Software A conquista de um bom design de software envolve a combinação de diversos princípios e técnicas. Um princípio fundamental é a modularidade, que busca dividir o código em componentes coesos e independentes, conhecidos como módulos. Cada módulo deve ter uma responsabilidade única e bem de�nida, facilitando alterações isoladas e reduzindo o impacto em outras partes do sistema. A modularidade permite a reutilização de módulos em diferentes contextos e promove uma arquitetura mais �exível e escalável. Outro aspecto relevante é o encapsulamento, que visa a ocultar os detalhes internos do software e fornece interfaces bem de�nidas para interagir com o sistema. Isso facilita a manutenção e a evolução do software, pois as mudanças podem ser feitas dentro do módulo encapsulado sem afetar outras partes do sistema. Além disso, o encapsulamento promove a segurança, uma vez que impede o acesso não autorizado a partes sensíveis do software. Em resumo, a visão geral do design de software abrange uma série de elementos interligados que contribuem para a criação de soluções e�cientes e funcionais. Ao compreender os objetivos, restrições, alternativas, representações e soluções, além de aplicar a divisão adequada, conquistar e encapsular o software, os engenheiros de software podem desenvolver sistemas robustos, �exíveis e de alta qualidade. Princípios e elementos essenciais Segundo Martin (2019), no design de software, é crucial considerar as restrições impostas ao projeto, como prazos, recursos disponíveis e requisitos técnicos. Por exemplo, ao desenvolver Disciplina Arquitetura de Software um aplicativo móvel para lançá-lo antes de um evento importante, é necessário adaptar o design do software para cumprir o prazo, exigindo uma abordagem ágil e e�ciente. Durante o processo de design de software, várias alternativas são exploradas para atender aos requisitos do projeto, incluindo a seleção cuidadosa de tecnologias, arquiteturas e abordagens de desenvolvimento. Por exemplo, ao projetar um sistema de comércio eletrônico, a equipe de desenvolvimento pode considerar diferentes alternativas de arquitetura, como uma abordagem monolítica tradicional ou uma arquitetura de microsserviços mais escalável e �exível. Cada alternativa tem suas vantagens e desvantagens, e a escolha depende dos requisitos especí�cos do projeto, como escalabilidade, desempenho e custo. Uma parte crucial do design de software é a representação das ideias e conceitos, que pode ser realizada por meio de diagramas, esquemas e documentação clara e concisa. As representações visuais, como diagramas de classe e diagramas de sequência, desempenham um papel crucial na comunicação e compreensão do design do software, tanto entre os membros da equipe quanto para os stakeholders envolvidos. Além disso, uma documentação adequada permite que os desenvolvedores entendam o raciocínio por trás das decisões de design e auxilia a manutenção futura do software. De acordo com Martin (2019), a divisão adequada do software em componentes coesos é uma prática importante no design de software. Ao dividir o software em módulos ou componentes separados, cada parte pode ter uma responsabilidade única e bem de�nida. Isso facilita alterações isoladas e reduz o impacto em outras partes do sistema. Por exemplo, em um sistema de gerenciamento de biblioteca, é possível dividir o software em módulos para o cadastro de livros, gerenciamento de empréstimos e geração de relatórios. Essa divisão permite que cada parte seja desenvolvida e mantida de forma independente, o que facilita a escalabilidade e a evolução do sistema como um todo. A conquista de um bom design de software envolve a combinação de diversos princípios e técnicas. Um princípio fundamental é o encapsulamento, que busca ocultar os detalhes internos do software e fornecer interfaces bem de�nidas para interagir com o sistema. Isso facilita a manutenção e a evolução do software, uma vez que as mudanças podem ser feitas dentro do módulo encapsulado sem afetar outras partes do sistema. Em resumo, o design de software é um processo complexo e crucial para o desenvolvimento de sistemas de software e�cientes e funcionais. Envolve a consideração de objetivos, restrições, alternativas, representações e soluções. A divisão adequada do software em componentes coesos, a seleção cuidadosa de alternativas e a aplicação de técnicas como o encapsulamento são aspectos fundamentais para o sucesso do design de software. Exemplo prático de design de software Disciplina Arquitetura de Software Uma empresa de comércio eletrônico decidiu desenvolver um novo sistema de gerenciamento de pedidos online com o objetivo de melhorar a e�ciência do processamento de pedidos, reduzir erros e agilizar o tempo de entrega. Esse projeto envolve várias etapas de design de software para alcançar esses objetivos. Ao iniciar o projeto, a equipe de desenvolvimento precisa levar em consideração diversas restrições impostas ao projeto. Por exemplo, eles têm um prazo apertado para lançar o sistema antes da temporada de compras de �m de ano, para aproveitar ao máximo o período de alta demanda. Além disso, eles possuem um orçamento limitado para o desenvolvimento do sistema. Essas restrições de�nem os limites do projeto e orientam as decisões de design a serem tomadas. Durante o processo de design, a equipe explora diferentes alternativas para atender aos requisitos do projeto. Eles consideram várias arquiteturas e tecnologias disponíveis no mercado. Após analisar cuidadosamente as alternativas, a equipe decide adotar uma arquitetura de microsserviços para o sistema de gerenciamento de pedidos. Essa escolha é feita com base na necessidade de escalabilidade e �exibilidade para lidar com o aumento do volume de pedidos durante os períodos de pico. A arquitetura de microsserviços permite que cada componente seja desenvolvido e mantido de forma independente, facilitando a escalabilidade horizontal e a atualização de partes especí�cas do sistema sem afetar as demais. Uma vez de�nida a arquitetura, a equipe precisa representar o design do sistema de forma clara e compreensível. Para isso, eles utilizam diferentes técnicas de representação, como diagramas de componentes e diagramas de sequência. Os diagramas de componentes mostram a divisão do software em diferentes módulos e componentes, como gerenciamento de pedidos, processamento de pagamentos e logística de entrega. Essa representação visual ajuda a comunicar a estrutura do sistema e as interações entre os componentes. Além das representações visuais, a equipe também documenta o design do sistema de forma detalhada. Eles elaboram uma documentação clara e concisa que descreve os componentes, Disciplina Arquitetura de Software suas responsabilidades e as interfaces disponíveis para interagir com o sistema. Essa documentação auxilia a compreensão do design e a manutenção do sistema no futuro. Uma parte importante do design de software é a divisão adequada do software em componentes coesos. Essa divisão é feita de acordo com a responsabilidade e a funcionalidade de cada componente. No caso do sistema de gerenciamento de pedidos, a equipe divide o software em módulos separados, como cadastro de pedidos, processamento de pagamentos, logísticade entrega e geração de relatórios. Essa divisão permite que cada parte seja desenvolvida e mantida de forma independente, facilitando a escalabilidade e a evolução do sistema como um todo. Ao longo do processo de design, a equipe também se concentra em alcançar a conquista de um bom design de software. Isso envolve a aplicação de princípios e técnicas, como o encapsulamento. O encapsulamento busca ocultar os detalhes internos do software e fornece interfaces bem de�nidas para interagir com o sistema. Essa prática facilita a manutenção e a evolução do software, uma vez que as mudanças podem ser feitas dentro do módulo encapsulado sem afetar outras partes do sistema. Em resumo, o exemplo prático sobre design de software ilustra a importância dos objetivos, restrições, alternativas, representações e soluções no processo de design. Videoaula: Design de software - visão geral Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Neste vídeo, abordaremos os principais tópicos discutidos em sala de aula, como objetivos, restrições, alternativas, representações e soluções. Além disso, vamos falar sobre a importância de dividir o software adequadamente e alcançar o encapsulamento. Não perca a oportunidade de aprofundar seus conhecimentos nesse assunto fundamental para o desenvolvimento de sistemas e�cientes. O vídeo proporcionará uma visão clara e concisa dos conceitos abordados, ajudando você a consolidar o seu aprendizado. Saiba mais Disciplina Arquitetura de Software 1. Princípios da engenharia de software: este artigo é uma referência no campo da engenharia de software. Ele aborda diversos aspectos do design de software. 2. UML: este tutorial explora conceitos básicos da linguagem UML, que é amplamente utilizada para representar o design de software por meio de diagramas. Referências https://www.devmedia.com.br/principios-da-engenharia-de-software/29630 https://www.devmedia.com.br/uml/8579 https://www.devmedia.com.br/uml/8579 Disciplina Arquitetura de Software MARTIN, Robert C. Arquitetura limpa: o guia do artesão para estrutura e design de software. Rio de Janeiro: Alta Books Editora, 2019. Aula 3 Design de software Introdução Disciplina Arquitetura de Software Olá, estudante! Boas-vindas à nossa aula sobre conceitos fundamentais em design de software. Vamos explorar os temas de modularização, separação de preocupações, acoplamento e coesão. Esses conceitos são essenciais para o desenvolvimento de sistemas de software e�cientes e escaláveis. Vamos compreender como a modularização nos permite dividir o código em componentes independentes, facilitando sua manutenção e reutilização. A separação de preocupações nos ajuda a organizar o código de forma lógica e coesa, garantindo a compreensão e a manutenção do sistema. Além disso, vamos explorar o acoplamento e a coesão como métricas para avaliar a qualidade do design do software. Reduzir o acoplamento minimiza dependências e facilita alterações isoladas. Alta coesão cria componentes independentes e bem de�nidos. Prepare-se para uma aula repleta de conhecimento prático e exemplos relevantes. Bons estudos! Conceitos iniciais Disciplina Arquitetura de Software Modularização De acordo com Martin (2019), a modularização é um princípio-chave do design de software que consiste em dividir um sistema em módulos independentes e coesos. A ideia é organizar o código em partes menores e mais gerenciáveis, de forma que cada módulo desempenhe uma função especí�ca e bem de�nida. Isso facilita a compreensão, manutenção e reutilização do código, uma vez que os módulos podem ser trabalhados separadamente e combinados para formar o sistema completo. Separação de preocupações A separação de preocupações é um princípio que visa a isolar diferentes aspectos funcionais de um sistema em módulos distintos (MARTIN, 2019). Em outras palavras, cada módulo deve lidar apenas com uma preocupação especí�ca, como autenticação de usuários, gerenciamento de dados ou interface do usuário. Essa abordagem permite que os desenvolvedores se concentrem em uma área de cada vez, tornando o código mais organizado e facilitando as mudanças e atualizações futuras. Acoplamento O acoplamento refere-se ao grau de dependência entre os módulos de um sistema. Um acoplamento baixo indica que os módulos estão pouco interligados e as alterações em um módulo têm um impacto mínimo nos outros (MARTIN, 2019). Por outro lado, um acoplamento alto indica uma forte interdependência, de forma que as mudanças em um módulo podem causar efeitos colaterais em vários outros. É desejável reduzir o acoplamento, pois isso aumenta a �exibilidade e a capacidade de evolução do sistema. Coesão Disciplina Arquitetura de Software A coesão mede a relação entre as funcionalidades dentro de um módulo. Um módulo com alta coesão realiza uma única tarefa bem de�nida, enquanto um módulo com baixa coesão executa várias tarefas diferentes (MARTIN, 2019). É importante buscar uma coesão alta, pois isso facilita a compreensão do módulo, torna o código mais legível e mantém a responsabilidade clara e direta. Módulos coesos também são mais fáceis de reutilizar em outros projetos, uma vez que sua funcionalidade é bem de�nida e isolada. Neste bloco, exploramos os conceitos de modularização, separação de preocupações, acoplamento e coesão no design de software. Compreender e aplicar esses princípios é fundamental para criar sistemas de software robustos e escaláveis. Ao modularizar um sistema, separar preocupações, reduzir o acoplamento e aumentar a coesão, você estará no caminho certo para desenvolver soluções de software mais e�cientes e de alta qualidade. Lembre-se de praticar esses conceitos em seus projetos, buscando dividir o código em módulos coesos e independentes, focados em preocupações especí�cas. Explore exemplos do mundo real e estude as melhores práticas para consolidar seu conhecimento. Agora é hora de aplicar o que aprendemos e criar sistemas de software melhores e mais �exíveis. Características e prática Neste bloco, vamos aprofundar nossa compreensão dos conceitos fundamentais de modularização, separação de preocupações, acoplamento e coesão no desenvolvimento de software. Esses princípios são essenciais para construir sistemas robustos, �exíveis e de fácil manutenção. Vamos explorar as características e aplicação prática desses conceitos para aprimorar nossos conhecimentos e habilidades em design de software. Aprofundando o conhecimento Disciplina Arquitetura de Software De acordo com Martin (2019), a modularização consiste em dividir um sistema em módulos independentes e coesos, cada um com uma função especí�ca. Isso facilita a compreensão do sistema, melhora a organização do código e torna a manutenção mais e�ciente. Por exemplo, em um sistema de gerenciamento de loja online, podemos ter módulos separados para o carrinho de compras, o cadastro de clientes, o controle de estoque e o processamento de pagamentos. A separação de preocupações está relacionada à identi�cação e ao isolamento de aspectos distintos do sistema (MARTIN, 2019). Por exemplo, em um sistema de e-commerce, podemos separar as preocupações da interface do usuário, da lógica de negócios e do acesso a banco de dados em camadas diferentes. Isso permite que cada módulo se concentre em uma preocupação especí�ca, facilitando a compreensão do código e tornando o desenvolvimento mais modular e escalável. O acoplamento refere-se à dependência entre os módulos de um sistema (MARTIN, 2019). Um baixo acoplamento signi�ca que os módulos possuem poucas dependências entre si, o que resulta em um código mais �exível e fácil de modi�car. Por exemplo, se um módulo precisa ser atualizado, um baixo acoplamento garante que as alterações sejam restritas apenas ao módulo em questão, sem afetar os demais. Já um alto acoplamento torna o sistema mais frágil, pois uma mudança em ummódulo pode ter impacto em vários outros. Portanto, é importante buscar um baixo acoplamento através do uso de interfaces bem de�nidas e da adoção de padrões de design. Segundo Martin (2019), a coesão diz respeito à relação entre as responsabilidades dentro de um módulo. Um alto nível de coesão indica que as responsabilidades estão bem alinhadas e se complementam dentro do módulo, resultando em um código mais coeso e de fácil manutenção. Por exemplo, em um módulo de processamento de pagamentos, todas as funcionalidades relacionadas a essa tarefa devem estar contidas no mesmo módulo. Isso evita dispersão de código e facilita a compreensão das funcionalidades especí�cas do módulo. Benefícios O design de software baseado em modularização, separação de preocupações, acoplamento baixo e coesão alta traz uma série de benefícios. A modularização permite a divisão do sistema em partes independentes e coesas, facilitando sua compreensão e manutenção. A separação de preocupações permite a identi�cação e isolamento de aspectos distintos do sistema, simpli�cando o desenvolvimento e tornando-o mais escalável. O baixo acoplamento reduz as dependências entre os módulos, tornando o código mais �exível. Por �m, a coesão alta garante que as responsabilidades dentro de um módulo estejam bem de�nidas, resultando em um código coeso e de fácil manutenção. Ao aplicar esses conceitos no design de software, podemos criar sistemas mais robustos, �exíveis e de alta qualidade. Portanto, é fundamental entender e utilizar esses princípios em nossos projetos, buscando sempre aprimorar nossas habilidades de engenharia de software. Design de software e�ciente Disciplina Arquitetura de Software Neste momento, exploraremos a importância do design de software na resolução de problemas em situações do cotidiano pro�ssional. Vamos abordar como a modularização, separação de preocupações e acoplamento podem ser aplicados para criar soluções e�cientes. Imagine trabalhar em uma empresa de logística que precisa gerenciar um sistema de entrega de encomendas. Esse sistema abrange o registro das encomendas, a roteirização das entregas até o acompanhamento em tempo real. Para lidar com essa complexidade, é essencial utilizar os princípios de modularização, separação de preocupações e acoplamento. A modularização permite dividir o sistema em módulos independentes, cada um com uma função especí�ca. Por exemplo, desenvolver um módulo para o cadastro das encomendas, outro para a roteirização das entregas e um terceiro para o acompanhamento das entregas em tempo real. Cada módulo terá suas próprias responsabilidades, tornando o código organizado e facilitando a manutenção. Ao dividir o sistema em módulos independentes, o desenvolvimento de cada parte pode ocorrer de forma isolada, agilizando o processo e permitindo o trabalho em paralelo. Além disso, a modularização promove a reutilização de código, uma vez que módulos bem de�nidos podem ser facilmente reaproveitados em diferentes projetos. Isso resulta em uma maior e�ciência e economia de tempo no desenvolvimento de software. A separação de preocupações consiste em identi�car e isolar os diferentes aspectos do sistema, como interface do usuário, lógica de negócio e integração com outros sistemas. Separar essas preocupações em módulos distintos facilita a compreensão e manutenção do código, permitindo o tratamento independente de cada parte. Essa separação também permite que diferentes Disciplina Arquitetura de Software equipes trabalhem em paralelo, focadas em áreas especí�cas, aumentando a produtividade e agilizando o processo de desenvolvimento. O acoplamento se refere à dependência entre os módulos de um sistema. Um acoplamento elevado pode tornar o código frágil e difícil de modi�car. Por isso, é importante reduzi-lo, criando interfaces claras e bem de�nidas entre os módulos. Para reduzir o acoplamento entre os módulos, podemos utilizar padrões de projeto, que oferecem soluções testadas e comprovadas para problemas comuns no desenvolvimento de software. Além disso, a adoção de boas práticas de programação, como o princípio da inversão de dependência, também contribui para reduzir o acoplamento. Um exemplo de coesão nesse contexto seria a criação de um módulo especí�co responsável por gerenciar o registro das encomendas. Esse módulo teria todas as funcionalidades relacionadas ao cadastro de encomendas, como receber os dados do cliente, detalhes do pacote e endereço de entrega. Ao concentrar todas as funcionalidades relacionadas ao registro das encomendas em um único módulo, estamos criando uma alta coesão dentro desse componente. Isso signi�ca que todas as partes desse módulo estão diretamente relacionadas à tarefa de registrar encomendas, e não há funcionalidades irrelevantes ou dispersas que não estejam relacionadas a essa responsabilidade especí�ca. Uma abordagem prática para essa redução de acoplamento é estruturar nossa aplicação em três camadas simples: uma camada para as regras de negócio, independente de tecnologia; uma camada de infraestrutura, que abrange redes, dispositivos, bancos de dados, comunicações externas e outros elementos; e uma camada intermediária, que engloba o framework e a linguagem de programação responsáveis pela comunicação entre a camada de negócio e a de infraestrutura. Essa organização em camadas segue uma ordem de importância de cima para baixo, de forma que a camada superior, a de negócio, é a mais crucial e representa o módulo de alto nível. Videoaula: Design de software Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Nesta videoaula, vamos explorar conceitos fundamentais, como modularização, separação de preocupações, acoplamento e coesão. Descubra como essas práticas podem revolucionar sua abordagem no desenvolvimento de software. Aprenda a dividir sistemas complexos em módulos independentes, isolar preocupações e a criar sistemas �exíveis e fáceis de manter. Vamos embarcar nessa jornada e desvendar os segredos por trás de um software e�ciente e de alta qualidade. Não perca esta oportunidade! Disciplina Arquitetura de Software Saiba mais Aprofunde seus conhecimentos com: 1. Amadurecendo com separação de preocupações. (Aprofundamento sobre a separação de preocupações). 2. O que é SOLID? O guia completo para você entender os 5 princípios da POO [programação orientada a objetos]. Referências https://www.devmedia.com.br/amadurecendo-com-separation-of-concerns/18699 https://www.devmedia.com.br/amadurecendo-com-separation-of-concerns/18699 https://medium.com/desenvolvendo-com-paixao/o-que-%C3%A9-solid-o-guia-completo-para-voc%C3%AA-entender-os-5-princ%C3%ADpios-da-poo-2b937b3fc530 Disciplina Arquitetura de Software MARTIN, Robert C. Arquitetura limpa: o guia do artesão para estrutura e design de software. Rio de Janeiro: Alta Books Editora, 2019. Aula 4 Implementação do design de software Introdução Disciplina Arquitetura de Software Olá, estudante! Nesta aula, você aprenderá sobre a importância da separação de decisões de execução de algoritmos, da separação de interfaces de suas implementações, dos níveis de design de software e da abstração. Esses tópicos são fundamentais para construir sistemas robustos e de fácil manutenção. Com a separação de decisões, podemos adaptar algoritmos para mudanças futuras. A separação de interfaces possibilita a criação de componentes reutilizáveis e independentes. Os níveis de design facilitam o desenvolvimento e colaboração. A abstração lida com a complexidade, ocultando detalhes de implementação. Aprender essas habilidades permitirá que você crie sistemas de alta qualidade. Prepare-se para mergulhar nesse mundo fascinante do design de software. Bons estudos! Conceitos iniciais Disciplina Arquitetura de Software Na implementação do design de software, diversos conceitos são fundamentais para o desenvolvimento de sistemase�cientes e de qualidade. De acordo com Martin (2019), vamos explorar alguns deles: abstração, separação de decisões, interfaces de implementações e níveis de design. A abstração desempenha um papel crucial ao simpli�car a complexidade do sistema. Por meio dela, podemos identi�car os aspectos essenciais e ocultar os detalhes desnecessários. Ao criar modelos e representações, criamos uma visão mais clara e compreensível do software, facilitando sua construção e manutenção. A abstração nos permite focar nos conceitos fundamentais do sistema, ignorando os detalhes de implementação que não são relevantes para a compreensão do funcionamento geral. A separação de decisões é um princípio-chave para obter um design modular e �exível. Consiste em identi�car partes do código responsáveis por tomar decisões especí�cas e isolá-las em módulos independentes. Isso permite que cada decisão seja modi�cada de forma independente, facilitando a manutenção do software e evitando impactos indesejados. Por exemplo, em um sistema de comércio eletrônico, podemos separar a lógica de preci�cação em um módulo separado, de modo que alterações na forma como os preços são calculados não afetem outras partes do sistema. As interfaces de implementações são pontos de comunicação entre os diferentes componentes do sistema. Elas de�nem os contratos e as interações entre módulos, estabelecendo como as partes se relacionam. Ao utilizar interfaces claras e bem de�nidas, é possível desenvolver componentes de forma separada e substituir implementações sem afetar o funcionamento geral do sistema. Por exemplo, em um sistema de pagamento online, podemos de�nir uma interface Disciplina Arquitetura de Software comum para os diferentes métodos de pagamento, permitindo que novos métodos sejam adicionados sem que seja necessário alterar o código existente que interage com a interface. A organização em níveis de design é uma prática importante para construir sistemas complexos. Consiste em dividir o software em camadas ou módulos, cada um com uma responsabilidade especí�ca. Essa abordagem promove a modularidade, facilita a compreensão, a manutenção e a evolução do sistema, além de possibilitar a reutilização de componentes em diferentes contextos. Por exemplo, em um sistema de gerenciamento de estoque, podemos ter uma camada de acesso a dados, uma camada de lógica de negócios e uma camada de interface do usuário, cada uma com suas responsabilidades bem de�nidas. Ao compreender e aplicar esses conceitos durante a implementação do design de software, podemos criar sistemas mais robustos, �exíveis e de fácil manutenção. A abstração nos ajuda a lidar com a complexidade, permitindo uma visão mais clara e focada nos conceitos essenciais. A separação de decisões aumenta a �exibilidade, permitindo que diferentes partes do sistema sejam modi�cadas independentemente umas das outras. As interfaces de implementações estabelecem a comunicação entre os componentes, de�nindo contratos claros e facilitando a substituição de implementações. Por �m, os níveis de design promovem a modularidade, permitindo que o sistema seja dividido em partes com responsabilidades bem de�nidas. Dominar esses conhecimentos é essencial para desenvolvedores de software que desejam criar sistemas de alta qualidade. A implementação do design de software requer uma combinação de habilidades técnicas e compreensão dos princípios de design. Portanto, aproveite esta oportunidade para aprofundar seu entendimento sobre a implementação do design de software e aplicar esses conceitos em seus projetos. Entendendo a implementação Disciplina Arquitetura de Software De acordo com Martin (2019), ao separar as decisões de execução de algoritmos em módulos independentes, obtemos uma estrutura de código mais modular e �exível. Essa abordagem permite que cada módulo seja responsável por uma decisão especí�ca, facilitando a compreensão do sistema como um todo. Além disso, as alterações podem ser feitas de forma isolada, sem afetar outras partes do software, o que contribui para a manutenibilidade e evolução do sistema. A separação de decisões também evita a duplicação de código, permitindo que um mesmo módulo seja reutilizado em diferentes partes do sistema, o que proporciona maior e�ciência e economia de tempo durante o desenvolvimento. Ao separar interfaces de suas implementações, obtemos um código mais �exível e adaptável. A interface de�ne um contrato que estabelece como um componente deve ser usado, permitindo que outros módulos do sistema se comuniquem com ele sem conhecer os detalhes internos de sua implementação (MARTIN, 2019). Isso promove um baixo acoplamento e facilita a substituição de uma implementação por outra, desde que ambas sigam a mesma interface. Essa abordagem favorece a reutilização de código, pois diferentes módulos podem fazer uso da mesma interface para se comunicar com diferentes implementações, proporcionando maior �exibilidade e escalabilidade ao software. Além disso, a separação de interfaces de implementações permite que diferentes equipes trabalhem de forma independente em cada componente, acelerando o desenvolvimento e facilitando a manutenção do sistema. Os níveis de design de software fornecem uma estrutura organizacional para o desenvolvimento de sistemas complexos. No nível de arquitetura, são de�nidos os principais blocos funcionais do sistema e suas interconexões. Essa etapa permite uma visão macro do sistema, identi�cando os componentes e suas interações. No nível de componentes, os blocos funcionais são divididos em módulos independentes com interfaces bem de�nidas. Isso promove a modularidade e a separação de preocupações, facilitando a compreensão e o desenvolvimento de cada componente individualmente (MARTIN, 2019). No nível de implementação, cada módulo é detalhado em termos de algoritmos, estruturas de dados e codi�cação especí�ca. Essa etapa envolve a tradução das especi�cações de design em código concreto, tornando o sistema funcional. A abstração é uma técnica essencial no design de software, permitindo que os desenvolvedores se concentrem nos aspectos essenciais do sistema, enquanto ocultam os detalhes de implementação (MARTIN, 2019). Por exemplo, ao abstrair a funcionalidade de manipulação de estoque em uma interface genérica, podemos desenvolver diferentes implementações de armazenamento de estoque, como em um banco de dados ou em arquivos, sem afetar a interface abstrata. Isso facilita a manutenção e a evolução do sistema, pois mudanças na implementação do estoque não impactarão a interface abstrata, garantindo a compatibilidade com outros componentes do sistema. Em resumo, a separação de decisões de execução de algoritmos, a separação de interfaces de implementações, os níveis de design de software e a abstração são conceitos essenciais para um design de software robusto e �exível. Essas práticas contribuem para a modularidade, �exibilidade, reutilização de código, e�ciência e evolução do software, tornando-o mais adaptável às mudanças e mais fácil de ser mantido. Implementação na prática Disciplina Arquitetura de Software Na prática, a separação de decisões de execução de algoritmos pode ser aplicada de várias formas. Por exemplo, no sistema de gerenciamento de estoque, pode-se ter um módulo separado para tomar decisões relacionadas à reposição de estoque, como veri�car os níveis de estoque, calcular as quantidades a serem compradas e emitir pedidos de compra. Esse módulo seria responsável por todas as decisões relacionadas à reposição de estoque, permitindo que essa lógica seja modi�cada de forma independente, sem afetar outras partes do sistema, como o processo de venda ou o controle de inventário. De acordo com Martin (2019), essa separação de decisões simpli�ca a compreensão e manutenção do sistema, além de facilitar a escalabilidade, uma vez que cada módulo pode ser adaptado ou substituído sem impactar o restante do software. A separação de interfaces de suas implementações é amplamente aplicada no desenvolvimento de software.No exemplo visto anteriormente, em um sistema de gerenciamento de pagamentos online, pode haver uma interface comum para processar pagamentos, que de�ne métodos como “realizarPagamento” e “cancelarPagamento”. Diferentes implementações dessa interface podem ser criadas para se integrar com diferentes provedores de pagamento, como PayPal, Stripe ou PagSeguro. Cada implementação é responsável por encapsular a lógica especí�ca de integração com o provedor de pagamento correspondente, enquanto a interface comum garante que todos os componentes do sistema possam interagir com qualquer uma dessas implementações sem necessidade de conhecer os detalhes especí�cos. Essa separação de interfaces de implementações torna o sistema mais �exível, permitindo a adição ou substituição de provedores de pagamento de forma transparente, sem impactar outros componentes do sistema (MARTIN, 2019). Os níveis de design de software e a abstração são amplamente aplicados no desenvolvimento de sistemas complexos. Por exemplo, em um sistema de reservas de passagens aéreas, podemos ter um nível de arquitetura que de�ne os principais componentes, como o módulo de reserva, o módulo de busca de voos e o módulo de pagamento. Cada um desses módulos pode ser então Disciplina Arquitetura de Software dividido em componentes menores, como o módulo de autenticação, o módulo de seleção de assentos e o módulo de processamento de pagamentos, formando o nível de componentes. A abstração pode ser aplicada no nível de componentes, de forma que podemos de�nir interfaces genéricas para cada módulo, como uma interface de reserva que de�ne os métodos “fazerReserva” e “cancelarReserva”. A implementação concreta dessas interfaces pode variar; por exemplo, uma implementação usando um banco de dados relacional e outra usando uma API de serviços web. Essa abstração permite que diferentes implementações sejam intercambiáveis, desde que sigam a mesma interface. Esses conceitos são fundamentais para o desenvolvimento de software de qualidade, pois permitem a criação de sistemas bem estruturados, de fácil manutenção e �exíveis o su�ciente para se adaptar a mudanças nos requisitos. Os níveis de design e a abstração auxiliam a compreensão e organização do código, promovem a reutilização de componentes e facilitam a evolução do software ao longo do tempo. Videoaula: Implementação do design de software Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Aprenda sobre a separação de decisões de algoritmos, interfaces e níveis de design de software, além de compreender a importância da abstração. Assista à nossa videoaula de resumo e aprofunde seus conhecimentos em design de software. Descubra como a separação de decisões e interfaces torna o código modular e �exível; explore os diferentes níveis de design e entenda como a abstração facilita a manutenção e evolução do sistema. Prepare-se para impulsionar sua carreira no desenvolvimento de software. Acesse agora mesmo e amplie seu conhecimento nessa área fundamental! Saiba mais Disciplina Arquitetura de Software 1. Como dividir o design de software em próximas etapas executáveis. Neste artigo você aprenderá a direcionar sua equipe para a realização de um projeto. Com o planejamento adequado, você pode identi�car marcos e fornecer a todos as instruções exatas para manter seu projeto no caminho certo. 2. Por que o design de software é importante para o seu aplicativo.O desenvolvimento de software tem tudo a ver com escrever códigos porque códigos complexos ajudam os desenvolvedores a desenvolver software simples com grande utilidade. Nesse artigo, vamos aprender a importância de design de software no desenvolvimento de sistemas, como aplicativos. Referências https://www.lucidchart.com/blog/pt/como-implementar-o-design-de-software#:~:text=Defina%20como%20voc%C3%AA%20construir%C3%A1%20o,como%20voc%C3%AA%20planeja%20alcan%C3%A7%C3%A1%2Dlo https://www.lucidchart.com/blog/pt/como-implementar-o-design-de-software#:~:text=Defina%20como%20voc%C3%AA%20construir%C3%A1%20o,como%20voc%C3%AA%20planeja%20alcan%C3%A7%C3%A1%2Dlo https://appmaster.io/pt/blog/por-que-o-design-de-software-e-importante-para-seu-aplicativo Disciplina Arquitetura de Software MARTIN, Robert C. Arquitetura limpa: o guia do artesão para estrutura e design de software. Rio de Janeiros: Alta Books Editora, 2019. VLISSIDES, John; et al. Padrões de Projeto: Soluções Reutilizáveis de Software Orientado a Objetos. Porto Alegre: Editora Bookman, 2000. Aula 5 Revisão da Unidade Design de arquitetura de software: princípios e práticas Disciplina Arquitetura de Software Olá, estudante! A arquitetura de software desempenha um papel fundamental no desenvolvimento de sistemas de excelência. Ela se refere ao projeto e à organização estruturada dos componentes de um software, abrangendo a tomada de decisões sobre a divisão e encapsulamento de funcionalidades, modularização, separação de preocupações, acoplamento e coesão, entre outros aspectos. O design de arquitetura é essencial para o sucesso de um projeto de software, pois determina a base sobre a qual o sistema será construído. Uma arquitetura bem projetada permite que o software seja �exível, adaptável e escalável ao longo do tempo. Facilita também a manutenção, evolução e reutilização de componentes. No processo de design de software, há diversos elementos a serem considerados. Isso inclui a identi�cação de requisitos e restrições, análise de riscos, de�nição de uma estratégia de design, escolha de padrões de projeto adequados e criação de diagramas de arquitetura. Esses elementos ajudam a guiar o desenvolvimento do software de forma estruturada e e�ciente. A modularização é um princípio-chave do design de software, que envolve a divisão do sistema em módulos independentes e coesos. Cada módulo é responsável por uma funcionalidade especí�ca, o que facilita a compreensão e a manutenção do código. A separação de preocupações, por sua vez, consiste em isolar aspectos distintos do sistema em módulos separados, promovendo a legibilidade e a manutenibilidade do código. O acoplamento e a coesão são conceitos relacionados ao design de software. O acoplamento refere-se à dependência entre os módulos de um sistema, enquanto a coesão diz respeito à relação entre as responsabilidades dentro de um módulo. Um baixo acoplamento e uma alta coesão são objetivos desejáveis para um design de software e�ciente. Disciplina Arquitetura de Software A separação de decisões de execução de algoritmos e a separação das interfaces de implementações são práticas importantes no design de software. A separação de decisões permite que cada módulo seja responsável por tomar decisões especí�cas, facilitando a manutenção e evitando impactos indesejados. Já a separação de interfaces garante que a comunicação entre módulos ocorra de forma �exível, permitindo a substituição de implementações sem afetar outros componentes do sistema. Os níveis de design de software fornecem uma estrutura organizacional para o desenvolvimento de sistemas complexos. Eles envolvem a de�nição de diferentes camadas de abstração, como o nível de arquitetura, o nível de componentes e o nível de implementação. Cada nível agrupa componentes relacionados e de�ne suas interações, facilitando o desenvolvimento e a compreensão do sistema como um todo. A abstração é uma técnica essencial no design de software, permitindo que os desenvolvedores se concentrem nos aspectos essenciais do sistema, enquanto ocultam os detalhes de implementação. Ela favorece a reutilização de código e facilita a evolução do software ao longo do tempo. Em suma, o design de arquitetura é um componente fundamental no desenvolvimento de software. Ele engloba diversos aspectos, desde a modularização e a separação de preocupações até a separação de decisões e interfaces. Com uma arquitetura bem projetada, é possívelobter sistemas de alta qualidade, �exíveis e fáceis de manter e evoluir ao longo do tempo. Videoaula: Revisão da Unidade Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Neste vídeo, vamos explorar a importância do design no desenvolvimento de sistemas. Veremos os princípios fundamentais do design de software, incluindo modularização, separação de preocupações e acoplamento. Além disso, abordaremos a separação de decisões de execução de algoritmos, a separação de interfaces de suas implementações, os níveis de design de software e a importância da abstração. Prepare-se para uma jornada de aprendizado sobre design de arquitetura de software! Estudo de Caso Disciplina Arquitetura de Software Contexto: Você é um desenvolvedor de software em uma empresa de tecnologia �nanceira que visa a fornecer soluções inovadoras para ajudar as pessoas no gerenciamento e�ciente das suas �nanças pessoais. A empresa deseja desenvolver um sistema de gerenciamento de �nanças pessoais que permita aos usuários acompanharem seus gastos, criarem orçamentos, de�nirem metas �nanceiras e obterem insights sobre seus hábitos de consumo. Desa�o: Seu desa�o é iniciar um projeto de arquitetura e design do software para o sistema de gerenciamento de �nanças pessoais. O sistema deve ser �exível, escalável e de fácil manutenção, permitindo que novas funcionalidades sejam adicionadas no futuro sem impactar as já existentes. Além disso, ele deve ser seguro, garantindo a proteção dos dados �nanceiros dos usuários. Passos: Análise de requisitos: inicie o projeto realizando uma análise detalhada dos requisitos do sistema. Identi�que as funcionalidades principais, como registro de transações �nanceiras, geração de relatórios, criação de metas �nanceiras e noti�cações personalizadas. Arquitetura do sistema: de�na a arquitetura do sistema, identi�cando os principais componentes e suas interações. Pense em como os dados serão armazenados, processados e apresentados para os usuários. Considere a separação de decisões de execução de algoritmos e a separação de interfaces de suas implementações para criar módulos independentes e reutilizáveis. Design de componentes: projete os detalhes de cada componente do sistema. Utilize os conceitos de acoplamento e coesão para garantir que cada componente seja coeso em sua função e tenha baixo acoplamento com os demais. Disciplina Arquitetura de Software Escolha de tecnologias: escolha as tecnologias e ferramentas adequadas para implementar o sistema. Leve em consideração fatores como escalabilidade, segurança e desempenho. Considere também a abstração de detalhes de implementação para permitir que diferentes tecnologias possam ser usadas sem afetar a interface do sistema. Passos complementares: Testes e validação: pense em planos de testes abrangentes para cada componente do sistema e realize testes rigorosos para garantir que o software funcione corretamente e atenda aos requisitos de�nidos. Documentação: apresente quais documentos você usaria, como diagramas de alto nível e detalhes técnicos relevantes. Isso garantirá que o conhecimento do sistema seja bem documentado e possa ser compartilhado com outros membros da equipe. Apresentação do projeto: ao concluir o projeto, apresente a arquitetura e o design do sistema para a equipe e os stakeholders. Explique as principais características e benefícios do design adotado. Resultados esperados: Espera-se que, ao �nal do projeto, você tenha elaborado o esboço inicial de uma arquitetura sólida e um design de software para o sistema de gerenciamento de �nanças pessoais. O sistema deverá ser capaz de atender aos requisitos de�nidos, ser �exível o su�ciente para acomodar mudanças futuras e garantir a segurança e proteção dos dados dos usuários. O estudo de caso permitirá aplicar os conhecimentos adquiridos sobre arquitetura, design de software, modularização, separação de preocupações, acoplamento, coesão, escalabilidade e abstração em um cenário real de desenvolvimento pro�ssional. Após re�etir sobre o conteúdo abordado, �ca evidente a importância da aplicação dos conceitos de arquitetura e design de software no desenvolvimento de sistemas e�cientes e bem estruturados. O estudo de caso do sistema de gerenciamento de �nanças pessoais ilustra como a separação de decisões de execução de algoritmos e a separação de interfaces de suas implementações podem contribuir para um design �exível e adaptável, permitindo que cada módulo seja responsável por suas próprias tarefas e facilmente intercambiável. A modularização e a de�nição clara de interfaces entre os módulos garantem uma baixa dependência entre eles, facilitando a manutenção e evolução do sistema ao longo do tempo. Além disso, a escolha adequada de tecnologias e a realização de testes abrangentes são fundamentais para garantir a qualidade e a segurança do software. Ao aprofundarmos nossos conhecimentos em arquitetura e design de software, podemos aplicar esses princípios em diferentes cenários pro�ssionais, permitindo-nos desenvolver soluções mais sólidas e e�cientes para as demandas do mundo digital. A re�exão sobre esses conceitos nos motiva a buscar constantemente o aprimoramento de nossas habilidades e conhecimentos, contribuindo para a excelência em nossas práticas de desenvolvimento de software e promovendo um impacto positivo na vida das pessoas através de soluções tecnológicas inovadoras e con�áveis. Resolução do Estudo de Caso Disciplina Arquitetura de Software Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Desenvolvimento de um sistema de gerenciamento de �nanças pessoais Análise de requisitos: Após uma análise detalhada dos requisitos, foram identi�cadas as principais funcionalidades do sistema de gerenciamento de �nanças pessoais: registro de transações �nanceiras, geração de relatórios �nanceiros mensais, quinzenais e semanais, criação de metas �nanceiras e noti�cações personalizadas. Essas funcionalidades permitirão que os usuários tenham um controle completo sobre suas �nanças e possam tomar decisões �nanceiras mais informados. Arquitetura do sistema: Para garantir a �exibilidade, escalabilidade e facilidade de manutenção do sistema, optou-se por uma arquitetura de microsserviços. Cada funcionalidade será implementada como um serviço independente, permitindo que novas funcionalidades sejam adicionadas sem afetar o funcionamento dos demais serviços. A separação de decisões de execução de algoritmos será aplicada em cada serviço, garantindo que cada um seja responsável por suas próprias regras de negócio. Design de componentes: O sistema será dividido em módulos independentes, cada um responsável por uma funcionalidade especí�ca. Por exemplo, o módulo de registro de transações será responsável por receber e armazenar as transações �nanceiras dos usuários, enquanto o módulo de geração de relatórios será responsável por processar os dados e gerar relatórios personalizados. As interfaces entre os módulos serão cuidadosamente de�nidas, garantindo uma baixa dependência entre eles. Escolha de tecnologias: Para implementar o sistema, serão utilizadas tecnologias modernas e escaláveis, como o uso de contêineres para facilitar o empacotamento e a implantação dos serviços. O banco de dados será escolhido com base na necessidade de escalabilidade e segurança dos dados dos usuários. Além disso, serão adotadas práticas de segurança para proteger as informações �nanceiras dos usuários. Testes e validação: Serão desenvolvidos planos de teste abrangentes para cada módulo do sistema, incluindo testes unitários, testes de integração e testes de aceitação. Os testes serão realizados de forma rigorosa para garantir que todas as funcionalidades estejam funcionandocorretamente e que o sistema atenda aos requisitos de�nidos. Documentação: Todo o processo de arquitetura e design do software será documentado de forma detalhada, incluindo decisões tomadas, diagramas de alto nível e detalhes técnicos. A documentação será fundamental para garantir que o conhecimento do sistema seja bem documentado e possa ser compartilhado com outros membros da equipe. Disciplina Arquitetura de Software Apresentação do projeto: Após a conclusão do projeto, a arquitetura e o design do sistema serão apresentados para a equipe e os stakeholders. Serão explicadas as principais características e benefícios do design adotado, destacando a �exibilidade, escalabilidade e segurança do sistema. Com o projeto concluído, espera-se que o sistema de gerenciamento de �nanças pessoais seja uma solução robusta, escalável e segura, permitindo que os usuários tenham um controle completo sobre suas �nanças de forma e�ciente e segura. O estudo de caso permitiu aplicar os conhecimentos adquiridos sobre arquitetura, design de software, modularização, separação de preocupações, acoplamento, coesão, escalabilidade e abstração em um cenário real de desenvolvimento pro�ssional. Resumo Visual Disciplina Arquitetura de Software Fonte: elaborada pela autora. Referências Disciplina Arquitetura de Software MARTIN, Robert C. Arquitetura limpa: o guia do artesão para estrutura e design de software. Rio de Janeiro: Alta Books Editora, 2019.