Você está na página 1de 48

Pós-Graduação em Ciência da Computação

Centro de Informática
Universidade Federal de Pernambuco

Implantação de um Pipeline de Engenharia


de Integração e Entrega Contínua no IFAC
Rennan Francisco Messias de Lima
[rfml@cin.ufpe.br]

Orientador: Prof. Dr. Vinicius Cardoso Garcia


Roteiro

• Introdução
• Trabalhos Correlatos
• Metodologia de Pesquisa
• Execução e Resultados
• Estratégia para Adotar Integração e Entrega Contínua
• Considerações Finais
O IFAC

• Rede Federal de Educação


• Lei 11.892 de 29 de dezembro de 2008
• Iniciou as atividades em 2010
• 7 unidades, sendo 1 reitoria e 6 campi
• 76 Cursos
• 7002 alunos
• 746 servidores
Desenvolvimento no IFAC

• Os projetos de desenvolvimento de software no IFAC


são geralmente de pequeno e médio porte, visando
a solução de problemas pontuais, a integração entre
os sistemas, manutenções e aprimoramentos dos
mesmos.

• Características da equipe
• Realizam tarefas relacionadas ao desenvolvimento;
• Suporte e implantação de sistemas de terceiros;
• Executa tarefas administrativas;
• Sobrecarga da equipe;
Motivação

• Imprevisibilidade no tempo do processo de build e


entrega por ser realizado manualmente;
• Processo de build e entrega do produto de software é
custoso e não repetível;
• Instabilidade no processo de entrega, gerado por
erros;
• Gerando atrasos e perca de prazos;
• Diversos erros encontrados tardiamente, causando
retrabalhos e desperdício de recursos, ferindo o
princípio da economicidade.
Integração Contínua - CI

• Integração continua é um conjunto de práticas de


desenvolvimento de software, no qual os
desenvolvedores integram seus códigos diariamente, e
essa integração é verificada por uma compilação
automática do código, executando teste unitários e de
integração para que seja mais rápida a detecção de erros
de integração (HUMBLE; FARLEY, 2014; FOWLER, 2006)

Deploybot Blog (2018)

6
Entrega Contínua - CD

• Como uma extensão da CI, a Entrega Contínua é um conjunto


de práticas que garantem que o código que foi integrado
esteja apto para ser disponibilizado no ambiente de produção
[Cruz e Albuquerque 2018]. No entanto, o implantação
(deploy) em produção não é automático, sendo uma decisão
do líder do projeto essa decisão.
• Juntas a Integração e a Entrega Contínua são práticas
importantes na metodologia DevOps.

Shahin, Ali Babar e Zhu (2017)

7
Questão de Pesquisa

• Como a integração e a entrega contínua podem ser


utilizadas no IFAC afim de reduzir o tempo de
inserção no mercado (time to market) e o número de
erros dos novos recursos do produto de software?
Objetivo Geral

• Realizar um estudo sobre a adoção da integração e


entrega contínua quanto ao ciclo de entrega do
desenvolvimento de software do IFAC, de forma a
verificar o impacto dessa adoção no processo de entrega
e qualidade do produto
Objetivos Específicos

• Propor um processo de adoção do pipeline de integração e


entrega contínua;
• Propor uma abordagem para o gerenciamento de risco do
pipeline CI/CD;
• Apresentar estratégias mínimas para adotar o pipeline CI/CD
utilizando a abordagem proposta.
Trabalhos Correlatos

• Método de Coleta
• Revisão Sistemática da Literatura;
• Referências Citadas em Trabalhos;
• Ad Hoc (Google Scholar)
• Critério de aceitação
• Trabalhos que estudassem a adoção da integração e
entrega contínua
• 14 trabalhos correlatos divididos em 2 grupos
• Revisões ou Mapeamento Sistemático (4)
• Relatos de Experiência e estudo de caso (10)
Comparativo com as Revisões Sistemáticas
Laukkanen, Shahin, Ali
Rodríguez et Proulx et
Itkonen e Babar e Zhu Este estudo
al. (2017) al. (2018)
Lassenius (2017) (2017)
Foco CDE CDE CI, CD e CDE CDE CI/CD
Desafios X X X X X
Melhores Práticas X X X X
Ferramentas X X
Relaciona Desafios e
X X X X
Melhores Práticas

Relaciona Desafios e
X
Ferramentas

Relaciona Melhores Práticas


X
e Ferramentas
Proposta ou abordagem
para adotar práticas X
contínuas
Comparativo com os Relatos de Experiência
Descrição
Etapas Lições
Proposta Foco do Ferramentas Benefícios Desafios
Percorridas Aprendidas
Pipeline
Gomede, Silva e
CDE X X X X
Barros (2015)
Rossi et al. (2016) CDE X X
Chen (2017) CD X X X X
Elberzhager et al.
DevOps X X
(2017)
Cruz e Albuquerque
DevOps X X X X
(2018)
Humble (2018) CD X X
Pessôa (2018) CD X X
Siqueira et al. (2018 CD X X X X X

Sousa (2019) DevOps X X X

Lopes (2020) CI X X X
Este estudo CI/CD X X X X X X
Classificação da Pesquisa

Quadro Metodológico
Método de Abordagem Indutivo
Método de Procedimento Revisão Sistemática da Literatura
Natureza dos Dados Qualitativa
Variáveis Independentes: Boas Práticas e
Ferramentas
Dependentes: Desafios
Ciclo da Pesquisa
Revisão Sistemática de Literatura

Questão de Pesquisa

1. Quais desafios foram relatados para a adoção de práticas


contínuas?

2. Que práticas foram relatadas para implementar com êxito


práticas contínuas?

3. Quais ferramentas foram empregadas para projetar e


implementar pipelines de implantação?

16
Revisão Sistemática de Literatura

● Construída a String de busca através das palavras chaves

● Bases de dados: ACM, IEEE Xplore, Scopus e Science Direct;

● Calibragem e adaptação da string de busca;

● Filtrado por estudos


publicados a partir de
2016;
● Estudos encontrados:
2838.
● Ferramenta: StArt

17
Revisão Sistemática de Literatura

Processo de Seleção dos Estudos Primários

● Etapa 1: Ler o título e resumo do estudo e aplicar os critérios de seleção.


● Etapa 2: Dos estudos incluídos no passo 1, ler o título, resumo,
introdução e conclusão e aplicar os critérios de seleção.
● Etapa 3: Dos estudos incluídos no passo 3, ler o estudo em sua
integridade e aplicar os critérios de seleção.

Estudos selecionados após execução de todos os passos:

54

18
Q1. Quais desafios foram relatados para a
adoção de práticas contínuas?

• 32 desafios, agrupados em 9 categorias:


• Humano e Organizacional;
• Processo;
• Ferramentas;
• Design de Compilação;
• Integração;
• Arquitetura da Aplicação;
• Teste;
• Entrega;
• Infraestrutura.
Desafios de Apoio a Adoção do Pipeline CI/CD

Categoria D: Desafios na adoção de pipeline de implantação


D1. Cliente desmotivado
D2. Curva de aprendizado íngreme
D3. Falta de habilidades
D4. Desafios organizacionais
Humano e Organizacional D5. Falta de comunicação
D6. Dependências da equipe
D7. Falsa sensação de confiança
D8. Falta de conhecimento de domínio
D9. Questões Culturais
D10. Ambientes heterogêneos
Processo
D11. Múltiplos Ambientes
D12. Ferramentas em constante mudança
Ferramentas
D13. Falta de suporte de ferramenta
D15. Múltiplos Branches
Integração D16. Falhas de Build
D17. Branches longas
Cont. Desafios de Apoio a Adoção do Pipeline
CI/CD

Categoria D: Desafios na adoção de pipeline de implantação


D18. Dependências
Arquitetura da Aplicação D19. Arquitetura Altamente Acoplada
D20. Restrições de Domínio
D21. Baixa cobertura de teste
D22. Falta de teste de aceitação automatizado
D23. Testes de Longa Duração
Teste D24. Falta de testes
D25. Testes instáveis
D26. Falta de estratégia de teste
D27. Teste Inadequado
D28. Falta de Mecanismo de Reversão
Entrega
D29. Processo de Entrega Demorado
D30. Falta de recursos
Infraestrutura D31. Configuração manual de software
D32. Esforço Inicial
Q2. Que práticas foram relatadas para
implementar com êxito práticas contínuas?

• MP1. Adoção de Práticas Ágeis • MP11. Coleta de métricas de qualidade


• MP2. Padronizar o Fluxo de trabalho no • MP12. Testes automatizados
Sistema de Controle de Versões
• MP13. Definir Estratégias de testes
• MP3. Mudanças no esquema do banco de
dados no sistema de controle de versão • MP14. Melhorar a atividade de teste

• MP4. Todos os commits estão ligados às • MP15. Paralelização de Testes


tarefas automatizados

• MP5. Commit de código com mais • MP16. Microsserviços


frequência • MP17. Build automatizado
• MP6. Commits pequenos • MP18. Implantação automatizada
• MP7. Trabalhar em Pequenos lotes • MP19. Definindo uma estratégia de
• MP8. Refatoração implantação

• MP9. Revisão de Código • MP20. Definir Mecanismo de Rollback

• MP10. Análise Estática de Código


Automática
Cont. Melhores Práticas de Apoio a Adoção
do Pipeline CI/CD
MP: Melhores práticas de apoio
à adoção de pipeline de Referências – EP: Estudos Primários
implantação
TDD [EP_06, EP_08, EP_42]
BDD [EP_06, EP_42]
Testes de segurança [EP_14, EP_15, EP_39, EP_42]
Testes unitários [EP_20, EP_21, EP_25, EP_28, EP_30, EP_31, EP_32, EP_36, EP_38, EP_39,
EP_42, EP_50]
Testes de integração [EP_20, EP_21, EP_23, EP_25, EP_26, EP_28, EP_32, EP_36, EP_38,
EP_42, EP_50]
Teste de cobertura [EP_17, EP_30, EP_32, EP_39]
Smoke testes [EP_15, EP_32]
Build teste [EP_20]
MP14. Melhorar a atividade de teste Teste de regressão [EP_16, EP_20, EP_22, EP_26]
Teste de sistema [EP_30]
Testes de aceitação [EP_15, EP_16, EP_21, EP_25, EP_26, EP_28, EP_38, EP_42]
Teste funcional [EP_29, EP_31]
Teste de recuperação de desastre [EP_15]
Snapshot testes [EP_20]
Teste de perfomance [EP_20, EP_23, EP_29, EP_39, EP_42, EP_48, EP_50]
Teste de capacidade [EP_20]
Testes de conformidade [EP_20]
Testes A/B [EP_16]
Q3. Quais ferramentas foram empregadas para
projetar e implementar pipelines de implantação?

• 63 ferramentas de apoio para adoção de pipelines de


implantação as quais foram organizadas em 9
categorias:
• Gerenciamento de projetos;
• Sistema de controle de versão;
• Ferramenta de gerenciamento e análise de código;
• Construção do software (build);
• Servidor de integração contínua;
• Ferramenta de teste;
• Repositório de artefatos;
• Configuração e provisionamento; e
• Monitoramento.
Ferramentas de Apoio a Adoção do Pipeline
CI/CD
F: Ferramentas de apoio a adoção de pipeline de
Categoria
implantação
F1. IBM Rational Team Concert (RTC)
Gerenciamento de projeto F2. Jira
F3. Atlassian Confluence
F4. GitHub
F5. Git
F6. BitBucket
Controle de Versão F7. Deveo
F8. GitLab
F9. Apache Subversion (SVN)
F10. Azure DevOps
F11. SonarQube
F12. CodeSonar
F13. Gerrit
Análise estática de código
F14. Klocwork
F15. Attack Surface Analyzer
F16. Microsoft Baseline Security Analyzer
F17. Maven
Build F18. Gradle
F19. Ant
Cont. Ferramentas de Apoio a Adoção do
Pipeline CI/CD
F: Ferramentas de apoio a adoção de pipeline de
Categoria
implantação
F20. Jenkins
F21. Travis CI
F22. CircleCI
F23. GitLab CI/CD
F24. AppVeyor
Servidor CI F25. Bamboo CI
F26. CloudBees
F27. GoCD
F28. TeamCity
F29. Wercker
F30. Azure DevOps
F31. IBM Rational Quality Manager (RQM)
F32. Selenium
F33. Cucumber
F34. Fortify
Testes F35. Gatling
F36. Jmeter
F37. Compatibility Test Suite by Android (CTS)
F38. Junit
F39. Smokemonster
Cont. Ferramentas de Apoio a Adoção do
Pipeline CI/CD
Categoria F: Ferramentas de apoio a adoção de pipeline de implantação
F40. Artifactory
Repositório de artefatos
F41. Nexus
F42. AWS Cloud
F43. Puppet
F44. Vagrant
F45. Chef
F46. Docker
Configuração e provisionamento F47. Ansible
F48. Plataforma System Center Orchestrator
F49. Chake
F50. Nolio
F51. SSH (deploy)
F52. Kubernetes
F53. New Relic
F54. AWS Monitoring Services
F55. CA Service Operations Insight (SOI)
F56. GrayLog
F57. Kinesis
Monitoramento F58. Apache Kafka
F59. Linux Tracing Toolkit Next Generation
F60. Nagios
F61. Dynatrace
F62. System
F63. Dataloop.io
Processo de Adoção de Pipeline de CI/CD
Preliminar
Abordagem para o Gerenciamento da Risco
do Pipeline CI/CD
Relação Desafios e Melhores Práticas
Desafios Melhores Práticas
D5. Falta de comunicação MP4. Todos os commits estarem vinculados às tarefas
MP9. Revisão de Código
D7. Falsa sensação de confiança MP10. Análise Estática de Código Automática
MP12. Testes automatizados
MP5. Commit de código com mais frequência
D14. Longos tempos de espera para builds MP6. Commits pequenos
MP7. Trabalhar em Pequenos lotes
MP2. Padronizar o Fluxo de trabalho no Sistema de Controle de
D15. Múltiplos Branches
Versões
MP5. Commit de código com mais frequência
MP6. Commits pequenos
D16. Falhas de Build
MP7. Trabalhar em Pequenos lotes
MP17. Build automatizado
MP2. Padronizar o Fluxo de trabalho no Sistema de Controle de
D17. Branches longas
Versões
D19. Arquitetura Altamente Acoplada MP16. Microsserviços
D21. Baixa Cobertura de Teste MP14. Melhorar a atividade de teste
D22. Falta de Teste de Aceitação Automatizado MP14. Melhorar a atividade de teste
MP13. Definir Estratégias de testes
D23. Testes de Longa Duração
MP15. Paralelização de Testes automatizados
Cont. Relação Desafios e Melhores Práticas

Desafios Melhores Práticas


MP12. Testes automatizados
D24. Falta de Testes MP13. Definir Estratégias de testes
MP14. Melhorar a atividade de teste
MP13. Definir Estratégias de testes
D25. Testes Instáveis
MP14. Melhorar a atividade de teste
D26. Falta de Estratégia de Teste MP13. Definir Estratégias de testes
MP13. Definir Estratégias de testes
D27. Teste Inadequado
MP14. Melhorar a atividade de teste
D28. Falta de Mecanismo de Reversão MP20. Mecanismo de Rollback
MP5. Commit de código com mais frequência
MP6. Commits pequenos
MP7. Trabalhar em Pequenos lotes
D29. Processo de Entrega Demorado MP13. Definir Estratégias de testes
MP15. Paralelização de Testes automatizados
MP17. Build automatizado
MP18. Implantação automatizada
MP17. Build automatizado
MP18. Implantação automatizada
D31. Configuração Manual de Software
MP19. Definir uma Estratégia de Implantação
MP20. Definir Mecanismo de Rollback
Relação Desafios e Ferramentas

Desafios Ferramentas
F1. IBM Rational Team Concert (RTC)
D5. Falta de comunicação F2. Jira
F3. Atlassian Confluence
F40. JFrog Artifactory
D18. Dependências
F41. Nexus Repository Manager
F32. Selenium
D22. Falta de Teste de Aceitação Automatizado
F33. Cucumber
F42. AWS Cloud
F43. Puppet
F44. Vagrant
F45. Chef
F46. Docker
D28. Falta de Mecanismo de Reversão
F47. Ansible
F48. Plataforma System Center Orchestrator
F49. Chake
F50. Nolio
F52. Kubernetes
Cont. Relação Desafios e Ferramentas

Desafios Ferramentas
F42. AWS Cloud
F43. Puppet
F44. Vagrant
F45. Chef
F46. Docker
D31. Configuração Manual de Software F47. Ansible
F48. Plataforma System Center Orchestrator
F49. Chake
F50. Nolio
F51. SSH
F52. Kubernetes
Relação Melhores Práticas e Ferramentas
Melhores Práticas Ferramentas
F1. IBM Rational Team Concert (RTC)
F2. Jira
F3. Atlassian Confluence
F4. GitHub
MP4. Todos os commits estarem vinculados às
F6. BitBucket
tarefas
F7. Deveo
F8. GitLab
F9. Apache Subversion (SVN)
F10. Azure DevOps
F4. GitHub
F6. BitBucket
MP9. Revisão de Código
F8. GitLab
F10. Azure DevOps
F11. SonarQube
F12. CodeSonar
F13. Gerrit
MP10. Análise Estática de Código Automática
F14. Klocwork
F15. Attack Surface Analyzer
F16. Microsoft Baseline Security Analyzer
F11. SonarQube
MP11. Coleta de métricas de qualidade F12. CodeSonar
F13. Gerrit
Cont. Relação Melhores Práticas e Ferramentas
Melhores Práticas Ferramentas
F14. Klocwork
MP11. Coleta de métricas de qualidade F15. Attack Surface Analyzer
F16. Microsoft Baseline Security Analyzer
F31. IBM Rational Quality Manager (RQM)
F32. Selenium
F33. Cucumber
MP14. Melhorar a atividade de teste F34. Fortify
F35. Gatling
F36. JMeter
F39. Smokemonster
F17. Maven
MP17. Build automatizado F18. Gradle
F19. Ant
F41. Plataforma System Center Orchestrator
F42. AWS Cloud
F43. Puppet
F44. Vagrant
F45. Chef
MP18. Implantação automatizada F46. Docker
F47. Ansible
F49. Chake
F50. Nolio
F51. SSH
F52. Kubernetes
Projeto Piloto: O Projeto Manhanah

• O projeto Manhanah tinha como objetivo desenvolver


uma solução sistêmica para automatizar o processo de
entrega do Plano Individual de Trabalho - PIT e Relatório
Individual de Trabalho - RIT.
• Equipe:
• Coordenador
• 2 Desenvolvedores

• Desenvolvido utilizando o Scrum e algumas práticas XP


Desafios vivenciados durante a implantação de
CI/CD

• D8. Falta de Habilidades


• D18. Arquitetura Altamente Acoplada
• D19. Dependências
• D21. Falta de Estratégia de Testes
• D22. Falta de Testes
• D23. Baixa Cobertura de Testes
• D30. Configuração Manual de Software
• D31. Falta de Recursos
• D32. Esforço Inicial
• Burocracia
• A falta de um único script de configuração da aplicação
• Demora na execução dos teste
• Integração entre as ferramentas
Lições aprendidas durante a implantação de
CI/CD

• A interferência de atividades externas prejudica a produtividade da


equipe;
• Designar um responsável pela implantação de CI/CD de fora do projeto;
• Adotar um sistema para o gerenciamento de projetos/tarefa;
• O planejamento das etapas do pipeline deve ser realizado após o
mapeamento e definição do fluxo de valor;
• Utilizar um contêiner Docker para executar os testes automatizados;
• Configurar o servidor CI para verificar o repositório de código através do
webhook, ao invés do agendamento;
• Executar os testes unitários em paralelo, embora sua execução seja mais
rápida, dificulta o feedback dos desenvolvedores;
• Implantar em produção versões específicas do código, através de tags ou
ramificações de versões o que gera rastreabilidade.
Projeto Irmão: O Projeto Cachalote

• O projeto Cachalote tem como objetivo principal


fornecer uma ferramenta para cadastro e
gerenciamento de eventos realizados pelo IFAC.

• Equipe:
• Coordenador;
• Desenvolvedor.
Análise da Adoção do CI/CD

• Avaliação da adoção do CI/CD através do Goal Question Metric (GQM)


utilizando o método de comparação do projeto irmão.

• Goal: Analisar a adoção de integração e entrega contínua para efeito de


avaliação quanto à viabilidade do ponto de vista do pesquisador no
contexto do Instituto Federal do Acre
• Questão 1: Quão apropriada é a adoção de CI/CD para o processo de entrega
de software?
• Questão 2: Qual o impacto da adoção de CI/CD na qualidade do código
gerado?
• Questão 3: Qual o impacto da adoção de CI/CD na qualidade do produto de
software?

• As métricas foram objetivamente definidas da seguinte forma:


• O objetivo principal deste estudo é avaliar a adoção de integração e entrega
contínua quanto à viabilidade. A viabilidade, neste caso, é definida pela Qualidade
e pela Velocidade, no IFAC.
Análise da Adoção do CI/CD

• Questão 1: Quão apropriada é a adoção de CI/CD para o processo


de entrega de software?
• M1. Lead Time
• M2. Cycle Time
• M3. Frequência de Implantação
• M4. Tempo de Implantação
• Questão 2: Qual o impacto da adoção de CI/CD na qualidade do
código gerado?
• M5. Número de Vulnerabilidades
• M6. Número de Bugs
• M7. Número de code smells
• M8. Número de complexidades
• Questão 3: Qual o impacto da adoção de CI/CD na qualidade do
produto de software?
• M9. Número de defeitos
• M10. Cobertura de Testes Automatizados
Resultado da Análise da Adoção do CI/CD

• Processo
• Previsibilidade na entrega
• Estabilidade no tempo de implantação
• Aumento na frequência de implantação
• Qualidade do Código
• Melhoria na qualidade do código
• Baixo número de vulnerabilidades e bugs
• Qualidade do Produto
• Redução do número de erros descobertos e produção a
longo prazo
Processo de Adoção de Pipeline de CI/CD
Atualizado
Principais Contribuições

• Um corpo de conhecimento, a partir das evidências


coletadas como resultado da revisão sistemática, que
funciona como um framework para compor o
pipeline concreto e efetivo a ser implementado;
• Um processo de adoção de pipeline;
• Uma abordagem para o gerenciamento de risco
utilizando o corpo de conhecimento;
• Estratégias mínimas para adotar o pipeline de
integração e entrega contínua, através do relato de
experiência da adoção e uso dessas práticas em um
projeto piloto do IFAC;
Limitações e Ameaças a Validade

• Não foi realizada uma análise da distribuição geográfica dos


estudos;
• Devido a restrições orçamento, a pesquisa não considerou
bases de dados pagas;
• A extração e a avaliação de qualidade foram realizada por
apenas um pesquisador;
• Não foram realizados estudos primários para testar a
abordagem;
• Para garantir a validade interna na avaliação foi escolhido o
método de comparação do projeto irmão que serviu como
linha de base.
• Para evitar o efeito da redução da produtividade, a avaliação
só foi realizada após a equipe aprender a utilizar as práticas
contínuas.
Trabalhos Futuros

• Realização de um estudo afim de investigar as diferenças


práticas entre o DevOps e GitOps. O estudo poderia
realizar uma combinação das duas metodologias ou
substituir DevOps por GitOps;
• Realização de um estudo para investigar a utilização de
SRE juntamente com DevOps;
• Utilização prática da abordagem, através da condução de
estudos de caso ou pesquisa ação em ambientes;
• A abordagem também pode ser refinada, aumentando-se
o número de estudos primários analisados na revisão
sistemática;
• Por fim, podem ser realizados estudos específicos para
alguns dos desafios que foram muito citados pelas
evidências.
OBRIGADO!
Pós-Graduação em Ciência da Computação
Centro de Informática
Universidade Federal de Pernambuco

Implantação de um Pipeline de Engenharia


de Integração e Entrega Contínua no IFAC
Rennan Francisco Messias de Lima
[rfml@cin.ufpe.br]

Orientador: Prof. Dr. Vinicius Cardoso Garcia

Você também pode gostar