Baixe o app para aproveitar ainda mais
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.
Compartilhar