Logo Passei Direto
Buscar

1-Programação em projetos de software- PV

Ferramentas de estudo

Questões resolvidas

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:
Quando o desacoplamento e a independência entre os serviços são prioridades, permitindo
a. que eles se comuniquem sem a necessidade de respostas imediatas, a mensageria assíncrona é a opção mais adequada.
Para operações demoradas que não exigem uma resposta imediata, como o processamento em
b. lote de transações, as chamadas de API RESTful apresentam a solução ideal devido à sua natureza síncrona.
Em um cenário onde é crucial ter respostas imediatas a solicitações dos usuários, como
c. operações de leitura e atualização de dados, os sistemas baseados em eventos são a melhor escolha.
Se o objetivo é facilitar a integração com serviços de terceiros e realizar operações CRUD
d. simples com feedback instantâneo para o usuário, as chamadas de API RESTful são o mecanismo mais recomendado.
Para uma aplicação que requer processamento de dados em tempo real, com alta escalabilidade
e. e capacidade de reagir a eventos instantaneamente, a mensageria assíncrona é o mecanismo mais indicado.
a. que eles se comuniquem sem a necessidade de respostas imediatas, a mensageria assíncrona é a opção mais adequada.
b. lote de transações, as chamadas de API RESTful apresentam a solução ideal devido à sua natureza síncrona.
c. operações de leitura e atualização de dados, os sistemas baseados em eventos são a melhor escolha.
d. simples com feedback instantâneo para o usuário, as chamadas de API RESTful são o mecanismo mais recomendado.
e. e capacidade de reagir a eventos instantaneamente, a mensageria assíncrona é o mecanismo mais indicado.

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. 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.

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 underfetching, 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. III e IV apenas.
b. II e IV apenas.
c. II e III apenas.
d. I e II apenas.
e. I e IV apenas.

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.
Modificar o arquivo de configuração do PHP para desabilitar todas as extensões de banco de
c. dados, exceto PDO, forçando a aplicação a usar PDO para todas as operações de banco de dados.
Instanciar um novo objeto PDO, fornecendo a string de conexão (DSN), o nome de usuário
d. 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. 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.

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.
Uma aplicação que fornece dados meteorológicos a partir de várias fontes e requer complexas
b. consultas aninhadas para apresentar a informação deve escolher SOAP para melhor performance.
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.
Um serviço de e-commerce que precisa de uma API para permitir que os usuários busquem
c. produtos por categoria, preço e avaliação de usuários deve implementar GraphQL para otimizar as consultas de dados.
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.
d. e capacidade de reagir a eventos instantaneamente, a mensageria assíncrona é o mecanismo mais indicado.
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. 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. 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 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.

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 outro lado, 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?
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.

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 de 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:
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$.

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?
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.

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.
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$.

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 fases finais do desenvolvimento do produto é suficiente para garantir uma experiência do usuário de alta qualidade. Quais afirmações estão corretas?
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.

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.

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 de aplicativos 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?
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.

Material
páginas com resultados encontrados.
páginas com resultados encontrados.
details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Questões resolvidas

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:
Quando o desacoplamento e a independência entre os serviços são prioridades, permitindo
a. que eles se comuniquem sem a necessidade de respostas imediatas, a mensageria assíncrona é a opção mais adequada.
Para operações demoradas que não exigem uma resposta imediata, como o processamento em
b. lote de transações, as chamadas de API RESTful apresentam a solução ideal devido à sua natureza síncrona.
Em um cenário onde é crucial ter respostas imediatas a solicitações dos usuários, como
c. operações de leitura e atualização de dados, os sistemas baseados em eventos são a melhor escolha.
Se o objetivo é facilitar a integração com serviços de terceiros e realizar operações CRUD
d. simples com feedback instantâneo para o usuário, as chamadas de API RESTful são o mecanismo mais recomendado.
Para uma aplicação que requer processamento de dados em tempo real, com alta escalabilidade
e. e capacidade de reagir a eventos instantaneamente, a mensageria assíncrona é o mecanismo mais indicado.
a. que eles se comuniquem sem a necessidade de respostas imediatas, a mensageria assíncrona é a opção mais adequada.
b. lote de transações, as chamadas de API RESTful apresentam a solução ideal devido à sua natureza síncrona.
c. operações de leitura e atualização de dados, os sistemas baseados em eventos são a melhor escolha.
d. simples com feedback instantâneo para o usuário, as chamadas de API RESTful são o mecanismo mais recomendado.
e. e capacidade de reagir a eventos instantaneamente, a mensageria assíncrona é o mecanismo mais indicado.

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. 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.

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 underfetching, 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. III e IV apenas.
b. II e IV apenas.
c. II e III apenas.
d. I e II apenas.
e. I e IV apenas.

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.
Modificar o arquivo de configuração do PHP para desabilitar todas as extensões de banco de
c. dados, exceto PDO, forçando a aplicação a usar PDO para todas as operações de banco de dados.
Instanciar um novo objeto PDO, fornecendo a string de conexão (DSN), o nome de usuário
d. 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. 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.

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.
Uma aplicação que fornece dados meteorológicos a partir de várias fontes e requer complexas
b. consultas aninhadas para apresentar a informação deve escolher SOAP para melhor performance.
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.
Um serviço de e-commerce que precisa de uma API para permitir que os usuários busquem
c. produtos por categoria, preço e avaliação de usuários deve implementar GraphQL para otimizar as consultas de dados.
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.
d. e capacidade de reagir a eventos instantaneamente, a mensageria assíncrona é o mecanismo mais indicado.
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. 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. 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 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.

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 outro lado, 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?
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.

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 de 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:
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$.

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?
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.

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.
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$.

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 fases finais do desenvolvimento do produto é suficiente para garantir uma experiência do usuário de alta qualidade. Quais afirmações estão corretas?
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.

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.

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 de aplicativos 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?
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.

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.

Mais conteúdos dessa disciplina