Prévia do material em texto
Situação Finalizada Iniciado quarta-feira, 9 jul. 2025, 10:36 Concluído quarta-feira, 9 jul. 2025, 10:49 Duração 12 minutos 46 segundos Nota 9,0 de um máximo de 10,0(90%) Questão 1 Correto Atingiu 1,0 de 1,0 Na jornada de aprimoramento do processo de desenvolvimento de software, a transição da Integração Contínua (CI) para a Entrega Contínua (CD) representa um avanço significativo. Essa mudança não só automatiza o processo de build e teste, como também estende a automação para a implantação e entrega, permitindo que versões do software sejam lançadas de forma rápida e confiável a qualquer momento. O sucesso dessa implementação depende de várias práticas e configurações essenciais no pipeline de entrega. Avalie as seguintes afirmações sobre a implementação da Entrega Contínua: ( ) A transição para a Entrega Contínua começa com a automação total dos processos de build e teste, que é o principal foco da Integração Contínua. ( ) Na Entrega Contínua, a automação do processo de implantação é opcional, visto que o foco está em testar as mudanças de código frequentemente. ( ) Um ambiente de teste que imita de perto o ambiente de produção é crucial para garantir que o software funcione conforme esperado quando lançado. ( ) A gestão de configurações e a prática de Infrastructure as Code (IaC) são componentes dispensáveis na Entrega Contínua. Alternativas: Escolha uma opção: a. V – F – V – F. b. V – V – F – F. c. F – V – F – V. d. V – V – V – V. e. F – F – V – V. A primeira afirmação é verdadeira porque a automação dos processos de build e teste é a fundação da Integração Contínua, e a transição para a Entrega Contínua expande essa automação para incluir também a implantação e entrega, criando um pipeline de entrega contínua que permite lançamentos rápidos e confiáveis. A segunda afirmação é falsa, pois, na Entrega Contínua, a automação do processo de implantação é fundamental, não opcional. A automação de toda a cadeia de entrega, incluindo implantação, é essencial para garantir que o software possa ser lançado a qualquer momento sem intervenção manual, aumentando a eficiência e reduzindo o risco de erros. A terceira afirmação é verdadeira, destacando a importância de um ambiente de teste robusto e confiável que imite o ambiente de produção. Isso assegura que os testes sejam representativos e confiáveis, prevendo o comportamento do software em produção e reduzindo a incidência de problemas após o lançamento. A quarta afirmação é falsa porque a gestão de configurações e a prática de Infrastructure as Code (IaC) são, na verdade, componentes críticos na Entrega Contínua. Eles permitem a automação e o provisionamento consistentes da infraestrutura, o que é vital para replicar ambientes de teste e produção com precisão e eficiência, garantindo lançamentos consistentes e isentos de discrepâncias manuais. A resposta correta é: V – F – V – F. Questão 2 Correto Atingiu 1,0 de 1,0 Na arquitetura de microsserviços, a escolha do mecanismo de comunicação entre os serviços é uma decisão crítica que afeta diretamente a eficiência, escalabilidade e resiliência da aplicação. Enquanto as chamadas de API RESTful oferecem uma abordagem síncrona baseada no protocolo HTTP para operações CRUD, a mensageria assíncrona e os sistemas baseados em eventos fornecem alternativas que desacoplam os serviços, permitindo comunicações indiretas e reativas. A implementação de cada um desses mecanismos depende das necessidades específicas do sistema, como a exigência de respostas imediatas, a necessidade de processamento de tarefas em lote, ou a importância da reação a eventos em tempo real. Com base nas características e aplicações desses mecanismos de comunicação em arquiteturas de microsserviços, qual das seguintes opções identifica corretamente um cenário e o mecanismo de comunicação mais adequado para ele? Escolha uma opção: a. Quando o desacoplamento e a independência entre os serviços são prioridades, permitindo que eles se comuniquem sem a necessidade de respostas imediatas, a mensageria assíncrona é a opção mais adequada. b. Para operações demoradas que não exigem uma resposta imediata, como o processamento em lote de transações, as chamadas de API RESTful apresentam a solução ideal devido à sua natureza síncrona. c. Em um cenário onde é crucial ter respostas imediatas a solicitações dos usuários, como operações de leitura e atualização de dados, os sistemas baseados em eventos são a melhor escolha. d. Se o objetivo é facilitar a integração com serviços de terceiros e realizar operações CRUD simples com feedback instantâneo para o usuário, as chamadas de API RESTful são o mecanismo mais recomendado. e. Para uma aplicação que requer processamento de dados em tempo real, com alta escalabilidade e capacidade de reagir a eventos instantaneamente, a mensageria assíncrona é o mecanismo mais indicado. A escolha correta, a mensageria assíncrona, é ideal para cenários que valorizam o desacoplamento e a independência entre os serviços. Este mecanismo permite que os serviços enviem e recebam mensagens sem depender de respostas imediatas, facilitando a escalabilidade e a resiliência do sistema. Plataformas como RabbitMQ e Apache Kafka suportam este modelo, possibilitando a comunicação eficaz em arquiteturas distribuídas complexas. A alternativa confunde a aplicabilidade da mensageria assíncrona com as características dos sistemas baseados em eventos, que são mais adequados para processamento de dados em tempo real e reação a eventos instantaneamente. A opção erroneamente sugere que os sistemas baseados em eventos são preferíveis para operações que requerem respostas imediatas, quando, na verdade, as chamadas de API RESTful são mais apropriadas para essa necessidade devido à sua comunicação síncrona. A alternativa inverte o uso ideal das chamadas de API RESTful e da mensageria assíncrona; operações demoradas e processamento em lote se beneficiam mais da flexibilidade e do desacoplamento proporcionados pela mensageria assíncrona. A opção corretamente identifica as chamadas de API RESTful como ideais para integração com serviços de terceiros e realização de operações CRUD com feedback instantâneo, destacando a importância da escolha do mecanismo de comunicação adequado às necessidades específicas de cada aplicação. A resposta correta é: Quando o desacoplamento e a independência entre os serviços são prioridades, permitindo que eles se comuniquem sem a necessidade de respostas imediatas, a mensageria assíncrona é a opção mais adequada. Questão 3 Correto Atingiu 1,0 de 1,0 Ao desenvolver uma aplicação, a escolha da ferramenta de Mapeamento Objeto-Relacional (ORM) adequada pode influenciar significativamente a eficiência do desenvolvimento, a qualidade do código e a manutenção a longo prazo. Cada linguagem de programação tem ferramentas ORM que se integram melhor ao seu ecossistema, oferecendo funcionalidades específicas que atendem às necessidades de diferentes tipos de projetos. Considerando as características e as diferenças entre algumas das ferramentas ORM mais populares disponíveis para Java, .NET, Node.js e Python, associe corretamente cada ferramenta ORM à sua linguagem de programação correspondente e uma característica distintiva. Coluna A – Ferramentas ORM: 1. Hibernate 2. Entity Framework 3. Sequelize 4. Django ORM Coluna B – Linguagem de programação e característica: A. Java - Suporte a cache de segundo nível e estratégias de fetching configuráveis. B. .NET - Integração completa ao ecossistema .NET e suporte para LINQ. C. Node.js - Construído para trabalhar com promessas e suportar o uso de async/await. D. Python - Integração profunda com o framework Django e migrações automáticas. Agora assinale a alternativa com as associações corretas. Escolha uma opção: a. 1-C, 2-D, 3-A, 4-B. b. 1-D, 2-C, 3-B, 4-A. c. 1-A, 2-B, 3-C, 4-D. d. 1-A, 2-D, 3-B, 4-C. e. 1-B, 2-A, 3-D, 4-C. A resposta está correta, pois a associação entre as ferramentas ORM e suas respectivas linguagens de programação, junto com umacaracterística distintiva de cada uma, reflete a importância de selecionar uma ferramenta que não apenas seja compatível com o ecossistema de desenvolvimento, mas que também ofereça funcionalidades específicas que possam beneficiar o projeto. Hibernate para Java (1-A) é conhecido por sua maturidade e seus recursos avançados, como cache de segundo nível e estratégias de fetching configuráveis, que otimizam o desempenho de aplicações Java que lidam com grandes volumes de dados e operações complexas. Entity Framework para .NET (2-B) se destaca pela sua integração nativa com o ecossistema .NET, permitindo uma experiência de desenvolvimento coesa, e pelo uso de LINQ para construir consultas, tornando o código mais limpo e expressivo. Sequelize para Node.js (3-C) oferece suporte moderno para programação assíncrona com promessas e ‘async/await’, adequando-se perfeitamente ao estilo de desenvolvimento em Node.js, especialmente em aplicações web modernas e desenvolvimento full-stack JavaScript. Django ORM para Python (4-D) é parte integral do framework Django, fornecendo uma integração profunda que facilita o desenvolvimento rápido de aplicações web em Python, com migrações automáticas que simplificam a atualização de esquemas de banco de dados. As demais alternativas apresentam combinações incorretas que não correspondem à linguagem de programação ou às características distintivas de cada ferramenta ORM, demonstrando a importância de compreender as capacidades e as limitações das ferramentas ORM ao selecioná-las para projetos de desenvolvimento de software. A resposta correta é: 1-A, 2-B, 3-C, 4-D. Questão 4 Correto Atingiu 1,0 de 1,0 No desenvolvimento de aplicações modernas, a escolha do padrão de design de API adequado é fundamental para garantir a eficácia da comunicação e integração entre sistemas distintos. REST, GraphQL e SOAP são três dos principais estilos arquitetônicos, que oferecem diferentes abordagens para o desenvolvimento de APIs, cada um com suas vantagens e desvantagens específicas. Além da escolha do padrão, a implementação de boas práticas no desenvolvimento de APIs, como documentação clara, versionamento cuidadoso e aderência aos princípios de design, é crucial para a criação de interfaces consistentes, intuitivas e seguras. Considerando esses aspectos, avalie as seguintes afirmativas sobre os padrões de design de API e as boas práticas de desenvolvimento, selecionando as corretas: I. O padrão REST utiliza métodos HTTP para operações CRUD, sendo stateless, o que facilita a escalabilidade das aplicações. II. GraphQL, ao permitir que clientes definam a estrutura dos dados requeridos, reduz o over-fetching e under- fetching, otimizando a eficiência de dados. III. SOAP é conhecido por sua simplicidade e facilidade de uso, principalmente devido ao uso extensivo de XML para troca de informações. IV. Uma das práticas recomendadas para o desenvolvimento de APIs é a inclusão de HATEOAS nas respostas, guiando o cliente para outros recursos relacionados. Assinale a alternativa correta: Escolha uma opção: a. III e IV apenas. b. II e IV apenas. c. II e III apenas. d. I e II apenas. e. I e IV apenas. A correta identificação das afirmativas I e IV como verdadeiras reflete uma compreensão fundamental dos padrões de design de API e das práticas recomendadas para o desenvolvimento de APIs eficazes. A afirmativa I corretamente destaca as características do REST, incluindo o uso de métodos HTTP para operações CRUD e sua natureza stateless, que contribui para a escalabilidade das aplicações ao não requerer que o servidor mantenha o estado do cliente entre requisições. Essa abordagem permite que as aplicações RESTful sejam flexíveis e facilmente escaláveis, uma vez que cada requisição é independente e contém todas as informações necessárias para ser processada. A afirmativa IV aborda uma prática recomendada importante no design RESTful de APIs: a inclusão de HATEOAS (hypertext as the engine of application state) nas respostas. Essa prática envolve o fornecimento de links hipertexto nas respostas da API, guiando os clientes para outros recursos relacionados e promovendo uma navegação mais intuitiva e descoberta de funcionalidades dentro da API. Por outro lado, a afirmativa II, embora descreva corretamente vantagens do GraphQL, como a redução do over-fetching e under-fetching, é também considerada correta, mas sua combinação com a afirmativa IV (sobre HATEOAS) é mais apropriada para ilustrar tanto a otimização na eficiência de dados quanto as práticas recomendadas em design de API. A afirmativa III é incorreta ao descrever o SOAP como simples e fácil de usar, principalmente devido ao uso de XML. Na realidade, SOAP é conhecido por sua segurança, padronização e extensibilidade, mas também por sua verbosidade e complexidade comparativa, especialmente quando colocado lado a lado com padrões como REST e GraphQL, que são geralmente considerados mais simples e flexíveis para uso em muitos cenários de desenvolvimento de aplicações web modernas. A resposta correta é: I e IV apenas. Questão 5 Correto Atingiu 1,0 de 1,0 Em um projeto de desenvolvimento web, um desenvolvedor precisa escolher a tecnologia adequada para a integração de sua aplicação PHP com um banco de dados. A segurança da conexão é uma prioridade, dado o risco de ataques de injeção de SQL, além da necessidade de garantir a confidencialidade dos dados acessados. Com base nas melhores práticas de segurança e no desejo de utilizar uma abordagem moderna e eficiente, o desenvolvedor opta pelo PHP Data Objects (PDO) para facilitar essa integração. O PDO oferece uma camada de abstração que permite uma conexão segura com diversos sistemas de gerenciamento de banco de dados (SGBDs), além de recursos para preparar consultas SQL, contribuindo para a prevenção de injeções de SQL. Considerando esse cenário, qual das seguintes ações é fundamental para estabelecer uma conexão segura entre a aplicação PHP e o banco de dados usando PDO? Escolha uma opção: a. Utilizar a função ‘mysql_connect’ para estabelecer a conexão, passando as credenciais diretamente nos parâmetros da função, a fim de garantir uma conexão rápida e segura. b. Conectar-se ao banco de dados usando uma conexão HTTP aberta, permitindo que as consultas ao banco de dados sejam enviadas como requisições GET para uma URL específica. c. Modificar o arquivo de configuração do PHP para desabilitar todas as extensões de banco de dados, exceto PDO, forçando a aplicação a usar PDO para todas as operações de banco de dados. d. Instanciar um novo objeto PDO, fornecendo a string de conexão (DSN), o nome de usuário e a senha, e utilizar métodos de preparação de consultas para executar operações de banco de dados. e. Armazenar as credenciais de conexão do banco de dados em um arquivo JSON dentro do diretório público da aplicação, para facilitar o acesso às credenciais pela aplicação. A resposta está correta, pois a abordagem para estabelecer uma conexão segura entre uma aplicação PHP e um banco de dados utilizando PDO envolve a instância de um novo objeto PDO com a string de conexão (DSN) adequada, além de fornecer o nome de usuário e a senha. Essa técnica também aproveita os métodos de preparação de consultas do PDO, os quais ajudam a prevenir injeções de SQL e aumentam a segurança geral da aplicação ao manipular dados. As demais alternativas estão incorretas porque modificar o arquivo de configuração do PHP para desabilitar todas as extensões de banco de dados, exceto PDO, não é necessário para forçar o uso do PDO e pode limitar as opções do desenvolvedor para situações que requerem o uso de outras extensões por motivos de compatibilidade ou performance. Utilizar a função ‘mysql_connect’ está obsoleto e não é recomendado para novos projetos, especialmente porque não oferece a mesma camada de segurança e abstração que o PDO proporciona, além de não suportar a preparação de consultas de maneira que previna eficazmente a injeção de SQL. Armazenar credenciais de conexão em um arquivo JSON dentrodo diretório público é uma prática altamente insegura, pois expõe informações sensíveis a qualquer pessoa com acesso ao diretório público da aplicação. Por fim, conectar-se ao banco de dados usando uma conexão HTTP aberta e enviar consultas como requisições GET não é uma prática segura ou eficiente para interações com o banco de dados, pois expõe dados sensíveis e consultas na URL, além de não ser uma abordagem suportada diretamente pelo PDO. A resposta correta é: Instanciar um novo objeto PDO, fornecendo a string de conexão (DSN), o nome de usuário e a senha, e utilizar métodos de preparação de consultas para executar operações de banco de dados. Questão 6 Correto Atingiu 1,0 de 1,0 No panorama do desenvolvimento de software, a seleção e implementação de padrões de design de API apropriadas são fundamentais para assegurar a eficácia na comunicação e integração entre sistemas distintos. REST, GraphQL e SOAP apresentam abordagens divergentes, cada uma com suas vantagens específicas que se adaptam a diferentes requisitos de projeto. REST é admirado por sua simplicidade e flexibilidade, usando métodos HTTP para operações CRUD e mantendo o estado da comunicação como independente (stateless). GraphQL oferece uma abordagem eficiente e personalizável para a recuperação de dados, permitindo que os clientes solicitem exatamente o que necessitam. Por outro lado, SOAP se destaca por sua robustez e segurança, sendo uma escolha sólida para transações que requerem conformidade e padronização rigorosas. Além da escolha do padrão, a implementação de práticas recomendadas, como documentação detalhada e versionamento cuidadoso, é vital para o sucesso de uma API. Com base nesses conceitos, qual dos seguintes cenários melhor ilustra a aplicação ideal de um padrão de design de API específico? Escolha uma opção: a. Uma aplicação móvel que requer atualizações em tempo real de informações de usuário deve usar SOAP devido à sua capacidade de efetuar operações CRUD de forma eficiente. b. Uma aplicação que fornece dados meteorológicos a partir de várias fontes e requer complexas consultas aninhadas para apresentar a informação deve escolher SOAP para melhor performance. c. Um sistema de gestão empresarial que troca dados financeiros detalhados com instituições bancárias deve preferir REST para garantir a segurança e a integridade dos dados. d. Um serviço de e-commerce que precisa de uma API para permitir que os usuários busquem produtos por categoria, preço e avaliação de usuários deve implementar GraphQL para otimizar as consultas de dados. e. Uma plataforma de jogos on-line que integra múltiplos sistemas internos para gerenciar usuários, pontuações e rankings deve adotar REST para facilitar a integração e manutenção. A escolha correta destaca o GraphQL por sua habilidade em otimizar as consultas de dados, permitindo que os clientes solicitem exatamente os dados que precisam, sem over-fetching ou under-fetching. Esta característica o torna ideal para aplicações como serviços de e- commerce, onde a eficiência na recuperação de dados específicos sobre produtos pode melhorar significativamente a experiência do usuário ao permitir pesquisas personalizadas e detalhadas. Quanto às outras opções, SOAP é conhecido por sua segurança e padronização, o que o torna mais adequado para transações que exigem conformidade com padrões rigorosos, e não necessariamente para operações CRUD eficientes requeridas por aplicações móveis. REST, com sua flexibilidade e uso de métodos HTTP, é eficaz para a criação de APIs que requerem escalabilidade e manutenção simples, especialmente em plataformas de jogos on-line ou sistemas que necessitam de integração de múltiplos sistemas internos, mas não é especificamente destacado pela segurança em trocas de dados financeiros detalhados. Finalmente, embora SOAP possa suportar transações seguras e seja bem padronizado, sua verbosidade e complexidade geralmente não são ideais para aplicações que requerem alta performance em consultas de dados complexas e aninhadas, como seria o caso de uma aplicação de dados meteorológicos. A resposta correta é: Um serviço de e-commerce que precisa de uma API para permitir que os usuários busquem produtos por categoria, preço e avaliação de usuários deve implementar GraphQL para otimizar as consultas de dados. Questão 7 Correto Atingiu 1,0 de 1,0 No desenvolvimento de um aplicativo de controle financeiro pessoal, um programador decide aproveitar as funcionalidades oferecidas por módulos existentes, para implementar cálculos complexos e manipulação de datas. Ao explorar as opções disponíveis, o programador opta por utilizar o módulo math, para realizar operações matemáticas avançadas, e o módulo datetime, para gerenciar e manipular informações de datas e horários. Para incorporar essas funcionalidades ao projeto, é necessário _______ os módulos apropriados no início do arquivo de código. Além disso, ao estruturar o código do aplicativo, o programador se esforça para seguir as melhores práticas, incluindo a _______ do código para garantir que cada módulo possa ser facilmente reutilizado em outras partes do aplicativo ou em futuros projetos. Complete as lacunas: Escolha uma opção: a. Testar – otimização. b. Executar – compressão. c. Documentar – análise. d. Importar – modularização. e. Compilar – minimização. A palavra-chave importar é utilizada para incluir módulos em um arquivo de código, permitindo que suas funções, classes e variáveis sejam usadas dentro de outro script. Isso é uma prática comum em linguagens de programação como Python, em que módulos como math e datetime podem ser importados diretamente, desde que façam parte da biblioteca padrão da linguagem ou tenham sido instalados previamente. Portanto, "importar" preenche corretamente a primeira lacuna, refletindo a ação necessária para utilizar módulos externos no projeto. A "modularização" do código refere-se à organização do código em módulos independentes e reutilizáveis, uma prática recomendada que facilita a manutenção, o teste e a reutilização de código, em diferentes partes de um projeto ou em projetos futuros. Ao estruturar o código de forma modular, o programador pode agrupar funcionalidades relacionadas de maneira lógica, tornando o projeto mais organizado e gerenciável. As outras opções apresentam termos que, embora relevantes em certos contextos de desenvolvimento de software, não se aplicam corretamente às ações descritas na questão: "compilar" e "minimização" são termos técnicos que se referem a processos diferentes da importação e modularização de código. Compilação é o processo de transformar código-fonte em código executável, enquanto a minimização é uma técnica para reduzir o tamanho de arquivos de código, comum em desenvolvimento web. "Executar" e "compressão" não estão relacionados ao processo de incluir módulos em um projeto ou à prática de organizar o código de forma modular. "Testar" é uma prática crucial no desenvolvimento de software, mas não descreve o ato de incluir módulos em um projeto. "Otimização" é um processo de melhoria do desempenho, mas não especificamente sobre a reutilização de código. "Documentar" e "análise" são importantes para o desenvolvimento de software; documentar é essencial para explicar o funcionamento do código, enquanto análise pode se referir a várias formas de avaliação de código, mas nenhuma delas preenche corretamente as lacunas proposta. A resposta correta é: Importar – modularização. Questão 8 Incorreto Atingiu 0,0 de 1,0 A implementação e a documentação de APIs RESTful são etapas críticas no desenvolvimento de aplicações modernas, exigindo a escolha cuidadosa de tecnologias e ferramentas que suportem não apenas o desenvolvimento eficiente, mas também a comunicação clara das capacidades da API para desenvolvedores terceiros. Frameworks como Express.js e Flask facilitam a construção de APIs ao oferecerem um ponto de partida robusto, enquanto linguagens como Go e Python (com FastAPI) proporcionam performance e facilidade de uso. Por outrolado, a documentação desempenha um papel fundamental, atuando como uma ponte entre a API e seus consumidores, facilitando a compreensão, o teste e a integração efetiva. Considerando os exemplos de tecnologias de desenvolvimento e as ferramentas de documentação mencionadas, qual das seguintes alternativas representa corretamente a combinação adequada para o desenvolvimento e a documentação de uma API RESTful? Escolha uma opção: a. Selecionar FastAPI para o desenvolvimento e utilizar Swagger para a documentação, visando performance comparável a NodeJS e Go em Python. b. Optar por Go (Golang) para a construção da API e Postman para documentação, visando alta performance e escalabilidade. c. Adotar o Flask para desenvolvimento de API e utilizar Postman para gerar documentação, ideal para projetos Python de pequeno a médio porte. d. Utilizar Django REST Framework para construir a API e Redoc para a documentação, visando aplicações Python complexas. e. Escolher Express.js para o desenvolvimento e Swagger para a documentação, adequado para APIs RESTful em JavaScript/Node.js. A resposta correta é: Escolher Express.js para o desenvolvimento e Swagger para a documentação, adequado para APIs RESTful em JavaScript/Node.js. Questão 9 Correto Atingiu 1,0 de 1,0 Na gestão de projetos de desenvolvimento de software, o controle de versão desempenha um papel crucial, facilitando a colaboração entre desenvolvedores e permitindo o gerenciamento eficiente de múltiplas versões de arquivos de projeto. Esse sistema não apenas ajuda a evitar conflitos ao trabalhar em paralelo em diferentes partes de um projeto, mas também oferece um histórico detalhado de todas as alterações, facilitando a identificação de erros e permitindo a reversão a versões anteriores do código quando necessário. Além disso, o controle de versão promove um ambiente de desenvolvimento colaborativo por meio de funcionalidades, como revisão de código e resolução de conflitos, assegurando que as contribuições dos membros da equipe sejam integradas de forma eficaz e que a qualidade do código seja mantida. Considerando estas informações, avalie as seguintes afirmações sobre o controle de versão em projetos de software: I. O controle de versão limita a capacidade dos desenvolvedores de trabalhar simultaneamente em diferentes partes de um projeto, aumentando o risco de conflitos. II. Cada mudança feita no projeto é rastreada, incluindo informações sobre o autor da mudança, a data e a descrição do que foi alterado. III. O sistema de controle de versão dificulta a revisão do código entre membros da equipe, pois não permite a visualização das alterações antes da integração final no projeto. IV. Em caso de erros graves ou perda de dados, o controle de versão permite reverter para uma versão anterior do software que está livre do problema. Alternativas: Escolha uma opção: a. F – F – V – V. b. V – V – V – V. c. F – V – F – V. d. V – F – V – F. e. V – V – F – F. A alternativa correta reflete a verdadeira natureza e os benefícios do controle de versão em projetos de desenvolvimento de software. O controle de versão é projetado para melhorar, não limitar, a colaboração entre desenvolvedores, permitindo que trabalhem em paralelo em diferentes partes de um projeto, sem aumentar o risco de conflitos. Isso é possível graças às funcionalidades de branching e merging, que permitem a integração eficaz de diferentes linhas de trabalho. Portanto, a afirmação I é falsa. A afirmação II é verdadeira e destaca um dos principais benefícios do controle de versão: a capacidade de rastrear cada alteração feita no projeto, incluindo o autor, a data e uma descrição do que foi alterado. Isso facilita o entendimento da evolução do projeto e a identificação de quando e por que problemas específicos surgiram. A afirmação III é falsa porque um dos pontos fortes do controle de versão é precisamente facilitar a revisão de código entre os membros da equipe. Ferramentas de controle de versão muitas vezes incluem funcionalidades dedicadas à revisão de código, permitindo que as equipes revisem e comentem as mudanças antes de serem integradas ao projeto principal, assegurando assim a qualidade e consistência do código. Por fim, a afirmação IV é verdadeira, destacando outra vantagem crítica do controle de versão: a capacidade de reverter para versões anteriores do software em caso de erros graves ou perda de dados. Isso atua como uma rede de segurança, permitindo que as equipes corrijam rapidamente os problemas sem perder o trabalho anterior. A resposta correta é: F – V – F – V. Questão 10 Correto Atingiu 1,0 de 1,0 Em um ambiente de desenvolvimento de software que enfatiza a escalabilidade, manutenibilidade e flexibilidade, o desacoplamento de componentes emerge como uma prática de design crítica. À medida que aplicações se tornam mais complexas, a habilidade de adaptar e escalar efetivamente partes específicas do sistema, sem impactar sua operação geral, torna-se um desafio significativo. O desacoplamento permite a independência funcional entre componentes, promovendo uma arquitetura modular através da comunicação por interfaces bem definidas. Isso não apenas facilita a atualização e correção de bugs com impacto mínimo nos demais componentes, mas também permite uma escalabilidade horizontal mais eficiente e econômica. Ademais, o desacoplamento apoia a diversidade tecnológica dentro do projeto, melhorando a testabilidade e permitindo a utilização das ferramentas mais adequadas para cada componente. Considerando essas informações, qual das seguintes opções representa a principal vantagem do desacoplamento de componentes em sistemas de software? Escolha uma opção: a. Restrição na escolha de tecnologias e ferramentas, limitando os componentes a um único conjunto de frameworks. b. Capacidade de escalar a aplicação inteira uniformemente, independentemente das demandas individuais de cada componente. c. Complexidade reduzida na definição das interfaces entre componentes, simplificando o processo de desenvolvimento. d. Aumento da dependência entre os componentes, garantindo uma integração mais estreita e uma comunicação mais eficaz. e. Isolamento funcional dos componentes, permitindo atualizações, correções e escalabilidade com impacto mínimo nos demais. A principal vantagem do desacoplamento de componentes em sistemas de software é o isolamento funcional, que permite a realização de atualizações e correções em partes específicas do sistema sem afetar significativamente os outros componentes. Isso resulta em uma maior agilidade no desenvolvimento, estabilidade na aplicação, e facilita a escalabilidade horizontal ao permitir que apenas as partes sob maior demanda sejam escaladas. Essa abordagem promove não apenas a eficiência operacional, mas também a economia de recursos, visto que não é necessário escalar toda a aplicação de forma uniforme. Aumentar a dependência entre os componentes, na verdade, vai contra os princípios do desacoplamento, pois a ideia é justamente minimizar as dependências diretas para aumentar a flexibilidade e a capacidade de manutenção do sistema. Portanto, uma integração mais estreita não é considerada uma vantagem nesse contexto. Escalar a aplicação inteira uniformemente é menos eficiente do que a escalabilidade seletiva permitida pelo desacoplamento. A capacidade de escalar partes específicas da aplicação conforme necessário é uma vantagem chave do desacoplamento, pois oferece uma solução mais econômica e adaptável às variações de demanda. Restringir a escolha de tecnologias e ferramentas seria uma desvantagem, não uma vantagem. O desacoplamento, na verdade, facilita o uso de diferentes tecnologias e frameworks dentro da mesma aplicação, pois cada componente pode ser desenvolvido, testado e implantado utilizando as ferramentas mais adequadas para suas necessidades específicas sem afetar os outros componentes. A complexidade na definição das interfaces entre componentes é um desafio inerente ao desacoplamento, não uma vantagem. Enquanto o desacoplamentopromove a modularidade e a flexibilidade, ele requer uma consideração cuidadosa e uma definição clara das interfaces para garantir a comunicação eficaz entre componentes isolados. Simplificar esse processo sem o devido cuidado pode comprometer a integridade e a funcionalidade do sistema como um todo. A resposta correta é: Isolamento funcional dos componentes, permitindo atualizações, correções e escalabilidade com impacto mínimo nos demais. Situação Finalizada Iniciado quarta-feira, 9 jul. 2025, 10:57 Concluído quarta-feira, 9 jul. 2025, 11:17 Duração 20 minutos 24 segundos Nota 10,0 de um máximo de 10,0(100%) Questão 1 Correto Atingiu 1,0 de 1,0 No desenvolvimento de aplicações modernas, estabelecer uma conexão segura com bancos de dados é um aspecto crítico que impacta tanto a segurança quanto a eficiência da manipulação de dados. Diferentes linguagens de programação e frameworks oferecem suas próprias ferramentas e abordagens para criar essas conexões, desde JDBC em Java até PDO em PHP, cada um com mecanismos específicos para garantir a segurança dos dados e a integridade das transações. Além disso, práticas recomendadas, como o uso de SSL/TLS para conexões criptografadas e o gerenciamento seguro de credenciais, são universais em todos os ambientes de desenvolvimento. Nesse contexto, avalie como verdadeiras ou falsas as seguintes afirmações sobre as práticas de estabelecimento de conexão segura entre aplicações e bancos de dados. ( ) Incluir o driver JDBC específico no projeto é uma etapa necessária apenas quando se está trabalhando com bancos de dados SQL em Java. ( ) Ao utilizar PDO em PHP, a preparação de consultas SQL é opcional para prevenir injeção de SQL. ( ) O uso de SSL/TLS para criptografar a conexão é recomendado apenas para aplicações que transmitem informações altamente sensíveis. ( ) O gerenciamento seguro de credenciais, evitando hardcoding no código, é uma prática recomendada em todas as linguagens e ferramentas de desenvolvimento. Agora assinale a alternativa com a sequência correta. Escolha uma opção: a. V – F – F – V. b. F – V – F – V. c. V – F – V – F. d. F – F – V – V. e. V – V – F – F. Essa resposta está correta. A primeira afirmação é verdadeira, pois incluir o driver JDBC específico é essencial ao trabalhar com bancos de dados SQL em Java, possibilitando a comunicação efetiva entre a aplicação e o banco de dados. A segunda afirmação é falsa. A preparação de consultas SQL usando PDO em PHP não é opcional, mas sim uma prática crucial recomendada para prevenir injeção de SQL. Utilizar consultas preparadas é uma maneira eficaz de garantir que os dados manipulados sejam seguros e as entradas do usuário sejam adequadamente sanitizadas antes de serem processadas pelo banco de dados. A terceira afirmação é falsa. O uso de SSL/TLS é recomendado para todas as aplicações, independentemente do nível de sensibilidade das informações transmitidas. Criptografar a conexão entre a aplicação e o banco de dados protege os dados em trânsito contra interceptações e acessos não autorizados, sendo uma prática de segurança fundamental. A quarta afirmação é verdadeira. O gerenciamento seguro de credenciais é uma prática universal recomendada que se aplica a todas as linguagens de programação e ferramentas de desenvolvimento. Evitar o hardcoding de credenciais diretamente no código-fonte e, em vez disso, utilizar variáveis de ambiente, cofres de senhas ou serviços de gerenciamento de configuração segura são medidas essenciais para proteger as informações de acesso ao banco de dados. Questão 2 Correto Atingiu 1,0 de 1,0 Em um projeto de desenvolvimento de um aplicativo para planejamento de rotas de viagem, uma equipe de engenheiros de software precisa decidir qual estrutura de dados é mais apropriada para modelar a rede de transporte, incluindo cidades como vértices e rotas como arestas. O aplicativo deve permitir aos usuários encontrar o caminho mais curto entre duas cidades, além de explorar possíveis rotas circulares que retornem ao ponto de partida. Considerando a necessidade de representar relações complexas entre as cidades e as rotas, incluindo a possibilidade de ciclos e caminhos bidirecionais, qual estrutura de dados a equipe deve escolher? Escolha uma opção: a. Um grafo, pois oferece a flexibilidade necessária para representar redes complexas com ciclos e conexões bidirecionais. b. Uma lista, devido à sua simplicidade e à capacidade de adicionar e remover cidades ou rotas, conforme necessário. c. Uma pilha, porque seu funcionamento LIFO é ideal para rastrear o caminho percorrido em busca de rotas. d. Uma fila, devido ao seu princípio FIFO que ajuda a organizar as cidades e rotas na ordem de visita. e. Uma árvore, porque permite modelar hierarquias claras e facilita a busca de rotas de maneira eficiente. A escolha correta para modelar a rede de transporte no aplicativo de planejamento de rotas é um grafo, conforme indicado na alternativa correta. Grafos são estruturas de dados que permitem representar uma coleção de nós (ou vértices) e as arestas que os conectam, sendo ideais para modelar relações complexas, como redes de transporte. Eles suportam tanto conexões bidirecionais quanto a presença de ciclos, o que é crucial para o cenário descrito, no qual os usuários podem querer explorar rotas circulares ou caminhos, entre duas cidades, que podem ser percorridos em ambos os sentidos. As outras alternativas não são apropriadas para os requisitos do projeto por várias razões: árvores modelam estruturas hierárquicas sem ciclos e, portanto, não são adequadas para representar redes de transporte, que podem incluir rotas circulares ou caminhos bidirecionais. Árvores também dificultam a representação de redes em que um nó pode ter múltiplas conexões, que não seguem uma hierarquia estrita. Listas são estruturas lineares que não oferecem uma maneira direta de representar relações complexas entre elementos, como as conexões bidirecionais ou ciclos encontrados em redes de transporte. Embora listas possam armazenar dados sequencialmente, elas não capturam a natureza das conexões entre cidades e rotas. Pilhas, com seu funcionamento LIFO, são mais adequadas para cenários que requerem o processamento do último elemento adicionado primeiro. Elas não são projetadas para modelar redes com conexões múltiplas e bidirecionais, limitando sua utilidade no contexto de planejamento de rotas. Filas operam com um princípio FIFO e são usadas em cenários que exigem processamento ou atendimento na ordem de chegada. Embora possam ser úteis para gerenciar a ordem de visitas ou explorações, não capturam a complexidade das relações entre os vértices (cidades) e as arestas (rotas) de uma rede de transporte. Questão 3 Correto Atingiu 1,0 de 1,0 A avaliação da usabilidade é um aspecto crítico no desenvolvimento de produtos digitais, assegurando que eles sejam não apenas tecnicamente funcionais, mas também acessíveis, intuitivos e agradáveis para o usuário final. Esse processo utiliza uma variedade de métodos e técnicas para identificar desafios de usabilidade e áreas para melhoria. Entre os métodos descritos, os testes de usabilidade e a análise heurística se destacam por sua aplicabilidade direta e teórica, respectivamente. Com base nos métodos de avaliação de usabilidade discutidos, avalie as seguintes afirmações sobre o processo de avaliação da usabilidade em desenvolvimento de produtos digitais: I. Testes de usabilidade envolvem a observação direta dos usuários enquanto tentam realizar tarefas específicas, identificando pontos de fricção e satisfação na interação com o produto. II. A análise heurística é um método que não requer a participação direta dos usuários, fundamentando-se em princípios estabelecidos de usabilidade para avaliar a interface. III. Pesquisas com usuários, incluindo entrevistas e questionários, são menos eficazes do que testes de usabilidade e análises heurísticas, pois não fornecem insights comportamentais diretos. IV. Iniciar a avaliação de usabilidade nas fasesfinais do desenvolvimento do produto é suficiente para garantir uma experiência do usuário de alta qualidade. Quais afirmações estão corretas? Escolha uma opção: a. III e IV apenas. b. I e III apenas. c. I e II apenas. d. II e IV apenas. e. I, II, III apenas. As afirmações I e II são corretas porque capturam a essência dos métodos de avaliação de usabilidade mais comumente empregados no desenvolvimento de produtos digitais. Os testes de usabilidade são fundamentais para observar como os usuários interagem com o produto em cenários da vida real ou controlados, permitindo que os desenvolvedores vejam em que os usuários encontram dificuldades ou quais aspectos do design apreciam. Esse método direto é inestimável para obter feedback real e ajustar o produto conforme necessário. Por outro lado, a análise heurística, conduzida por especialistas em usabilidade, utiliza um conjunto predefinido de critérios (como as heurísticas de Nielsen) para avaliar a interface do usuário sem a necessidade de testes com usuários reais. Esse método é especialmente útil nas fases iniciais de desenvolvimento para identificar problemas de usabilidade que podem ser corrigidos antes de envolver usuários em testes mais custosos e demorados. Já a afirmação III é incorreta, pois subestima o valor das pesquisas com usuários, que são, na verdade, uma parte crucial do processo de Design Centrado no Usuário. Entrevistas, questionários e grupos focais podem fornecer insights profundos sobre as necessidades, os desejos e as expectativas dos usuários, complementando os dados obtidos a partir de testes de usabilidade e análise heurística. A afirmação IV também é incorreta, pois sugere uma abordagem tardia para a avaliação da usabilidade, o que pode levar a problemas significativos que seriam mais difíceis e caros de corrigir. A avaliação da usabilidade deve ser uma consideração contínua ao longo do desenvolvimento do produto, começando nas fases iniciais e continuando até após o lançamento, para garantir que o produto permaneça relevante e agradável para os usuários. Questão 4 Correto Atingiu 1,0 de 1,0 No desenvolvimento de APIs RESTful, a escolha correta do método HTTP para cada operação é essencial, para garantir que a API seja intuitiva, eficiente e conforme aos padrões da web. Cada método HTTP - GET, POST, PUT, DELETE, e PATCH - é projetado para realizar uma operação específica, alinhando-se com as ações CRUD (Create, Read, Update, Delete), fundamentais para a manipulação de dados em qualquer aplicação web. Compreender a função de cada um desses métodos e aplicá-los corretamente não apenas facilita a implementação de funcionalidades desejadas, mas também melhora a interoperabilidade e a experiência do desenvolvedor ao interagir com a API. Associe o método HTTP (Coluna A) à sua operação CRUD correspondente (Coluna B) para entender como essas operações fundamentais são mapeadas na arquitetura RESTful. Coluna A: 1. GET; 2. POST; 3. PUT/PATCH; 4. DELETE. Coluna B: A. Update; B. Create; C. Read; D. Delete. Assinale a alternativa correta: Escolha uma opção: a. 1-B, 2-A, 3-C, 4-D. b. 1-C, 2-D, 3-B, 4-A. c. 1-C, 2-B, 3-A, 4-D. d. 1-D, 2-C, 3-B, 4-A. e. 1-A, 2-D, 3-C, 4-B. A alternativa correta reflete o mapeamento preciso entre os métodos HTTP e as operações CRUD na concepção de APIs RESTful. O método GET é utilizado para ler ou recuperar a representação de um recurso, sem modificar seu estado, correspondendo assim à operação Read. Isso é exemplificado ao solicitar detalhes de um recurso específico, como os dados de um usuário, sem causar qualquer alteração nos dados existentes. O método POST é empregado para criar um novo recurso no servidor, como adicionar um novo usuário ao sistema, alinhando-se com a operação Create do modelo CRUD. Este método é fundamental para expandir a base de dados ou recursos de uma aplicação, permitindo a inclusão de novas entidades. Os métodos PUT e PATCH são utilizados para atualizar recursos existentes, com o PUT substituindo um recurso inteiro e o PATCH aplicando atualizações parciais. Ambos correspondem à operação Update, permitindo modificar dados de recursos específicos, seja atualizando todos os campos de um recurso (PUT) ou apenas partes selecionadas (PATCH). O método delete, como o nome sugere, é usado para remover um recurso especificado, realizando a operação delete. Isso permite a exclusão de dados ou recursos indesejados de uma aplicação, como a remoção de um usuário do sistema. As outras alternativas não apresentam a correta associação entre os métodos HTTP e as operações CRUD. Elas distorcem a relação entre as ações realizadas pelos métodos HTTP e as operações fundamentais de manipulação de dados, o que poderia levar a uma implementação ineficaz e não intuitiva de APIs RESTful. Ao compreender e aplicar corretamente cada método HTTP conforme seu propósito designado, desenvolvedores podem criar APIs que são não apenas conformes aos padrões da web, mas que também oferecem clareza, eficiência e uma ótima experiência para outros desenvolvedores que utilizam essas interfaces de programação. Questão 5 Correto Atingiu 1,0 de 1,0 Na era digital, a segurança das informações transmitidas através da internet é fundamental, especialmente para aplicações que lidam com dados pessoais e financeiros dos usuários. A implementação de certificados SSL/TLS surge como uma solução essencial, criptografando a comunicação entre o navegador do usuário e o servidor da aplicação, protegendo as informações contra interceptações mal-intencionadas. Esse processo de criptografia é baseado no uso de chaves (1) e (2), em que uma é utilizada para criptografar os dados enviados e a outra para descriptografá-los, garantindo que apenas as partes autorizadas possam acessar as informações em sua forma legível. A escolha correta das chaves envolvidas nesse processo é crucial para a segurança da transmissão de dados. Com base na importância dos certificados SSL/TLS e no seu mecanismo de funcionamento, preencha as lacunas: Escolha uma opção: a. Assimétrica – simétrica. b. Simétrica – pública. c. Pública – privada. d. Pública – simétrica. e. Privada – assimétrica. A alternativa correta reflete com precisão o mecanismo de criptografia utilizado pelos certificados SSL/TLS, que se baseia no modelo de criptografia assimétrica envolvendo chaves pública e privada. Nesse modelo, a chave pública é utilizada para criptografar os dados, enquanto a chave privada é usada para descriptografá-los. Esse par de chaves assegura que apenas o destinatário pretendido, que possui a chave privada correspondente, possa acessar as informações em sua forma original, mantendo a segurança e a privacidade dos dados transmitidos. As opções que combinam chaves públicas com simétricas ou privadas com assimétricas apresentam uma compreensão equivocada do processo de criptografia utilizado em SSL/TLS. A criptografia simétrica usa a mesma chave para criptografia e descriptografia, o que não se aplica ao funcionamento dos certificados SSL/TLS, que adotam a criptografia assimétrica. Sugerir combinações como simétrica-pública ou assimétrica-simétrica confunde os tipos de criptografia e os papéis das chaves no processo de segurança dos certificados SSL/TLS. A criptografia assimétrica é a base para a segurança proporcionada por SSL/TLS, onde a chave pública está amplamente disponível para criptografar mensagens, e a chave privada é mantida em segredo pelo destinatário para descriptografar essas mensagens. Questão 6 Correto Atingiu 1,0 de 1,0 No mundo do desenvolvimento de software, a transição para a arquitetura de microsserviços tem oferecido às empresas uma maneira mais flexível, escalável e resiliente de construir aplicações. Diferente da arquitetura monolítica tradicional, que compila todos os componentes de uma aplicação como uma única unidade, os microsserviços permitem que cada parte da aplicação seja desenvolvida, implantada e gerenciada de forma independente. Esta abordagem modular não apenas facilita a manutenção e a atualização deaplicativos complexos, mas também permite uma escalabilidade mais eficaz, adaptando-se dinamicamente às demandas de carga variáveis. No entanto, adotar microsserviços também introduz desafios únicos, especialmente relacionados à comunicação entre serviços e ao gerenciamento de dados distribuídos. Considerando as características e desafios associados à arquitetura de microsserviços, qual das seguintes afirmações é verdadeira sobre a implementação e gestão de uma aplicação baseada em microsserviços? Escolha uma opção: a. Falhas em um serviço específico dentro de uma arquitetura de microsserviços geralmente não afetam diretamente os outros serviços, contribuindo para a resiliência do sistema como um todo. b. A implementação de microsserviços requer uma comunicação síncrona entre os serviços para garantir transações atômicas e manutenção da consistência dos dados em todo o sistema. c. A escalabilidade em uma arquitetura de microsserviços é limitada pela capacidade do serviço menos escalável, exigindo que todos os serviços sejam escalados uniformemente. d. Em uma arquitetura de microsserviços, todos os serviços devem ser desenvolvidos utilizando a mesma tecnologia e linguagem de programação para garantir a compatibilidade e facilitar a comunicação. e. A arquitetura de microsserviços elimina completamente a necessidade de gerenciamento de dependências entre diferentes partes da aplicação, simplificando o processo de desenvolvimento. A alternativa correta reflete uma das principais vantagens da arquitetura de microsserviços: a resiliência. Ao isolar os serviços, uma falha em um componente específico tende a ter impacto limitado, permitindo que o restante do sistema continue operacional. Esta característica é crucial para manter a disponibilidade e a confiabilidade de aplicações complexas, especialmente em ambientes de produção críticos. A alternativa é incorreta porque, embora os microsserviços promovam a independência entre os componentes, ainda há necessidade de gerenciar as dependências relacionadas à comunicação e à integração entre esses serviços. A gestão adequada dessas dependências é essencial para a funcionalidade e a segurança do sistema. A alternativa não é verdadeira, pois uma das vantagens da arquitetura de microsserviços é justamente a heterogeneidade tecnológica. Ela permite que cada serviço utilize a tecnologia ou linguagem de programação mais adequada para suas necessidades específicas, sem impor uma uniformidade tecnológica que poderia limitar a inovação e a eficiência. A alternativa falha em capturar a essência da escalabilidade nos microsserviços. Diferentemente de sistemas monolíticos, os microsserviços permitem que cada serviço seja escalado independentemente, baseando-se em suas demandas individuais, o que aumenta a eficiência e a capacidade de resposta do sistema como um todo. A alternativa não reflete adequadamente as práticas de comunicação em arquiteturas de microsserviços. Embora as transações atômicas e a consistência dos dados sejam importantes, a arquitetura de microsserviços frequentemente emprega comunicação assíncrona e padrões como eventual consistência para gerenciar a interação entre serviços de maneira flexível e eficiente. Questão 7 Correto Atingiu 1,0 de 1,0 Na era digital, a segurança das APIs é um componente crítico na proteção contra violações de dados e ataques cibernéticos. Vulnerabilidades nas APIs podem servir como portas de entrada para ataques que comprometem informações sensíveis, resultando em consequências significativas para as organizações. Para mitigar esses riscos, é essencial implementar práticas robustas de segurança, incluindo testes de penetração regulares, a adoção de estratégias específicas contra-ataques comuns, e a atualização contínua dos sistemas de segurança. Considerando as medidas de segurança necessárias para proteger APIs, avalie as seguintes afirmações: ( ) Testes de penetração devem ser realizados apenas na fase inicial do desenvolvimento da API para identificar vulnerabilidades. ( ) A injeção de SQL pode ser efetivamente prevenida através do uso de consultas parametrizadas ou instruções preparadas. ( ) Cross-Site Scripting (XSS) é um ataque que não pode ser mitigado, pois é intrínseco à funcionalidade das aplicações web modernas. ( ) Tokens anti-CSRF são uma estratégia eficaz para prevenir ataques de falsificação de solicitação entre sites (CSRF). Assinale a alternativa correta: Escolha uma opção: a. F – F – V – V. b. V – F – V – F. c. F – V – F – V. d. V – V – V – V. e. V – V – F – F. A segurança das APIs é uma preocupação contínua que exige vigilância e atualizações regulares para se proteger contra novas vulnerabilidades e técnicas de ataque. A afirmação correta e a mais segura abordagem para proteger APIs envolve a realização de testes de penetração não apenas no início do ciclo de vida do desenvolvimento, mas como um processo contínuo para identificar e mitigar novas vulnerabilidades que podem surgir com atualizações e mudanças na API. Portanto, a ideia de que testes de penetração devem ser realizados apenas uma vez é incorreta, pois a segurança da API é um processo dinâmico que requer avaliações regulares. A prevenção de injeção de SQL através do uso de consultas parametrizadas ou instruções preparadas é uma prática de segurança comprovada, que protege as APIs ao garantir que os dados enviados pelos usuários sejam tratados de maneira segura, evitando que comandos maliciosos sejam executados no banco de dados. A afirmação de que o Cross-Site Scripting (XSS) não pode ser mitigado é falsa. A mitigação de XSS é possível e necessária, realizada através da validação, saneamento de entradas dos usuários e a adoção de políticas de segurança de conteúdo que impedem a execução de scripts maliciosos. Os tokens anti-CSRF representam uma medida de segurança eficaz contra-ataques de falsificação de solicitação entre sites, assegurando que cada solicitação feita à API seja acompanhada de um token único, validado pelo servidor. Esta é uma prática recomendada para proteger as APIs e os usuários contra este tipo específico de ataque. Questão 8 Correto Atingiu 1,0 de 1,0 Na era digital atual, em que a demanda por entregas rápidas e confiáveis de software é mais alta do que nunca, a Integração Contínua (CI) se estabeleceu como uma prática essencial no desenvolvimento de software. Centralizada na ideia de integrar e testar o código várias vezes ao dia, a CI utiliza a automação para realizar builds e testes, o que permite às equipes identificar e corrigir erros com rapidez, aprimorando a qualidade do software e acelerando o tempo de entrega. Um dos princípios fundamentais da CI é a prática de ____________ código para o repositório principal com frequência, o que promove a colaboração e reduz a complexidade de integrar trabalho de diferentes desenvolvedores. Outro princípio vital é ____________ um conjunto robusto de testes automatizados, que garantem a detecção precoce de erros e contribuem para a confiança na qualidade do código desenvolvido. Essas práticas não apenas facilitam o processo de desenvolvimento, mas também melhoram significativamente a satisfação da equipe e a competitividade no mercado. Para preencher as lacunas, escolha a opção correta: Escolha uma opção: a. Commitando / mantendo. b. Delegando / ignorando. c. Protelando / minimizando. d. Commitando / evitando. e. Omitindo / expandindo. A prática de "commitar" código para o repositório principal com frequência é uma estratégia central na Integração Contínua, pois promove integração contínua de mudanças e facilita a colaboração entre desenvolvedores, minimizando conflitos de integração e acelerando o ciclo de desenvolvimento. Além disso, "manter" um conjunto robusto de testes automatizados é crucial para garantir que qualquer modificação no código não introduza novos erros, permitindo à equipe desenvolver com maior confiança e eficiência. A opção de "delegar" código e "ignorar" testes automatizados contradiz a essência da CI, que enfatiza a participaçãoativa de todos os desenvolvedores no processo de integração e a importância de testes para a detecção precoce de problemas. "Evitar" testes automatizados vai contra um dos princípios fundamentais da CI, que é a criação de uma base de testes abrangente para garantir a qualidade e a estabilidade do código. "Protelar" a integração do código e "minimizar" os testes são práticas que também contrariam os objetivos da CI, pois atrasam a detecção de erros e reduzem a eficácia do processo de desenvolvimento. Por fim, "omitir" a integração frequente de código e "expandir" sem uma estratégia clara para a manutenção de testes automatizados não alinha com a metodologia da CI, que busca otimizar tanto a integração do código quanto a cobertura e eficácia dos testes. Questão 9 Correto Atingiu 1,0 de 1,0 Considerando as estratégias de cache essenciais para melhorar a performance e a escalabilidade de aplicações, em especial nos sistemas de alta demanda, duas abordagens se destacam: o caching em memória e o cache distribuído. Cada uma possui características distintas que as tornam adequadas para diferentes cenários de uso. Por exemplo, o caching em memória é amplamente reconhecido pela sua velocidade de acesso, graças ao armazenamento de dados na RAM do servidor ou aplicação, enquanto o cache distribuído é valorizado pela sua escalabilidade e capacidade de aumentar a disponibilidade dos dados através de um cluster. Associe as características listadas abaixo com a estratégia de cache correspondente: Coluna A (Características) 1. Escalabilidade e alta disponibilidade. 2. Velocidade de acesso aos dados. 3. Limitação pela quantidade de memória RAM disponível. 4. Possibilidade de persistência dos dados em disco. Coluna B (Estratégias de Cache) A. Caching em memória. B. Cache distribuído. Alternativas: Escolha uma opção: a. 1-B, 2-B, 3-A, 4-A. b. 1-B, 2-A, 3-A, 4-B. c. 1-B, 2-A, 3-B, 4-A. d. 1-A, 2-A, 3-B, 4-B. e. 1-A, 2-B, 3-B, 4-A. A escalabilidade e alta disponibilidade são marcas registradas do cache distribuído, pois essa estratégia envolve distribuir os dados de cache por vários servidores ou instâncias, formando um cluster. Isso não apenas aumenta a quantidade total de dados que podem ser armazenados, mas também adiciona redundância, melhorando a disponibilidade dos dados de cache em caso de falha de um servidor. A velocidade de acesso aos dados é uma vantagem significativa do caching em memória, devido ao armazenamento de dados diretamente na memória RAM do servidor ou aplicação. Isso proporciona tempos de acesso extremamente rápidos, o que é crucial para dados que são acessados frequentemente. A limitação pela quantidade de memória RAM disponível é uma característica do caching em memória. Como os dados são armazenados na RAM, o volume de dados que pode ser cacheado é diretamente dependente da quantidade de memória disponível, o que pode ser um fator limitante para aplicações com grandes volumes de dados. A possibilidade de persistência dos dados em disco é uma característica do cache distribuído. Essa abordagem permite que os dados sejam persistidos em disco, oferecendo uma camada adicional de segurança para os dados em caso de falhas, o que não é tipicamente uma característica do caching em memória, em que a persistência pode ser um desafio devido à volatilidade da memória RAM. Questão 10 Correto Atingiu 1,0 de 1,0 No contexto do desenvolvimento de APIs RESTful, a etapa de design e modelagem de recursos desempenha um papel crucial na construção de interfaces de programação eficazes e intuitivas. A identificação e modelagem adequada de recursos, utilizando URIs (identificadores de recursos uniformes), permite que a API seja facilmente compreendida e utilizada por desenvolvedores, promovendo uma maior escalabilidade e interoperabilidade entre sistemas. Considerando as práticas recomendadas para a modelagem de recursos em APIs RESTful, como o uso de substantivos no plural para coleções, a representação hierárquica de recursos e a utilização de parâmetros de consulta para filtragem, qual das seguintes URIs exemplifica corretamente estas diretrizes? Escolha uma opção: a. /products/category/books para filtrar produtos pela categoria de livros. b. /users/123/posts para representar todos os posts do usuário com ID 123. c. /getUserById?id-123 para acessar informações do usuário com ID 123. d. /users/delete/123 para remover o usuário com ID 123. e. /UpdateUser/123 para atualizar informações do usuário com ID 123. A opção correta segue as práticas recomendadas para modelagem de recursos em APIs RESTful, ao utilizar substantivos no plural para representar coleções (users e posts) e refletir uma estrutura hierárquica clara que indica a relação entre usuários e seus posts. Isso não apenas torna a URI intuitiva, mas também permite uma organização lógica e escalável da API, facilitando a compreensão dos relacionamentos entre os recursos. As demais opções falham em aderir a uma ou mais práticas recomendadas: A opção utiliza um verbo (getUserById) no URI, o que contradiz as diretrizes de utilizar métodos HTTP para indicar ações e substantivos para identificar recursos. Além disso, emprega um parâmetro de consulta de forma redundante para especificar o ID, o que poderia ser mais eficientemente representado na própria estrutura do URI. A opção incorre em um erro similar ao incluir um verbo (delete) no URI, sugerindo uma ação que deveria ser indicada pelo método HTTP DELETE, enquanto o identificador do recurso deve ser suficiente para especificar a operação desejada. A opção tenta representar uma operação de filtragem através da estrutura hierárquica do URI (products/category/books) ao invés de utilizar parâmetros de consulta, o que limita a flexibilidade e a clareza na especificação de filtros dinâmicos. A opção, semelhante às demais incorretas, utiliza um verbo (UpdateUser) no URI, desviando-se da recomendação de expressar ações por meio dos métodos HTTP e não na URI, além de não aproveitar a estrutura hierárquica para organizar os recursos de maneira lógica.