# Exercícios de Exame

Questões de exames antigos de Engenharia de Software, com resolução.

Página: https://resumos.rgo.pt/cadeiras/es/exercicios-exame/

## Fundamentos e processos

Primeiro bug de software registado

Exame, 2019/20

Qual foi o primeiro bug de software registado e como foi identificado? Justifique a resposta.

*   a) Nos anos 50, com os sistemas avançados de identificação de bugs da NATO
*   b) Nos anos 80, por análise de serviços críticos
*   c) Nos anos 40, manualmente
*   d) Nos anos 90, com testes automatizados

Solução

c) Nos anos 40, manualmente.

Nos anos 40, os computadores enchiam salas inteiras e o seu calor atraía insetos, que provocavam curto-circuitos. A 9 de setembro de 1945, a oficial Grace Hopper encontrou manualmente uma traça entre os relés do Harvard Mark II, registando o primeiro bug de software.

*   **Nos anos 50, com os sistemas avançados de identificação de bugs da NATO.** Não existiam sistemas de identificação de bugs da NATO nos anos 50.
*   **Nos anos 80, por análise de serviços críticos.** A análise de serviços críticos não foi o método de identificação do primeiro bug.
*   **Nos anos 40, manualmente.** Em 1945, nos anos 40, Grace Hopper encontrou manualmente uma traça (moth) entre os relés do computador Harvard Mark II.
*   **Nos anos 90, com testes automatizados.** Os testes automatizados não foram usados na identificação do primeiro bug registado.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/es/introducao/#como-a-disciplina-surgiu)

Complexidade essencial e acidental

Teste, 2022/23

Os sistemas de software atuais são muito grandes e muito complexos. Como se podem classificar os projetos de software quanto à sua complexidade global?

*   a) Complexidade acidental e complexidade de gestão
*   b) Complexidade acidental e complexidade essencial
*   c) Complexidade técnica e complexidade de gestão
*   d) Complexidade técnica e complexidade essencial

Solução

b) Complexidade acidental e complexidade essencial.

A complexidade essencial resulta da dificuldade intrínseca do problema, enquanto a acidental resulta das ferramentas, linguagens e métodos escolhidos. Reduzir a complexidade acidental não resolve o problema em si.

*   **Complexidade acidental e complexidade de gestão.** A complexidade de gestão não é uma das duas classes fundamentais da complexidade do software.
*   **Complexidade acidental e complexidade essencial.** A complexidade do software divide-se na essencial, que vem da dificuldade do problema, e na acidental, que vem das ferramentas e métodos usados.
*   **Complexidade técnica e complexidade de gestão.** Esta não é a classificação habitual da complexidade global dos projetos de software.
*   **Complexidade técnica e complexidade essencial.** A complexidade técnica não substitui a distinção entre complexidade essencial e acidental.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/es/introducao/#complexidade-e-trabalho-em-equipa)

Engenharia inversa como atividade de reengenharia

Exame, 2019/20

A engenharia inversa (reverse engineering):

*   a) É uma atividade do processo de reengenharia
*   b) Significa converter código para uma nova linguagem
*   c) É limpar e reestruturar os dados do sistema
*   d) É reorganizar a estrutura do programa

Solução

a) É uma atividade do processo de reengenharia.

A engenharia inversa consiste em analisar um programa ou código existente, de forma estática ou dinâmica, para o compreender melhor. Tal como as outras atividades de reengenharia, ajuda a reestruturar e a documentar o software para o tornar mais fácil de perceber e de alterar.

*   **É uma atividade do processo de reengenharia.** A engenharia inversa analisa um programa existente para o compreender melhor, servindo de base à reengenharia.
*   **Significa converter código para uma nova linguagem.** Converter código para outra linguagem é uma tarefa específica, não a definição de engenharia inversa.
*   **É limpar e reestruturar os dados do sistema.** A reestruturação dos dados é outra atividade da reengenharia, não a engenharia inversa.
*   **É reorganizar a estrutura do programa.** Reorganizar a estrutura do programa é reengenharia, não engenharia inversa.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/es/construcao-evolucao/#sistemas-legados)

## Engenharia de requisitos

Da necessidade vaga à definição clara do sistema

Teste, 2022/23

O processo que leva de "necessidades vagamente definidas" a uma "definição clara e bem percebida do sistema" é comummente conhecido como:

*   a) Engenharia de requisitos
*   b) Especificação de requisitos
*   c) Análise de requisitos
*   d) Elicitação de requisitos

Solução

a) Engenharia de requisitos.

A engenharia de requisitos é o processo global que transforma necessidades vagas numa definição clara e percebida do sistema, incluindo elicitação, análise, especificação e validação.

*   **Engenharia de requisitos.** A engenharia de requisitos engloba elicitar, analisar, especificar e validar os requisitos, levando das necessidades vagas até à definição clara do sistema.
*   **Especificação de requisitos.** A especificação é apenas uma parte do processo, a produção do documento de requisitos.
*   **Análise de requisitos.** A análise estuda e organiza os requisitos já elicitados, não cobre todo o processo.
*   **Elicitação de requisitos.** A elicitação é a recolha das necessidades junto das partes interessadas, apenas o início do processo.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/es/requisitos-uml/#objetivos-e-requisitos)

Requisito não funcional

Teste, 2022/23

Qual das seguintes afirmações é um requisito não funcional de um sistema?

*   a) O sistema deve permitir ao cliente comprar vários bilhetes de uma só vez
*   b) O sistema deve permitir ao cliente iniciar sessão
*   c) O sistema deve ser desenvolvido com uma base de dados SQL
*   d) O sistema deve permitir ao cliente comprar bilhetes presencialmente

Solução

c) O sistema deve ser desenvolvido com uma base de dados SQL.

As opções a), b) e d) descrevem o que o sistema faz, ou seja, requisitos funcionais. A opção c) restringe como o sistema é construído, sendo uma restrição de projeto que se classifica como requisito não funcional.

*   **O sistema deve permitir ao cliente comprar vários bilhetes de uma só vez.** É uma funcionalidade do sistema, logo um requisito funcional.
*   **O sistema deve permitir ao cliente iniciar sessão.** O início de sessão é uma funcionalidade, logo um requisito funcional.
*   **O sistema deve ser desenvolvido com uma base de dados SQL.** Impor uma tecnologia de implementação é uma restrição de projeto, que conta como requisito não funcional.
*   **O sistema deve permitir ao cliente comprar bilhetes presencialmente.** Descreve uma funcionalidade, logo é um requisito funcional.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/es/requisitos-uml/#tipos-de-requisitos)

Brainstorming na elicitação de requisitos

Exame, 2019/20

O brainstorming é uma técnica comum de elicitação de requisitos na qual (justifique a resposta):

*   a) As ideias vêm apenas dos utilizadores finais do sistema
*   b) Todas as ideias são bem-vindas
*   c) Não existe um facilitador
*   d) O limite é de 15 pessoas na sala

Solução

b) Todas as ideias são bem-vindas.

Numa sessão de brainstorming há um moderador e cerca de 4 a 8 pessoas com perspetivas diferentes sobre o produto. Todas as ideias são bem-vindas, por mais criativas que pareçam, dando prioridade à quantidade sobre a qualidade; num passo posterior são discutidas, revistas e organizadas.

*   **As ideias vêm apenas dos utilizadores finais do sistema.** Participam pessoas com várias perspetivas sobre o produto, não apenas os utilizadores finais.
*   **Todas as ideias são bem-vindas.** O objetivo é recolher o maior número de ideias novas, dando prioridade à quantidade sobre a qualidade; só depois são discutidas e organizadas.
*   **Não existe um facilitador.** Existe um moderador que conduz a sessão.
*   **O limite é de 15 pessoas na sala.** A sessão reúne normalmente cerca de 4 a 8 pessoas com perspetivas diferentes.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/es/requisitos-uml/#elicita%C3%A7%C3%A3o)

## Modelação UML

Elementos de um diagrama de casos de uso

Teste, 2022/23

Quais dos seguintes elementos estão TODOS presentes num diagrama de casos de uso?

*   a) Ator, caso de uso, fronteira do sistema, nome do sistema
*   b) Ator, pacote, nome do sistema, sistema externo
*   c) Caso de uso, ator, classe principal, nome do sistema
*   d) Caso de uso, generalização, nome do sistema, teste

Solução

a) Ator, caso de uso, fronteira do sistema, nome do sistema.

Num diagrama de casos de uso representam-se os atores, os casos de uso que eles iniciam e a fronteira do sistema, identificada pelo nome do sistema. Classes, pacotes e testes pertencem a outros tipos de diagrama.

*   **Ator, caso de uso, fronteira do sistema, nome do sistema.** Um diagrama de casos de uso mostra atores, casos de uso e a fronteira do sistema com o seu nome.
*   **Ator, pacote, nome do sistema, sistema externo.** Pacotes e sistemas externos não são elementos próprios deste diagrama.
*   **Caso de uso, ator, classe principal, nome do sistema.** Classes não fazem parte de um diagrama de casos de uso.
*   **Caso de uso, generalização, nome do sistema, teste.** Testes não são um elemento deste diagrama.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/es/modelacao-uml/#casos-de-uso)

Diagramas de comportamento em UML

Teste, 2022/23

Qual dos seguintes NÃO é um diagrama UML normalmente usado para modelar o comportamento de um sistema de software?

*   a) Diagrama de atividades
*   b) Diagrama de casos de uso
*   c) Diagrama de classes
*   d) Diagrama de máquina de estados

Solução

c) Diagrama de classes.

Os diagramas de atividades, de casos de uso e de máquina de estados descrevem aspetos dinâmicos do sistema. O diagrama de classes descreve a estrutura estática: classes, atributos e relações entre elas.

*   **Diagrama de atividades.** Modela fluxos de atividades, incluindo paralelismo com fork e join.
*   **Diagrama de casos de uso.** Mostra as interações entre atores e o sistema, sendo usado para modelar comportamento.
*   **Diagrama de classes.** O diagrama de classes modela a estrutura estática do sistema, não o seu comportamento.
*   **Diagrama de máquina de estados.** Modela o ciclo de vida de objetos com comportamento orientado por eventos.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/es/modelacao-uml/#classes-e-modelo-de-dom%C3%ADnio)

Relações include em casos de uso

Exame, 2019/20

Em modelação de casos de uso, as relações include servem para (justifique a resposta):

*   a) Representar comportamento opcional
*   b) Representar comportamento crítico
*   c) Representar comportamento obrigatório
*   d) Representar comportamento importado de outro sistema

Solução

c) Representar comportamento obrigatório.

Quando vários casos de uso partilham algum comportamento comum, esse comportamento pode ser separado e descrito num novo caso de uso, que os primeiros incluem. Esse comportamento comum é sempre obrigatório e não pode ser removido.

*   **Representar comportamento opcional.** O comportamento opcional modela-se com relações extend, não include.
*   **Representar comportamento crítico.** O include não distingue comportamento crítico de outro tipo.
*   **Representar comportamento obrigatório.** Quando vários casos de uso partilham um comportamento comum, esse comportamento separa-se num novo caso de uso incluído por eles, e é sempre executado.
*   **Representar comportamento importado de outro sistema.** O comportamento incluído pode ou não vir de outro sistema, mas é sempre obrigatório.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/es/modelacao-uml/#casos-de-uso)

## Scrum, XP e gestão ágil

Como funciona o Planning Game

Teste, 2022/23

Qual das seguintes afirmações sobre o funcionamento do Planning Game é VERDADEIRA?

*   a) Os gestores estimam o tamanho de cada história de utilizador
*   b) Os programadores contribuent para uma lista de funcionalidades que desejam
*   c) Os programadores decidem quando as funcionalidades devem ser entregues
*   d) O cliente prioriza quais as histórias de utilizador a implementar

Solução

d) O cliente prioriza quais as histórias de utilizador a implementar.

No Planning Game, o cliente apresenta as histórias de utilizador por ordem de prioridade de negócio e os programadores estimam o esforço de cada uma. A combinação das duas perspetivas define o que entra em cada entrega.

*   **Os gestores estimam o tamanho de cada história de utilizador.** No Planning Game são os programadores que estimam o esforço.
*   **Os programadores contribuent para uma lista de funcionalidades que desejam.** A lista de funcionalidades vem do cliente, não dos programadores.
*   **Os programadores decidem quando as funcionalidades devem ser entregues.** As entregas resultam das iterações combinadas com o cliente.
*   **O cliente prioriza quais as histórias de utilizador a implementar.** No Planning Game o cliente ordena as histórias por valor de negócio e os programadores estimam o esforço de cada uma.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/es/xp/#planning-game)

Práticas que não são de XP

Teste, 2022/23

Qual das seguintes NÃO é uma prática de XP?

*   a) Test-driven Deployment
*   b) On-Site Customer
*   c) Planning Game
*   d) Continuous Integration

Solução

a) Test-driven Deployment.

On-Site Customer, Planning Game e Continuous Integration são práticas de XP. O que existe é desenvolvimento orientado a testes (test-driven development), não "test-driven deployment".

*   **Test-driven Deployment.** O XP pratica desenvolvimento orientado a testes (TDD), não "test-driven deployment".
*   **On-Site Customer.** Ter o cliente presente na equipa é uma prática clássica de XP.
*   **Planning Game.** O Planning Game é a prática de planeamento conjunto de XP.
*   **Continuous Integration.** A integração contínua é uma prática central de XP.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/es/xp/#valores-e-pr%C3%A1ticas)

Quem escreve os testes no XP

Exame, 2019/20

O XP previne regressões de software promovendo uma abordagem test-first. Quem deve participar nesse processo? Justifique a sua resposta.

Solução

A equipa de desenvolvimento, com contributos do cliente, escreve os testes antes de abordar novas funcionalidades.

São os programadores que escrevem os testes unitários antes de implementar cada nova funcionalidade. O cliente participa especificando os testes de aceitação: uma história de utilizador só está completa quando todos os testes de aceitação passam. Os testes unitários testam métodos, classes ou cenários específicos e são internos à equipa de desenvolvimento.

Confere a tua resposta:

*   A resposta indica que a equipa de desenvolvimento escreve os testes antes de implementar novas funcionalidades.
*   A resposta reconhece que o cliente participa especificando os testes de aceitação (customer tests).
*   A resposta refere que uma história de utilizador está completa quando todos os seus testes de aceitação passam.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/es/xp/#tdd)

Como o Scrum tenta cumprir prazos

Exame, 2019/20

Não cumprir os prazos do projeto é possivelmente a falha mais reincidente no desenvolvimento de software. Como é que o Scrum tenta resolver esse problema? Justifique a resposta.

*   a) O Scrum garante apenas que existe um incremento do produto no fim de cada sprint, mas não a quantidade de funcionalidades
*   b) O Scrum Master é responsável por garantir que a equipa é eficiente e entrega o software a tempo
*   c) As estimativas de esforço e a velocidade podem ser usadas para prever quando o backlog ficará completo
*   d) Um processo bem definido garante eficiência no desenvolvimento e, por isso, o cumprimento do prazo

Solução

c) As estimativas de esforço e a velocidade podem ser usadas para prever quando o backlog ficará completo.

Em cada sprint mede-se a velocidade e o esforço da equipa, para que nos sprints seguintes essa informação permita prever que progresso é possível fazer. Com este método, a equipa percebe melhor como avança e pode prioritar as próximas tarefas de forma mais informada, aumentando a probabilidade de cumprir os prazos e de estimar quando o backlog ficará completo.

*   **O Scrum garante apenas que existe um incremento do produto no fim de cada sprint, mas não a quantidade de funcionalidades.** O Scrum não se limita a garantir a existência do incremento; usa a medição para prever o progresso.
*   **O Scrum Master é responsável por garantir que a equipa é eficiente e entrega o software a tempo.** O Scrum Master facilita o processo, mas não é o responsável direto pela entrega a tempo.
*   **As estimativas de esforço e a velocidade podem ser usadas para prever quando o backlog ficará completo.** Em cada sprint mede-se a velocidade e o esforço da equipa para prever, nos sprints seguintes, quanto falta para completar o backlog.
*   **Um processo bem definido garante eficiência no desenvolvimento e, por isso, o cumprimento do prazo.** Um processo rígido não garante por si só o cumprimento dos prazos.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/es/gestao-projetos/#velocidade-e-previs%C3%A3o)

## Testes e arquitetura

Teste de caixa preta

Teste, 2022/23

Qual das seguintes é uma abordagem de teste de caixa preta (black-box)?

*   a) Partição por classes de equivalência
*   b) Nenhuma das opções
*   c) Teste estrutural, por exemplo baseado em cobertura
*   d) Teste de mutação

Solução

a) Partição por classes de equivalência.

No teste de caixa preta os casos de teste são escolhidos a partir da especificação do componente, sem olhar para o código. A partição por classes de equivalência agrupa as entradas equivalentes e escolhe representantes de cada classe. O teste estrutural e o teste de mutação são de caixa branca.

*   **Partição por classes de equivalência.** A partição por classes de equivalência deriva os casos de teste apenas da especificação, sem conhecer a estrutura interna do código.
*   **Nenhuma das opções.** Existe pelo menos uma opção correta.
*   **Teste estrutural, por exemplo baseado em cobertura.** O teste estrutural é de caixa branca, pois usa o conhecimento do código.
*   **Teste de mutação.** O teste de mutação também se apoia na estrutura interna do programa.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/es/verificacao-validacao/#caixa-preta-e-caixa-branca)

Objetivo do teste de integração

Teste, 2022/23

Qual é o objetivo do teste de integração?

*   a) Verificar o comportamento e a funcionalidade corretos de um widget ou ecrã específico
*   b) Testar a integração e a interação entre diferentes unidades ou componentes
*   c) Testar as unidades ou componentes individuais de forma isolada
*   d) Garantir que a aplicação cumpre os requisitos de desempenho e capacidade de resposta especificados

Solução

b) Testar a integração e a interação entre diferentes unidades ou componentes.

O teste unitário testa cada unidade isoladamente, o teste de componentes testa widgets ou ecrãs, e o teste de desempenho mede tempos de resposta. O teste de integração junta as unidades já testadas e verifica se comunicam e funcionam corretamente em conjunto.

*   **Verificar o comportamento e a funcionalidade corretos de um widget ou ecrã específico.** Isso é objetivo do teste de componentes ou de interface.
*   **Testar a integração e a interação entre diferentes unidades ou componentes.** O teste de integração verifica se os componentes funcionam corretamente em conjunto.
*   **Testar as unidades ou componentes individuais de forma isolada.** O teste isolado de unidades é o teste unitário.
*   **Garantir que a aplicação cumpre os requisitos de desempenho e capacidade de resposta especificados.** Isso é objetivo do teste de desempenho.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/es/verificacao-validacao/#n%C3%ADveis-e-objetivos)

Padrão para interface interativa

Teste, 2022/23

Qual dos seguintes padrões é o mais adequado para arquitetar uma aplicação com uma interface de utilizador interativa?

*   a) Repository
*   b) Pipes and filters
*   c) Todas as outras opções
*   d) Model-View-Controller

Solução

d) Model-View-Controller.

O padrão Model-View-Controller separa os dados (modelo), a apresentação (vista) e o controlo da interação (controlador), sendo o mais adequado para aplicações com interface de utilizador interativa. Repository e pipes and filters servem outros tipos de problema.

*   **Repository.** O padrão Repository organiza o acesso centralizado a dados, não a interface interativa.
*   **Pipes and filters.** Pipes and filters adequa-se a fluxos de processamento de dados em cadeia, não a interfaces interativas.
*   **Todas as outras opções.** Nem todos os padrões listados servem para interfaces interativas.
*   **Model-View-Controller.** O MVC separa o modelo, a vista e o controlador, sendo o padrão clássico para aplicações com interface interativa.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/es/arquitetura-desenho/#estilos-e-padr%C3%B5es)

Disciplinas mais ativas na construção do RUP

Exame, 2019/20

No RUP, a fase de construção é aquela em que o software é desenvolvido mais ativamente. Identifique as disciplinas mais ativas durante esta fase e explique resumidamente porquê.

Solução

As disciplinas mais ativas são a conceção (analysis & design), a implementação e os testes.

Na fase de construção o software é desenvolvido mais ativamente, ou seja, é implementado. Ao mesmo tempo, é testado de forma extensiva segundo os critérios de avaliação definidos, e os produtos libertados são avaliados segundo os critérios de aceitação da visão, pelo que os testes também têm um papel importante. Além disso, deve haver atenção à gestão de recursos, ao controlo e à otimização do processo, análise que pode levar a alterações de conceção.

Confere a tua resposta:

*   A resposta identifica as disciplinas de conceção (analysis & design), implementação e testes.
*   A justificação refere que o software é implementado e testado segundo os critérios de avaliação definidos.
*   A justificação refere que podem surgir alterações de conceção a partir da análise do processo e dos recursos.

[Voltar à explicação](https://resumos.rgo.pt/cadeiras/es/processos-software/#rup)
