segunda-feira, 13 de maio de 2013

O papel do testador em uma equipe agil

Atualizado em 21/08/2013!

Olá pessoal!
Dia 11 de Maio de 2013, na Unicamp, eu apresentei no DevCamp uma palestra sobre "O papel do testador em uma equipe ágil.

Vídeo

No site da Infoq BR é possível ver o vídeo da apresentação pelo link abaixo. Também é possível fazer o download do áudio da palestra em .mp3
http://www.infoq.com/br/presentations/testador-equipe-agil

Apresentação!





Abaixo segue um resumo do que comentei.

Hoje muitas empresas falam, quando sobre desenvolvimento ágil, muito de Scrum (e isso é bom ou ruim). Em teste de software temos um grand problema: além dos testadores não serem técnicos (muitos poucos são), eles querem aplicar em um contexto ágil (ou quase), as técnicas utilizadas em um modelo burocrátivo/engessado sempre pensando a fase de criação e, posteriormente, execução é um sprint separado do de desenvolvimento (não colaboram).






Testadores também não gostam de programar. Muitos foram para a área de teste por esse "benefício". Muitos são programadores que não deram certo ou pessoas querendo uma porta de entrada em TI ou para algum outro cargo, como um Analista de Requisitos/Negócio. Estou falando alguma mentira?

Emfim, em um mundo não tão distante o testador quer continuar acomodado e ainda discute itens básicos e, as vezes, nem condizentes como onde ele pode obter simulados da certificação XYZ ou como escrever um caso de teste.





Neste momento começamos a discutir sobre Agile Testing, que vale muito a pena salientar que Agile Testing é nada mais que seguir as práticas ágeis em primeiro lugar. Claro que existem técnicas, algumas já amplamente usadas, e outras novas, mas em um primeiro momento Agile Testing é uma prática que segue a "linha" ágil. Sempre falo que, para aprender Agile Testing, é necessário primeiro o testador dar um passo para trás e aprender o que é realmente ágil e nem ler sobre Scrum.








Em seguida comento algo que, em algumas empresas é sempre nítido, mas em outras nem acontece: O testador tem que interagir com todos! Desenvolvedor, cliente e analistas entendendo a visão do cliente (onde ele quer chegar) e a complexidade de viabilizar essa visão (como ajudar ela a chegar no objetivo).
O testador tem que estar inserido junto ao time e deve ajudar o cliente a entender onde ele precisa chegar, através de perguntas e transformando o entendimento em algo que possa ser entendido e testável por todos.







E o que o testador fará enquanto os desenvolvedores estão criando código?
Várias coisas! Entre elas, pairing, ajudando os desenvolvedores nos testes unitários (a ter mais testes/cenários) e principalmente automatizam (existem muitas outras coisas que o testador pode fazer)! Sim, automatizam sem ter uma interface gráfica. E isso é possível adotando práticas como BDD e ATDD para que tenhamos boa parte dos testes já automatizados.
E, obviamente, um testador ágil tem que conhecer sobre o Quadrante Ágil (ou quadrantes de Bryan Merick). É essencial que ele conheça os quatro quadrantes e  as atividades recomendadas em cada quadrante.






Para entender quando podemos automatizar, é interessante falar sobre a Pirâmide de Automação de Testes, onde a base da pirâmide (e o mais barato) são os testes unitários. Claro que não iremos desenvolver os testes unitários (mas se soubermos, nada contra), mas apoiaremos os desenvolvedores a criar uma gama de testes unitários que façam sentido para o negócio (e aqui aquele testador que adora testar limites, pode fazer aqui, e não na interface gráfica...)





Após seguimos pelos serviços, onde ainda sem interface gráfica conseguiremos testar a integração do sistema e, através de Fixtures ou BDD, viabilizar estes testes.
Por último, na automação, temos a interface gráfica. Esta mais cara e demorada. Mas é um ponto os testadores tradicionais começam por conhecerem ferramentas de automação e entenderem que é importante testar o que o usuário irá utilizar.

Mas não podemos somente falar em automação... em ágil também fazemos testes manuais, mas estes devem ser mais "inteligentes". Essa inteligência pode ser a utilização de uma técnica chamada SBT - Session Based Testing, por exemplo.





E como ficam os defeitos? Reportamos em uma ferramenta de bugtracker, faremos uma parada para todos os devs corrigirem defetos?
A resposta sempre é depende!
Mas vamos pensar em algo lógico: estamos trabalhando (falando) de agilidade, certo? O que é mais ágil: reportar um defeito em um ferramenta ou parar ao lado do desenvolvedor, mostrar o bugs e ajudá-lo a criar um teste automatizado para que aquilo não ocorra?

No final existe uma série de fatores de sucesso, mas o principal, sempre é COLABORACÃO!!!





quarta-feira, 10 de abril de 2013

Treinamento Selenium 01 e 02 de Junho

No mês de Junho: Automação de Testes Funcionais com Selenium à distância.

Data
01 e 02 de Junho

Horário
Dia 01, sábado - 09:00 às 18:00
Dia 02, domingo – 09:00 às 18:00

Investimento
550,00 para pagamentos até data 10 de Maio
650,00 após esta data
Forma de pagamento: cartão de crédito em até 12x, boleto ou transferência bancária

Local
Treinamento a distância. Será realizado no seu computador via Internet utilizando ferramenta de web-conferência. 

Infra-Estrutura
Sistema Operacional: Windows ou MacOS (O GotoMeetting não suporta Linux)
Plugin para acesso ao GoToMeeting através do navegador (no dia do treinamento o participante receberá um link para acesso a sala de conferência)

Instrutor
Elias Nogueira
Possui MBA em Teste de Software e a certificação internacional de teste de software CSTE - Certified Software Tester, oferecida pela QAI Brasil. Atualmente é arquiteto de testes na InMetrics, consultor de automação de testes e instrutor pela Qualister e pela Iterasys. Trabalhou em projetos de engenharia de teste de qualidade de dados (Data Mining, Data Cleasing, Data Profiling, Noisy text analysis) e Georeferenciamento (Marketing de Precisão) e atualmente trabalha em projetos de automação de teste de software na InMetrics em diversos segmentos (bancário, varejo e cartões). Tem grande foco e conhecimento em ferramentas open source de automação de teste. É colaborador freqüente das listas de discussões sobre Teste de Software e posta suas experiências e dicas no blog Sem Bugs (http://sembugs.blogspot.com).

Carga Horária
16 horas

Inclui
Certificado em formato digital e acesso ao material em formato digital

Tópicos Abordados
Selenium IDE
   - Record and Play
   - JavaScript
   - Alertas e Confirmações
   - Popup’s
   - Elementos HTML
   - Expressões Regulares
   - Ajax Loading
   - Ajax AutoComplete
   - Ajax Carrinho de Compras
   - Combo Cidade/Estado

Selenium RC
   - Executando scripts criados no Selenium IDE em diversos browsers com Selenium RC

WebDriver
   - Interagindo com elemento HTML com Webdriver
   - Esperas por requisições assíncronas (Ajax)
   - Webdriver + JUnit
   - Data Driven com Webdriver
   - Automatizando para diversos browsers usando o Webdriver
Informações
48 3285-5615

quinta-feira, 28 de fevereiro de 2013

Imagens de Windows x IE gratuitas (ótimo para testar sites no IE)

Você sabia que pode utilizar uma ferramenta gratuita da Microsoft para testar sua aplicação web em diferentes browsers e versões do Windows?

Existem uma pagina de downloas chamada Internet Explorer Application Compatibility VPC Image que lista uma seria de maquinas virtuais com a configuração de browser x sistema operacional, onde voce pode encontrar a seguinte combinação:
  • Windows XP + IE 6
  • Windows Vista + IE 7
  • Windows 7 + IE 8
  • Windows 7 + IE 9
Cada arquivo que você baixar (no formato .exe) irá pedir uma pasta para descompactação do arquivo .vhd (imagem do Virtual PC), onde basta você abrir o Virtual PC e selecionar o arquivo .vhd descompactado.
Mas atenção: leia o arquivo .txt contido na extração, pois o mesmo possui as senhas de acesso para a VM.

Com essas imagens você consegue criar um ecossistema de VMs com as principais versões do Internet Explorer que ainda são utilizadas em mercado.

Observação: para instalar o Virtual PC, caso você não tenha, e necessário ter um Windows original, pois o mesmo passa pelo processo de verificação do Windows ;-)

[1] Virtual PC: http://www.microsoft.com/windows/virtual-pc/
[2] Internet Explorer Application Compatibility VPC Image: http://www.microsoft.com/en-us/download/details.aspx?id=11575

segunda-feira, 25 de fevereiro de 2013

Como aprender sobre Selenium (de forma gratuita ou paga)

Olá pessoal!
Recebo quase todos os dias e-mails de profissionais da área perguntando como eles podem aprender sobre Selenium e onde podem encontrar materiais.

Este post se destina a isso: como aprender Selenium de uma forma "gratuita" ou não!
Quando eu falo Selenium, na verdade estou falando de WebDriver (apesar de existirem pessoas que querem aprender sobre o Selenium IDE e vou citar isso, o foco maior é em WebDriver)

Aprendendo Selenium de forma gratuita
Atualmente, até onde eu sei, não existe nenhum treinamento gratuito sobre Selenium.
O aprendizado gratuito pode se dar através de:
  • Leitura da documentação
  • Leitura e entendimento da API
  • Prática
  • Apresentações
  • Desafios Selenium

Leitura da documentação
Existem duas documentações padrão do Selenium:
  • Através do site http://seleniumhq.org: neste site você pode acessar a 'aba' Documentation e ler realmente a documentação. Há muita coisa boa lá e realmente te dá uma boa base inicial


O ideal é você ler todos os documentos contidos no Wiki, mas estes itens acima já irão lhe dar um overview sobre o WebDriver


Leitura e entendimento da API
Com o WebDriver é inevitável: temos que programar/desenvolver nossos testes utilizando alguma linguagem de programação!
Logo é um pré-requisito que você conheça, pelo menos, o básico da liguagem de programação de sua escolha e que também saiba como ler a API (documentação das ferramentas/plugins/frameoworks) implementados em uma determinada linguagem.

Podemos visualizar abaixo a lista das linguagens de programação formalmente suportadas com WebDriver e o link de cada API (documentação):

Prática!
Para aprendermos qualquer ferramenta não tem jeito: temos que praticar!
Logo a prática é um elemento fundamental do nosso aprendizado.
Você pode praticar em diversos sites web, mas aqui vai minha recomendação:
  • Começe a praticar em sites/aplicações simples
  • NUNCA tente praticar automatizando o login do Gmail, Yahoo! e outros...
  • Utilizar CMS ou lojas virtuais open source para praticar é uam boa. Você pode praticar num Joomla, Prestashop, por exemplo

Apresentações
Sempre é bom dar uma "Googleada" para encontrar apresentações ou links.
Eu recomendo dar uma olhada no SlideShare, site que contém uma gama de apresentações publicadas e diversas sobre Selenium.

Desafios Selenium
Foi uma iniciativa que eu criei em 2011 lançando um problema real, onde o mesmo deve ser automatizado com Selenium IDE.
Os desafios possuem a resolução explicada em vídeo, o que facilita o entendimento.
Por enquanto eu tenho somente 5 desafios e todos com respostas para o Selenium IDE, porém logo em breve voltarei a postar mais desafios em ambos os formatos: Selenium IDE e WebDriver!


Aprendendo Selenium de forma paga
Obviamente sempre temos alternativas pagas! Geralmente esta alternativa foca mais no que cada um precisa aprender e dependendo da forma que você escolher, um curso por exemplo, você conseguirá (ou não, pois depende de você) tirar um maior proveito e resolver problemas e dúvidas que você possa ter. O aprendizado pago pode ser:
  • Através de Cursos
  • Através de Livros

Atavés de Cursos
Existem dois treinamentos sobre WebDriver (um que cobre Selenium IDE que eu conheço), que serão listados abaixo:

Treinamento de Selenium (IDE, RC, WebDriver) do Elias Nogueira (eu)
Há algum tempo eu dou treinamento sobre Selenium.
Os treinamentos são no formato EAD síncrono, traduzindo, são treinamentos via videoconferência ao vivo. O aluno acessa um link onde vê a tela do instrutor e segue suas instruções.

Atualmente o curso é dividido em 4 módulos:
  • Selenium IDE Básico
  • Selenium IDE Avançado
  • WebDriver Básico
  • WebDriver Integrações
Todos os exercícios cobrem as principais dúvidas e interações que faremos na "vida real". Os exercicios resolvidos no Selenium IDE e WebDriver são disponibilizados, bem como uma apostila e certificado de participação.

Para saber mais sobre o treinamento acesse: http://sembugs.blogspot.com.br/p/curso-de-selenium.html


Treinamento de WebDriver (em inglês) do Alan Richardson (EvilTester)
Um cara chamado Alan Richardson, mais conhecido como EvilTester (seu blog) criou um treinamento sobre WebDriver no site Udemy.
O treinamento são video-aulas em inglês que mostram como trabalhar com o WebDriver em diversos pontos:
  • Navegação
  • Suporte dos testes com JUnit
  • Locators
  • Interações
  • RemoteWebdriver
  • CI

Link do treinamento: https://www.udemy.com/selenium-2-webdriver-basics-with-java/


Através de Livros

Existem livros muito bacanas sobre Selenium, mas infelizmente para alguns estes livros são em inglês (pra quem não consegue ler livros em inglês ainda fica o incentivo para aprender!)



Livro: Selenium Simplified

Este livro é do mesmo autor do curso do Udemy que eu coloquei acima: Alan Richardson. Este livro sobre a utilização do Selenium RC/WebDriver utilizando Java e JUnit.
É muito parecido com o próprio treinamento que o autor tem, mas os itens cobertos no livro possuem mais detalhes.

Link da página do livro: http://www.compendiumdev.co.uk/selenium/





Livro: Selenium Testing Tools Cookbook

Este livro mostra, além do básico de programação com WebDriver, problemas reais e como resolvê-los.
Também apresenta como fazer integrações de ferramentas de BDD e ATDD, como executar testes no Selenium Grid, como capturar evidências e como executar testes em browsers de dispositivos móveis (Android e iOS)

Link da página do livro: http://www.packtpub.com/recipes-to-master-selenium-2-testing-tools-cookbook/book



Livro: Selenium 2 Testing Tools

Este livro é de autoria de um dos commiters do Selenium: David Burns. Neste livro o autor aborda todos os conceitos  básicos do WebDriver unidos a alguns Design Patters para ajudar o leitor a desenvolver melhor usando o WebDriver.

Link da página do livro: http://www.packtpub.com/selenium-2-testing-tools-beginners-guide/book






Espero que este post seja de grande ajuda aqueles que desejam iniciar o aprendizado do Selenium.
Qualquer dúvida ou sugestões de links, cursos e livros deixem um comentário neste post :-)

Abraços!


terça-feira, 5 de fevereiro de 2013

TDD - Test Driven Development para Testadores


Olá pessoal!
No dia 02/02/2013 eu tive o prazer de falar sobre TDD - Teste Driven Development no Campus Party Brasil 2013.

Nesta palestra abordei um conteúdo mais prático, que pode ser visto nos slides e também um exemplo guiado que está disponível no GitHub:
https://github.com/eliasnogueira/tdd-exemplo

Mais abaixo vou escrever os pontos mais importantes da apresentação.
Fica a dica para você:
  1. Ler o post
  2. Ver a apresentação
  3. Ver o projeto no GitHub
  4. Tentar executar o projeto do GitHub em casa.

Mas porque o Elias, um tester, deu palestra sobre TDD (que é de dev)?
Cada vez mais, na minha visão, o testador se faz um profissional cada vez mas técnico e polivalente (palavra bonita), mas que em poucas palavras quer dizer que o tester não precisa programar todo o dia usando TDD, mas precisa saber o que é como como utilizar essa técnica.



TDD - Test Driven Development from Elias Nogueira







 Se software fossem carros... como poderíamos garantir que tudo funciona? Se pensarmos um pouco no processo de criação de um carro temos uma infinidade de peças que devem, além de ser criadas por si só, devem funcionar com outras peças, resultado ao final um carro totalmente utilizável.

Pense que você precisa "testar um carro"... e guarde esse pensamento com você por enquanto.





 Mas quem testa? O desenvolvedor? Pelo que conhecemos de Teste de Software não!

No modelo que conhecemos o testador que executa esta atividade certo? Ele deve garantir que o sistema funciona depois que um ou mais funcionalidades foram desenvolvidas.





No modelo tradicional de desenvolvimento de software (cascata, e sim, eu apresentei um modelo cascata ao invés do RUP porque grande parte ainda desenvolve assim) temos as conhecidas fases do desenvolvimento, mas teste é a penúltima fase. Logo testar torna-se um processo que, além de oneroso, é muito caro!

Logo como garantir uma melhor entrega para testes com uma maior qualidade?






Uma técnica conhecida (deveria ser bem mais conhecida) e muito negligenciada por diversos fatores é o TDD - Test Driven Development, ou Desenvolvimento Orientado a Teste.

Com ele o próprio desenvolvedor (e seria muito legal se adicionássemos: "com a ajuda do testador") cria testes de um jeito diferente de programar e garantir que o que ele está desenvolvendo terá uma melhor qualidade.





Agora é interessante dar uma olhada na sequencia de slides que explica como desenvolver um código para converter os símbolos do número romano em símbolos.

Depois vale muito a pena olhar o projeto no GitHub e tentar segui-lo em sua máquina local: https://github.com/eliasnogueira/tdd-exemplo





O processo de desenvolvimento de uma funcionalidade ou aplicativo utilizando TDD é bem simples: primeiro criamos um teste que não passa, depois testamos refatorá-lo para que ele passe sempre, obviamente, penando na melhor e mais simples implementação naquele momento.

Se você notar todos os passos do projeto descrito no GitHub são guiados através de TDD.





E, obviamente, existem muitos benefícios em adotar esta técnica, onde um dos maiores benefícios são a simplicidade, feedback rápido e segurança.

Conseguimos ter uma bateria de testes de unidade criados sem grande esforço e já cobrindo boa parte da funcionalidade.

Assim o novo código criado já nasce testado!






Utilizando TDD conseguimos facilmente mostrar o ganho em tempo, onde desde o inicio o código sai testado e pronto para ser alterado (refatorado) ou usado por outro método/classe.

Se compararmos com o modelo tradicional, teríamos apenas testes no final do desenvolvimento de todo o código.





E, apenas para alinhar, TDD não é teste! TDD é uma técnica de design de código que ajuda, e muito o testa da aplicação/funcionalidade.

Embora o termo "teste" seja utilizado ao usar TDD estamos dando muito mais atenção ao design da classe/funcionalidade do que realmente teste.



A palestra possui vários insights e o exemplo dos números romanos retirados do livro "TDD - Teste Driven Development: Teste e Design no Mundo Real" do autor Maurício Aniche, editora Casa do Código
http://www.casadocodigo.com.br/products/livro-tdd 

Abraços!