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?
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. Testando 24/7
quem executa os testes é uma máquina
execução de testes disponível a qualquer
momento
monitoramento da aplicação
26. Continuous Integration
automação de todas as etapas de teste é parte
fundamental da integração contínua
NO test automation, NO continuous integration
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
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
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. 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. Page Objects
padrão de projeto
melhor manutenção do código
separa lógica de acesso do fluxo de teste
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
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
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?