Por que automatizar
testes de software?
Samuel Lourenço
Bacharel em Ciência da Computação
Universidade Estadual de Londrina (UEL)
Analista de Automação de Teste d...
Mas como assim?
automação de testes de software?
é uma ideia muito antiga...
...
1980
1980
já se fazia automação de testes unitários
1990
ferramentas de gravação / reprodução
1990
testes de regressão se tornam populares
1995
Test Driven Development
Automação!
1995
testes exploratórios
testes de performance
testes para aplicações web
2000
Agile Manifesto & Continuous Integration
2005
Selenium WebDriver
Test Code Browser
Mas como é na prática?
1- programador implementa a funcionalidade
Mas como é na prática?
2- programador escreve os testes unitários
Mas como é na prática?
3- tester começa a testar a funcionalidade e...
Mas como é na prática?
4- testa MANUALMENTE!
Mudando a pergunta...
Por que, então, NÃO automatizar estes testes
de software?
Respondendo...
Quais são valores agregados?
Regressão
regressão é uma nova falha introduzida em
uma funcionalidade (que já foi testada e
aprovada) por uma modificação
Regressão
com uma suite de testes automatizados é
muito mais fácil e rápido detectar regressões
Confiabilidade
cobertura de testes em todo o sistema
não só na funcionalidade atual
“não quebramos nada que já estava
func...
Menor envolvimento humano
humanos não são bons em tarefas repetitivas
humanos não executam a mesma tarefa
igualmente todas...
Menor envolvimento humano
stress e cansaço mascaram falhas
com automação o teste é executado
igualmente todas as vezes
Evolução da equipe de testes
testers dedicam mais tempo para
elaborar casos de teste melhores
testers gastam menos tempo
e...
Testando 24/7
quem executa os testes é uma máquina
execução de testes disponível a qualquer
momento
monitoramento da aplic...
Continuous Integration
automação de todas as etapas de teste é parte
fundamental da integração contínua
NO test automation...
Verdades e Mitos!
#1
“é só colocar um dev pra programar uns testes aí”
Precisa de treinamento!
treinamento da equipe de testes
desenvolver habilidades de dev e de tester
automação não é um proc...
#2
“nunca mais vamos executar testes manuais!”
Ambos vão existir
testes automatizados
não substituem
testes manuais
abordagens diferentes que se reforçam
#3
“esses testes aí são quebradiços!”
Lado ruim
falsos positivos
mas há como mitigar utilizando boas práticas
Lado bom
qualquer mínimo desvio da especificação fica
claramente evidente
#4
“dá pra automatizar tudo, TUDO!”
Testabilidade
capacidade de uma aplicação ser testada
capacidade dos testes serem automatizados
maneiras de coletar evidên...
Precisa automatizar tudo?
foco nas funcionalidades mais críticas
automação
desnecessária
#5
“mas eu virei tester porque não gosto de
programar e agora vou ter que aprender...”
Mas calma!
é divertido!
é um desafio para sempre estarmos
aprendendo e melhorando
Ferramentas
Framework BDD
Selenium Webdriver
Page Objects
Continuous Integration Server
Framework BDD
Behavior Driven Development
linguagem comum de especificação de
funcionalidades
documentação executável
Framework BDD
RSpec (ruby)
Cucumber (ruby, Gherkin)
Jasmine (javascript)
Behat (php)
Framework BDD
Cucumber (Gherkin)
Funcionalidade: Cálculo do valor do IR
Para quanto vou pagar de imposto
Enquanto contribu...
Selenium WebDriver
encontra elementos na página e executa ações
testes web em todos os navegadores
testes mobile (android,...
Page Objects
padrão de projeto
melhor manutenção do código
separa lógica de acesso do fluxo de teste
Page Objects
uma página = uma classe
class LoginPage
text_field :email_login, id: 'email'
text_field :senha_login, id: 'pa...
Continuous Integration Server
Jenkins
Hudson
TravisCI
Concluindo...
automação não é a solução mágica para todos
os problemas de qualidade, mas vale a pena
foco na evolução do p...
github.com/samuel-hcl
samuel.hcl@gmail.com
slourenco@tray.com.br
linkedin.com/in/samuellourenco
fb.com/sammm_hcl
Obrigado!
Por que automatizar testes de software?
Próximos SlideShares
Carregando em…5
×

Por que automatizar testes de software?

438 visualizações

Publicada em

Apresentação realizada na VIII Semana de Tecnologia da Informação, na UNIVEM, Marília - 09/09/2015

no gif support, so sad... =(

Publicada em: Software
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
438
No SlideShare
0
A partir de incorporações
0
Número de incorporações
4
Ações
Compartilhamentos
0
Downloads
4
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • saudações
    assunto evidente
    é falado em todo evento de TI
    ainda é uma área que está engatinhando
  • apresentação
    tcc e estágio em testes e automação
    dev há 5 anos
    1 ano e meio de tray
    entrei pq me encaixava no perfil desenvolvedor/testador
    me tornei líder técnico no projeto de automação de testes
    provas de conceito, teste de ferramentas
    dev de casos de teste e ferramentas, treinamento da equipe
    essa palestra conta um pouco do que aprendemos
  • aí vcs me perguntam “como assim…”
    “de que tipo de testes vc tá falando?”
    “a gente já faz TDD, já automatiza testes unit”
    “eu faço casos de teste no excel ainda”
    é uma ideia antiga...
  • vamos voltar no tempo pra ver de onde vem essa ideia
  • o modelo V é apresentado pela primeira vez
    divide os testes em etapas
    usado até hoje com variações
  • já se automatizava testes unitários
    já se escrevia trechos de código para testar outros trechos de código
  • ferramentas que automatizavam testes de interface de usuario
    mas de uma maneira ainda superficial
  • por causa disso se popularizam os testes de regressão
    regressão é uma falha que aparece depois de uma modificação
    ela aparece em outra parte do sistema que já estava testada
  • no TDD é essencial ter uma ferramenta de automação
    feedback precisa ser rápido
  • estes testes se popularizam
    internet se populariza
    aplicações web ficam mais complexas
  • integração continua é você estar entregando o sistema varias vezes ao dia em pequenas partes.
    você resolve uma falha ou adiciona uma funcionalidade e ela ja é testada e entregue
    entrega várias vezes ao dia
    automação não só dos testes mas como do processo todo contribui muito pra isso
  • ferramenta mais utilizada na automação de testes
    automatiza os navegadores
    simulando um usuário humano real como se ele tivesse sentado em frente ao computador
    ações na aplicação são executadas a partir de scripts de teste
    possível automatizar testes funcionais e de aceitação em qualquer aplicação web

    porque eu to falando isso?
    porque apesar de ser uma ideia antiga, na prática é diferente
    como é na prática?
  • 1- dev faz toda a análise e implementa a funcionalidade
  • 2- ele escreve os testes unitários e ainda fala que faz TDD, mas pelo menos tem teste unitário.
  • 3- dev avisa o tester que ele já terminou de implementar
    tester começa a testar a funcionalidade e...
  • 4- testa manualmente
    abre o navegador
    preenche formulario
    verifica mensagem
    faz login
    clica no botão
  • aí eu mudo a pergunta…

    alguns dizem que é complicado, trabalhoso, o código da automação é difícil de manter e desiste
    sendo que esses são os mesmos desafios de qualquer projeto de desenvolvimento de software

    automação traz benefícios e agrega valor e qualidade ao produto.
  • então, quais são esses valores?
    quais são os benefícios que eu vou ter ao automatizar os testes?
  • 1- melhora na detecção de regressões

    (falar o que é regressão)

    (falar da API do commerce)
  • Portanto...
  • Isso aumenta a confiabilidade da equipe no produto que ela desenvolve

    testes automatizados cobrem todo o sistema
    quando o teste é executado ele testa todo o sistema e não só a funcionalidade que está sendo desenvolvida atualmente
    assim a equipe tem a certeza de que não quebrou nada que já estava funcionando
  • menor envolvimento humano em tarefas repetitivas
    humanos não são bons em tarefas repetitivas
    humanos não executam a mesma tarefa igualmente todas as vezes
    e execução de testes é uma tarefa repetitiva que tem que ser executada igualmente todas as vezes
  • cansaço, stress e outras condições mentais e físicas podem mascarar falhas
    (falar do funcionário que quer ir embora logo na sexta-feira)
    um teste automatizado executa igualmente todas as vezes
    não existem julgamentos errados
    falhou é falha
    passou é sucesso
    nada além disso
  • evolução intelectual da equipe de testes
    testers vão gastar mais tempo elaborando casos de teste melhores e desenvolvendo técnicas e estratégias de teste
    testers vão gastar menos tempo nas tarefas repetitivas de execução de casos de teste
    testers vão ter a oportunidade de aprender a programar, desenvolver, aprender a ler código, aprender as lógicas internas do sistema
  • execução de testes disponível a qualquer hora
    quem executa os testes é uma máquina
    agendar de madrugada, domingo, feriado, qualquer horário
    testes funcionam como monitoramento do sistema
    (testes de performance na tray)
    (testes do fluxo de compra na tray)
  • por fim, o desejo de todo time de desenvolvimento: integração contínua
    automação das etapas de teste é fundamental para se implantar a integração contínua
    sem automação de testes não existe integração contínua
  • nesse 1 ano e meio ganhamos experiência ao automatizar testes
    acertamos em algumas coisas, estamos melhorando em outras
    tambem ouvimos muitas ideias diferentes sobre automação
    algumas são verdade, outras não são

    nessa parte eu vou mostrar pra vcs verdades e mitos sobre a automação
  • primeira ideia
    dar uma caneta pra quem responder se é mito ou verdade essa afirmação
  • equipe de testes que vai começar a fazer automação precisa de treinamento

    automatizador de testes tem o perfil de um desenvolvedor com habilidades de testador
    ele sabe planejar o desenvolvimento, fazer análise de requisitos, programar
    também tem conhecimento das técnicas de teste, das estratégias de teste de software

    a automação é um projeto de desenvolvimento completo, não é só aquela parte de um projeto onde são executados os testes

    tem que planejar o que vai ser desenvolvido, tem que ter versionamento de código
    tem que ter alguma forma de rastrear os defeitos do código de testes como um projeto normal
  • segunda ideia
    dar uma caneta pra quem responder se é mito ou verdade essa afirmação
  • automatizados não substituem manuais
    abordagens de testes diferentes que se reforçam mutuamente

    Um teste exploratório não é um candidato a automação
    no teste exploratório o testador experimenta novos caminhos no sistema, novas situações e pode descobrir novas condições que levam a novas falhas

    um teste automatizado é aquele que sempre testa a mesma coisa, é um caso de teste que já está mto bem definido
  • terceira ideia
    dar uma caneta pra quem responder se é mito ou verdade essa afirmação

    testes quebradiços, falham toda hora, tão sempre vermelhos

    é verdade. mas calma!

    tem um lado ruim e um lado bom
  • lado ruim
    falsos positivos
    uma falha que não é de fato uma falha

    facilmente mitigado seguindo boas práticas
    maturidade do projeto leva a identificação de falsos positivos e a melhoria dos casos de teste para eliminá-los
  • lado bom

    pela assertividade precisa do teste automatizado, qualquer mínimo desvio do que você especificou como resultado esperado fica claramente evidente
  • quarta ideia
    dar uma caneta pra quem responder se é mito ou verdade essa afirmação

    aqui tem duas questões
  • 1- testabilidade

    capacidade de uma aplicação ser testada
    e eu vou mais longe ainda, é a capacidade dos casos de teste daquela aplicação serem automatizados

    pra automatizar os testes, o sistema tem que prover maneiras de coletar evidências internas das ações que você tá executando com os testes

    se o seu sistema tá um caos, ou seu processo de desenvolvimento e teste tá um caos,
    ou seus casos de teste tão um caos,

    tem que fazer uma faxina primeiro, pq não é possível automatizar o caos.
  • 2- precisa automatizar tudo?

    tem coisa que não precisa
    a não ser que você tenha dinheiro e tempo infinitos, aí você automatiza tudo

    quando você não tem dinheiro e tempo infinitos
    o ideal é focar nas funcionalidades mais críticas
    a primeira coisa a ser automatizada são os testes daquela funcionalidade do seu sistema que faz você ganhar dinheiro
    e depois as outras funcionalidades menos críticas.
  • quinta ideia
    dar uma caneta pra quem responder se é mito ou verdade essa afirmação

    é verdade. mas calma!
  • automatizar testes é divertido!

    é um desafio que mantém a gente querendo aprender coisas novas e querendo sempre estar melhorando e evoluindo

    cada tester tem um perfil
    um tester não tem o perfil de desenvolvedor, mas ele tem um profundo conhecimento da aplicação a ser testada
    outro tester pode ser um excelente automatizador, mas ter só um conhecimento superficial da aplicação
    colocar os dois pra trabalharem juntos

    então tem espaço pra todo mundo!
  • pra quem tem interesse em conhecer mais dessa área
    falar das ferramentas

    essas quatro são essenciais (explicar)
  • BDD vem de behavior driven development ou desenvolvimento guiado por comportamento

    especificação do comportamento da sua funcionalidade
    utilizando uma linguagem que é comum entre todos os envolvidos (dev, teste, pessoal que não é desenvolvedor como o cliente)
    isso se torna uma especificação executável
    vc diz como seu sistema deve se comportar e depois executa essa especificação como forma de verificar e testar o sistema
  • alguns exemplos
    praticamente toda linguagem já tem o seu framework BDD
  • alguns exemplos de como é um caso de teste especificado nessas linguagens

    um exemplo do cucumber
    dar uma caneta pra quem dizer o que está sendo testado

    outro exemplo do rspec
    dar uma caneta pra quem dizer o que está sendo testado
  • ferramenta mais utilizada para testes de aplicações web
    ele encontra elementos da interface do usuario e executa ações nesses elementos

    com ele podemos rodar testes em todos os navegadores
    testes mobile em android, iOS e windows phone

    e ele é uma biblioteca disponível em várias linguagens ruby, python, php, c++, etc
  • padrão de projeto que foi desenvolvido junto com o selenium

    utilizando um padrão de projeto a gente melhora muito a manutenção do código do projeto

    e ele separa a lógica de acesso às funcionalidade da aplicação do fluxo de teste onde ficam os passos das ações a serem executadas
  • cada página da aplicação é representada como uma classe no projeto
    em cada classe a gente define os elementos da página e as funcionalidades que aquela pagina provê

    isso melhora muito a manutenção do codigo porque a gente tem um mapeamento de todas as paginas da aplicação no nosso codigo de testes
    se os devs mudarem uma pagina da aplicação eu já sei exatamente onde mudar no codigo de teste

    explicar exemplo
  • por fim

    servidor de integração contínua
    ele é quem constrói o ambiente para a sua aplicação e executa os testes
    pode ser uma execução agendada ou disparada por modificações no código

    exemplos
  • pra concluir
    a automação não é uma solução mágica pra todos os problemas de qualidade.
    o caminho até a maturidade na automação pode ser longo e demorado.
    mas os beneficios valem a pena

    o importante é sempre manter o foco na evolução do processo de testes que assim a necessidade de automação vem naturalmente
  • obrigado!
    agradecer tray
    agradecer univem
    agradecer platéia

    falar que a tray está contratando
    falar do tray labs

    perguntas?
  • video da execução dos testes automatizados
  • Por que automatizar testes de software?

    1. 1. Por que automatizar testes de software?
    2. 2. Samuel Lourenço Bacharel em Ciência da Computação Universidade Estadual de Londrina (UEL) Analista de Automação de Teste de Software github.com/samuel-hcl samuel.hcl@gmail.com slourenco@tray.com.br linkedin.com/in/samuellourenco fb.com/sammm_hcl Quem sou eu?
    3. 3. Mas como assim? automação de testes de software? é uma ideia muito antiga...
    4. 4. ...
    5. 5. 1980
    6. 6. 1980 já se fazia automação de testes unitários
    7. 7. 1990 ferramentas de gravação / reprodução
    8. 8. 1990 testes de regressão se tornam populares
    9. 9. 1995 Test Driven Development Automação!
    10. 10. 1995 testes exploratórios testes de performance testes para aplicações web
    11. 11. 2000 Agile Manifesto & Continuous Integration
    12. 12. 2005 Selenium WebDriver Test Code Browser
    13. 13. Mas como é na prática? 1- programador implementa a funcionalidade
    14. 14. Mas como é na prática? 2- programador escreve os testes unitários
    15. 15. Mas como é na prática? 3- tester começa a testar a funcionalidade e...
    16. 16. Mas como é na prática? 4- testa MANUALMENTE!
    17. 17. Mudando a pergunta... Por que, então, NÃO automatizar estes testes de software?
    18. 18. Respondendo... Quais são valores agregados?
    19. 19. Regressão regressão é uma nova falha introduzida em uma funcionalidade (que já foi testada e aprovada) por uma modificação
    20. 20. Regressão com uma suite de testes automatizados é muito mais fácil e rápido detectar regressões
    21. 21. Confiabilidade cobertura de testes em todo o sistema não só na funcionalidade atual “não quebramos nada que já estava funcionando”
    22. 22. Menor envolvimento humano humanos não são bons em tarefas repetitivas humanos não executam a mesma tarefa igualmente todas as vezes
    23. 23. Menor envolvimento humano stress e cansaço mascaram falhas com automação o teste é executado igualmente todas as vezes
    24. 24. Evolução da equipe de testes testers dedicam mais tempo para elaborar casos de teste melhores testers gastam menos tempo executando testes aprendem lógica de programação, ler código, lógicas internas do sistema
    25. 25. Testando 24/7 quem executa os testes é uma máquina execução de testes disponível a qualquer momento monitoramento da aplicação
    26. 26. Continuous Integration automação de todas as etapas de teste é parte fundamental da integração contínua NO test automation, NO continuous integration
    27. 27. Verdades e Mitos!
    28. 28. #1 “é só colocar um dev pra programar uns testes aí”
    29. 29. Precisa de treinamento! treinamento da equipe de testes desenvolver habilidades de dev e de tester automação não é um processo de testes automação é um projeto de desenvolvimento
    30. 30. #2 “nunca mais vamos executar testes manuais!”
    31. 31. Ambos vão existir testes automatizados não substituem testes manuais abordagens diferentes que se reforçam
    32. 32. #3 “esses testes aí são quebradiços!”
    33. 33. Lado ruim falsos positivos mas há como mitigar utilizando boas práticas
    34. 34. Lado bom qualquer mínimo desvio da especificação fica claramente evidente
    35. 35. #4 “dá pra automatizar tudo, TUDO!”
    36. 36. Testabilidade capacidade de uma aplicação ser testada capacidade dos testes serem automatizados maneiras de coletar evidências internas não é possível automatizar o caos
    37. 37. Precisa automatizar tudo? foco nas funcionalidades mais críticas automação desnecessária
    38. 38. #5 “mas eu virei tester porque não gosto de programar e agora vou ter que aprender...”
    39. 39. Mas calma! é divertido! é um desafio para sempre estarmos aprendendo e melhorando
    40. 40. Ferramentas Framework BDD Selenium Webdriver Page Objects Continuous Integration Server
    41. 41. Framework BDD Behavior Driven Development linguagem comum de especificação de funcionalidades documentação executável
    42. 42. Framework BDD RSpec (ruby) Cucumber (ruby, Gherkin) Jasmine (javascript) Behat (php)
    43. 43. Framework BDD Cucumber (Gherkin) Funcionalidade: Cálculo do valor do IR Para quanto vou pagar de imposto Enquanto contribuinte Eu gostaria de calcular o IR Cenário: Salário de 100 reais fica isento Dado que estou na página IR E preencho o campo 'salario' com o valor 100.00 Quando clico em Calcular Então vejo 'O resultado é 0.00' RSpec describe Calculator do it 'adds two numbers' do result = Calculator.add 1, 2 expect(result).to equal 3 end it 'multiplies two numbers' do result = Calculator.multiply 2, 3 expect(result).to equal 6 end end
    44. 44. Selenium WebDriver encontra elementos na página e executa ações testes web em todos os navegadores testes mobile (android, iOS, windows phone) disponível na linguagem de sua preferência
    45. 45. Page Objects padrão de projeto melhor manutenção do código separa lógica de acesso do fluxo de teste
    46. 46. Page Objects uma página = uma classe class LoginPage text_field :email_login, id: 'email' text_field :senha_login, id: 'password' button :clicar_botao_login, id: 'login' def efetuar_login(email, senha) self.email_login = email self.senha_login = senha clicar_botao_login end end
    47. 47. Continuous Integration Server Jenkins Hudson TravisCI
    48. 48. Concluindo... automação não é a solução mágica para todos os problemas de qualidade, mas vale a pena foco na evolução do processo de teste faz com que a automação venha naturalmente
    49. 49. github.com/samuel-hcl samuel.hcl@gmail.com slourenco@tray.com.br linkedin.com/in/samuellourenco fb.com/sammm_hcl Obrigado!

    ×