Gabarito - Aula 9: Sprint 1 e CI/CD

Questões Teóricas

1. Explique a diferença entre Integração Contínua e Entrega Contínua.

Resposta: - Integração Contínua (CI): Prática de integrar código frequentemente (múltiplas vezes por dia) em um repositório compartilhado, com builds e testes automáticos para detectar problemas rapidamente.

  • Entrega Contínua (CD): Extensão da CI que automatiza o processo de deploy, garantindo que o código possa ser entregue em produção a qualquer momento de forma segura e confiável.

Diferença principal: CI foca na integração e validação do código, enquanto CD foca na entrega automatizada e confiável.

2. Quais são os benefícios de usar CI/CD em projetos de software?

Resposta: - Qualidade: Detecção precoce de bugs e problemas - Velocidade: Deploy mais rápido e frequente - Confiabilidade: Processo padronizado e repetível - Colaboração: Integração contínua entre desenvolvedores - Feedback: Validação imediata de mudanças - Redução de riscos: Deploys menores e mais frequentes - Automação: Redução de erros humanos

3. Descreva os estágios típicos de um pipeline de CI/CD.

Resposta: 1. Build: Compilação e preparação do código 2. Test: Execução de testes automatizados 3. Deploy: Publicação em ambiente de destino 4. Verify: Validação da entrega e funcionamento

Estágios adicionais podem incluir: - Lint: Análise estática de código - Security: Verificação de vulnerabilidades - Performance: Testes de performance - Integration: Testes de integração

4. Como o GitLab facilita a implementação de práticas ágeis?

Resposta: - Issues: Gestão de user stories e tarefas - Milestones: Organização de sprints - Boards Kanban: Visualização do fluxo de trabalho - CI/CD integrado: Pipeline automático - Merge Requests: Revisão de código - Wiki: Documentação colaborativa - Time tracking: Controle de tempo - Labels: Categorização de issues

Questões Práticas

5. Como configurar um pipeline de CI/CD para um site Hugo?

Resposta:

# .gitlab-ci.yml
stages:
  - build
  - test
  - deploy

build:
  stage: build
  script:
    - hugo --minify
  artifacts:
    paths:
      - public/

test:
  stage: test
  script:
    - hugo --minify --quiet
  only:
    - merge_requests

deploy:
  stage: deploy
  script:
    - rsync -av public/ $DEPLOY_PATH
  only:
    - main

Passos: 1. Criar arquivo .gitlab-ci.yml na raiz do projeto 2. Configurar stages (build, test, deploy) 3. Definir scripts para cada stage 4. Configurar variáveis de ambiente 5. Testar o pipeline

6. Quais são os elementos essenciais de uma user story bem escrita?

Resposta: - Formato padrão: “Como [usuário], eu quero [funcionalidade] para [benefício]” - Critérios de aceitação: Condições específicas e testáveis - Estimativa: Pontos de story ou horas - Prioridade: Nível de importância - Dependências: Relacionamentos com outras stories - Labels: Categorização (bug, feature, enhancement)

Exemplo:

Como visitante do site, eu quero navegar pelas páginas para conhecer os membros da equipe

Critérios de Aceitação:
- Menu de navegação visível
- Links funcionais entre páginas
- Design responsivo
- Tempo de carregamento < 3 segundos

7. Como realizar um sprint planning eficaz?

Resposta: Preparação: - Product Backlog refinado - Estimativas atualizadas - Capacidade da equipe definida

Processo: 1. Revisão do backlog: Priorização e refinamento 2. Seleção de itens: Baseada na capacidade da equipe 3. Decomposição: Breaking down em tarefas 4. Estimativas: Esforço e complexidade 5. Atribuição: Responsáveis por cada tarefa 6. Objetivo: Definição clara do sprint goal

Ferramentas: - Planning poker para estimativas - Board Kanban para visualização - Burndown chart para acompanhamento

8. Quais métricas são importantes para avaliar o sucesso de um sprint?

Resposta: Métricas de Velocidade: - Story points entregues - Número de user stories completadas - Burndown rate

Métricas de Qualidade: - Bugs encontrados - Defeitos em produção - Cobertura de testes

Métricas de Processo: - Tempo de ciclo - Lead time - Throughput

Métricas de Equipe: - Satisfação da equipe - Impedimentos resolvidos - Colaboração

Métricas de Negócio: - Satisfação do cliente - Valor entregue - ROI do sprint

Questões de Aplicação

9. Descreva como você implementaria o Sprint 1 do projeto Portfólio.

Resposta: Objetivo: Estabelecer base técnica e organizacional

User Stories: 1. Como desenvolvedor, eu quero configurar o ambiente Hugo para começar o desenvolvimento 2. Como visitante, eu quero ver uma página inicial atrativa para conhecer o projeto 3. Como usuário, eu quero navegar entre páginas para acessar diferentes seções 4. Como desenvolvedor, eu quero CI/CD configurado para deploy automático

Tarefas: - Setup do ambiente Hugo - Configuração do tema - Criação da página inicial - Implementação da navegação - Configuração do pipeline CI/CD - Testes e validação

Critérios de Sucesso: - Site funcionando localmente - Deploy automático ativo - Navegação funcional - Design responsivo

10. Explique como o Hugo se integra com o pipeline de CI/CD.

Resposta: Integração: - Hugo gera sites estáticos otimizados - Build rápido e eficiente - Output em pasta public/ - Compatível com deploy automático

Pipeline: 1. Build: hugo --minify gera o site 2. Test: Validação do build 3. Deploy: Upload da pasta public/ 4. Verify: Teste do site online

Vantagens: - Build extremamente rápido - Sites otimizados para performance - Deploy simples (apenas arquivos estáticos) - Compatível com CDN e cache

Configuração:

build:
  script:
    - hugo --minify
  artifacts:
    paths:
      - public/

Questões de Análise

11. Analise os benefícios de usar metodologias ágeis em projetos acadêmicos.

Resposta: Benefícios: - Aprendizado prático: Experiência real com metodologias - Colaboração: Trabalho em equipe efetivo - Iteração: Melhoria contínua do projeto - Transparência: Visibilidade do progresso - Adaptação: Flexibilidade para mudanças

Desafios: - Tempo limitado: Sprints adaptados ao calendário acadêmico - Experiência: Curva de aprendizado inicial - Recursos: Limitações de infraestrutura - Avaliação: Métricas adaptadas ao contexto

Adaptações necessárias: - Sprints de 2-3 semanas - Foco em aprendizado - Métricas simplificadas - Retrospectivas educativas

12. Compare as vantagens e desvantagens de sites estáticos vs dinâmicos para o projeto Portfólio.

Resposta: Sites Estáticos (Hugo): - Vantagens: Performance, segurança, simplicidade, deploy fácil - Desvantagens: Limitações de interatividade, atualizações manuais

Sites Dinâmicos: - Vantagens: Interatividade, atualizações em tempo real, funcionalidades avançadas - Desvantagens: Complexidade, performance, segurança, manutenção

Para o projeto Portfólio: - Estático é ideal: Conteúdo relativamente estático, foco em performance - Benefícios: Deploy simples, segurança, velocidade - Limitações: Menos interatividade (aceitável para portfólio)

Questões de Síntese

13. Sintetize os principais conceitos aprendidos nesta aula.

Resposta: Conceitos principais: 1. Execução de Sprints: Planejamento, desenvolvimento, revisão, retrospectiva 2. GitLab como ferramenta ágil: Issues, milestones, boards, CI/CD 3. CI/CD: Integração contínua, entrega contínua, pipelines 4. Hugo: Gerador de sites estáticos, performance, simplicidade

Aplicação prática: - Sprint 1 do projeto Portfólio - Configuração de pipeline CI/CD - Deploy automático - Entrega de incremento funcional

Benefícios: - Qualidade de software - Velocidade de entrega - Colaboração efetiva - Aprendizado prático

14. Como você aplicaria os conceitos de CI/CD em outros projetos?

Resposta: Aplicação geral: - Qualquer projeto de software: Build, test, deploy automático - Projetos web: Deploy automático em servidores - Aplicações mobile: Build e distribuição automática - APIs: Deploy e testes automatizados

Configuração básica: 1. Repositório: Git com branches 2. Pipeline: Build, test, deploy 3. Ambientes: Desenvolvimento, teste, produção 4. Monitoramento: Logs e métricas

Benefícios: - Qualidade consistente - Deploy confiável - Feedback rápido - Colaboração eficiente

15. Descreva como você faria a transição de um projeto tradicional para metodologia ágil.

Resposta: Planejamento da transição: 1. Análise do projeto atual: Estrutura, processos, equipe 2. Definição de objetivos: O que se quer alcançar 3. Treinamento da equipe: Conceitos ágeis, ferramentas 4. Piloto: Projeto pequeno para teste 5. Iteração: Ajustes baseados em feedback

Passos práticos: - Backlog: Conversão de requisitos em user stories - Sprints: Divisão do trabalho em iterações - Cerimônias: Implementação de reuniões ágeis - Ferramentas: Adoção de GitLab, boards, etc. - Métricas: Definição de KPIs ágeis

Desafios e soluções: - Resistência: Comunicação e treinamento - Processos: Adaptação gradual - Ferramentas: Migração incremental - Cultura: Mudança de mindset


Notas para o Professor

Pontos de Atenção

  • Enfatizar a diferença entre CI e CD
  • Destacar a importância da automação
  • Relacionar conceitos com prática real
  • Focar na aplicação em projetos acadêmicos

Sugestões de Discussão

  • Experiências com CI/CD
  • Desafios na implementação ágil
  • Comparação com metodologias tradicionais
  • Benefícios para carreira profissional

Recursos Adicionais

  • Documentação do GitLab CI/CD
  • Exemplos de pipelines
  • Casos de uso reais
  • Ferramentas alternativas
Back to top