Prévia do material em texto
Sobre a gramática da linguagem de intercâmbio de dados JSON (JavaScript Object
Notation), assinale a afirmativa correta. Os espaços em branco são proibidos entre qualquer
par de tokens. Um objeto é um conjunto ordenado de pares nome-valor. Uma string é uma
sequência de zero ou mais caracteres unicode envolto por aspas duplas. A ausência
intencional de qualquer valor de objeto é representada com a palavra reservada undefined.
Um valor numérico pode ser declarado em base decimal, octal ou hexadecimal.
ChatGPT
A afirmativa correta sobre a gramática da linguagem de intercâmbio de dados JSON
(JavaScript Object Notation) é a seguinte:
Uma string é uma sequência de zero ou mais caracteres unicode envolto por aspas duplas.
Explicação: Em JSON, uma string é uma sequência de caracteres unicode delimitada por
aspas duplas. Ela pode ser vazia (zero caracteres) ou conter qualquer combinação de
caracteres unicode, incluindo espaços em branco. Os espaços em branco não são proibidos
entre os tokens em JSON.
Os padrões da Web aos quais o AJAX está intimamente ligado são: o objeto
XMLHttpResponse para recuperar dados de um servidor Web e a linguagem XML para
formatar os dados o evento onreadystatechange para recuperar dados de um servidor Web
e a linguagem XHTML para estruturar os dados os objetos onreadystatechange e
XMLHttpResponse para recuperar dados de um servidor Web os objetos
onreadystatechange e XMLHttpRequest para enviar dados para um servidor Web o objeto
XMLHttpRequest para recuperar dados de um servidor Web e a linguagem JavaScript/DOM
para exibir os dados
ChatGPT
A resposta correta é:
O objeto XMLHttpRequest para recuperar dados de um servidor Web e a linguagem
JavaScript/DOM para exibir os dados.
Explicação: O AJAX (Asynchronous JavaScript and XML) é uma técnica de desenvolvimento
web que permite que os dados sejam recuperados de um servidor de forma assíncrona,
sem a necessidade de recarregar a página inteira. O principal objeto utilizado para fazer
requisições assíncronas é o XMLHttpRequest, que é suportado pelos navegadores
modernos. A resposta do servidor pode ser formatada em diferentes formatos, como XML,
JSON ou texto simples, mas o AJAX não está especificamente ligado à linguagem XML ou
XHTML. O JavaScript é usado para manipular a resposta recebida e atualizar a página (ou
parte dela) por meio do DOM (Document Object Model).
Quando lidamos com SQL, temos comandos denominados DML, ou linguagem de
manipulação de dados, como INSERT, UPDATE e DELETE, voltados para a manutenção dos
dados presentes na tabela, e efetuamos consultas através do comando SELECT, talvez o
mais relevante do SQL. Para executar comandos DML a partir de um Statement, qual
método deveria ser utilizado para manipulação de dados? open. createStatement.
executeQuery. getConnection. executeUpdate.
ChatGPT
Para executar comandos DML (Data Manipulation Language) a partir de um Statement no
SQL, o método correto a ser utilizado para a manipulação de dados é o executeUpdate().
Explicação: O método executeUpdate() é usado para executar comandos DML, como
INSERT, UPDATE e DELETE, que realizam alterações nos dados presentes em uma tabela.
Esse método retorna o número de linhas afetadas pelas alterações feitas no banco de
dados. Por outro lado, os métodos open(), createStatement(), executeQuery() e
getConnection() têm finalidades diferentes:
open() não é um método padrão do JDBC (Java Database Connectivity) e não está
diretamente relacionado à execução de comandos SQL.
createStatement() é usado para criar um objeto Statement, que permite executar
comandos SQL. No entanto, para comandos DML, o método executeUpdate() deve ser
usado em vez de executeQuery().
executeQuery() é usado para executar comandos SELECT, que retornam um conjunto de
resultados. Não é adequado para comandos DML.
getConnection() é usado para obter uma conexão com o banco de dados, mas não está
diretamente relacionado à execução de comandos SQL.
Observe a linha de comando a seguir. Statement st =
Conexao.getConection().createStatement(); Indique qual deve ser o comando seguinte:
ResultSet rs = st.executeUpdate("select * from ALUNOS"); ResultSet rs =
st.executeQuery("select * from ALUNOS"); List< Aluno > ls = st.executeQuery("select * from
ALUNOS"); List ls = st().executeUpdate("select * from ALUNOS"); List< Aluno > ls =
st.prepareStatement("select * from ALUNOS");
ChatGPT
O comando seguinte correto seria:
javaCopy code
ResultSet rs = st.executeQuery( "select * from ALUNOS" );
Explicação:
A linha de comando Statement st = Conexao.getConnection().createStatement(); cria
um objeto Statement chamado st usando o método createStatement() de um objeto de
conexão.
Para executar uma consulta SQL e obter um conjunto de resultados, o método apropriado é
executeQuery(). Portanto, a opção correta é ResultSet rs = st.executeQuery("select
* from ALUNOS");, onde rs é o objeto ResultSet que irá armazenar os resultados da
consulta.
As outras opções não estão corretas:
st.executeUpdate("select * from ALUNOS"); está usando o método executeUpdate(),
que é usado para executar comandos DML (INSERT, UPDATE, DELETE) que não retornam
um conjunto de resultados. No entanto, está sendo usado erroneamente para uma consulta
SELECT.
List<Aluno> ls = st.executeQuery("select * from ALUNOS"); está correto em relação
ao método executeQuery(), mas o tipo de retorno está incorreto. executeQuery() retorna
um objeto ResultSet e não uma lista de objetos Aluno.
List ls = st().executeUpdate("select * from ALUNOS"); está incorreto porque está
usando executeUpdate() de forma incorreta e não está especificando o tipo de lista a ser
retornada.
List<Aluno> ls = st.prepareStatement("select * from ALUNOS"); está incorreto
porque está usando prepareStatement() em vez de executeQuery(), o que não é a
abordagem correta para executar uma consulta direta.
No framework Spring temos um núcleo de execução, também denominado contêiner, que
é organizado em cinco módulos principais, os quais englobam conjuntos de
funcionalidades necessárias para a implementação de sistemas, como a recepção de
mensagens a partir de uma mensageria. Em qual dos módulos temos a API necessária para
a recepção dessas mensagens? AOP e Instrumentação Web Data Access / Integration Core
Container Test
ChatGPT
No framework Spring, a API necessária para a recepção de mensagens a partir de uma
mensageria é encontrada no módulo "Core Container" (Contêiner Principal).
Explicação: O módulo "Core Container" do Spring Framework fornece a base do contêiner
de execução, que é responsável pela criação, configuração e gerenciamento dos objetos no
contexto do Spring. Ele inclui recursos fundamentais, como a inversão de controle (IoC) e a
injeção de dependência (DI). No contexto da recepção de mensagens de uma mensageria,
o módulo "Core Container" disponibiliza recursos para o tratamento e processamento
dessas mensagens, como a definição e configuração de beans especializados para o
consumo de mensagens e a integração com adaptadores e conectores para diferentes
sistemas de mensageria.
Os outros módulos mencionados têm as seguintes finalidades:
"AOP e Instrumentação" (Aspect-Oriented Programming e Instrumentation) fornecem
recursos para a implementação e aplicação de aspectos no Spring, que permitem a
separação de preocupações e a modularização de funcionalidades transversais.
"Web" fornece recursos para o desenvolvimento de aplicativos web no Spring, incluindo
suporte para controle de requisições, gerenciamento de sessões, integração com
frameworks web, entre outros.
"Data Access / Integration" oferece recursos para acesso a dados e integração com
sistemas de armazenamento de dados, como bancos de dados relacionais, bancos de
dados NoSQL, serviços web, entre outros.
"Test" contém recursos eferramentas para testes unitários e de integração em projetos
Spring, como anotações para criação de testes, suporte para mock objects, entre outros.
Você foi contratado para criar um sistema baseado no framework Spring, em substituição
ao sistema atual, construído em PHP, e precisa manter plena compatibilidade com o
modelo de comunicação original, onde os dados são enviados a partir de formulários
HTML. Qual anotação deverá ser utilizada para recuperar os dados de cada um dos campos
de entrada do formulário, ao nível do controlador Spring? RequestParam Transactional
RequestMapping Autowired PathVariable
ChatGPT
A anotação que deve ser utilizada para recuperar os dados de cada um dos campos de
entrada do formulário ao nível do controlador Spring é a anotação @RequestParam.
Explicação: A anotação @RequestParam é usada em um método de um controlador Spring
para vincular um parâmetro da solicitação HTTP a um parâmetro do método. Quando
aplicada a um parâmetro de método, a anotação @RequestParam indica ao Spring que o
valor desse parâmetro deve ser extraído dos parâmetros da solicitação HTTP, que
normalmente são enviados a partir de formulários HTML.
Ao usar @RequestParam, você pode especificar o nome do parâmetro esperado na
solicitação HTTP. Por exemplo:
javaCopy code
@PostMapping("/submit-form") public String submitForm(@RequestParam("nome") String nome,
@RequestParam("idade") int idade) { // Lógica do controlador return "success" ; }
Neste exemplo, os valores dos campos "nome" e "idade" do formulário HTML são
recuperados e vinculados aos parâmetros nome e idade do método submitForm no
controlador Spring.
As outras anotações mencionadas têm as seguintes finalidades:
@Transactional é usada para definir o escopo transacional de um método ou de uma
classe.
@RequestMapping é usada para mapear uma solicitação HTTP para um método de um
controlador Spring. Ela define a rota ou URL a ser associada ao método.
@Autowired é usada para realizar a injeção de dependência automaticamente em um
objeto, permitindo que o Spring resolva e forneça as dependências necessárias.
@PathVariable é usada para mapear uma parte da URL da solicitação HTTP a um
parâmetro de método em um controlador Spring.
Existem dois tipos principais de comunicação em redes: comunicação síncrona e
comunicação assíncrona. Considerando a comunicação assíncrona entre sistemas (com o
uso de uma message broker), assinale a alternativa verdadeira: A comunicação assíncrona é
feita somente sem a utilização do message broker, pois o mesmo serve para intermediar
mensagens síncronas. O message broker deve conhecer e ser implementado com ambas as
tecnologias de desenvolvimento do produtor e consumidor de mensagens. Na
comunicação assíncrona, o consumidor da mensagem deve aguardar o processamento do
produtor da mensagem para responder à mensagem. Se um serviço quer enviar uma
mensagem para ser consumida por outro serviço, esta mensagem irá inicialmente para o
message broker. Na comunicação assíncrona, as tecnologias de desenvolvimento dos
componentes do produtor de mensagens e do consumidor de mensagens deve ser a
mesma.
ChatGPT
A alternativa verdadeira é:
Se um serviço quer enviar uma mensagem para ser consumida por outro serviço, esta
mensagem irá inicialmente para o message broker.
Explicação: Na comunicação assíncrona utilizando um message broker, o produtor de
mensagens envia a mensagem para o message broker, que atua como intermediário. O
message broker é responsável por receber, armazenar e rotear as mensagens para os
consumidores adequados. O produtor e o consumidor não se comunicam diretamente
entre si, mas sim através do message broker. Quando o consumidor está pronto para
processar a mensagem, ele a recebe do message broker.
As outras alternativas são incorretas:
A comunicação assíncrona pode ser feita com o uso de um message broker. O message
broker desempenha um papel fundamental na comunicação assíncrona, permitindo o envio
e o roteamento eficiente de mensagens assíncronas entre os sistemas.
Na comunicação assíncrona, o consumidor da mensagem não precisa aguardar o
processamento do produtor para responder à mensagem. A comunicação assíncrona
permite que o consumidor processe a mensagem de forma independente do produtor, sem
esperar por uma resposta imediata.
O message broker não requer que as tecnologias de desenvolvimento dos componentes do
produtor e do consumidor de mensagens sejam as mesmas. O message broker pode ser
implementado para lidar com diferentes tecnologias e formatos de mensagens,
proporcionando a interoperabilidade entre sistemas heterogêneos.
Um Message Broker é uma solução inteligente que fornece mecanismos para que
aplicativos possam se comunicar de forma assíncrona. Considerando o serviço de
mensageria, apresente uma característica do Message Broker: É um servidor que serve para
processar e suportar o envio, recebimento e redirecionamento das mensagens trocadas
pelos sistemas de software. É o local onde as mensagens não entregues são colocadas para
serem tratadas posteriormente. Comumente implementado em Python, dá suporte
principalmente ao protocolo JMS. Pode ser desenvolvimento em diversas linguagens de
programação, mas somente implementa um protocolo de comunicação. Geralmente
implementado com dois servidores: o primeiro que implementa uma exchange e o
segundo servidor que implementa e instancia as filas.
ChatGPT
A característica correta do Message Broker é:
É um servidor que serve para processar e suportar o envio, recebimento e
redirecionamento das mensagens trocadas pelos sistemas de software.
Explicação: O Message Broker é um componente central que atua como um intermediário
entre os sistemas de software que se comunicam de forma assíncrona. Ele é responsável
por processar e suportar o envio, recebimento e redirecionamento das mensagens. O
Message Broker gerencia as filas, as trocas de mensagens, os tópicos e outros mecanismos
de roteamento e entrega, garantindo que as mensagens sejam entregues aos destinatários
corretos de acordo com as regras de roteamento definidas.
As outras opções são incorretas:
O local onde as mensagens não entregues são colocadas para serem tratadas
posteriormente é conhecido como dead-letter queue (fila de mensagens não entregues).
Não é uma característica específica do Message Broker, mas sim um recurso adicional que
pode ser implementado em um Message Broker.
O Message Broker não é comumente implementado em Python e não é exclusivo para dar
suporte ao protocolo JMS (Java Message Service). Existem diversas implementações de
Message Broker em diferentes linguagens de programação e com suporte a vários
protocolos de comunicação, além do JMS.
O Message Broker pode ser desenvolvido em diversas linguagens de programação e não se
limita a apenas implementar um protocolo de comunicação. Ele é responsável por fornecer
funcionalidades avançadas, como roteamento de mensagens, filtragem, transformação de
dados, garantia de entrega e escalabilidade, independentemente da linguagem de
programação utilizada na implementação.
Não é necessário que o Message Broker seja implementado com dois servidores distintos.
A arquitetura e a implementação do Message Broker podem variar, mas não é uma prática
comum ter um servidor específico para a exchange e outro servidor para as filas. Em muitas
implementações, todas as funcionalidades são fornecidas por um único servidor de
Message Broker.
O REST (REpresentaional State Transfer) é um estilo de web service muito utilizado devido à
sua flexibilidade e simplicidade. Um dos conceitos importantes para trabalhar com REST é a
utilização correta dos verbos HTML. São exemplos de verbos HTML: SELECT e UPDATE
SELECT e PUT GET e PUT GET e UPDATE PUT e UPDATE
ChatGPT
Os exemplos corretos de verbos HTTP utilizadosem REST são:
GET e PUT
Explicação: O protocolo HTTP é usado como base para comunicação em serviços RESTful. O
REST utiliza os verbos HTTP para definir as ações a serem realizadas em recursos. Os dois
verbos mais comuns utilizados em REST são:
GET: Utilizado para recuperar informações de um recurso específico. É usado para obter
dados, sem alterar o estado do recurso no servidor.
PUT: Utilizado para atualizar um recurso existente. É usado para substituir completamente
os dados de um recurso com os novos dados fornecidos.
Os outros exemplos fornecidos estão incorretos:
SELECT e UPDATE: "SELECT" não é um verbo HTTP válido, e "UPDATE" não é comumente
utilizado em REST. Em vez disso, o verbo HTTP equivalente para atualização em REST é o
PUT.
SELECT e PUT: "SELECT" não é um verbo HTTP válido em REST. O verbo correto para
recuperar informações de um recurso é o GET.
GET e UPDATE: O verbo HTTP equivalente para atualização em REST é o PUT, não o
UPDATE.
PUT e UPDATE: O verbo HTTP equivalente para atualização em REST é o PUT, não o
UPDATE. Além disso, "UPDATE" não é um verbo HTTP válido.
Um serviço REST usualmente suporta mais de um formato para representação de seus
recursos, sendo esta uma de suas características principais, já que facilita a inclusão de
novos clientes e a interoperabilidade entre os projetos. Assinale a alternativa que apresenta
somente formatos utilizados por um serviço REST. YAML e JSON. XML e C++. JAVA, RUBY
ON REALS e .NET. JSON, CSS e SQL. JAVA e JAVASCRIPT.
ChatGPT
A alternativa correta que apresenta somente formatos utilizados por um serviço REST é:
YAML e JSON.
Explicação: Um serviço REST pode suportar vários formatos para a representação dos
recursos. Os formatos mais comuns usados em serviços RESTful são:
YAML: É um formato de serialização de dados legível por humanos e geralmente é utilizado
para configuração ou troca de dados estruturados.
JSON: É um formato leve e amplamente utilizado para a representação de dados
estruturados. É amplamente suportado por diferentes linguagens de programação e é o
formato de escolha para muitos serviços REST.
As outras alternativas são incorretas:
XML e C++: XML é um formato comumente usado para representar dados estruturados,
mas C++ é uma linguagem de programação e não um formato de representação de dados.
JAVA, RUBY ON REALS e .NET: JAVA, Ruby on Rails e .NET são frameworks e tecnologias de
desenvolvimento de software, não formatos de representação de dados.
JSON, CSS e SQL: JSON é um formato de representação de dados estruturados. CSS é uma
linguagem de estilo utilizada para definir a apresentação visual de documentos HTML. SQL
é uma linguagem de consulta para bancos de dados relacionais. Embora possam ser usados
em conjunto com serviços REST, eles não são formatos exclusivos utilizados por um serviço
REST.
JAVA e JAVASCRIPT: JAVA e JavaScript são linguagens de programação, não formatos de
representação de dados.
O Framework para Linha de Produto de Software (LPS) é uma estrutura para engenharia do
produto na qual fazem parte todos os conceitos centrais da engenharia de LPS, com o uso
de plataformas que oferece a capacidade de fornecer personalização em massa. Dois
processos compõem esse framework e um deles é a Engenharia de Domínio. Assinale a
alternativa a seguir que descreve a finalidade deste processo: Responsável por estabelecer
uma comunicação efetiva entre cliente e desenvolvedores Responsável por estabelecer o
domínio de negócio de cada cliente, para decidir qual produto é o mais adequado
Responsável por definir quais módulos do produto serão implantados em cada cliente, de
acordo com suas demandas Responsável por estabelecer a plataforma de reutilização
definindo o que é comum e o que é variável da linha de produtos Responsável por escolher
qual ferramenta será utilizada para a modelagem do produto
ChatGPT
A alternativa correta que descreve a finalidade do processo de Engenharia de Domínio em
um Framework para Linha de Produto de Software (LPS) é:
Responsável por estabelecer a plataforma de reutilização definindo o que é comum e o que
é variável da linha de produtos.
Explicação: A Engenharia de Domínio em um LPS é o processo responsável por identificar e
definir os elementos essenciais do domínio de aplicação do produto, estabelecendo a
plataforma de reutilização. Isso envolve identificar as características comuns, os requisitos e
os componentes reutilizáveis que serão utilizados para construir diferentes produtos da
linha. A Engenharia de Domínio define o que é fixo (comum) e o que é variável na linha de
produtos, permitindo personalização em massa ao adaptar o produto para diferentes
necessidades dos clientes.
As outras alternativas são incorretas:
A Engenharia de Domínio não é responsável por estabelecer uma comunicação efetiva
entre cliente e desenvolvedores. Embora a comunicação seja importante no processo de
desenvolvimento de LPS, não é a finalidade específica da Engenharia de Domínio.
A Engenharia de Domínio não decide qual produto é o mais adequado para cada cliente.
Essa decisão é tomada com base nos requisitos e necessidades dos clientes, que são
considerados na fase de Engenharia de Aplicação, após a definição do domínio.
A Engenharia de Domínio não define quais módulos do produto serão implantados em
cada cliente. Essa decisão é tomada na fase de Engenharia de Aplicação, onde os requisitos
específicos de cada cliente são considerados.
A Engenharia de Domínio não é responsável por escolher a ferramenta de modelagem do
produto. A escolha da ferramenta é feita no contexto da Engenharia de Aplicação ou do
desenvolvimento do produto em si.
Uma das 3 atividades essenciais da Engenharia da Linha de Produto de Software é a: Core
Asset Development (Desenvolvimento de Ativos Principais). Nesse contexto, analise as
afirmativas a seguir: I. Nessa atividade essencial não há um momento definido para se
adicionar uma restrição ou novos padrões no desenvolvimento da LPS II. São exemplos de
ativos-base dessa atividade: a arquitetura e sua documentação, especificações,
componentes de software, cronogramas e planos de teste III. Um ativo-base pode ser
construído para ser utilizado integralmente em todos os produtos IV. Adaptações não são
aceitas nessa atividade para tornar o ativo-base mais utilizáveis em uma linha de produtos
Assinale a alternativa correta: Apenas as afirmações I, II e III estão corretas Apenas as
afirmações II e IV estão corretas Apenas as afirmações III e IV estão corretas Apenas as
afirmações II e III estão corretas Apenas as afirmações I e II estão corretas
ChatGPT
A alternativa correta é:
Apenas as afirmações II e III estão corretas.
Explicação:
I. A afirmação I está incorreta. No desenvolvimento de ativos principais em uma Engenharia
de Linha de Produto de Software (LPS), é importante considerar restrições e padrões ao
longo de todo o processo de desenvolvimento. Essas restrições e padrões podem ser
adicionados em diferentes momentos, conforme necessário.
II. A afirmação II está correta. Os exemplos mencionados são exemplos comuns de ativos-
base desenvolvidos na atividade de Desenvolvimento de Ativos Principais em uma LPS.
Esses ativos incluem a arquitetura e sua documentação, especificações, componentes de
software, cronogramas e planos de teste.
III. A afirmação III está correta. Um ativo-base pode ser construído para ser utilizado
integralmente em todos os produtos de uma linha de produtos. Isso permite reutilização
eficiente e consistência nos produtos desenvolvidos.
IV. A afirmação IV está incorreta. Adaptações podem ser necessárias na atividade de
Desenvolvimento de Ativos Principais para tornar os ativos-base mais utilizáveis em uma
linha de produtos. Essas adaptações podem envolver personalizações, configurações e
variações para atenderàs necessidades específicas de diferentes produtos na linha.
Portanto, apenas as afirmações II e III estão corretas.
O Framework para Linha de Produto de Software (LPS) é uma estrutura para engenharia do
produto na qual fazem parte todos os conceitos centrais da engenharia de LPS, com o uso
de plataformas que oferece a capacidade de fornecer personalização em massa. Dois
processos compõem esse Framework e um deles é a Engenharia de Aplicação, que dentro
dele outros subprocessos são realizados. A seguir, são apresentados os subprocessos.
Relacione a primeira coluna com a segunda, indicando a descrição correta de cada
subprocesso: Coluna 1 Coluna 2 A - Engenharia de Requisitos de Aplicação B - Projeto de
Aplicação C - Realização da Aplicação D - Teste da Aplicação ( ) engloba todas as atividades
para o desenvolvimento da especificação de requisitos de aplicação ( ) cria a aplicação em
questão ( ) envolve as atividades para produzir a arquitetura do aplicativo ( ) compreende
as atividades necessárias para validar e verificar um aplicativo em relação à sua
especificação Assinale a alternativa correta, que indica a sequência de letras da Coluna 2, de
acordo com correta descrição dos subprocessos da coluna 1: A - C - B - D A - B - C - D A -
C - D - B C - A - E - D C - B - A - D
ChatGPT
A sequência correta que relaciona os subprocessos da Coluna 1 com suas descrições
correspondentes na Coluna 2 é:
A - Engenharia de Requisitos de Aplicação - engloba todas as atividades para o
desenvolvimento da especificação de requisitos de aplicação B - Projeto de Aplicação -
envolve as atividades para produzir a arquitetura do aplicativo C - Realização da Aplicação -
cria a aplicação em questão D - Teste da Aplicação - compreende as atividades necessárias
para validar e verificar um aplicativo em relação à sua especificação
Portanto, a alternativa correta é:
A - C - B - D
Cada sub processo da engenharia de aplicação deve refinar a variabilidade encontrada em
fases mais iniciais do desenvolvimento, a partir da referencia à variabilidade introduzida
pelos sub processos correspondentes da engenharia de domínio. O objetivo é a garantia de
que os requisitos variáveis sejam corretamente construídos. É correto afirmar que:
Resolução de ligação é o nome que se dá a esse mecanismo e o momento em que é
executada é frequentemente nomeado de tempo de refino da variabilidade. Resolução de
similaridade é o nome que se dá a esse mecanismo e o momento em que é executada é
frequentemente nomeado de tempo de ligação da variabilidade. Dissolução de
variabilidade é o nome que se dá a esse mecanismo e o momento em que é executada é
frequentemente nomeado de tempo de resolução da similaridade. Resolução de
variabilidade é o nome que se dá a esse mecanismo e o momento em que é executada é
frequentemente nomeado de tempo de otimização da variabilidade. Resolução de
variabilidade é o nome que se dá a esse mecanismo e o momento em que é executado é
frequentemente nomeado de tempo de ligação da variabilidade.
ChatGPT
A afirmativa correta é:
Resolução de variabilidade é o nome que se dá a esse mecanismo e o momento em que é
executado é frequentemente nomeado de tempo de ligação da variabilidade.
Explicação:
A resolução de variabilidade é o mecanismo utilizado para refinar a variabilidade
identificada durante a engenharia de domínio nos sub processos da engenharia de
aplicação. Esse mecanismo é responsável por garantir que os requisitos variáveis sejam
corretamente construídos. O momento em que a resolução de variabilidade é executada é
comumente chamado de tempo de ligação da variabilidade, pois é quando ocorre a
conexão entre as decisões de variabilidade tomadas na engenharia de domínio e sua
implementação na engenharia de aplicação.
No mundo real, variabilidade significa a capacidade de mudança que as coisas possuem. Na
ELPS a variabilidade esta intrinsicamente relacionada à possibilidade de reuso de artefatos
nas diversas aplicações de uma mesma linha de produtos. Assinale a alternativa que
relaciona corretamente os conceitos do mundo real com os da ELPS: Um sujeito de
variabilidade do mundo real relaciona-se com o conceito de objeto de variabilidade na
ELPS. Um sujeito de variabilidade do mundo real relaciona-se com o conceito de ponto de
variação na ELPS. Um sujeito de variabilidade do mundo real relaciona-se com o conceito
de variante na ELPS. Um ponto de variabilidade do mundo real relaciona-se com o conceito
de objeto de variabilidade na ELPS. Uma variante do mundo real relaciona-se com o
conceito de variante na ELPS.
ChatGPT
A alternativa correta é:
Um sujeito de variabilidade do mundo real relaciona-se com o conceito de ponto de
variação na ELPS.
Explicação:
Na Engenharia de Linha de Produto de Software (ELPS), um ponto de variação representa
uma possibilidade de escolha ou variação em um sistema de software. É onde ocorre a
variabilidade, ou seja, a capacidade de adaptar o software para diferentes requisitos ou
cenários. No mundo real, um sujeito de variabilidade se relaciona com o conceito de ponto
de variação na ELPS, pois ambos representam a possibilidade de mudança ou escolha em
um determinado contexto.
Interfaces são muito utilizadas na implementação de variabilidade, e o projeto de uma
interface é afetado pelos tipos de variabilidade que deve estar presente nos componentes
conectados à interface, quer sejam fornecedores ou usuários. Tem efeito no projeto de uma
interface: Variabilidade em Recursos, que significa que a mesma interface pode ser
implementada de diferentes maneiras, por diferentes métodos dos objetos das classes.
Variabilidade em Algoritmos ou Protocolos, que significa que componentes diferentes
lidam com o mesmo tipo de funcionalidade, mas podem fornecer ou usar quantidades
diferentes de determinados recursos. Variabilidade em Recursos, que significa que a
variabilidade está relacionada à configuração do aplicativo, incluindo diferenças de
hardware e software. Variabilidade em Algoritmos ou Protocolos, que significa que a
variabilidade está relacionada à configuração do aplicativo, incluindo diferenças de
hardware e software. Variabilidade na Configuração da Aplicação, que significa que a
variabilidade está relacionada à configuração do aplicativo, incluindo diferenças de
hardware e software.
ChatGPT
A alternativa correta é:
Variabilidade em Algoritmos ou Protocolos, que significa que componentes diferentes
lidam com o mesmo tipo de funcionalidade, mas podem fornecer ou usar quantidades
diferentes de determinados recursos.
Explicação:
A variabilidade em algoritmos ou protocolos refere-se ao fato de que diferentes
componentes podem lidar com a mesma funcionalidade, mas de maneiras diferentes. Isso
significa que diferentes implementações de uma interface podem ter algoritmos ou
protocolos distintos para realizar a mesma tarefa, ou podem fornecer ou usar quantidades
diferentes de recursos específicos. A variabilidade em algoritmos ou protocolos tem um
efeito no projeto de uma interface, pois as diferentes implementações podem exigir
considerações específicas para garantir a interoperabilidade entre os componentes
conectados a essa interface.
A validação dos artefatos de realização é o foco principal do teste de domínio, e a definição
de casos de teste é baseada nas entradas oriundas de subprocessos com os quais o teste
de domínio se relaciona, e visa estabelecer um processo de teste geral eficiente. Neste
contexto, assinale a alternativa que apresenta uma afirmação correta: No teste de aplicação,
o MOV é usado para derivar artefatos de teste para os artefatos de domínio. A separação
entre engenharia de domínio e engenharia de aplicação e a presença de variabilidade
devem ser tratadas adequadamente pelo teste de domínio, sendo o seu principal desafio. A
variabilidade da linha de produtose sua relação com os artefatos de domínio são
documentadas no MOV durante a realização da aplicação. Durante a engenharia de
domínio são projetados os artefatos variáveis pertencentes a apenas uma ou algumas
aplicações. Durante a engenharia de domínio são projetados os componentes que são
necessários apenas para uma aplicação específica.
ChatGPT
A alternativa correta é:
A separação entre engenharia de domínio e engenharia de aplicação e a presença de
variabilidade devem ser tratadas adequadamente pelo teste de domínio, sendo o seu
principal desafio.
Explicação:
O teste de domínio é responsável pela validação dos artefatos de realização no contexto da
engenharia de domínio. Uma das principais características da engenharia de domínio é a
presença de variabilidade, que permite a personalização dos produtos de uma linha de
produtos de software. O teste de domínio precisa abordar adequadamente essa separação
entre engenharia de domínio e engenharia de aplicação, bem como lidar com os desafios
associados à variabilidade. Portanto, a correta afirmação é que a separação entre
engenharia de domínio e engenharia de aplicação e a presença de variabilidade devem ser
tratadas adequadamente pelo teste de domínio, sendo o seu principal desafio.
O teste de software é o processo de descoberta de defeitos em sistemas de software,
sendo também um processo de garantia de qualidade. Deve ser realizado antes da entrega
de um aplicativo e os defeitos detectados nos testes são reportados à equipe de
desenvolvimento responsável. Em relação aos testes de software, de domínio e de
aplicação é correto afirmar: O teste de aplicação cria artefatos de teste reutilizáveis para o
teste de domínio. Não é possível a reutilização de artefatos de teste de domínio pelo teste
de aplicativos para a descoberta de defeitos nos aplicativos da linha de produtos, devido à
especificidade dos componentes. O teste de software inclui depuração e correção de bugs.
O teste de aplicação descobre a evidência de defeitos em artefatos de domínio. O teste de
domínio lida com componentes reutilizáveis, enquanto o teste de aplicação lida com
aplicativos completos.
ChatGPT
A afirmação correta é:
O teste de software inclui depuração e correção de bugs.
Explicação:
O teste de software é o processo de descoberta de defeitos em sistemas de software, e faz
parte do processo de garantia de qualidade. Além de identificar defeitos, o teste de
software também envolve a depuração e correção desses bugs encontrados. Portanto, o
teste de software não se limita apenas à descoberta de defeitos, mas também inclui a
atividade de depuração e correção dos bugs identificados durante o processo de teste.
As demais afirmações são incorretas:
O teste de aplicação não cria artefatos de teste reutilizáveis para o teste de domínio. Cada
tipo de teste tem seus próprios artefatos e abordagens específicas.
A reutilização de artefatos de teste de domínio pelo teste de aplicativos é possível e
desejável para otimizar o processo de teste.
O teste de aplicação não descobre evidências de defeitos em artefatos de domínio. O teste
de aplicação concentra-se nos aplicativos específicos da linha de produtos, enquanto o
teste de domínio lida com a variabilidade e os componentes reutilizáveis.
Embora o teste de domínio lide com componentes reutilizáveis, o teste de aplicação não se
limita apenas aos aplicativos completos, mas também pode lidar com componentes
específicos dentro de um contexto de aplicativo.
A análise de delta tem por objetivo apoiar a decisão dos stakeholders, que definirá se os
deltas serão ou não realizados na aplicação. Nesse sentido, marque a alternativa correta: A
introdução de um novo ponto de variação deve ser realizada no caso de delta devido a
parte da variabilidade externa existente que deve ser modificada Existem três tipos de
deltas, e um dos tipos é aquele relacionado à parte da variabilidade externa que deve ser
modificada Uma parte invariável tem que ser transformada em uma parte variável, isso
pode ser feito pela definição de uma nova variante Uma nova variante deve ser adicionada,
ou uma variabilidade ou dependência de restrição deve ser modificada no caso do delta
devido a parte da variabilidade externa existente que deve ser modificada Os deltas do
modelo de variabilidade são similaridades entre o modelo de variabilidade de domínio e o
modelo de variabilidade de aplicação
ChatGPT
A alternativa correta é:
Uma nova variante deve ser adicionada, ou uma variabilidade ou dependência de restrição
deve ser modificada no caso do delta devido a parte da variabilidade externa existente que
deve ser modificada.
Explicação:
A análise de delta envolve a decisão de quais modificações devem ser feitas na aplicação
em relação à variabilidade existente. Essas modificações podem envolver a adição de novas
variantes, a modificação de variabilidades ou dependências de restrição, entre outros. O
objetivo é avaliar os impactos das mudanças propostas e decidir se elas devem ser
realizadas na aplicação.
As demais alternativas são incorretas:
A introdução de um novo ponto de variação não é necessariamente um requisito para o
delta. O delta pode envolver várias formas de modificação, além da introdução de novos
pontos de variação.
Não existem três tipos específicos de deltas definidos. O delta refere-se à modificação ou
adição de variabilidades existentes.
Transformar uma parte invariável em uma parte variável é uma ação específica de
modificação no contexto da variabilidade, mas não é uma definição geral de delta.
Os deltas não são necessariamente similaridades entre o modelo de variabilidade de
domínio e o modelo de variabilidade de aplicação. Eles envolvem modificações específicas
na variabilidade existente.
Todos os requisitos de aplicação são definidos na especificação de requisitos do aplicativo,
subprocesso base para os outros subprocessos de engenharia de aplicação. Em relação ao
que a especificação de requisitos de aplicação inclui, marque a alternativa correta Os deltas
de requisitos contêm todos os artefatos de requisitos que são reutilizados do domínio O
modelo de variabilidade de aplicação consiste nas semelhanças e pontos de variação
vinculados A relação dos artefatos de requisitos de aplicação com as variantes selecionadas
no modelo de variabilidade do aplicativo captura a rastreabilidade entre os requisitos e as
variantes selecionadas para o domínio. Os artefatos de requisitos do aplicativo que
correspondem aos artefatos de requisitos de domínio contêm todos os artefatos de
requisitos do aplicativo reutilizados com adaptações O modelo de variabilidade de
aplicação descreve o modelo de variabilidade do aplicativo com as variantes selecionadas
ChatGPT
A alternativa correta é:
A relação dos artefatos de requisitos de aplicação com as variantes selecionadas no modelo
de variabilidade do aplicativo captura a rastreabilidade entre os requisitos e as variantes
selecionadas para o domínio.
Explicação:
A especificação de requisitos de aplicação é responsável por definir os requisitos
específicos da aplicação dentro do contexto da linha de produtos. Essa especificação
descreve os requisitos relacionados às variantes selecionadas no modelo de variabilidade
do aplicativo. A rastreabilidade entre os requisitos e as variantes é importante para
entender como as diferentes funcionalidades e configurações são afetadas pelos requisitos
de aplicação.
As demais alternativas são incorretas:
Os deltas de requisitos não contêm necessariamente todos os artefatos de requisitos
reutilizados do domínio. Os deltas referem-se a modificações específicas nos requisitos
existentes.
O modelo de variabilidade de aplicação não se trata das semelhanças e pontos de variação
vinculados. Ele descreve as variantes selecionadas para a aplicação.
Os artefatosde requisitos do aplicativo não são necessariamente adaptações dos artefatos
de requisitos do domínio. Eles são especificamente relacionados à aplicação e podem ter
requisitos exclusivos.
O modelo de variabilidade de aplicação não descreve o modelo de variabilidade do
aplicativo com as variantes selecionadas. Ele descreve as variantes selecionadas para a
aplicação em si.
Você precisa implementar um módulo que leia um arquivo RTF (Rich Text Format) e
converta seu conteúdo em diferentes formatos (ASCII, TeX, HTML etc.). Sabendo que o
arquivo é composto por diferentes partes (texto, formatação, figuras etc.), qual dos padrões
seria mais indicado para isolar o conversor das diferentes formas de representação do
conteúdo gerado? Prototype Factory Method Abstract Factory Builder Singleton
ChatGPT
O padrão mais indicado para isolar o conversor das diferentes formas de representação do
conteúdo gerado nesse caso seria o Abstract Factory.
O padrão Abstract Factory permite criar famílias de objetos relacionados sem especificar
suas classes concretas. No contexto da conversão de um arquivo RTF para diferentes
formatos, a Abstract Factory pode ser utilizada para definir uma interface comum para a
criação de objetos responsáveis por cada formato de saída desejado (ASCII, TeX, HTML
etc.). Cada fábrica concreta implementaria essa interface e seria responsável por criar os
objetos específicos para cada formato.
Dessa forma, o conversor seria desacoplado das implementações específicas de cada
formato e dependeria apenas da Abstract Factory para criar os objetos de saída
correspondentes. Isso permite que o conversor seja flexível e extensível, facilitando a adição
de novos formatos de saída no futuro sem modificar o código do conversor em si.
Os outros padrões mencionados também podem ser úteis em diferentes contextos, mas
não são tão adequados para isolar o conversor de diferentes formas de representação do
conteúdo gerado.
Analise o propósito a seguir: ''Implementar a instanciação de objetos utilizando uma
estrutura de herança, em que a superclasse define uma operação de criação de um produto
genérico, e cada subclasse define a implementação dessa operação, criando um produto
específico derivado do produto genérico definido na superclasse''. Assinale a alternativa
com o nome do padrão que possui esse propósito: Factory Method Abstract Factory
Prototype Singleton Builder
ChatGPT
O propósito descrito é característico do padrão Factory Method.
No padrão Factory Method, uma superclasse define uma operação de criação
(frequentemente chamada de factory method) que retorna um objeto de um tipo genérico
(produto genérico). As subclasses dessa superclasse são responsáveis por implementar esse
factory method para criar objetos específicos (produtos específicos) derivados do produto
genérico definido na superclasse.
Dessa forma, o padrão Factory Method permite que as subclasses decidam qual objeto
específico criar, enquanto a superclasse fornece a estrutura e a lógica comum para a criação
dos objetos.
Portanto, no contexto descrito, o padrão Factory Method é o mais apropriado para
implementar a instanciação de objetos com base em uma estrutura de herança e operações
de criação definidas nas subclasses.
Assinale a alternativa com dois padrões que possuem uma estrutura de solução muito
parecida, porém, com propósitos distintos. Composite e Decorator. Adapter e Decorator.
Adapter e Composite. Proxy e Composite. Proxy e Adapter.
ChatGPT
A alternativa correta é: Adapter e Decorator.
Os padrões Adapter e Decorator possuem estruturas de solução semelhantes, mas com
propósitos distintos.
O padrão Adapter tem como propósito converter a interface de uma classe em outra
interface esperada pelos clientes. Ele permite que classes com interfaces incompatíveis
possam trabalhar juntas, envolvendo um objeto com uma nova interface adaptada.
Já o padrão Decorator tem como propósito adicionar responsabilidades adicionais a um
objeto de forma dinâmica. Ele permite que novos comportamentos ou funcionalidades
sejam adicionados a um objeto existente sem modificar sua estrutura básica. O Decorator
age como uma camada de envoltório em torno do objeto original, oferecendo novas
funcionalidades conforme necessário.
Ambos os padrões utilizam a composição para alcançar seus objetivos, mas o Adapter é
mais focado na interoperabilidade entre interfaces incompatíveis, enquanto o Decorator
visa adicionar funcionalidades extras a um objeto existente.
Conseguir adicionar um novo fornecedor externo de um serviço já utilizado por um
sistema, apenas adicionando um módulo que seja capaz de converter uma requisição de
uma interface conhecida pelo sistema para a interface proprietária fornecida pelo
componente externo é um dos efeitos obtidos com a aplicação de qual padrão? Proxy
Bridge Adapter Flyweight Facade
ChatGPT
O padrão que permite adicionar um novo fornecedor externo de um serviço utilizando um
módulo de conversão de interface é o padrão Adapter.
O padrão Adapter é projetado para permitir a comunicação entre duas interfaces
incompatíveis. Ele atua como um adaptador entre o código existente e a interface fornecida
pelo novo componente externo. O Adapter converte a interface do novo componente em
uma interface com a qual o sistema já está familiarizado, permitindo a integração perfeita
do novo fornecedor externo no sistema existente.
Portanto, a alternativa correta é o padrão Adapter.
Esse padrão define uma estrutura similar à de um esquema Publisher-Subscriber, pois
existe um Publisher detentor de um conjunto de informações e registra um conjunto de
objetos interessados em receber notificações de modificação desse conjunto de
informações, ou seja, do estado do Publisher. Ao ter o seu estado interno modificado, o
Publisher notifica os Subscribers que, por sua vez, executam algum procedimento
específico de tratamento dessa modificação. Assinale a opção com o padrão
correspondente à descrição acima: Template Method Visitor Strategy Observer State
ChatGPT
O padrão correspondente à descrição fornecida é o padrão Observer.
O padrão Observer é usado para estabelecer uma relação de dependência um-para-muitos
entre objetos, de modo que quando um objeto (chamado de Publisher ou Subject) sofre
uma alteração em seu estado, vários outros objetos dependentes (chamados de
Subscribers ou Observers) são notificados e atualizados automaticamente.
Na descrição mencionada, o Publisher é o objeto detentor das informações e é responsável
por notificar os Subscribers sobre as modificações ocorridas. Os Subscribers são os objetos
interessados em receber as notificações e executar procedimentos específicos de
tratamento dessas modificações.
Portanto, o padrão correspondente à descrição é o padrão Observer.
"Esse padrão encapsula uma requisição em um objeto, desacoplando o requisitante e o
objeto executor. Esse encapsulamento permite registrar o histórico de requisições,
reproduzir essas requisições em outro ambiente, bem como implementar operações de
desfazer ou refazer o processamento associado à requisição". Assinale a alternativa com o
nome do padrão que possui esse propósito: Chain of Responsibility Command Iterator
Mediator Template Method
ChatGPT
O padrão que possui o propósito descrito é o padrão Command.
O padrão Command encapsula uma requisição em um objeto, tornando-a independente
do objeto que a realiza. Ele permite que você parametrize os clientes com diferentes
requisições, enfileire ou registre requisições e implemente operações de desfazer ou
refazer. O padrão Command desacopla o objeto que faz a requisição (requisitante) do
objeto que a executa (executor), permitindo uma maior flexibilidade e extensibilidade no
sistema.
Portanto, a alternativa correta é o padrão Command.
Assinale a alternativa com a afirmativa CORRETA sobreo padrão Criador. O padrão Criador
é utilizado para instanciar uma classe de uma família de classes similares. O padrão Criador
recomenda que a criação de objetos seja feita por meio de clonagem. O padrão Criador
consiste em criar módulos versáteis que possam cumprir diferentes propósitos. O padrão
Criador define um conjunto de condições para que uma classe A seja responsável por
instanciar objetos de uma classe B. O padrão Criador recomenda a criação de uma classe
intermediária responsável por instanciar outros objetos.
ChatGPT
A afirmativa correta sobre o padrão Criador é:
O padrão Criador define um conjunto de condições para que uma classe A seja responsável
por instanciar objetos de uma classe B.
O padrão Criador, também conhecido como Factory Method, é um padrão de criação que
tem como objetivo delegar a responsabilidade de instanciação de objetos para subclasses,
seguindo um conjunto de condições ou regras definidas pela classe pai. A classe pai,
conhecida como Criador, define a interface comum para a criação dos objetos, enquanto as
subclasses concretas são responsáveis por implementar a lógica de criação específica para
cada tipo de objeto.
Portanto, a alternativa correta é a que menciona que o padrão Criador define um conjunto
de condições para que uma classe A seja responsável por instanciar objetos de uma classe
B.
Uma classe X contém o seguinte conjunto de métodos: Fechar arquivos Fechar conexão
com banco de dados Finalizar tarefas em execução em segundo plano Liberar buffers de
armazenamento temporário Finalizar operação, que é um método executado na finalização
do sistema e que chama todos os métodos anteriores. Assinale a alternativa com o tipo de
coesão da classe X: Coesão Coincidente Coesão Temporal Coesão Funcional Coesão
Sequencial Coesão Lógica
ChatGPT
O tipo de coesão da classe X é Coesão Sequencial.
A coesão sequencial ocorre quando os métodos de uma classe estão organizados em uma
sequência específica de execução, onde cada método depende do resultado do método
anterior. No caso da classe X, os métodos estão definidos em uma sequência lógica, onde o
método "Finalizar operação" chama os métodos anteriores em uma ordem específica.
Portanto, a alternativa correta é Coesão Sequencial.
A arquitetura MVC (Model, View e Controller) é utilizada de forma ampla, na criação de
sistemas cadastrais, e caracteriza-se pela divisão do sistema em três camadas, com
objetivos específicos. Considerando a divisão utilizada pelo MVC, a interface de usuário e o
componente DAO estariam, respectivamente, nas camadas: Model e Controller View e
Controller Controller e Model View e Model Model e View
ChatGPT
A interface de usuário está na camada View e o componente DAO (Data Access Object) está
na camada Model.
Na arquitetura MVC, a camada View é responsável pela apresentação dos dados ao usuário
e interação com ele, ou seja, é onde a interface de usuário é implementada. Por outro lado,
a camada Model é responsável pela lógica de negócio e manipulação dos dados, incluindo
o acesso ao banco de dados. O componente DAO é comumente utilizado na camada
Model para encapsular a lógica de acesso aos dados.
Portanto, a alternativa correta é: View e Model. A interface de usuário está na camada View
e o componente DAO está na camada Model.
Ao trabalhar com um aplicativo corporativo, segundo a arquitetura MVC, ocorre uma
divisão natural das camadas, em termos dos projetos internos, ficando a camada View sob
responsabilidade do projeto com terminador "war". A interface padrão, conforme o próprio
terminador indica, é um aplicativo Java Web, sendo comum a implementação de um
padrão de desenvolvimento para centralizar o tratamento das requisições, bem como
redirecionar para a visualização correta, após efetuar as chamadas para a camada
Controller. De qual padrão estamos falando, e qual o componente deve implementá-lo?
Padrão de desenvolvimento Facade e componente do tipo EJB Padrão de desenvolvimento
Front Controller e componente do tipo Servlet Padrão de desenvolvimento DAO e
componente do tipo JPA Padrão de desenvolvimento Service Locator e componente do
tipo JNDI Padrão de desenvolvimento Flyweight e componente do tipo EJB
ChatGPT
O padrão de desenvolvimento mencionado é o Front Controller, e o componente que deve
implementá-lo é do tipo Servlet.
O padrão Front Controller é utilizado para centralizar o tratamento das requisições em um
aplicativo web. Ele atua como um controlador central que recebe todas as requisições do
cliente e direciona para o processamento adequado, geralmente envolvendo a camada
Controller do padrão MVC.
No contexto de um aplicativo Java Web, o componente que implementa o Front Controller
é o Servlet. Os Servlets são classes Java que recebem as requisições HTTP e podem realizar
diversas tarefas, como autenticação, validação, processamento dos dados da requisição e
encaminhamento para a camada View correta.
Portanto, a alternativa correta é: Padrão de desenvolvimento Front Controller e
componente do tipo Servlet.