Padrões de Testes Automatizados Curso de Verão 2010 - IME/USP Hugo Corbucci

Slides:



Advertisements
Apresentações semelhantes
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira.
Advertisements

Testes de Interface de Usuário AgilCoop – Cursos de Verão 2010 Mariana Bravo IME/USP.
Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão Hugo Corbucci.
Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão Mariana Bravo.
Estratégias de Escrita de Testes Automatizados Paulo Cheque Cursos de Verão 2010 Licença: Creative.
TDD usual abordagem normal é BOTTOM-UP não é necessário nenhum projeto anterior.
Introdução a Testes Automatizados AgilCoop – Cursos de Verão 2010 Mariana Bravo IME/USP.
Modelagem Orientada a Objetos com UML Cursos para a CTI - IME/USP Dairton Bassi, Hugo Corbucci e Mariana Bravo Departamento de Ciência.
Testes Automatizados Paulo Cheque 27/01/2009 Verão 2009.
Desenvolvimento de Software de Qualidade através de Testes Automatizados Paulo Cheque Cursos de.
Testes Automatizados Cursos de Verão 2007 – IME/USP Dairton Bassi & Paulo Cheque.
Refatoração: Melhorando código existente AgilCoop – Cursos de Verão 2010 Mariana Bravo IME/USP.
Introdução a Testes Automatizados Cursos de Verão 2008 – IME/USP Paulo Cheque.
Testes Automatizados e Bancos de Dados Paulo Cheque Cursos de Verão 2010 Licença: Creative Commons:
Modelagem Orientada a Objetos com UML Cursos para a CTI - IME/USP Dairton Bassi, Hugo Corbucci e Mariana Bravo Departamento de Ciência.
1 Aula 06 – Funções Prof. Filipe Mutz Colocar mais exemplos de funções simples no começo.
07/06/ João Paulo Pizani Flor ( Síntese comportamental de componentes de um Sistema Operacional em hardware João Paulo Pizani.
Tracking – Acompanhamento de Projetos Ágeis Curso de Verão 2007 – IME/USP Danilo Sato & Mariana Bravo.
Código Limpo Curso de Verão IME/USP Hugo Corbucci.
Programação Extrema e outras práticas para elaboração de software Hugo Corbucci AgilCoop DCC - IME - USP
Modelagem Orientada a Objetos com UML Cursos para a CTI - IME/USP Dairton Bassi, Hugo Corbucci e Mariana Bravo Departamento de Ciência.
Programação em Java Threads Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.
Refatoração: Melhorando a Qualidade de Código Pré-Existente Cursos de Verão 2008 – IME/USP Mariana Bravo & Hugo Corbucci.
Diagrama de Implementação Professor Sandro Carvalho.
PLUGINS PARA TESTES AUTOMATIZADOS DE CONFORMIDADE COM A NORMA ISO/IEC Dionei Herkenhoff Orientador: Paulo Fernando da Silva.
Introdução à Programação eXtrema (XP) Cursos de Verão IME/USP Mariana Bravo e Hugo Corbucci Departamento de Ciência da Computação.
Objetos Dublês AgilCoop – Cursos de Verão 2010 Mariana Bravo IME/USP.
Testes de Unidade Curso de Verão IME/USP Hugo Corbucci
Desenvolvimento Dirigido por Testes (TDD)
Olá sou Willian Marques, natural de Minas Gerais que atualmente mora na cidade São Paulo. Programador.
Tutorial do Meu EBSCOhost
6 – Testes Unitários "Apenas duas coisas são infinitas: o universo e a estupidez humana. E eu não tenho certeza do primeiro.“ - Albert Einstein.
Métodos Formais em Engenharia de Software Utilização da Ferramenta VDMTools Lite João Pascoal Faria
(baseado em slides de ex-alunos)
Introdução OO.
Linguagens de Programação Conceitos e Técnicas
Introdução ao RUP – Rational Unified Process
Processos Desenvolvimento de Software Tradicionais
UML – Modelação da arquitectura
Métodos Formais em Engenharia de Software Utilização da Ferramenta VDMTools Lite João Pascoal Faria
GERAÇÃO DE CÓDIGO PARA A MÁQUINA VIRTUAL DE RÓTULOS
Ferramentas Capture/Replay
TQS - Teste e Qualidade de Software (Software Testing and Quality) Introdução a testes unitários automatizados com JUnit.
Módulo I Capítulo 2: IDE e Variáveis
3.1 Classes e Objetos Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. Por exemplo, um programa de controle de.
Desenvolvimento Dirigido por Testes / Testes a Priori
Estruturas de Repetição
Java: Interfaces Alcides Calsavara.
Estrutura de dados Pilhas e filas
"Apenas duas coisas são infinitas: o universo e a estupidez humana
Introdução à programação orientada por objetos
Access 2010 Microsoft. Access 2010  O Microsoft Access é um Sistema de Gestão de Base de Sados (SGBD) relacional em ambiente gráfico (Windows), que possibilita.
Processos de Design de IHC
Testes e Qualidade de Software
Workshop Agile tdd - Test Driven development
Modelagem de Sistemas I Aula 1 – Introdução à UML
Modelagem Orientada a Objetos com UML
Desenvolvimento de Software de Qualidade através de Testes Automatizados 09/02/2009 Verão h.
Padrões de Testes Automatizados

MAC Tópicos de POO Secret Partner Pattern / Facet
Introdução a Redes v5.1 Capítulo 7: Endereçamento IP.
MARKETING III A5 – PESQUISA DE MERCADO III.
Linguagem de Programação
Instalação e Manutenção de Computadores Técnico em Informática MAI1
Soluções Inteligentes para ONGs Esportivas
Agentes Inteligentes Vicente Vieira Filho
Curso básico de PHP. 1 Vantagens: Gratuito Multiplataforma Estável Rapidez Comunicação.
Sistemas Inteligentes Busca Cega (Exaustiva)
Leonardo M G Gallardo Trilha: Testes
Transcrição da apresentação:

Padrões de Testes Automatizados Curso de Verão IME/USP Hugo Corbucci

Copyleft Agilcoop Introdução

Copyleft Agilcoop Introdução ● Código! De testes automatizados

Copyleft Agilcoop Introdução ● Código! De testes automatizados E o que Métodos Ágeis dizem que deve ser feito com código?

Copyleft Agilcoop Introdução ● Código! De testes automatizados E o que Métodos Ágeis dizem que deve ser feito com código?

Copyleft Agilcoop Introdução ● Código! De testes automatizados E o que Métodos Ágeis dizem que deve ser feito com código?

Copyleft Agilcoop Introdução ● Código! De testes automatizados E o que Métodos Ágeis dizem que deve ser feito com código?

Copyleft Agilcoop Introdução ● O que vale pra código de produção vale pra código de testes automatizados

Copyleft Agilcoop Introdução ● O que vale pra código de produção vale pra código de testes automatizados – Precisa ser mantido

Copyleft Agilcoop Introdução ● O que vale pra código de produção vale pra código de testes automatizados – Precisa ser mantido – Precisa ser refatorado

Copyleft Agilcoop Introdução ● O que vale pra código de produção vale pra código de testes automatizados – Precisa ser mantido – Precisa ser refatorado – Precisa ter um design (ainda que simples)

Copyleft Agilcoop Introdução ● O que vale pra código de produção vale pra código de testes automatizados – Precisa ser mantido – Precisa ser refatorado – Precisa ter um design (ainda que simples) – Precisa ser expressivo

Copyleft Agilcoop Introdução ● O que vale pra código de produção vale pra código de testes automatizados – Precisa ser mantido – Precisa ser refatorado – Precisa ter um design (ainda que simples) – Precisa ser expressivo – Pode ter erros

Copyleft Agilcoop Por que Padrões? “Um padrão de projeto é uma solução conhecida e reutilizável para um problema recorrente em design”

Copyleft Agilcoop Padrões para testes ● Facilitam e otimizam a escrita dos testes

Copyleft Agilcoop Padrões para testes ● Facilitam e otimizam a escrita dos testes ● Direcionam a refatoração do código de teste

Copyleft Agilcoop Anti-Padrão “Um anti-padrão é uma aparente solução a um problema recorrente que introduz outros problemas. Ou seja, um padrão cujo uso não é recomendado.”

Copyleft Agilcoop Cheiros “Sintomas do código fonte que indicam a presença de algum problema.”

Copyleft Agilcoop Cheiros no código

Copyleft Agilcoop Cheiros no código ● Código obscuro

Copyleft Agilcoop Cheiros no código ● Código obscuro ● Lógica de teste condicional

Copyleft Agilcoop Cheiros no código ● Código obscuro ● Lógica de teste condicional ● Duplicação de código de teste

Copyleft Agilcoop Cheiros no código ● Código obscuro ● Lógica de teste condicional ● Duplicação de código de teste ● Produção de Lógica de teste

Copyleft Agilcoop Cheiros no código ● Código obscuro ● Lógica de teste condicional ● Duplicação de código de teste ● Produção de Lógica de teste ● Código difícil de testar

Copyleft Agilcoop Cheiros de comportamento ● Roleta de asserções

Copyleft Agilcoop Cheiros de comportamento ● Roleta de asserções ● Intervenção manual

Copyleft Agilcoop Cheiros de comportamento ● Roleta de asserções ● Intervenção manual ● Testes erráticos

Copyleft Agilcoop Cheiros de comportamento ● Roleta de asserções ● Intervenção manual ● Testes erráticos ● Testes frágeis

Copyleft Agilcoop Cheiros de comportamento ● Roleta de asserções ● Intervenção manual ● Testes erráticos ● Testes frágeis ● Debug frequente

Copyleft Agilcoop Cheiros de comportamento ● Roleta de asserções ● Intervenção manual ● Testes erráticos ● Testes frágeis ● Debug frequente ● Testes lentos

Copyleft Agilcoop Cheiros de projeto ● Testes bugados

Copyleft Agilcoop Cheiros de projeto ● Testes bugados ● Testes não escrito por desenvolvedores

Copyleft Agilcoop Cheiros de projeto ● Testes bugados ● Testes não escrito por desenvolvedores ● Alto custo de manutenção de testes

Copyleft Agilcoop Cheiros de projeto ● Testes bugados ● Testes não escrito por desenvolvedores ● Alto custo de manutenção de testes ● Bugs de produção

Copyleft Agilcoop Sugestões ● Nunca adicionar código de teste ao código de produção – Não usar a lógica dos testes no sistema

Copyleft Agilcoop Sugestões ● Nunca adicionar código de teste ao código de produção – Não usar a lógica dos testes no sistema ● Não incluir código de testes em bibliotecas – Se precisar, crie outra biblioteca pros testes

Copyleft Agilcoop Sugestões ● Nunca adicionar código de teste ao código de produção – Não usar a lógica dos testes no sistema ● Não incluir código de testes em bibliotecas – Se precisar, crie outra biblioteca pros testes ● Padronizar nomes de classes para facilitar a identificação e utilização de scripts – AlgumaClasseTest ou TesteDeAlgumaClasse

Copyleft Agilcoop Padrões de Organização ● Baterias: – Named Test Suite

Copyleft Agilcoop Padrões de Organização ● Baterias: – Named Test Suite ● Classes: – Uma classe de teste por Classe/Funcionalidade/Fixture

Copyleft Agilcoop Padrões de Organização ● Baterias: – Named Test Suite ● Classes: – Uma classe de teste por Classe/Funcionalidade/Fixture ● Métodos: – Testes parametrizados – Superclasse de testes – Classe/Método de ajuda para testes

Copyleft Agilcoop Verificações de Resultados ● Verificação de Estado – Inspecionar o sistema para saber se o estado está correto: assertEquals(estadoEsperado, sistema.getEstado());

Copyleft Agilcoop Verificações de Resultados ● Verificação de Estado ● Verificação de Comportamento – Sem estado. Usa um “espião” ou um “dublê”

Copyleft Agilcoop Verificações de Resultados ● Verificação de Estado ● Verificação de Comportamento – Sem estado. Usa um “espião” ou um “dublê” CUIDADO! Verifique a funcionalidade e NÃO a implementação.

Copyleft Agilcoop Verificações de Resultados ● Verificação de Estado ● Verificação de Comportamento ● Asserção personalizada – Criar seu próprio validador

Copyleft Agilcoop Verificações de Resultados ● Verificação de Estado ● Verificação de Comportamento ● Asserção personalizada ● Asserção de mudanças – Verifico que a mudança que fiz tem o efeito esperado assertEquals(tamanhoAnterior+1, lista.size());

Copyleft Agilcoop Verificações de Resultados ● Verificação de Estado ● Verificação de Comportamento ● Asserção personalizada ● Asserção de mudanças ● Asserção de guarda – Asserções para condições iniciais

Copyleft Agilcoop Verificações de Resultados ● Verificação de Estado ● Verificação de Comportamento ● Asserção personalizada ● Asserção de mudanças ● Asserção de guarda ● Asserção de teste inacabado – Marca de que o teste ainda não terminou – fail(“Teste não ainda não está pronta”)

Copyleft Agilcoop Padrões de Valor ● Valores Literais – Testes NÃO fazem contas. Informação é inserida hard-coded. – Cuidado apenas para não tornar os testes não repetíveis

Copyleft Agilcoop Padrões de Valor ● Valores Literais – Testes NÃO fazem contas. Informação é inserida hard-coded. – Cuidado para não tornar os testes não repetíveis ● Valores Derivados – Implementar um algoritmo que gere o valor esperado se for muito complexo – Cuidado para não ficar com uma cópia do código de produção

Copyleft Agilcoop Padrões de Valor ● Valor Gerado – Gerar valores distintos a cada teste – Útil para testes de Integração – Cuidado para não conseguir mais repetir esse teste caso ele falhe

Copyleft Agilcoop Padrões de Valor ● Valor Gerado – Gerar valores distintos a cada teste – Útil para testes de Integração – Cuidado para não conseguir mais repetir esse teste caso ele falhe ● Objeto Bobo – Só para não atrapalhar

Copyleft Agilcoop SetUp: Zerados ● In-line set up – Set Up é pequeno e muda para cada teste então cada teste tem o seu

Copyleft Agilcoop SetUp: Zerados ● In-line set up – Set Up é pequeno e muda para cada teste então cada teste tem o seu ● Delegated set up – SetUp distintos para cada teste num método auxiliar. Chamada explícita.

Copyleft Agilcoop SetUp: Zerados ● In-line set up – Set Up é pequeno e muda para cada teste então cada teste tem o seu ● Delegated set up – SetUp distintos para cada teste num método auxiliar. Chamada explícita. ● Implicit set up – TestCase por Fixture – Uso de arcabouços (frameworks)

Copyleft Agilcoop SetUp: Compartilhados ● Fixtures pré-montadas ● Set up preguiçoso ● Set up para suite baseada em Fixtures ● Decoradores de Set up

Copyleft Agilcoop Estratégias para tear down ● Tear down para coletar lixo – Delete – frame.cleanUp() – System.gc()

Copyleft Agilcoop Estratégias para tear down ● Tear down para coletar lixo – Delete – frame.cleanUp() – System.gc() ● Tear down automático – Guardo uma lista do que inseri e o tear down se vira pra tirar

Copyleft Agilcoop Organização de tear down ● In-line tear down – Tear down é curto então cada teste cuida do seu – Sempre deve ficar depois das verificações

Copyleft Agilcoop Organização de tear down ● In-line tear down – Tear down é curto então cada teste cuida do seu – Sempre deve ficar depois das verificações ● Tear down implícito – Uso de arcabouços (frameworks)

Copyleft Agilcoop Padrões de arquitetura testável ● Injeção de dependência – Injeta por construtor – Injeta via setter/variáveis públicas

Copyleft Agilcoop Padrões de arquitetura testável ● Injeção de dependência ● Busca de dependências (lookup) – Teste usa um repositório de objeto

Copyleft Agilcoop Padrões de arquitetura testável ● Injeção de dependência ● Busca de Dependências (lookup) ● Humble Object – Existem características que dificultam testar um objeto: quebre-o e teste a parte com lógica

Copyleft Agilcoop Padrões de arquitetura testável ● Injeção de dependência ● Busca de Dependências (lookup) ● Humble Object ● Anti-Padrão: Hook de teste if(TESTANDO) { … } else {... } – Modifica o sistema para funcionar diferente ao executar o teste.

Copyleft Agilcoop Anti-padrões ● Incluir código no sistema para uso exclusivo dos testes // Usado apenas para testes public Sistema() {}

Copyleft Agilcoop Anti-padrões ● Incluir código no sistema para uso exclusivo dos testes ● Torturar o código do teste para encaixar no sistema ao invés de refatorar o sistema para permitir testes

Copyleft Agilcoop Anti-padrões ● Incluir código no sistema para uso exclusivo dos testes ● Torturar o código do teste para encaixar no sistema ao invés de refatorar o sistema para permitir testes ● Testar a implementação, não a funcionalidade

Copyleft Agilcoop Anti-padrões ● Incluir código no sistema para uso exclusivo dos testes ● Torturar o código do teste para encaixar no sistema ao invés de refatorar o sistema para permitir testes ● Testar a implementação, não a funcionalidade ● Qualquer outro anti-padrão de código de produção

Copyleft AgilCoop Perguntas ? Hugo Corbucci