This is a little presentation to make absolutely clear why test automation and test driven development are key to any software development process that strives for high quality and high productivity. Brazilian portuguese.
Qualidade de Software - Desenvolvimento dirigido por testes
Desenvolvimento Ágil de Software com Qualidade Intrínseca
1. Processo de
Desenvolvimento Ágil
com Qualidade Intrínseca
Teoria, Práticas e Ferramentas
2. Processo Típico
Desenvolvimento-Teste Segregado
1 mês
Desenvolvimento Testes Desenvolvimento Testes
Bug Bug Bug Bug
Introduzido Detectado Corrigido Verificado
Ágil?
3. Processo “Pull”
Visão
Analista de Clientes e
Suporte Valor
Usuários
Código Funcionalidades
Desenvolvedor Analista
de Negócio
Cenários e
Critérios de Histórias
Aceitação
Analista de
Qualidade
4. Como?
• Competências
– Linguagem de Histórias e Cenários
– Automação de Cenários
– Desenvolvimento de Software
• Práticas
– AATDD – Automated Acceptance Test Driven-Development
– BDD & TDD – Behaviour & Test Driven-Development
• Ferramentas
– RFT
– Selenium
– Watir
– Jemmy
– Cucumber
– Twist
– Junit
– Java
– Ruby
– ...
5. Testes, testes, testes...
Tradicional Intrínseca
Escrevendo Escrevendo
Automatizando Automatizando
Executando Executando
Analisando Analisando
Onde está o trabalho do
analista de qualidade?
6. Meta: eliminar o trabalho de
execução de testes
Teste manual é um imposto caro pago
a cada ciclo de desenvolvimento
7. Qualidade Tradicional x Ágil
Tradicional Intrínseca
• Manual • Automatizada
• Desmotivante • Divertida
• Lenta • Rápida
• Falha • Sistemática, abrangente
• Baixa competência • Alta competência
• Baixo valor agregado • Alto valor agregado
• Reativa • Proativa
• Defensiva • Direcionadora
• Segregada • Integrada
8. Próximo Nível de Qualidade
Qualidade
Intrínseca
(Automatizada)
Desenvolvedor
Automação de Testes
A. de Testes
Linguagem de Cenários
A. de Negócios
Qualidade por
Inspeção
(Manual)
9. 5 razões para amar testes ágeis
1. Sempre existe tempo para testes, pois os
testes são a primeira coisa que é feita
2. Chega de testes manuais
3. Os resultados dos testes aparecem várias
vezes por dia
4. O clima é de “time jogando junto”
5. O testador pode consertar bugs
10. Linguagem de
Histórias e Cenários
http://dannorth.net/whats-in-a-story
13. Linguagem de Histórias
• Para que se possa decidir sobre ações numa
emergência
• Eu, como gerente de recursos materiais,
• Quero consultar que materiais de um
determinado tipo estão disponíveis para
potencial uso na resposta a emergência
15. Linguagem de Cenários
• Dado que ... CONTEXTO / PRÉ-CONDIÇÕES
– E ...
• Quando ... EVENTO / ENTRADA
– E ...
• Então ... EXPECTATIVA / SAÍDA
– E ...
16. Linguagem de Cenários
• Dado que estou acompanhando uma emergência em
andamento na fábrica
• Quando eu entrar no módulo de Consultas
– E clicar em “Recursos Materiais” na árvore de classes
– E buscar por tipo “Barreiras”
• Então eu devo ver uma lista de objetos do tipo “Barreiras”
– E eu devo ver a quantidade disponível de cada recurso para
minha unidade
– E eu devo ver a distância de cada recurso para minha unidade
– E eu devo ver o status de expiração para cada recurso
– E eu devo ver um link “Solicitar” para cada recurso
17. Automação de Cenários
• Dado que estou acompanhando uma emergência em Código
andamento na fábrica executável
• Quando eu entrar no módulo de Consultas Código
– E clicar em “Recursos Materiais” na árvore de classes executável
– E buscar por tipo “Barreiras”
• Então eu devo ver uma lista de objetos do tipo “Barreiras”
– E eu devo ver a quantidade disponível de cada recurso para minha
unidade Código
– E eu devo ver a distância de cada recurso para minha unidade executável
– E eu devo ver o status de expiração para cada recurso
– E eu devo ver um link “Solicitar” para cada recurso
19. Automação de Cenários
com Cucumber
When /clicar em “(.*)” na árvore de classes/ do |classe|
arvore = browser.current_page.arvore_de_classes
arvore.click(classe)
end
Then /eu devo ver uma lista de objetos do tipo “(.*)”/ do |tipo|
pagina = browser.current_page
assert_true(pagina.contains_text?(“Resultado”))
assert_true(pagina.contains_text?(“ encontrados”))
assert_true(pagina.contains_text?(tipo))
end
20. Automação de Cenários
com Cucumber-Java
public class ArvoreSteps {
@When(“clicar em “(.*)” na árvore de classes”)
public void clicarEmClasse(String classe) {
arvore = new ArvoreClasses(browser().getCurrentPage())
arvore.click(classe)
}
}
21. THE END
Moral da história:
“Teste de regressão manual é uma
prática totalmente inviável e inaceitável.”
”Use os testes de aceitação automatizados
para direcionar o desenvolvimento.”