Prévia do material em texto
<p>Universidade Federal de Ouro Preto – UFOP</p><p>Instituto de Ciências Exatas e Aplicadas – ICEA</p><p>Departamento de Computação e Sistemas – DECSI</p><p>Disciplina: CSI404 – Engenharia de Software II</p><p>Professor: Igor Muzetti Pereira</p><p>Prova 1 – Semestre 2022/1</p><p>A prova é individual.</p><p>A interpretação das questões faz parte da avaliação.</p><p>Nome:</p><p>Matrícula:</p><p>Valor: 10 pontos (30% da nota total)</p><p>1. Modele os cenários descritos a seguir usando Diagramas de Classe UML. Veja que as classes são grafadas</p><p>em uma fonte diferente. (1,25 pontos)</p><p>a) ContaBancaria possui exatamente um Cliente. Um Cliente, por sua vez, pode ter várias</p><p>ContaBancaria. Existe navegabilidade em ambos os sentidos.</p><p>b) ContaPoupanca e ContaSalario são subclasses de ContaBancaria.</p><p>c) No código de ContaBancaria declara-se uma variável local do tipo BancoDados.</p><p>d) Um ItemPedido se refere a um único Produto (sem navegabilidade). Um Produto pode ter</p><p>vários ItemPedido (com navegabilidade).</p><p>e) A classe Aluno possui atributos nome, matricula, curso (todos privados); e métodos</p><p>getCurso() e cancelaMatricula(), ambos públicos.</p><p>2. Existem três tipos de classes ou interfaces no padrão Composite: (0,75 pontos)</p><p>◦ Uma interface visível para o cliente (no nosso exemplo, Figura)</p><p>◦ Classes de objetos simples (no nosso exemplo, Circulo e Triangulo)</p><p>◦ Classe responsável pela composição (no nosso exemplo, FiguraAgrupada)</p><p>Considerando essas classes, pense em um outro exemplo de uso do padrão Composite. E então responda:</p><p>a) Qual é a interface visível para o cliente? Quais métodos ela define?</p><p>b) Quais são as classes de objetos simples? Basta citar o nome delas.</p><p>c) Qual a classe responsável pela composição? Basta citar o nome dela.</p><p>3. Padrões de projeto são classificados em padrões criacionais, estruturais e comportamentais. Em qual dessas</p><p>categorias você classificaria Injeção de Dependência? Justifique brevemente. (1,0 ponto)</p><p>4. Em uma arquitetura limpa o nome de um elemento declarado em uma camada externa não deve ser</p><p>mencionado pelo código de uma camada interna? Qual a principal vantagem ou benefício dessa regra? (1,0</p><p>ponto)</p><p>5. Suponha que um sistema use tecnologias X, Y e Z. E suponha que temos certeza de que elas nunca vão</p><p>mudar no futuro. Ou seja, não existe chance de amanhã o sistema ter que usar uma tecnologia X’, Y’ ou Z’.</p><p>Nesse cenário, você acha que ainda pode ser útil a adoção de uma Arquitetura Limpa? Justifique. (1,0 ponto)</p><p>6. Quais são os principais fatores técnicos e não técnicos que atrapalham o reúso de software? Cite quatro</p><p>circunstâncias que você recomendaria o reúso de software. (1,25 pontos)</p><p>7. Explique por que um sistema de software utilizado em um ambiente do mundo real deve mudar ou se</p><p>tornar cada vez menos útil. (1,0 ponto)</p><p>8. Reescreva o seguinte teste, que verifica o levantamento de uma exceção EmptyStackException, para que</p><p>ele fique mais simples e fácil de entender. (1,5 pontos)</p><p>@Test</p><p>public void testEmptyStackException() {</p><p>boolean sucesso = false;</p><p>try{</p><p>Stack s<Integer> = new Stack<Integer>();</p><p>s.push(10);</p><p>int r = stack.pop();</p><p>r = stack.pop();</p><p>} catch (EmptyStackException e) {</p><p>sucesso = true;</p><p>}</p><p>assertTrue(sucesso);</p><p>}</p><p>9. Algumas pessoas argumentam que os desenvolvedores não devem se envolver no teste do seu próprio</p><p>código, mas que todo teste deve ser de responsabilidade de uma equipe diferente. Apresente argumentos a</p><p>favor e contra do teste ser realizado pelos desenvolvedores. (1,25 pontos)</p><p>BOA PROVA!</p>