Engenharia de Software

Documentos relacionados
Engenharia de Software

Engenharia de Software

Engenharia de Software

Engenharia de Software

Engenharia de Software

Engenharia de Software

Engenharia de Software

Engenharia de Software

Engenharia de Software

Engenharia de Software

Engenharia de Software

Engenharia de Software

Engenharia de Software

Engenharia de Software

Engenharia de Software

Engenharia de Software LEIC/LETI, 3 o Ano, 2 o Semestre, Ano letivo de 2014/2015

Engenharia de Software LEIC/LETI, 3 o Ano, 2 o Semestre, Ano letivo de 2014/2015

Engenharia de Software LEIC/LERC, 3 o Ano, 2 o Semestre, Ano lectivo de 2011/2012

Engenharia de Software LEIC/LETI, 3 o Ano, 2 o Semestre, Ano letivo de 2014/2015

Engenharia de Software LEIC/LETI, 3 o Ano, 2 o Semestre, Ano letivo de 2014/2015

Engenharia de Software LEIC/LERC, 3 o Ano, 2 o Semestre, Ano lectivo de 2011/2012

Engenharia de Software. Enunciado Geral do Projecto

Engenharia de Software LEIC/LERC, 3 o Ano, 2 o Semestre, Ano lectivo de 2009/2010

Fundamentos de Programação

Programação Orientada a Objetos

Teste Automatizado POO. Prof. Marcio Delamaro

Fundamentos da Programação

Engenharia de Software Aula 21. Revisão da Prova 2. Eduardo Figueiredo.

GUIA DE FUNCIONAMENTO DA UNIDADE CURRICULAR

Fundamentos de Programação

Teste de Software. Estratégias de Teste. Rosemary Silveira Filgueiras Melo

Exane de ICE-B, 26 de Junho de 2018 (Versão A)

Fundamentos de Programação

UNIVERSIDADE ESTADUAL PAULISTA INSTITUTO DE BIOCIÊNCIAS, LETRAS E CIÊNCIAS EXATAS DEPARTAMENTO DE CIÊNCIAS DE COMPUTAÇÃO E ESTATÍSTICA

Testes com objetos mock. Curso de Tecnologia em Análise e Desenvolvimento de Sistemas Análise e Projeto Orientados a Objetos

Grupo I [5,5v] Considere o seguinte código que ilustra uma componente programática de um sistema de RPC, neste caso do SUN-RPC.

Engenharia de Software 2º Semestre de 2006/2007

Verificação e Validação

LEIA ATENTAMENTE AS INSTRUÇÕES PARA A RESOLUÇÃO DO

Software Requirements Specification

Sistema de Gestão de Videoteca

Fundamentos de Programação

Computação e Programação (2007/2008-1º Semestre)

Teste de Software. Proj. Desenvolvimento de Software. Prof. Cleverton Hentz. 30 de agosto de Material Apresentado

Computação II Orientação a Objetos

Exame de 1ª Época Introdução à Programação IGE e ETI 2003/02/25-1º semestre de 2002/2003 ISCTE

Projecto 1. Data de de entrega: 26 de Abril de Descrição geral 2. 2 Código a testar 2. 3 Falta/erro/falha modelo RIP 2

Engenharia de Software 2006/2007

INTRODUÇÃO A ENGENHARIA DE SOFTWARE

U.C Desenvolvimento de Software. 12 de julho de 2017 INSTRUÇÕES PARA A RESOLUÇÃO DA PROVA, ACONSELHA-SE QUE LEIA ATENTAMENTE O SEGUINTE:

Gerência de Projetos e Qualidade de Software. Prof. Walter Gima

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Programação com Objectos. 2º Teste 2015/2016 1º Semestre

U.C Matemática Finita. 16 de junho de 2014

Prof. Me. Marcos Echevarria

Mestrado Integrado em Engenharia Electrotécnica e de Computadores 2006/2007. Programação 2. Trabalho Prático P2B

Frequência Introdução à Programação IGE e ETI 2004/2/10 1º semestre de 2003/2004 ISCTE

Fundamentos da Programação. Ano lectivo , 2 o Semestre Projecto Primeira Parte 1. Nim

Familiarização com o processo de implementação de classes. Comentários. Métodos simples, construtores e acesso a membros de dados. Variáveis locais.

2. Quais dos seguintes testes não é um teste do tipo funcional?

PROVA Duração da prova: 120 minutos

Errata 2 Engenharia de Software Fundamentos, Métodos e Padrões 3ª. edição

2 Vectores de objectos

Ciclo de vida: fases x atividades

U.C Desenvolvimento de Software. 12 de julho de 2017 INSTRUÇÕES PARA A RESOLUÇÃO DA PROVA, ACONSELHA-SE QUE LEIA ATENTAMENTE O SEGUINTE:

Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos II Prof. Fabiano Dorça. Padrão Observer (Observador)

Encapsulamento. Separa a interface de um objeto dos detalhes de seu funcionamento interno. Caixa preta 2/27

4 Conceito de Herança

PROVA MODELO Duração da prova: 120 minutos. Grupo 1 - Três questões de resposta múltipla de matemática.

Ambientes Virtuais de Execução

Programação Distribuída. Tipos de Sistemas Distribuídos

INE 5612 Professor: Frank Siqueira. Leonardo Silva Jean Ercilio Thiago

O JUnit permite a realização de testes de unidades, conhecidos como "caixa branca", facilitando assim a correção de métodos e objetos.

Engenharia de Software. Matéria para os Testes

Engenharia de Software

final class UltimosDiasMeses{ static final int[] DIAS_DO_MES = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; }

Plataformas de Distribuição de Objetos

ENGENHARIA DE SOFTWARE

Diagramas de Use Case

Common Object Request Broker Architecture

Instituto Superior de Engenharia de Lisboa

Programação Orientada por Objectos 2010/11. 2º Exame 28 de Junho de 2011

AVALIAÇÃO DA CAPACIDADE PARA A FREQUÊNCIA DO CURSO DE LICENCIATURA EM

Testes de software - Teste funcional

Segunda Parte (3 valores) Primeira Parte (7 valores) Nome: Número: PERGUNTA NOTA PERGUNTA RESPOSTA

Modelação Engenharia de Software

Nome: Número: Segunda Parte (3 valores) Primeira Parte (7 valores)

1. Estude e implemente a classe Exemplo1 apresentada abaixo:

EXPRESSÕES BOOLEANAS. Ex: boolean b = false; // declara uma variável do tipo boolean e atribui false

Classes e Objetos POO

Ferramenta MVCASE - Estágio Atual: Especificação, Projeto e Construção de Componentes

Grupo 2 - Implementação de uma Classe Simples

JUNIT 28/03/2011. Márcio Delamaro Harry Trinta

Iteradores. Iteradores. Isabel Harb Manssour. Roteiro. Coleções

PROVA MODELO Duração da prova: 120 minutos. Grupo 5 - Três questões de resposta múltipla e um problema enquadrado nos conteúdos do curso.

Teste de Software. Competência: Entender as técnicas e estratégias de testes de Software

Transcrição:

UNIVERSIDADE DE LISBOA INSTITUTO SUPERIOR TÉCNICO Engenharia de Software LEIC/LETI, 3 o Ano, 2 o Semestre 1 o Teste, 4 de Abril de 2017 Duração: 60 minutos Nome: Número: Este teste tem um conjunto de 8 perguntas de escolha múltipla, e um conjunto de 2 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 e cartão de aluno. Apenas são permitidas folhas de rascunho fornecidas pelos docentes que devem ser devolvidas no final. A utilização de de qualquer aparelho electrónico (tais como telemóveis, calculadoras, etc) implica a anulação imediata do teste. Leia cuidadosamente as perguntas de escolha múltipla e coloque na grelha a letra correspondente à resposta correta para cada pergunta. Por favor, use apenas letras 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. 2. 3. 4. 5. 6. 7. 8. Não preencher. Reservado para a correcção. 9: 10: 11:

Número: Pág. 2/?? Perguntas de escolha múltipla 1. Qual das seguintes opções não está relacionada com white-box texting: A) Statement testing. B) Path testing. C) Boundary value analysis. D) Branch testing. 2. Integração Contínua (Continuous Integration, CI) A) Tem como objetivo integrar o trabalho desenvolvido pelos programadores diversas vezes ao dia, assegurando através de testes que a base de código permanece consistente após cada integração. B) Visa reduzir a colaboração entre os programadores. C) Apesar de ser um método bastante usado na prática, aumenta os problemas de integração (por exemplo, aumenta o número de conflitos). D) Não tem como objetivo a redução de problemas de integração do código desenvolvido. 3. A Ana e o Bernardo estão a colaborar num trabalho usando Git e um servidor remoto. O Bernardo tenta fazer pull das últimas alterações da Ana e recebe uma mensagem de erro de conflito; como devem resolver a situação? A) A Ana deve fazer pull do servidor remoto, editar os ficheiro em conflito e adicionar um novo commit de resolução. B) O Bernardo deve editar os ficheiros em conflito e adicionar um novo commit de resolução. C) O Bernardo deve fazer um novo clone do repositório, copiar os ficheiros em conflito e adicionar um commit de resolução. D) A Ana deve fazer um novo clone do repositório, copiar os ficheiros em conflito e adicionar um commit de resolução. 4. Qual das seguintes opções é uma vantagem quando se opta por implementar primeiro os testes (test-first)? A) Faz com que não seja necessária a utilização de técnicas de inspeção e revisão. B) Torna mais fácil a implementação dos testes. C) Os testes podem ser utilizados como especificação e documentação. D) Irá permitir encontrar todos os problemas durante o desenvolvimento.

Número: Pág. 3/?? 5. Sobre revisão (reviews), qual das seguintes afirmações é verdadeira? A) Reviews são a forma menos eficaz de testar software. B) Reviews não podem ser usadas para analisar documentos de requisitos. C) É pouco provável que reviews ajudem a encontrar problemas em planos de testes. D) Reviews é uma técnica que pode e deve ser utilizada nas diversas fases do ciclo de desenvolvimento de software (levantamento de requisitos, desenho, implementação e teste). 6. Cobertura... A) Só pode ser obtida durante a execução de testes de unidade (unit testing), e não para testes de integração ou sistema. B) É uma métrica que permite medir, ainda que parcialmente, a exaustividade dos testes. C) É uma métrica apenas utilizada em testes de caixa preta (black-box testing). D) Não tem nenhuma relação com teste de software. 7. Para o desenho de casos de testes pressupõe-se que A) Existe um simulador do sistema que permite verificar os resultados dos testes. B) Os testes, antes de executados, são revistos por programadores experientes. C) A equipa responsável pelo desenvolvimento dos testes tem conhecimento total sobre o comportamento do sistema a ser testado. D) O programador responsável pela implementação do teste é capaz de identificar o (output) esperado. 8. Um dos Padrões em Aplicações Empresariais (Patterns of Enterprise Application Architecture) estudados é o Data Mapper. A) Este padrão separa o código SQL da lógica de domínio. B) Apenas permite um mapeamento entre a estrutura de objectos e a estrutura da base de dados. C) Não contém a lógica de negócio. D) Apesar de oferecer uma interface orientada a objectos, não separa o código SQL da lógica do domínio.

Número: Pág. 4/?? Perguntas sobre a componente prática O projeto ADVENTURE BUILDER que está a ser desenvolvido na disciplina de Engenharia de Software tem como funcionalidade principal a integração de diversos fornecedores de serviços com vista à oferta de atividades de lazer. Considere que o seguinte requisito é adicionado à especificação do projeto: um cliente não pode ter mais de 5 contas; a excepção BankException deve ser lançada quando se tenta criar uma conta para um cliente que viole esta condição. Para auxilio à implementação deste novo requisito, a equipa de desenvolvimento decidiu implementar, paralelamente, um método int getnumberaccounts(client c) da class Bank que devolve o número de contas do cliente.

Número: Pág. 5/?? 9. (2.0) Considerando o requisito adicionado à especificação do projeto, para além daqueles que já foram introduzidos no trabalho prático, indique os vários casos de teste do construtor da classe Account que devem ser desenvolvidos para testar a implementação dessa funcionalidade utilizando as técnicas de partição de equivalência e análise de valores de fronteira. Implemente esses casos utilizando JUnit. Solução: sucesso : Criar uma conta para um cliente que não esteja no limite máximo. número de contas excedidas : Uma excepção é lançada quando se tenta criar uma conta para um cliente que já possui 5 contas. valor de fronteira Criar uma conta para um cliente com 4 contas. private Bank bank; private Client client; @Before public void setup() { bank = new Bank(BANK_NAME, BANK_CODE); client = new Client(bank, "ES_TESTE"); @Test public void success() { assert(1, this.bank.getnumberofaccounts(this.client)) @Test(expected = BankException.class) public void max() { for(int i = 0; i < 5; i++) { @Test public void maxminusone() { for(int i = 0; i < 4; i++) { assert(5, this.bank.getnumberofaccounts(this.client))

Número: Pág. 6/?? 10. (1.7) Implemente o caso de teste de sucesso que definiu na alínea anterior, recorrendo à framework JMockit considerando que o objecto Bank é mocked e que após a invocação do construtor se fazem as verificações abaixo. Considere ainda que para a validação da criação de uma conta é necessário que o cliente pertença ao banco, método boolean hasclient(client c) na classe Bank. Assert.assertEquals(this.bank, account.getbank()); Assert.assertTrue(account.getIBAN().startsWith(this.bank.getCode())); Assert.assertEquals(this.client, account.getclient()); Assert.assertEquals(0, account.getbalance()); Solução: @Test public void success(@mocked Bank bank) { new Expectations() { { bank.hasclient(accountcontructormethodtest.this.client); this.result = true; ; bank.getnumberofaccounts(accountcontructormethodtest.this.client); this.result = 2; bank.getcode(); this.result = "BK01"; Account account = new Account(this.bank, this.client); Assert.assertEquals(this.bank, account.getbank()); Assert.assertTrue(account.getIBAN().startsWith(this.bank.getCode())); Assert.assertEquals(this.client, account.getclient()); Assert.assertEquals(0, account.getbalance());

Número: Pág. 7/?? 11. (1.5) Altere o domínio da aplicação do módulo Bank do ADVENTURE BUILDER, com recurso à Fénix Framework, de forma a que a informação seja adequadamente persistida. Modele a especificação do domínio usando a Domain Modeling Language (DML). NOTA: Necessita de modelar a relação das seguintes classes: Bank e Client. Não precisa de modelar operações (transações) por parte dos clientes nas contas. Solução: class Bank { String code; String name; class Client { String ID; String name; relation BankHasClient { Bank playsrole bank { multiplicity 1..1; Client playsrole client { multiplicity 0..*;