INSTITUTO SUPERIOR TÉCNICO
Engenharia de Software
LEIC/LETI, 3o Ano, 2o Semestre1
oTeste, 21 de Abril de 2016
Duração: 90 minutos
Nome: Número:
• Este teste tem um conjunto de10 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ção dede qualquer aparelho electrónico (tais como telemóveis,
calcula-doras, 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,5; 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. 6. 2. 7. 3. 8. 4. 9. 5. 10.
Não preencher. Reservado para a correcção.
Perguntas de escolha múltipla
1. Num sistema de controlo de versões distribuído, no fluxo de trabalho baseado em ramos
de funcionalidades (feature branching):
A) As diferentes funcionalidades são desenvolvidas no master. B) Todos os commit são rebased no master.
⇒ C) Quando prontas, as funcionalidades são fundidas (merged) no código princi-pal.
D) Todas as funcionalidades são realizadas num só ramo independente e
reba-sed no fim.
2. Na metodologia de desenvolvimento ágil Scrum:
⇒ A) O Scrum Master é responsável por proteger a equipa de interferências exter-nas.
B) O Product Owner é responsável por decidir o conteúdo do sprint backlog. C) O Scrum Master é responsável por distribuir as tarefas pelos membros da
equipa.
D) Os membros da equipa de deesenvolvimento decidem o que deve ser
colo-cado no product backlog.
3. Indique qual das seguintes frases é falsa:
⇒ A) Um simulador de um jogo de xadez é um sistema do tipo S.
B) Nos sistemas do tipo E o problema varia ao longo do tempo.
C) Nos sistemas do tipo P a abstração pode variar ao longo do desenvolvimento. D) Nos sistemas do tipo S não é necessário definir uma abstração.
4. A operação de fetch em Git
A) Traz ficheiros do repositório remoto para o repositório local e os mesmos
ficam no estado staged.
B) Corresponde a colocar todos os ficheiros locais no estado staged.
C) Corresponde a passar todos os ficheiros do estado modified para o estado
staged.
⇒ D) Nenhuma das anteriores.
5. No processo de desenvolvimento de software Exteme Programming:
A) O cliente é responsável por definir as tarefas em que se decompõe uma
his-tória.
B) Neste processo de desenvolvimento não se realizam reuniões pois
considera-se que estas repreconsidera-sentam apenas uma perda de tempo.
C) O programador decide que histórias é que devem fazer parte de cada versão.
6. As asserções servem para:
A) Fornecer um mecanismo simples de tratamento de erros em testes de
soft-ware.
B) Para evitar que o código execute o invariante quando é detectado um erro.
⇒ C) Para detetar assunções e outros invariantes existentes no código.
D) Para documentar situações de erro onde não é permitido lançar excepções
de domínio.
7. Quando se deteta uma falta deve-se procurar identificar as causas da falta para: A) Ajudar a corrigir o código com o auxílio de um depurador de código
(debug-ger).
B) Penalizar o membro da equipa responsável pela falta para que este não a
volte a repetir.
⇒ C) Inferir que outros tipos de faltas semelhantes o programa pode ter.
D) Ajudar a descobrir outras falhas. 8. No padrão arquitetural canais-e-filtros:
A) A execução dos filtros é sequencial. B) Os canais transformam os dados.
C) A sua aplicação em sistemas interativos é aconselhada.
⇒ D) Os filtros são independentes entre si.
9. No controlo de qualidade do software:
A) A qualidade do software pode ser medida com rigor pois existem métricas
quantitivas.
⇒ B) A qualidade de alguns atributos é difícil de avaliar.
C) A qualidade do processo e a qualidade do produto são independentes, pelo
que devem ser medidas separadamente.
D) A parte subjectiva da qualidade deriva das suas características funcionais. 10. Para prioritizar o risco deve considerar:
A) Em que medida o risco afecta o negócio.
B) A capacidade de desenhar uma arquitectura de software que resolva o risco.
⇒ C) O seu impacto, probabilidade e possibilidade de controlo.
Perguntas sobre a componente prática
O projeto MYDRIVE desenvolvido durante a execução da disciplina de Engenharia de
Software permite a criação e gestão de um sistema de ficheiros transacional hierárquico onde os utilizadores manipulam ficheiros e diretorias. Suponha agora que se pretende acrescentar os seguintes requisitos:
• A aplicação deve suportar ficheiros de texto cujo conteúdo se encontra localizado remotamente num servidor (proxy). Estes ficheiros de texto com conteúdo remoto possuem um endereço que é constituído por duas partes: o endereço do servidor e a localização (caminho no sistema de ficheiros remoto) dentro do servidor. Cada servidor é referido pelo seu endereço (cadeia de carateres) único no sistema e iniciado por http:// (sugere-se a utilização do método startsWith() da classe String). A aplicação suporta um máximo de 10 servidores, estando cada ficheiro de conteúdo remoto associado ao respetivo servidor. A existência do ficheiro de texto remoto só necessita ser garantida quando é realizado um acesso ao seu conteúdo.
11. (2.0) Altere o domínio da aplicaçãoMYDRIVE, com recurso à Fénix Framework, de forma a que
a nova informação respeitante aos novos requisitos seja toda adequadamente persistida. Modele as alterações ao domínio usando a Domain Modeling Language (DML).
NOTA:
Os conceitos de User, File, Manager, Dir e Plain já se encontram definidos na aplicação desenvolvida pelo que não é necessário defini-los outra vez, a não ser que tenham que ser alterados. Neste caso escreva apenas as alterações a realizar, não sendo necessário concretizar totalmente a entidade em causa.
Solução:
class Proxy extends File { String path; } class Server { String address; } relation ProxyHasServer {
Proxy playsRole proxy { multiplicity *; } Server playsRole server;
}
relation ManagerHasServer { Manager playsRole manager;
Server playsRole server { multiplicity 0..10; } }
Nota: alternativamente, pode usar o conteúdo de Plain fazendo class Proxy extends Plain;
12. (2.0) Tendo em conta a arquitetura em camadas aplicada no desenvolvimento da aplicação
MYDRIVE, altere a camada dedomínio (o que inclui novos métodos, classes e alteração
de métodos já existentes, caso seja necessário) por forma a concretizar os novos requi-sitos. O código realizado no domínio da aplicação deve estar protegido contra utilização indevida por parte dos programadores que utilizam as classes do domínio.
NOTA:
Assuma nesta e nas restantes perguntas que qualquer classe de exceção que pretenda utilizar já se encontra concretizada, não sendo assim necessário concretizá-la.
Pode também utilizar métodos que já tenha definido no seu projeto, necessitando apenas de indicar a sua assinatura e o que eles fazem.
Solução:
public class Proxy extends Proxy_Base { public Proxy(Server serv, String path) {
setServer(serv); setPath(path); }
}
public class Server extends Server_Base { public Server(Manager m, String addr) {
setAddress(addr); setManager(m); }
@Override
public void setAddress(String addr) { if (!addr.startsWith("http://"))
throw new RuntimeException("Invalid address: "+addr); for (Server s: getManager().getServerSet())
if (s.getAddress().equals(addr))
throw new RuntimeException("Duplicate address: "+addr); super.setAddress(addr);
}
@Override
public void setManager(Manager m) { m.addServer(this);
} }
public class Manager extends Manager_Base { /* ... */
@Override
public void addServer(Server ser) { for (Server s: getServerSet())
if (ser.getAddress().equals(s.getAddress()))
throw new RuntimeException("Duplicate server: "+ser.getAddress()); super.addServer(ser);
} }
13. (1.0) Considere os requisitos concretizados na pergunta anterior em conjunto com os definidos
no projeto que se aplicam à criação da entidade servidor.
Indique os vários casos de teste que devem ser desenvolvidos para testar esta funcio-nalidade.
Solução:
sucesso : o servidor tem um endereço válido, ainda inexistente no sistema
e o limite de 10 servidores ainda não foi atingido;
endereço inválido : o endereço não começa por http://;
endereço duplicado : o endereço é válido, mas já existe um servidor com
mesmo endereço;
limite de 10 servidores excedido : o novo servidor tem endereço válido e
não existente no sistema, mas o limite de 10 servidores foi atingido.
Matriz das perguntas de escolha múltipla (4 versões): pergunta A B C D 1 C D A B 2 A C B C 3 A B D D 4 D D D D 5 D D D D 6 C D A B 7 C D A B 8 D C B A 9 B A D C 10 C D A B