• Nenhum resultado encontrado

Engenharia de Software

N/A
N/A
Protected

Academic year: 2021

Share "Engenharia de Software"

Copied!
9
0
0

Texto

(1)

INSTITUTO SUPERIOR TÉCNICO

Engenharia de Software

LEIC/LETI, 3o Ano, 2o Semestre

2

o

Teste, 17 de Junho de 2017

Duração: 90 minutos

Nome: Número:

• Este teste tem um conjunto de8 perguntas de escolha múltipla, e um conjunto de 3 perguntas de resposta aberta.

Escreva o seu número em todas as folhas da prova. O tamanho das respostas

deve ser limitado ao espaço fornecido para cada questão. Pode responder a lápis. • Em cima da mesa devem estar apenas: enunciado, material de escrita ecartão de aluno. Apenas são permitidas folhas de rascunho fornecidas pelos docentes que

devem ser devolvidas no final.

• A utilizaçãode qualquer aparelho electrónico (tais como telemóveis,

calculado-ras, etc)implica a anulação imediata do teste.

Leia cuidadosamente as perguntas de escolha múltipla ecoloque na grelha a letra

correspon-dente à resposta correta para cada pergunta. Por favor, use apenasletras maiúsculas. Se não responder a uma determinada pergunta, marque a resposta com um X.

A classificação das perguntas de escolha múltipla é feita da seguinte forma: uma resposta correta vale 0,6; uma resposta errada vale -0,2; uma pergunta não respondida vale 0. Por isso, no

caso de não saber responder a uma determinada pergunta é preferível deixar a pergunta por responder.Para cada pergunta deve escolher a que considera mais correta.

Respostas às questões de escolha múltipla (componente teórica):

1. 5. 2. 6. 3. 7. 4. 8.

Não preencher. Reservado para a correcção.

(2)

Perguntas de escolha múltipla

1. Qual dos seguintes modelos de desenvolvimento de software não é adequado a

altera-ções frequentes de requisitos durante o desenvolvimento de software?

A) Rational Unified Process B) Incremental

⇒ C) Waterfall

D) Extreme Programming

2. Qual o padrão arquitetural mais adequado para implementar um compilador de código

Java para Java Byte Code?

A) Model-View-Controller

⇒ B) Pipe and Filter

C) Camadas D) Cliente-Servidor

3. O Unit of Work, um dos padrões estudados sobre Object-Relational Behavioral Patterns A) Garante que cada objeto só é carregado em memória uma única vez

⇒ B) Mantém uma lista de objetos que foram alterados numa transação e coordena a persistência dessas alterações e a resolução de conflitos

C) Só carrega para memória a informação estritamente necessária para a

tran-sação

D) Utiliza uma estrutura Map para guardar os objetos que estão em memória

4. Sobre o Template View em Web Presentation Patterns, qual das seguintes afirmações é

verdadeira?

A) É um objeto que processa o pedido para uma página ou ação específica

numa sítio web

B) É um controlador que processa todos os pedidos num sítio web

⇒ C) Processa e mostra informação através da incorporação de marcadores na página HTML

D) Processa uma página web em duas fases, apresentação lógica e formatação. 5. As ferramentas Cucumber e Dafny são utilizada para verificação de software.

A) Verdadeiro

B) Falso: Dafny é uma ferramenta de validação

⇒ C) Falso: Cucumber é uma ferramenta de validação, que segue a filosofia de test-first.

(3)

6. Considere a arquitetura de software do projeto deste ano. Partindo do princípio que

não se deseja fazer programação defensiva em todo o código, onde se deve colocar as verificações das entradas, dado que em cada um dos módulos trabalha uma equipa diferente? ⇒ A) Controladores B) Vistas C) Interfaces D) Domínio 7. Uma framework é:

A) Um conjunto de bibliotecas usadas por um programa

⇒ B) Um desenho reutilizável de módulos para uma família de aplicações

C) Um desenho baseado numa arquitetura de software D) Um conjunto de diagramas de desenho

8. Qual das seguintes não é uma tarefa associada à análise de requisitos?

⇒ A) Verificação da exequibilidade de negócio (business case)

B) Reconhecimento das fronteiras do sistema C) Especificação, modelação e revisão D) Definição da rastreabilidade dos requisitos

(4)

Perguntas sobre a componente prática

9. (2.0) Considere o código abaixo que representa o método getCharge da classe Rental do caso

de refatorização da aplicação do arrendamento de videos discutido nas aulas teóricas. Que refatorização se deve aplicar nesta situação? Escreva o código que resulta de se aplicar essa refatorização.

class Rental...

private double getCharge() { double result = 0; switch (getMovie().getPriceCode()) { case Movie.REGULAR: result += 2; if (getDaysRented() > 2) result += (getDaysRented() - 2) * 1.5; break; case Movie.NEW_RELEASE: result += getDaysRented() * 3; break; case Movie.CHILDREN: result += 1.5; if (getDaysRented() > 3) result += (getDaysRented() - 3) * 1.5; break; } return result; } Solução:

A refatorização é o Extract Method, isto é mover o método getCharge para a classe Movie.

class Movie...

private double getCharge(int daysRented) { double result = 0; switch (getPriceCode()) { case Movie.REGULAR: result += 2; if (daysRented > 2) result += (daysRented - 2) * 1.5; break; case Movie.NEW_RELEASE: result += daysRented * 3; break; case Movie.CHILDREN: result += 1.5; if (daysRented > 3) result += (daysRented - 3) * 1.5; break;

(5)

} return result; } class Rental... double getCharge() { return movie.getCharge(getDaysRented()); }

(6)

10. (2.0) Considere os seguintes fragmentos de código. Escreva o código referente às partes TODO A, TODO B e TODO C.

@RequestMapping(value = "/banks/{code}/clients/{id}/accounts", method = RequestMethod.POST)

public String accountSubmit(Model model, @PathVariable String code, @PathVariable String id) { try {

BankInterface.createAccount(code, id); } catch (BankException be) {

// TODO A: implementar a gestão do erro,

// devendo retornar para a vista accounts.html (abaixo) }

return "redirect:/banks/" + code + "/clients/" + id + "/accounts"; }

<h2>

<span th:text="${client.name}">José</span> has

<!-- TODO B: escrever o número de contas associadas ao cliente --> accounts </h2> <h3>Create Account</h3> <p class="text-danger" th:text="${error}">Error</p> <form class="form-inline" th:action="@{/banks/{code}/clients/{id}/accounts (code=${client.bankCode},id=${client.id})}" method="post">

<input class="btn btn-primary" type="submit" value="Create" /> </form>

<br />

<h3>List of Accounts</h3>

<table class="table table-striped"> <thead> <tr> <th>Iban</th> <th>Balance</th> <th>Operations</th> </tr> </thead> <tbody>

<!-- TODO C: implementar a lista de contas, incluindo iban, balance, e link para as operações considerando que

é um GET /banks/{code}/clients/{id}/accounts/{iban}/operations, um ciclo é representado por <tr th:each="...">

e um link é representado por <a th:href="..."></a> --> </tbody>

</table>

(7)

// TODO A:

model.addAttribute("error", "Error: it was not possible to create de account"); model.addAttribute("client", BankInterface.getClientDataById(code, id)); return "accounts"; // TODO B: <span th:text="${client.accounts.size()}">2</span> // TODO C: <tr th:each="account : ${client.accounts}"> <td th:text="${account.iban}">123456789</td> <td th:text="${account.balance}">xpto3456</td> <td><a th:href="@{/banks/{code}/clients/{id}/accounts/{iban}/operations( code=${client.bankCode},id=${client.id},iban=${account.iban})}"> Operations </a></td> </tr>

(8)

11. (1.2) Preencha o formulário de JMeter e indique a estrutura e conteúdo dos ficheiros de dados

que necessita de definir, considerando que

1. Pretende usar a ferramenta JMeter para fazer sequencialmente 50 depósitos na conta com IBAN BK121 do cliente com identificação 11 do banco com código BK12, e em que cada um dos depósitos possui um valor diferente.

2. O serviço é suportado pelo controlador abaixo e o servidor está a correr em localhost:8080.

3. AccountData possui um atributo amount.

@RequestMapping(value = "/banks/{code}/clients/{id}/accounts/{iban}/deposit", method = RequestMethod.POST)

public String accountDeposit(Model model, @PathVariable String code,

@PathVariable String id, @PathVariable String iban, @ModelAttribute AccountData account)

Solução:

serverName or IP: localhost Port Number: 8080

Path: /banks/BK12/clients/11/accounts/BK121/deposit

Send Parameters With the Request: - amount ${amount}

[$amount é o valor lido do ficheiros de dados.]

Estrutura e conteúdo dos ficheiro com os dados:

1 2 3 ... 50

(9)

Referências

Documentos relacionados

Afirma Bruhns que o lazer, como expressão da cultura, pode constituir-se num elemento de conformismo ou resistência à ordem social estabelecida.. Mais do que uma

Mas os dois exemplos mencionados, Mário Simonsen no Planejamento e Karlos Rieschbiter na Fazenda, em 1979, e Delfim Netto no Planejamento e Ernane Galvêas na Fazenda, em

Essa superioridade da adubaçào orgânica associada à quImica reduzida, provavelmente se deve à liberaçào lenta dos nutrientes NPKS da palha, alem da melhoria das

Tambem foi realizada a análise sensorial da bebida com 50 provadores (alunos e funcionários da UFLA) no laboratório de Análise Sensorial do Departamento de Ciência dos Alimentos

&gt; 0 nIvel de sombreamento de 50 % apresentou o maior teor de sacarose no estádio cereja enquanto que a 90 % de sombreamento os maiores valores foram encontrados nos

Partido dos valores expresso na tabela da figura pretende-se saber para as mulheres (género =F) qual o valor médio dos salários contabilizando apenas as que têm salários a partir

(Não precisa justificar a resposta. Somente falar se é verdadeira ou falsa. Esta questão vale um ponto no caso de uma escolha certa. Não conta pontos no caso de não ser respondida

1. Rejeita-se a hipótese de independência num teste de dimensão 1%. Rejeita-se a hipótese de independência num teste de dimensão 5%. Nada se pode concluir pois não se verificam