Pesquisar este blog

segunda-feira, 4 de abril de 2016

14 Boas Práticas para Sucesso na Automação - Parte 1


Boas Práticas de Testes Automatizados: 

    Vamos falar sobre Boas Práticas sobre Testes Automatizados, esse tópico vai ser dedicado ao pessoal que trabalha com testes de forma ágil, em resposta ao desafio #desafioAgileTesters2016, é sempre bom trabalhar de forma ágil, sem muita Burocracia. 
   

   Eu sempre procuro olhar para o testador como um Étical Hacker (White hat), que sempre esta procurando falhas no Sistema. Um simples testador geralmente só faz Monkey Test ou seja testes manuais, não limite seus conhecimentos simplesmente a testes manuais, uma vez que o sistema está em manutenção e você tem que testar ele novamente, isso já é o indicador que ele precisa ser automatizado, como muita gente sempre procura um motivo pra não fazer, a desculpa é "Eu não tenho tempo pra isso!".

  O meu conselho é já que você não tem tempo muito tempo tire uma a duas horas do seu dia pra trabalhar com testes automatizados, geralmente é o tempo que você gasta no celular, no facebook, ou conversando com as pessoas, que você pode redirecionar esse tempo gasto sem propósito para justificar um aumento. 

  Geralmente o pensamento da gerência é "Pra que vou pagar bem um testador, se ele somente faz Monkey Test?", aí é a hora de mostrar que seu time manja das coisas com testes automatizados, testes de performance/stress, testes de segurança, testes exploratórios inteligentes,  com certeza o time vai ser valorizado.

  Procurar gerenciar melhor suas atividades vai ajudar muito na automação, o bom é dedicar  no mínimo 50% do seu tempo pra Automação. Não confunda Automação de Testes com 100% de bugs encontrados.


   
  
Agora vamos ir direto ao assunto, primeiramente você tem que criar o processo de testes para automação, todos os livros de testes falam que você tem que começar pelo processo, definindo o processo, não sejamos leigos ao dizer que não precisamos de um processo, é claro que ele não precisa ser um processo lento, nem demorado. Você tem que definir um processo ágil, rápido, sem muita burocracia. 

Eu recomendo o uso do SCRUM, devido a filosofia de entregar as coisas que tem a maior prioridade e de maior valor para o negócio do cliente, que encaixa perfeitamente com a automação. Automatizar tudo pode gerar bastante manutenção/retrabalho, automatizar aquilo que tem o maior valor para o cliente é sempre o ideal.

O processo você pode criar um apresentação mostrando o processo de automação, como ele é feito. As pessoas ao seu redor precisam saber o que você esta fazendo e como você esta fazendo as coisas, se possível mostre pro seu gestor mais acima. 

Faça Marketing do time de testes, eu mesmo tenho que melhorar meu Marketing Pessoal, conheço pessoas que são profissionais nisso e sempre se dão bem.





    Acima vemos um processo bem definido de automação, antes de definir um processo, tenha em mente a quantidade de pessoas que você tem para trabalhar no projeto. Eu não entendo a mente de certas pessoas, que define um mundo para fazer, sendo que tem 3 ou 2 pessoas no máximo.

  Em uma empresa grande que trabalha com automação geralmente eles criam seu próprio Framework, se não for o seu caso tire isso, você vai gastar muito tempo tentando criar um Framework, que não pode ser a melhor solução pra você, essa é um dica importante, avalie bem a criação de um Framework, o Framework que estou falando é uma estrutura complexa pra automação seguindo um conjunto de metodologias e ferramentas, faça as coisas simples e bem feito que terão resultado.

   Considerando o cenário que temos poucas pessoas pra trabalhar na automação, o processo abaixo é a melhor escolha.
 

 

Você pode criar uma ferramenta que cria vários gráficos de comparação entre versões, ou seja que auxilie a gerência na tomada de decisão, é claro que isso não é necessário, somente faça se tiver tempo livre, no Jenkins temos o plugin cucumber-reports-plugin ele já dá conta do recado.
Trabalhe com a automação usando o framework BDD, todos conseguem entender o que você esta fazendo e o que você está testando, muita das vezes a falta de valorização do seu trabalho está acontencendo pela falta de visibilidade, o BDD vai ajudar muito a mostrar isso pra empresa em si.




No Python temos o Pytest-html, muito bom!



 A minha segunda boa prática de automação é definir os testes Positivos e Negativos na sua Estratégia para Automação.

A terceira boa prática é apresentar metas a curto prazo e a longo prazo. Na imagem acima definimos os casos de testes a serem entregues a duas ou três semanas, sem nenhum problema, demorar muito para entregar algo, isso gerar desconfiança das pessoas na automação. Sempre queremos entregar algo grande, isso pode ser seu fracasso, apesar de serem poucos testes, 8 no total,  temos 5 browsers padrões, os teus testes tem que rodar nesses cinco browsers com sucesso, multiplicando foram feitos 50 testes, agora temos 3 sistemas operacionais mais usados Linux, Windows, MAC OS, agora temos 8x5x3, ou seja 120 testes executados em questão de minutos. 

Na próxima Sprint adicione mais testes, mas vá devagar se você esta começando agora, não esqueça que a Sprint termina em 3 semanas, com a prática você vai conseguir entregar muito em pouco tempo.







Minha dica é faça o caminho feliz do sistema na primeira entrega, coloque seu esforço nas features mais importantes do sistema. Não gaste muito tempo em features que o cliente dificilmente vai usar. Não faça os testes na sua máquina, monte maquinas virtuais com o ambiente adequado e configurado com os browser e suas versões, você pode dar snapshot  no VMware, ou seja você pode voltar ao inicio dos testes sem alteração do ambiente.



Nossa quarta boa prática na automação, esta na escolha da ferramenta ou Framework certo para automação, sem falar na linguagem de programação que a sua equipe de testes quer trabalhar. Nem todo mundo gosta ou quer trabalhar com Java na Automação, consulte a sua equipe antes de escolher a linguagem para se trabalhar.

Temos as seguintes linguagem mais usadas Java, Python, Ruby, C#JavaScript, PHP, você esta montando uma equipe de automação e ninguém da sua equipe conhece Java/C#, isso pode ser seu fracasso, Java/C# exige um certo tempo para seu aprendizado, lembrando que você tem que aprender a linguagem de programação primeiro (OOP). Caso você quer trabalhar com Java contrate alguém experiente em Java, para passar o conhecimento para o resto da equipe, ou escolha uma linguagem de rápido aprendizado como Python, Ruby, JavaScript.

  Meu conselho sobre as ferramentas ou Frameworks para automação, faça uma pesquisa no mercado, consulte especialistas, veja os pontos negativos de cada ferramenta, sempre procure as ferramentas mais usadas no mercado, siga as tendências do mercado para não ficar para trás.

  No meu ponto de vista as ferramentas livres são as melhores (Selenium WebDriver/Grid, Appium), você encontra bastante material sobre o assunto, em forum o pessoal responde rápido a sua dúvida, você pode modificar ou acrescentar melhorias as ferramentas, ou seja contribuir para comunidade open source

  As ferramentas pagas são uma caixinha fechada, sempre vai precisar do suporte técnico da ferramenta para resolver eventuais problemas. A escolha errada do equipamento ou ferramentas para os testes automatizados pode trazer o fracasso ou lentidão ao seu projeto. 





Fonte: https://saucelabs.com/resources/webinars/test-automation-trends-for-2016-and-beyond


Minha dica é procure sempre dominar as ferramentas que você trabalha isso é essencial para seu crescimento de carreira fora da empresa. Reforce seus conhecimentos com Cursos, Webnar, Palestras, Certificações na área.






Nossa Quinta boa prática é com relação ao ambiente, pense sempre em integração continua nos seus testes automatizados (Jenkins, Hudson), sempre procure trabalhar com o pessoal de desenvolvimento, todo mundo é um time só, se falhar todo mundo falhou, não somente você falhou, mas o projeto como todo, sempre tenha isso em mente. Em várias vezes o time de desenvolvimento me ajudou bastante a resolver problemas na aplicação para melhorar a performance dos testes.

Outra dica é sempre procure ter uma ferramenta para controle de versão, ou seja um repositório para seu código, eu sempre uso o GIT e o Bitbucket, para armazenar, organizar e gerenciar meu código fonte, legal do Bitbucket que tem integração com o Jira. Não caia no erro de deixar o código no seu computador, como você vai justificar um mês de trabalho perdido?




Baixe e Leia o Continuous Testing Whitepaper no link acima, ótimo material para ler.
Tente montar teu ambiente mais parecido com o do usuário final. No Jenkins você pode montar um Matrix de Browser ou trabalhar com Selenium Axis Plugin. Podemos usar o Docker no ambiente para testes, leia a apresentação abaixo:
Using-docker-for-testing





Nossa Sexta boa prática, não somente é aplicada a testes, mas a equipe de desenvolvimento, a programação em par, também aplicada a testes como uma ótima prática. Na automação em par, duas pessoas trabalham juntas, ou seja uma elaborando e a outra no mesmo momento revisando.

Você também pode trabalhar com um revisor, ou seja somente dar o teste como concluído, após feito a revisão por outra pessoa do time, você pode definir as regras para o revisor, ele tem que baixar o código, executar no ambiente dele, revisar, ou ele pode colocar um TO DO uma melhoria que pode ser feita mais a frente.

Aconselho a sempre trabalhar com um revisor, sempre deu muito certo essa boa prática, quando você estar automatizando algo difícil, tente trabalhar em par, vai acrescentar mais qualidade ao projeto. Algo legal de se fazer é usar uma ferramenta de inspeção de código, no Python eu uso o Pylint, isso eu considero como uma boa prática, já vi muitos códigos totalmente fora do padrão da linguagem, difíceis de entender.




Nossa sétima boa prática, procure participar de fórum, grupos, sites, Webnar que falam de automação, geralmente o pessoal tem ideias novas, procure fazer cursos com professores que tenha anos de experiência, para tentar melhorar seus projetos de automação.

Sempre faça os Testes Exploratórios na Aplicação é uma boa prática após a Automação, nos testes exploratórios sempre procurando cenários não mapeados pelos testes automatizados, focando as regras de negócio da Aplicação.




Siga a Qualister (Elias Nogueira), Agiletesters (stefanteixeira), obeythetestinggoat pra quem trabalha com python, Dave Haeffner que é autor do selenium guide book. Siga o site da Sauce Labs eles constantemente fazem diversos Webnar sobre melhores práticas de testes.


Livros bons de lêr:
Selenium Guide Book
Leia o Automated Testing Handbook é pré-requisito para um bom automatizador!


   No site do PacktPub você pode baixar um sample do livro e o código fonte, no site do Selenium Guide Book faça o registro, eles sempre me mandam alguma solução de alguns problemas típicos.

   Vamos finalizar por aqui a primeira parte, na segunda parte vamos falar somente sobre boas práticas de codificação em Selenium WebDriver e outro POST falando do Page Objects um exemplo prático. O desafio do automatizador sempre é escrever testes de fácil manutenção e reutilizáveis, compatíveis com diversas plataformas, e tendo uma excelente performance, para isso você tem que ganhar tempo montando estratégias, escolhendo a ferramenta/framework certo, com pessoas especializadas na área. 

   Geralmente as coisas ficam difíceis quando tem diversas plataformas diferentes, no meu caso na GVT para TV Digital eu  tinha 6 tipos de caixas diferentes e dois portais diferentes, meus scripts tem que rodar em todas essas caixas, e em dois portais diferentes, aí a coisa começa a ficar complexa, neste caso usei classes genéricas para atender várias coisas, as funções estão organizadas por classe, e cada função faz uma coisa única, a configuração dos testes estão bem separados e fácil de mudar, em termos de comparação semelhante ao Page Objects Pattern
   
   Um problema comum no meu caso, o equipamento que o pessoal comprou pegava a imagem com uma qualidade baixa, que dificultava a automação, assim deixando a elaboração mais lenta, com o tempo montei um solução para ele dar zoom no portal, mas para isso tive que pedir ajuda do pessoal de portal para ajudar na resolução do problema. 
   
   Trabalhando em um ambiente ágil aonde as pessoas procuram ajudar umas as outras, os problemas que iram surgir, mas você consegui resolver o problema com o time, implementando novas soluções. Automação hoje em dia você não precisa justificar o custo no meu ponto de vista, já se tornou uma questão de estratégia da empresa para sobrevivência no mercado competitivo, se você não faz a concorrência vai fazer por você, entregando um produto de qualidade mais rápido do que o seu. 

   Um ponto de atenção com relação aos testes manuais, ele é sempre um gráfico com uma linha crescente, a cada release você tem que testar mais coisas, novos testes com a mesma quantidade de pessoas, e a mesma quantidade de tempo, que sempre chega uma hora de estresse. Gastar tempo com automação é um investimento e não uma despesa. O maior fracasso dos projetos de automação é a falta de conhecimento nas metodologias e de programação.
   Faça certo desde o inicio com a metodologia certa e da forma correta, que dar 100% certo.



Referências:

[0] http://www.slideshare.net/AgileDenver/discover-the-power-of-pair-testing
[1] https://cucumber.io/
[2] http://pythonhosted.org/behave/
[3] https://pt.wikipedia.org/wiki/JUnit
[4] http://appium.io/
[5] http://www.qualister.com.br/
[6] https://seleniumguidebook.com/
[7] http://www.obeythetestinggoat.com/
[8] https://jenkins.io/
[9] http://hudson-ci.org/
[10] http://www.slisenko.net/2014/06/22/best-practices-in-test-automation-using-selenium-webdriver/
[11] http://www.softwaretestpro.com/
[12] http://www.qualister.com.br/blog/testes-exploratorios-parte-1-introducao

Um comentário: