Padrões de Testes Automatizados
Exame de Defesa de Mestrado Paulo Cheque Bernardo
Orientador: Fabio Kon DCC – IME/USP
4 de julho de 2011
2
Objetivos
● Parte I: Introdução e Conceitos
● Introduzir o tema Testes Automatizados
● Discutir questões sobre nomenclatura e definições de termos
● Relacionar Testes Automatizados com Qualidade, Métodos Ágeis e Software Livre
● Discutir boas práticas de automação de testes
3
Objetivos
● Parte II: Práticas Padrões e Técnicas para Teste de Correção
● Integrar conceitos da área de Testes de Software com os dos Métodos Ágeis
● Documentar dicas e boas práticas de automação
● Encontrar e definir Padrões e Antipadrões
4
Objetivos
● Parte III: Gerenciamento de Testes Automatizados
● Discutir o gerenciamento de projetos com testes automatizados
● Métricas
5
Motivação do Trabalho
● Tema relativamente novo
● Pouco estudo nacional
● Poucos livros nacionais
● Pouca documentação de padrões
● Tema de muito interesse por empresas
Motivação
Pesquisa Agilcoop
Motivação
Pesquisa Agilcoop
Motivação
Pesquisa Agilcoop
Motivação
Pesquisa Agilcoop
Parte I
Introdução e Conceitos
11
Introdução
● Comparação com testes manuais
– Discussão para mostrar a importância da automação
● História
– Entendimento da evolução da área
● Recomendações gerais: quem deve
implementar, quando implementar, onde executar, quando executar,
documentação etc
12
Parte II
Práticas Padrões e Técnicas para Teste de Correção
13
Testes de Correção de Qualidade
● Automático
● Repetitível
● Útil
● Único
● Preciso
● Profissional
● Legível e Claro
● Simples
● Independente
● Isolado
● Rápido
14
Indícios de Problemas
15
Testes de Unidade Boas Práticas
● Dicas sobre o código fonte:
– Sem rigores das linguagens de programação
– Arquitetura simples
– Sem variáveis globais mutáveis
– …
● Refatorações
● Orientação a Objetos
– Padrões de projetos
16
Programação Orientada a Aspectos
● Algumas abordagens comuns:
– Aspecto como unidade
– Testes de integração
● Proposta sugerida: Testar como sistema Orientado a Objetos (Util4Selenium)
● Pontos de Junção: Objeto Protótipo (útil também para Reflexão)
● Adendos: Objeto Humilde (Humble Object)
17
Módulos Assíncronos
● Assert Eventually
– Selenium (ajax/ajaj)
– Util4Testing
– Growing Object-Oriented Software:
Guided by Tests
18
Padrões
● Testes de Unidade
– 12 padrões
– 2 antipadrões
● Testes com Persistência de Dados
– 2 padrões
● Testes de Interface de Usuário
– 7 padrões
– 3 antipadrões
19
Objetos Dublês
20
Objetos Dublês
21
Objeto Protótipo
22
Padrões de Qualidade
● Testes por Comparação de Algoritmos
● Teste por Probabilidade (TestNG)
● Python-QAssertions:
– Verificar Inversibilidade
– Verificar Valores Limites
assertValidation: Min, Max, Range...
23
Antipadrões
● Gancho para os Testes (Test Hook)
● Testes Encadeados (Chained Tests)
24
Testes com Persistência de Dados
● Bancos de Dados
– Compartilhados
– Locais
– Em memória
● Dados compartilhados criam dependências entre os testes
25
Dados Estáticos
● Arquivos SQL, YAML, XML etc
26
Geração Dinâmica de Dados
● Django Dynamic Fixture
27
Testes de Interface de Usuário
● Discussão sobre a arquitetura MVC ou semelhante
● Gravadores de Interação
● Desempenho dos testes
28
Camada de Abstração
de Funcionalidades
29
Camada de Abstração
de Funcionalidades
30
Camada de Abstração
de Funcionalidades
31
Técnicas de Desenvolvimento com Testes Automatizados
● Descrição e discussão sobre:
– TFD, TAD, TDD e BDD
● Caracaterísticas de cada técnica
● Quando Utilizar
● Métricas => Testabilidade
Parte III
Gerenciamento de Testes Automatizados
33
Métricas
● Descrição e discussão de algumas métricas relacionadas a testes
automatizados
● Catálogo de métricas:
– Cobertura
– Testabilidade
– Outras
● Como interpretá-las
● Quando utilizá-las
● Dicas gerais: Goal-Question-Metric
34
Objetivo vs Métrica
35
Conclusões
● Automação aumenta a quantidade de
tempo gasto com verificação do sistema e diminui o tempo gasto com depuração e correção de erros
● É fundamental que a qualidade do código dos testes seja a mesma do código de produção
● É importante facilitar a escrita e
manutenção dos cenários de testes
36
Conclusões
● Testes Automatizados influenciam na forma que o sistema é modelado
● É possível criar uma linguagem comum entre a teoria de Testes de Software e Metodologias Ágeis através de padrões
● É possível integrar técnicas de Testes de Software em ferramentas e aplicar junto com TDD
37
Trabalhos Futuros
● Continuar o desenvolvimento de novas ferramentas que simplifiquem a
automação de testes
● Continuar a documentar padrões
● Encontrar padrões em testes de padrões de projeto e arquiteturais
● Padrões de testes para Programação Funcional
● Padrões de testes em Web Services