Teste de software. Definição



Documentos relacionados
Tópicos abordados. Testes de Software (Capítulo 8 Sommerville) 2/2/2015. Testes de desenvolvimento. Desenvolvimento dirigido a testes

Testes de Software. Testes de Software. Teste de Validação. Teste de Defeito. Modelo de Entrada e Saída. Modelo de Entrada e Saída

Testes de Software. Testes de Software. Teste de Validação. Teste de Defeito. Modelo de Entrada e Saída. Modelo de Entrada e Saída

Tipos de teste de software

QUALIDADE DE SOFTWARE. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 27 Slide 1

Engenharia de Software II

Modelos de processos de desenvolvimento de software

a) Teste das funções do sistema com outros sistemas b) Teste de componentes que em conjunto compõem a função do sistema

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 06 PROFª BRUNO CALEGARO

Modelo Cascata ou Clássico

Capítulo 2. Processos de Software Pearson Prentice Hall. Todos os direitos reservados. slide 1

Engenharia de Software I

Requisitos de Software. Teresa Maciel DEINFO/UFRPE

Engenharia de Software e Gerência de Projetos Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios

AUTOR: DAVID DE MIRANDA RODRIGUES CONTATO: CURSO FIC DE PROGRAMADOR WEB VERSÃO: 1.0

Princípios do teste de software

Projeto de Arquitetura

UNIP Ciência da Computação / Sistemas de Informação TED I - Orientações Gerais para Elaboração dos Documentos

Unidade VI. Validação e Verificação de Software Teste de Software. Conteúdo. Técnicas de Teste. Estratégias de Teste

Projeto de Arquitetura

ENGENHARIA DE SOFTWARE I

Engenharia de Software III

Processo de Desenvolvimento de Software. Engenharia de Software.

GARANTIA DA QUALIDADE DE SOFTWARE

Engenharia de Software: conceitos e aplicações. Prof. Tiago Eugenio de Melo, MSc tiagodemelo@gmail.com

Referências internas são os artefatos usados para ajudar na elaboração do PT tais como:

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos

Fundamentos em Teste de Software. Vinicius V. Pessoni

Juciara Nepomuceno de Souza Rafael Garcia Miani. Teste de Software

Qualidade de Software

Feature-Driven Development

Objetivos. Processos de Software. Tópicos abordados. O processo de software. Modelos genéricos de modelos de processo de software.

Metodologias de Desenvolvimento de Sistemas. Analise de Sistemas I UNIPAC Rodrigo Videschi

Engenharia de Software II

Qualidade de Software. Profa. Cátia dos Reis Machado

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia.

Planejando o aplicativo

Engenharia de Software

Engenharia de Requisitos Estudo de Caso

TOTVS BA Guia de Customização Linha Logix

O Rational Unified Process (RUP) é um processo de desenvolvimento de software inspirado no

c. Técnica de Estrutura de Controle Teste do Caminho Básico

ISO/IEC 12207: Gerência de Configuração

3 SCS: Sistema de Componentes de Software

Resolução da lista de exercícios de casos de uso

Requisitos de Software

Capítulo 25. Gerenciamento de Configuração. Engenharia de Software Prof. Flávio de Oliveira Silva, Ph.D.

Desenvolvimento Guiado por Testes

Programação Orientada a Testes Rodrigo Rebouças de Almeida

Técnicas de Caixa Preta de Teste de Software

Processos de Software

Teste de Software. Objetivos e Limites. Objetivos e Limites. Objetivos e Limites. Objetivos e Limites. Objetivos e Limites

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE

PONTIFÍCIA UNIVERSIDADE CATÓLICA DE GOIÁS Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

2 Diagrama de Caso de Uso

Gerenciamento de configuração. Gerenciamento de Configuração. Gerenciamento de configuração. Gerenciamento de configuração. Famílias de sistemas

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

ARCO - Associação Recreativa dos Correios. Sistema para Gerenciamento de Associações Recreativas Plano de Desenvolvimento de Software Versão <1.

O Processo de Engenharia de Requisitos

APOO Análise e Projeto Orientado a Objetos. Requisitos

Prototipação de Software

Testar os programas para estabelecer a presença de defeitos no sistema. Teste de Software. Teste de defeitos. Objetivos. Tópicos

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

Desenvolvimento de Interfaces Prototipação

Requisitos de Software

Professor: Curso: Disciplina:

natureza do projeto e da aplicação métodos e ferramentas a serem usados controles e produtos que precisam ser entregues

UML 2. Guia Prático. Gilleanes T.A. Guedes. Novatec. Obra revisada e ampliada a partir do título Guia de Consulta Rápida UML 2

CSF FasTest SOLUÇÕES DE OUTPUT DE PAGAMENTO

Teste de Regressão. R. Anido Baseado em notas de aulas da profa. Eliane Martins

Prof. Marcelo Henrique dos Santos

agility made possible

O Processo de Desenvolvimento de Software

UML - Unified Modeling Language

Tópicos da Aula. Que é são requisitos? Tipos de Requisitos. Requisitos Funcionais. Classificação de Requisitos. Requisitos de Software.

Engenharia de Software

Requisitos de Software

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Roteiro para a escrita do documento de Especificação de Requisitos de Software (ERS)

Engenharia de Software

Qualidade de Software. Prof.: Ivon Rodrigues Canedo. PUC Goiás

Especificação de Requisitos

Aprenda as melhores práticas para construir um completo sistema de teste automatizado

As principais características da abordagem de um banco de dados versus a abordagem de processamento de arquivos são as seguintes:

Nome: Login: CA: Cidade: UF CARTÃO RESPOSTA QUESTÃO RESPOSTA QUESTÃO RESPOSTA

Conceitos de Banco de Dados

3 a Lista de Exercícios

4 O Workflow e a Máquina de Regras

CRM. Customer Relationship Management

Engenharia de Software II

O modelo Entidade-Relacionamento. Agenda: -Modelagem de dados utilizando O Modelo Entidade-Relacionamento

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 14 PROFª BRUNO CALEGARO

Capítulo X. Gerenciar Mudanças dos Requisitos. Aluizio Saiter, M. Sc.

CES-32 e CE-230 Qualidade, Confiabilidade e Segurança de Software. Conceitos de Qualidade. CURSO DE GRADUAÇÃO e DE PÓS-GRADUAÇÃO DO ITA

Introdução a UML. Hélder Antero Amaral Nunes haanunes@gmail.com

Transcrição:

Definição O teste é destinado a mostrar que um programa faz o que é proposto a fazer e para descobrir os defeitos do programa antes do uso. Quando se testa o software, o programa é executado usando dados fictícios. Os resultados do teste são verificados à procura de erros, anomalias ou informações sobre os atributos não funcionais do programa. Os teste podem mostrar apenas a presença de erros, e não sua ausência. 10/12/2012 Engenharia de Software - Danilo Giacobo 1

Objetivos O processo de teste tem dois objetivos distintos: 1. Demonstrar ao desenvolvedor e ao cliente que o software atende a seus requisitos. Para softwares customizados, isso significa que deve haver pelo menos um teste para cada requisito do documento de requisitos. Para softwares genéricos, isso significa que deve haver testes para todas as características do sistema, além de suas combinações, que serão incorporadas ao release do produto. 2. Descobrir situações em que o software se comporta de maneira incorreta, indesejável ou de forma diferente das especificações. Essas são consequências de defeitos de software. O teste de defeitos preocupa-se com a eliminação de comportamentos indesejáveis do sistema, tais como panes, interações indesejáveis com outros sistemas, processamentos incorretos e corrupção de dados. 10/12/2012 Engenharia de Software - Danilo Giacobo 2

Um modelo de entrada-saída de teste de programa Entradas que causam comportamento anômalos Entrada de dados de teste Ie Sistema Saídas que revelam defeitos Saída de resultados de teste Oe 10/12/2012 Engenharia de Software - Danilo Giacobo 3

Testes de inspeção Inspeções Especificação de requisitos Arquitetura de software Modelos de projeto em UML Esquemas de banco de dados Programa Protótipo de sistema Teste 10/12/2012 Engenharia de Software - Danilo Giacobo 4

Testes de inspeção - Vantagens Existem três vantagens da inspeção de software sobre os testes: 1. Durante o teste, erros podem mascarar (esconder) outros erros. Quando um erro conduz saídas inesperadas, você nunca tem certeza se as anomalias seguintes são devidas a um novo erro ou efeitos colaterais do erro original. Como a inspeção é um processo estático, você não precisa se preocupar com as interações entre os erros. Consequentemente, uma sessão única de inspeção pode descobrir muitos erros no sistema. 2. Versões incompletas de um sistema podem ser inspecionadas sem custos adicionais. Se um programa é incompleto, você precisa desenvolver dispositivos de teste especializados para testar as partes disponíveis, Isso, obviamente, aumenta os custos de desenvolvimento do sistema. 3. Bem como a procura por defeitos de programa, uma inspeção pode considerar outros atributos de qualidade de um programa, como a conformidade com os padrões, portabilidade e manutenibilidade. Você pode procurar ineficiências, algoritmos inadequados e um estilo pobre de programação que poderiam tornar o sistema de difícil manutenção e atualização. 10/12/2012 Engenharia de Software - Danilo Giacobo 5

Um modelo do processo de teste de software Casos de teste Dados de teste Resultados de teste Relatórios de teste Projetar casos de teste Preparar dados de teste Executar programa com dados de teste Comparar resultados para os casos de teste 10/12/2012 Engenharia de Software - Danilo Giacobo 6

Um modelo do processo de teste de software Geralmente, o sistema de software comercial tem de passar por três estágios de teste: 1. Testes em desenvolvimento, em que o sistema é testado durante o desenvolvimento para descobrir bugs e defeitos. Projetistas de sistemas e programadores podem estar envolvidos no processo de teste. 2. Testes de release, em que uma equipe de teste independente testa uma versão completa do sistema antes que ele seja liberado para os usuários. O objetivo dos testes de release é verificar se o sistema atende aos requisitos dos stakeholders de sistema. 3. Testes de usuário, em que os usuários ou potenciais usuários de um sistema testam o sistema em seu próprio ambiente. Para produtos de software, o usuário pode ser um grupo de marketing interno, que decidirá se o software pode ser comercializado, liberado e vendido. Os testes de aceitação são um tipo de teste de usuário no qual o cliente testa formalmente o sistema para decidir se ele deve ser aceito por parte do fornecedor do sistema ou se é necessário um desenvolvimento adicional. 10/12/2012 Engenharia de Software - Danilo Giacobo 7

Testes de desenvolvimento Durante o desenvolvimento, o teste pode ocorrer em três níveis de granularidade: 1. Teste unitário, em que as unidades individuais de programa ou classes de objetos são testadas individualmente. Testes unitários devem centrar-se em testar a funcionalidade dos objetos ou métodos. 2. Teste de componentes, em que várias unidades individuais são integradas para criar componentes compostos. Testes de componentes devem centrar-se em testar as interfaces dos componentes. 3. Teste de sistema, em que alguns ou todos os componentes de um sistema estão integrados e o sistema é testado como um todo. O teste de sistema deve centrar-se em testar as interações entre os componentes. 10/12/2012 Engenharia de Software - Danilo Giacobo 8

Testes de desenvolvimento - Teste unitário O teste unitário é o processo de testar os componentes de programa, como métodos ou classes de objeto. As funções individuais ou métodos são o tipo mais simples de componente. Seus testes devem ser chamadas para essas rotinas com parâmetros diferentes de entrada. Algumas características desse processo são: - Testar todas as operações associadas ao objetos; - Definir e verificar o valor de todos os atributos associados ao objeto; - Colocar o objeto em todos os estados possíveis, o que significa simular todos os eventos que causam mudanças; Importante: - Um framework de automação de testes como o JUnit pode ser utilizado; - Tomar cuidado ao realizar os testes de generalização e herança de classes de objetos; e - Utilização de Mock Objects. 10/12/2012 Engenharia de Software - Danilo Giacobo 9

Testes de desenvolvimento - Escolha de casos de teste unitário - Partições ou domínios de equivalência; - Teste de Caixa-Preta; - Teste de Caixa-Branca; Exemplos de diretrizes que podem ser usadas no projeto de casos de teste: - Escolha entradas que forcem o sistema a gerar todas as mensagens de erro; - Projete entradas que causem overflow de buffers de entrada; - Repita a mesma entrada ou uma série de entradas inúmeras vezes; - Obrigue a geração de saídas inválidas; e - Obrigue os resultados de cálculos a serem muito grandes ou muito pequenos. 10/12/2012 Engenharia de Software - Danilo Giacobo 10

Testes de desenvolvimento - Teste de componente Diferentes tipos de interface entre os componentes geram diferentes tipos de erro: - Interfaces de parâmetro; - Interfaces de memória compartilhada; - Interfaces de procedimento; - Interfaces de passagem de mensagem. Classes de erro: - Mau uso de interface; - Mau-entendimento de interface; - Erros de timing. 10/12/2012 Engenharia de Software - Danilo Giacobo 11

Testes de desenvolvimento - Teste de componente Algumas diretrizes gerais para os testes de interface são: 1. Examine o código a ser testado e liste, explicitamente, cada chamada para um componente externo. Projete um conjunto de testes em que os valores dos parâmetros para os componentes externos estão nos extremos de suas escalas. Esses valores extremos são mais suscetíveis a revelar inconsistências de interface. 2. Nos casos em que os ponteiros são passados por meio de uma interface, sempre teste a interface com os parâmetros de ponteiros nulos. 3. Nos casos em que um componente é chamado por meio de uma interface de procedimento, projete testes que deliberadamente causem uma falha no componente. Diferentes hipóteses de falhas são um dos equívocos mais comuns da especificação. 4. Use testes de estresse em sistemas de passagem de mensagem. Isso significa que você deve projetar testes que gerem muito mais mensagens do que seria provável ocorrer na prática. Essa é uma maneira eficaz de revelar problemas de timing. 5. Nos casos em que vários componentes interagem por meio de memória compartilhada, desenvolva testes que variam a ordem em que esses componentes são ativados. Esses testes podem revelar as suposições implícitas feitas pelo programador sobre a ordem na qual os dados compartilhados são produzidos e consumidos. 10/12/2012 Engenharia de Software - Danilo Giacobo 12

Testes de desenvolvimento - Teste de sistema - Durante o teste de sistema, os componentes reusáveis que tenham sido desenvolvidos separadamente e os sistemas de prateleira podem ser integrados com componentes recémdesenvolvidos. Então, o sistema completo é testado. - Nesse estágio, componentes desenvolvidos por diferentes membros da equipe ou grupos podem ser integrados. O teste de sistema é um processo coletivo, não individual. E algumas empresas, o teste de sistema pode envolver uma equipe independente, sem participação de projetistas e programadores. 1. Todas as funções de sistema acessadas por meio de menus devem ser testadas. 2. Combinações de funções (por exemplo, a formatação do texto) acessadas por meio de menu devem ser testadas. 3. Nos casos em que a entrada do usuário é fornecida, todas as funções devem ser testadas com entradas corretas e incorretas. 10/12/2012 Engenharia de Software - Danilo Giacobo 13

Desenvolvimento dirigido a testes As etapas do processo do desenvolvimento dirigido a testes (TDD, do inglês Test-Driven Development) são: 1. Você começa identificando o incremento de funcionalidade necessário. Este, normalmente, deve ser pequeno e implementável em poucas linhas de código. 2. Você escreve um teste para essa funcionalidade e o implementa como um teste automatizado. Isso significa que o teste pode ser executado e relatará se passou ou falhou. 3. Você, então, executa o teste, junto com todos os outros testes implementados. Inicialmente, você não terá implementado a funcionalidade, logo, o novo teste falhará. Isso é proposital, pois mostra que o teste acrescenta algo ao conjunto de testes. 4. Você, então, implementa a funcionalidade e executa novamente o teste. Isso pode envolver a refatoração do código existente para melhorá-lo e adicionar um novo código sobre o que já está lá. 5. Depois que todos os testes forem executados com sucesso, você caminha para implementar a próxima parte da funcionalidade. Identificar nova funcionalidade Passa Escrever teste Executar o teste Falha Implementar funcionalidade e refatorar 10/12/2012 Engenharia de Software - Danilo Giacobo 14

Desenvolvimento dirigido a testes - Benefícios Além de um melhor entendimento do problema, outros benefícios do desenvolvimento dirigido a testes são: 1.Cobertura de código. Em princípio, todo segmento de código que você escreve deve ter pelo menos um teste associado. Portanto, você pode ter certeza de que todo o código do sistema foi realmente executado. Cada código é testado enquanto está sendo escrito; assim, os defeitos são descobertos no início do processo de desenvolvimento. 2. Testes de regressão. Um conjunto de testes é desenvolvido de forma incremental enquanto um programa é desenvolvido. Você sempre pode executar testes de regressão para verificar se as mudanças no programa não introduziram novos bugs. 3. Depuração simplificada. Quando um teste falha, a localização do programa deve ser óbvia. O código recém-escrito precisa ser verificado e modificado. Você não precisa usaras ferramentas de depuração para localizar o problema. Alguns relatos de uso de desenvolvimento dirigido a testes sugerem que, em desenvolvimento dirigido a testes, quase nunca é necessário usar um sistema automatizado de depuração. 4. Documentação de sistema. Os testes em sim mesmos agem como uma forma de documentação que descreve o que o código deve estar fazendo. Ler os testes pode tornar mais fácil a compreensão do código. 10/12/2012 Engenharia de Software - Danilo Giacobo 15

Testes de release - Teste de release é o processo de testar um release particular de um sistema que se destona para uso fora da equipe de desenvolvimento. - O objetivo principal do processo de teste de release é convencer o fornecedor do sistema de que esse sistema é bom o suficiente para uso. - Teste de release costuma ser um processo de teste de caixa preta, no qual os testes são derivados da especificação de sistema. O sistema é tratado como uma caixa preta cujo comportamento só pode ser determinado por meio do estudo as entradas e saídas relacionadas. Outro nome para isso é teste funcional, assim chamado porque o testador só está preocupado com a funcionalidade, e não com a implementação do software. * Testes baseados em requisitos * Testes de cenário * Testes de desempenho 10/12/2012 Engenharia de Software - Danilo Giacobo 16

Testes de usuário - Teste de usuário ou de cliente é um estágio no processo de teste em que os usuários ou clientes fornecem entradas e conselhos sobre o teste de sistema. Na prática, existem três tipos de testes de usuário: 1. Teste alfa, em que os usuários do software trabalham com a equipe de desenvolvimento para testar o software no local do desenvolvedor. 2. Teste beta, em que um release do software é disponibilizado aos usuários para que possam experimentar e levantar os problemas que eles descobriram com os desenvolvedores do sistema. 3. Testes de aceitação, em que os clientes testam um sistema para decidir de está ou não pronto para ser aceito pelos desenvolvedores de sistemas e implantado no ambiente do cliente. 10/12/2012 Engenharia de Software - Danilo Giacobo 17

Testes de usuário - O processo de teste de aceitação - O teste de aceitação é uma parte inerente ao desenvolvimento de sistemas customizados, que ocorre após o teste de release. Engloba o teste formal de um sistema pelo cliente para decidir se ele deve ou não ser aceito. A aceitação designa que o pagamento pelo sistema deve ser feito. - Existem seis estágios no processo de aceitação: 1. Definir critérios de aceitação. 2. Planejar testes de aceitação. 3. Derivar testes de aceitação. 4. Executar testes de aceitação. 5. Negociar resultados de teste. 6. Rejeitar/aceitar sistema. Critérios de teste Plano de testes Testes Resultados de testes Relatório de testes Definir critérios de aceitação Planejar testes de aceitação Derivar testes de aceitação Executar testes de aceitação Negociar Resultados de testes Aceitar ou rejeitar sistema 10/12/2012 Engenharia de Software - Danilo Giacobo 18

Considerações finais - Os testes só podem anunciar a presença de defeitos em um programa. Não podem demonstrar que não existem defeitos remanescentes. - Testes de desenvolvimento são de responsabilidade da equipe de desenvolvimento de software. Outra equipe deve ser responsável por testar o sistema antes que ele seja liberado para os clientes. No processo de testes de usuário, clientes ou usuários do sistema fornecem dados de teste e verificam se os testes são bem-sucedidos. - Testes de desenvolvimento incluem testes unitários, nos quais você testa objetos e métodos específicos; testes de componentes, em que você testa diversos grupos de objetos; e testes de sistema, nos quais você testa sistemas parciais ou completos. - Ao testar o software, você deve tentar quebrar o software usando sua experiência e diretrizes para escolher os tipos de casos de teste que têm sidos eficazes na descoberta de defeitos em outros sistemas. - Sempre que possível, você deve escrever testes automatizados. Os testes são incorporados em um programa que pode ser executado cada vez que uma alteração é feita para um sistema. - O desenvolvimento test-first é uma abordagem de desenvolvimento na qual os testes são escritos antes do código que será testado. Pequenas alterações no código são feitas, e o código é refatorado até que todos os testes sejam executados com êxito. - Testes de cenário são úteis porque replicam o uso prático do sistema. Trata-se de inventar um cenário típico de uso e usar isso para derivar casos de teste. - Teste de aceitação é um processo de teste de usuário no qual o objetivo é decidir se o software é bom o suficiente para ser implantado e usado em seu ambiente operacional. 10/12/2012 Engenharia de Software - Danilo Giacobo 19

Referências Bibliográficas SOMMERVILLE, IAN. Engenharia de Software. 9. ed. São Paulo: Pearson Prentice Hall, 2011. 529 p. 10/12/2012 Engenharia de Software - Danilo Giacobo 20