Blog > Integração Contínua para Testadores - Parte 1

30/out

Você deve ter ouvido muito falar de Integração Contínua, mas você sabe o conceito por trás desta prática e como ela é aplicada? Este é a primeira parte de uma série de posts sobre o assunto que irá desde a teoria até a prática!

Integração Contínua

Prática de desenvolvimento de software onde os membros do time integram seu trabalho frequentemente. O trabalho se dá por meio de código-fonte (código de desenvolvimento da aplicação e código de testes em qualquer nível). Todo o código dos desenvolvedores (inclua o tester como um desenvolvedor também) é feito em sua própria máquina. Depois de um tempo ele é fundido (merge) com todos os outros códigos de todos os desenvolvedores. Nesta parte é necessário testar para garantir que todos os códigos que se fundiram estão funcionando (sem erros). É ai que entram os testes unitários e de integração e até mesmo os de aceitação. Para que esta integração seja feita de forma centralizada uma aplicação/servidor executa estas atividades (integrar o código-fonte e executar testes) para que os desenvolvedores continuem seu trabalho sem a necessidade de parar e executar estas tarefas frequentes.

Este frequência pode (e geralmente é) múltiplas vezes ao longo do dia.

Há um comentário do Martin Fowler que descreve muito bem a prática de Integração Contínua

"Integração Contínua não vai acabar com seus bugs, mas fará com que eles sejam fáceis de ser encontrados e removidos"

Como funciona a Integração contínua de modo geral?

O processo em geral é simples. Em uma empresa de desenvolvimento temos diversos profissionais (programadores) que desenvolvem o código da aplicação. Cada um trabalha com uma cópia do código final da aplicação para adicionar novas funcionalidades ou alterar funcionalidades existentes. Ao término de cada tarefa de desenvolvimento o programador submete o seu código desenvolvido para o servidor de controle de versão. Depois de algum tempo todos os códigos são integrados (merge) para que uma nova versão seja criada. Ao invés de ter este processo ser feito de forma manual (integrar o código) um sistema de integração contínua se encarrega disso.

Não somente isso, o mesmo servidor de integração contínua também pode compilar, executar os testes unitários e empacotar (deploy) a aplicação (para uma futura distribuição ou mesmo teste em um outro servidor), garantindo que todo o processo básico (build, teste e deploy) seja executado automaticamente sem interferência humana e apresentando o resultado deste processo ao final do mesmo.

Controle de Versão

Este termo é comumente utilizado para referenciar os Sistemas de Controle de Versão.

Controle de Versão é um sistema de versionamento para gerenciar diferentes versões de um documento qualquer. No desenvolvimento de software utilizamos estes sistemas para controlar as alterações e manter um histórico do código-fonte (da aplicação, dos testes, etc...) e também da documentação.

Os sistemas conhecidos dentro do desenvolvimento de software para esta finalidade são CVSSubversion (SVN)Git.

Como é o processo de Integração Contínua “na íntegra”?

Um sistema de integração contínua está sempre monitorando o projeto de desenvolvimento através de um sistema de controle de versão. De tempos em tempos este servidor verifica se há novos códigos de desenvolvimento que estão sendo enviados para o servidor de controle de versão. Quando isso ocorre o servidor de integração contínua dispara a execução da build (compilação do código e pré-empacotamento) e execução dos testes para analisar se não há falhas no código. Toda a execução deste processo acaba gerando indicativos se o código está "saudável" (sem erros) ou se há algum problema. As ferramentas de integração contínua utilizam um dashboard para apresentar estes resultados dando um feedback visual sobre toda a execução do processo. Caso algum erro ocorra o próprio sistema de integração contínua pode alertar ao time o que ocorreu de errado. Algum membro do time procede com a correção e todo o ciclo se inicia novamente.

Quais os benefícios da Integração Contínua?

  • Detecta problemas mais rápidos, uma vez que todo o código é fundido (merge) e testado frequentemente
  • Aumenta a visibilidade da saúde do projeto
  • Habilita uma melhor comunicação da equipe
  • A integração será executada de uma maneira padronizada, rápida e eficiente
  • Passamos menos tempo analisando se o código vai funcionar ou não (quando pautamos a integração contínua com uma base de testes unitários… e isso é mandatório)
  • Reduz os riscos de integração do código

Integração Contínua, a prática...

Existe uma série de passos para aplicar esta prática que são de extrema importância:

  • Manter sempre um único local de repositório para o código
  • Automatizar o processo de build (integração, compilação, etc…)
  • O build sempre deve ser testado
  • Todos precisam enxergar o que está acontecendo
  • Todo e qualquer processo de deploy tem que ser automatizado
  • O teste é mandatório

O que a Integração Contínua traz de valor pra mim, tester?

Há diversas formas de usar a Integração Contínua a nosso favor...

Se o meu time já utiliza integração contínua

  • Podemos auxiliar desde o início analisando as métricas de pré-testes de ferramentas de análise de código
  • Podemos utilizar a integração contínua para ajudar a descobrir as potenciais coberturas de teste unitário e também sugerindo mais testes unitários
  • Podemos criar smoke tests para outras camadas como serviço e aceitação para garantir que os serviços e a página estão "no ar" (funcionando) depois de um ciclo
  • Podemos extender a utilização dos testes adicionando integração entre sistemas, serviços (REST ou Soap) e aceitação (funcional e cenários de negócio/e2e)

Se o meu time não utiliza integração contínua

  • Podemos utilizar os jobs como executores de teste em diversos níveis (integração entre sistemas, serviços e aceitação controlando cada execução agendada ou não com a entrega de cada versão/release

Resumo

Neste post aprendemos de maneira geral o que é Integração Contínua e como ela é utilizada dentro de um ambiente de desenvolvimento e como ela pode ser utilizada por nós, testadores.

Não deixe de acompanhar os próximos posts da série!

POSTS RELACIONADOS

AGENDA

CURSOS RELACIONADOS