Agile Brazil 2010 – 22 a 25 de Junho Automação de Testes: Ferramentas e Aplicação com Integração Contínua Gabriela de Oliveira Patuci [email protected] Agenda Introdução Por que automatizar? Quando a automação começa a valer a pena Tipos de Teste Ferramentas : Selenium Ferramentas: Outras opções no mercado Por que usar a Integração Contínua neste caso? Agenda CI: Conceito Ferramentas : Hudson, Cruise Control Hudson: Como configurar um projeto? Dia a dia com CI Hudson exibindo resultados de testes Conclusão Dúvidas Introdução “A clever person solves a problem. A wise person avoids it.” Albert Einstein -“Bugs will appear in one part of a working program immediately after an 'unrelated' part of the program is modified.” Murphy -“Nothing is foolproof. Fools are just too darn clever.” anonymous Por que automatizar? • Porque existe muito a ser testado; • Porque nem todo tipo de teste tem que ser manual; • Porque se testarmos algo mais simples automaticamente, temos tempo para testes mais complexos (maior cobertura); Por que automatizar? • Porque temos que executar testes de regressão; • Porque testes de fumaça devem ser executados antes da bateria de testes funcionais. • Porque precisamos executar testes de estresse. Quando a automação começa valer a pena... SIM NÃO -Requisito alterado com menor frequência (layout) -Requisito alterado a todo momento (regravação) -Projetos com mais de 5 sprints (desenvolvimento incremental) -Projetos de menos de 3-5 sprints (pouco reteste) Tipos de Teste • Fumaça Consiste em fazer um teste superficial que indica a viabilidade de rodar os demais testes. • Unitário Foco em testar caminhos específicos do produto (caixa branca). • Integração Foco em combinar as partes do produto e testar as partes em conjunto. Tipos de Teste • Sistema Visa garantir que o software funciona corretamente com os demais elementos do sistema. • Regressão Visa evitar que defeitos já corrigidos retornem ao produto. • Aceitação Foco em apresentar o produto ao cliente para que o produto seja homologado. Ferramentas: Selenium Fumaça, Regressão, Estresse... Selenium – tipo “gravação e reprodução” • Selenium IDE Plugin para o Firefox , que ajuda a gravar, ver e editar as ações de teste. • Selenium RC Sistema cliente/servidor que permite que você controle o browser local ou remotamente. É com ele que são executados os testes. • Selenium GRID Ferramenta para executar o Selenium RC em vários servidores ao mesmo tempo. Gerando assim produtividade e diversidade. Ferramentas: Selenium Ferramentas: Outras Nome Site Tecnologia Finalidade Watir http://watir.com/ web Automação de testes para páginas Web via programação (Ruby) Marathon http://www.marathontesting.com/ Java Testes de regressão Selenium http://seleniumhq.org/ web Testes Funcionais e regressão JMeter http://jakarta.apache.org/ web Testes de desempenho Tabela disponível em: http://www.opensourcetesting.org/ Por que usar CI nestes casos? - Execução dos primeiros testes da bateria : Smoke (validação da bateria para início dos testes funcionais) - Execução de todos os testes automatizados - Possibilidade de receber resultados por e-mail - Possibilidade de build noturna - Métricas de Código: gerar relatórios de métricas de qualidade - Geração automática de documentação CI : Conceito Se uma nova funcionalidade é adicionada a um sistema que já funcionava bem (e já estava testado), sempre existe a possibilidade desta afetar as outras. Uma boa maneira de assegurar que tanto esta funcionalidade, como todo o resto do sistema esteja funcionando de forma harmoniosa, é que as equipes utilizem uma prática cada vez mais comum no mercado de TI: a integração contínua. Ela consiste em pares integrando seus códigos com o restante do sistema diversas vezes ao dia. CI : Conceito Sempre que um dos pares integra seu código, a ferramenta de integração contínua executa todos os testes automatizados programados para aquela build e assim, assegura que a integração ocorreu como programado e satisfatoriamente. Toda nova integração pode gerar erros no código/sistema. Exatamente por isso, as equipes utilizam esta prática de testes para localizar eventuais bugs, para que a correção seja o mais precoce possível. CI : Ferramentas de Apoio Servidores de buid automatizadas mais utilizados no mercado: Hudson e Cruise Control. Hudson (principais características): • Facilidade de instalação. • Possibilidade de distribuir as builds para múltiplas máquinas. • Publicação de resultados, de testes e acompanhamento do log. • Notificação por email. Hudson : Configuração Painel Principal Hudson: Configuração Informações do Projeto Hudson : Configuração Configuração do Projeto Hudson: Configuração Configuração do Projeto Hudson: Configuração Configuração do Projeto Hudson: Histórico Revisões e Mudanças CI: Passo a passo Passos que podem ser executados no dia a dia de um projeto com CI • • • • • • • • Sempre tenha certeza que o projeto está sendo compilado corretamente e que todos os testes (automatizados) estão sendo executados; Converse com o time para saber quando é sua vez de integrar o código; Sempre mantenha um backup na sua máquina (de um dos dois); Faça o update do projeto; Faça novamente a verificação do software e dos testes; Faça o commit do projeto; Apague o diretório do projeto da máquina de integração e faça o checkout; Faça a última verificação do software e dos testes; Passo 1 Sempre tenha certeza que o projeto está sendo compilado corretamente e que todos os testes (automatizados) estão sendo executados; -Por que? A idéia é que o repositório esteja sempre consistente e o mais atualizado o possível. -Quando? A todo momento, quando alguém faz checkout, o código deve ser executado em perfeito estado. -Como? Sempre que alguém integrar seu código a build, deve se assegurar de rodar todos os testes e saber que tudo correu bem. Passo 2 Converse com o time para saber quando é sua vez de integrar o código; -Por que? Imagine se todos pudessem fazer commit a todo tempo? -Quando? Sempre e a todo o momento... a ordem é: antes de fazer o commit, verificar! -Como? Que tal um sinalizador? Nós temos a “arara amarela”. Passo 3 Sempre mantenha um backup na sua máquina (de um dos dois); - Por que? Sempre existem riscos. Um usuário pode tentar rodar a build e ela apresentar problemas (nem sempre a solução será rápida) - Quando? Sempre e a todo código novo. Nunca se sabe quando você vai precisar. - Como? Simplesmente mantendo o backup. Passo 4 Faça o update do projeto; - Por que? Para podermos integrar as alterações feitas pelos pares na máquina que executa as integrações. - Quando? Toda vez que estiver prestes de fazer um commit de suas alterações. - Como? Através de comandos CVS que selecionam apenas o que foi alterado desde o último checkout. Passo 5 Faça novamente a verificação do software e dos testes; - Por que? Porque neste momento você já poderá perceber que o código novo “quebrou” (ou não) aquilo que o time já tinha compilado. - Quando? Toda vez que estiver prestes de fazer um commit de suas alterações. - Como? Executando a build novamente, seguida dos testes. Passo 6 Faça o commit. - Por que? Porque é assim que você une efetivamente suas alteracões ao pacote. - Quando? Toda vez que estiver prestes a fazer um commit de suas alterações. - Como? Normalmente, clicando com o botão direito sobre os arquivos e depois na opção “Commit”. Passo 7 Apague o diretório do projeto que está na máquina de integração e faça o checkout. - Por que? Porque essa é a única maneira de se assegurar que os próximos possam fazer todo o processo de maneira segura. - Quando? Depois que o processo de integração terminar. - Como? Normalmente, clicando no botão direito e na opção “Delete” Passo 8 Faça a última verificação do software e dos testes; Sua integração finalmente terminou! Parabéns! Resultados de Testes (Hudson) Script (feito dentro do código que gera a build) - Depois da execução dos unitários, envia resultados - Se um dos testes unitários falha, envia um e-mail avisando - Crie um alias para receber estes alerts e insira o código junto com o da build Conclusão E então, o que mudou? - Diminuição dos casos de builds não testáveis. - Aumento da cobertura de testes. - Aumento da qualidade (medido pelos bugs em produção). - Agilidade na integração de códigos Referências Murta, L.G.P. (2009). Verificação, Validação e Testes. Acessado em 12 de junho de 2010, no website do IC (Instituto de Computação da Unicamp). Disponível em: http://www.ic.uff.br/~leomurta/courses/2009.2/es2/aula5.pdf Godoy, G.L. (2009). Integração Contínua com Hudson. Acessado em 09 de junho de 2010, no website do evento SPIN Campinas. Disponível em: http://www.cpqd.com.br/spin-cps/images/Apresentacoes/reuni%E3o39_apst-hst-001090001-eventospin.pdf Leão. D.S. (2008). Práticas de Integração. Acessado em 30 de maio de 2010, no website ImproveIT. Disponível em: http://improveit.com.br/xp/praticas/integracao Tabela de ferramentas de automação. Acessado em 12 de abril de 2010, no website da Open Source Testing. Disponível em: http://opensourcetesting.org Obrigada! Dúvidas? www.cit.com.br Copyright (C) 1995-2009 Ci&T Software S.A. – Todos os direitos reservados. Todos os nomes e produtos são usados apenas com o propósito de identificação e são marcas registradas de seus respectivos proprietários.