Este documento descreve um processo de integração contínua multiplataforma implementado no Instituto Nokia de Tecnologia para um projeto piloto utilizando Java, .NET e Scrum. O processo automatizou a compilação, execução de testes e distribuição do software em diferentes plataformas usando Hudson, Ant, MSBuild e ferramentas de teste. Isso melhorou a qualidade e reduziu defeitos de integração.
Implantação de Ambiente de Integração contínua para projeto que usa Java e C
1. Simpósio Brasileiro de Qualidade de Software - SBQS
QUALIDADE
Instituto Nokia de Tecnologia Unit Test
Bug
Sucess
INdT
Melhoria no Desenvolvimento Ágil com Implantação
de Processo de Integração Contínua Multiplataforma
para Java e .NET
AGILIDADE
SELENIUM
Verificação Hudson
Eliane Collins, Thiago Falcão, Rafael Cunha e Vicente Lucena
SCRUM Curitiba, Jun 2011
2. Agenda
1. Introdução
2. Contexto do Ambiente
3. Processo
Multiplataforma de
Integração Contínua
4. Execução e Resultados
5. Conclusão
Company Confidential
4. INTRODUÇÃO
Crescente adoção de metodologias ágeis para o
desenvolvimento de software.
Técnicas e estratégias estão sendo pesquisadas para garantir a
qualidade e confiabilidade dos sistemas desenvolvidos.
A integração contínua se destaca ganhando importância por
proporcionar informações que dizem respeito à qualidade
durante o desenvolvimento de maneira automática e contínua.
Company Confidential
4
5. INTRODUÇÃO
O Processo de Integração Contínua é a prática no onde toda
equipe deve integrar seu trabalho sempre a cada alteração.
Cada integração é verificada, testes unitários e de aceitação
são executados para detectar defeitos o mais rápido possível.
É possível reduzir problemas de integração, controlar versões
estáveis do sistema e permitir que o time desenvolva
rapidamente um software coeso
Company Confidential
5
6. INTRODUÇÃO
Vantagens conhecidas da Integração Contínua:
A redução de riscos obtida através da detecção e correção de defeitos
mais cedo.
Automação de processos manuais e repetitivos (compilação,
integração de base de dados, teste, inspeção, distribuição e feedback).
Permitir uma melhor visibilidade de projeto (estatísticas reais e
recentes fornecidas nos relatórios gerados ).
Verificações automáticas de cobertura, validação de padrões de
design de código e padronização.
Company Confidential
6
9. CONTEXTO DO AMBIENTE
Instituto Nokia de Tecnologia – INdT
É uma instituição independente e sem fins lucrativos comprometida
com a realização de pesquisa e desenvolvimento de soluções
tecnológicas através do desenvolvimento de aplicações, novas
tecnologias e conceitos.
A área onde a experiência foi desenvolvida foi Tecnologias de Produto
e Manufatura (PMT).
Company Confidential
9
10. CONTEXTO DO AMBIENTE
SCRUM
Metodologia ágil e flexível, centrada no trabalho em equipe;
Utilizada para o desenvolvimento incremental e iterativo de
qualquer produto
Company Confidential
10
11. CONTEXTO DO AMBIENTE
Projeto Piloto
Realizar a manutenção preventiva de equipamentos que são
utilizados ininterruptamente na produção de uma fábrica de produtos
eletrônicos.
O sistema deveria se comunicar com equipamentos da linha de
produção.
Evitar a substituição prematura de uma peça ou a parada de linha de
produção devido ao desgaste intensivo do equipamento.
Diminuir os custos com a manutenção dos equipamentos de
produção.
Comunicar-se com outros sistemas de produção, com isso utilização
de diferentes tecnologias em seu desenvolvimento.
Company Confidential
11
12. CONTEXTO DO AMBIENTE
Projeto Piloto
3 módulos de desenvolvimento: um cliente web na plataforma Java
usando um servidor JBoss;
O segundo e o terceiro: um webservice e um serviço na plataforma
.NET executando em um servidor Internet Infomation Services (IIS).
Os módulos necessitavam comunicar-se entre si.
Necessária a realização da integração entre os módulos.
Não era interessante que cada integrante da equipe executasse os
testes unitários em todo o sistema.
Se perderia muito tempo com erros de integrações e testes manuais.
Company Confidential
12
14. PROCESSO Multiplataforma de Integração Contínua
O processo deveria fazer parte da metodologia ágil Scrum.
Primeira Etapa: Avaliar frameworks de integração contínua
disponíveis no mercado.
CruiseControl.Net:
Ferramenta proprietária e difícil configuração em xml.
Não possui muitos pluggins.
Hudson
Company Confidential
14
15. PROCESSO Multiplataforma de Integração Contínua
Hudson Vantagens:
Ferramenta livre,.
Interface amigável e simples de configurar
Configuração do ambiente de teste – segundo sprint
Possui plug-ins, os quais facilitaram a integração com outros
softwares e plataformas que seriam usados no projeto.
Junit
Nunit
Subversion (SVN)
MSBuild.
Selenium
…
Company Confidential
15
17. PROCESSO Multiplataforma de Integração Contínua
Para o módulo do sistema em Java, foi utilizado Apache Ant.
Criado um XML responsável por compilar todo o código escrito em
Java, executar os testes unitários usando JUnit, empacotar o arquivo, e
finalmente enviá-lo para o servidor JBoss através da ferramenta
Hudson.
Para o módulo do sistema na plataforma .NET foi utilizado o
Microsoft MSBuild.
Criado um arquivo MSBuild responsável por compilar o código escrito
em .NET, executar os testes unitários usando NUnit, e finalmente,
executar a distribuição.
Distribuição: Republicar e reiniciar a nova versão do webservice no
servidor IIS, como também republicar e reiniciar a nova versão do
serviço Windows.
Company Confidential
17
18. PROCESSO Multiplataforma de Integração Contínua
As duas plataformas trabalhavam paralelamente e
integradas por causa das várias compilações, testes e
distribuições diárias.
Quando ocorriam erros de compilação no servidor de
integração contínua a correção ou retorno era prioritário
Impedimentos não poderiam ser gerados para não
atrapalhar o desenvolvimento do restante da equipe.
Company Confidential
18
19. PROCESSO Multiplataforma de Integração Contínua
Arquitetura do Processo de Integração Contínua
Multiplataforma:
Company Confidential
19
21. Execução do Processo e Resultados
Sprint Planning
A estimativa das estórias levavam em consideração a codificação dos
testes unitários e a integração do código tanto para o módulo .NET
como para o módulo Java.
Sprint
Os desenvolvedores codificavam os testes unitários usando JUnit e
Mockito para a plataforma Java e NUnit e MOQ para a plataforma .NET.
Ao final de cada dia, o time tinha que enviar o código trabalhado para
o repositório (SVN)
Hudson detectava e executava os scripts do Ant, no caso do módulo
Java e MSBuild no caso do módulo .NET
Compilavam, executavam os testes, empacotavam o código e
enviavam a versão do software estável para o servidor de destino
Company Confidential
21
22. Execução do Processo e Resultados
Quando a ferramenta Hudson detectava falhas em qualquer passo
desse processo, o script (Ant ou MSBuild) era interrompido.
A versão não era enviada para o servidor de destino e todo time
recebia um e-mail com o relatório sobre as falhas encontradas.
É possível visualizar e das ações executadas por cada membro do
time, identificando o autor de cada mudança.
Company Confidential
22
23. Execução do Processo e Resultados
Resultados
No fim do Sprint obtinha-se uma entrega de software estável para ser
validada pela equipe de teste para validar o critério de aceitação.
Em 10 Sprints de projeto foram geradas 140 builds para o módulo
Java e 283 builds para o módulo .NET.
Company Confidential
23
24. Execução do Processo e Resultados
Resultados
Conforme o processo era executado, a cobertura de testes aumentava
e a incidência de falhas no software diminuía.
Isso ocorreu porque o ambiente automatizado propiciou mais
facilidade na confecção e execução de testes unitários e com isso
aumentar a qualidade do código gerado.
Company Confidential
24
25. Execução do Processo e Resultados
Resultados Atuais
Integração com a ferramenta de cobertura de código.
Company Confidential
25
26. Execução do Processo e Resultados
Resultados Atuais
Integração com a Ferramenta Selenium para testes de aceitação
automáticos.
Company Confidential
26
28. CONCLUSÃO
Este processo de integração contínua possibilitou testes automatizados,
uma distribuição rápida e versões do software atualizadas e estáveis.
Os desenvolvedores das plataformas Java e .NET ficaram focados somente
no desenvolvimento em sua respectiva tecnologia.
A equipe de testes foi beneficiada, pois as versões de software para teste
se tornaram mais estáveis e sem defeitos de integração e implementação.
Melhorias: Evoluir o ambiente para inspeção e padronização do código. E
melhorar a automação dos testes de aceitação.
Company Confidential
28