Pular para o conteúdo

Projeto Final - Clean Code

Neste desafio, vocês deverão escolher um projeto já desenvolvido em alguma disciplina anterior da graduação e aplicar refatorações baseadas nos princípios estudados até agora no curso de Clean Code.

  • Identificar e eliminar code smells;
  • Aplicar princípios do livro Clean Code e outros conceitos de boas práticas de programação discutidas em aula;
  • Criar uma suíte de testes unitários para cobertura parcial do projeto;
  • Produzir documentação da refatoração e apresentar os resultados.
  • Formar grupos de 3 a 4 integrantes;
  • Escolher um projeto de médio porte já desenvolvido anteriormente no curso (não serão aceitos scripts pequenos);
    • Será considerado médio porte um projeto entre 400 e 800 linhas de código;
    • O projeto deve possuir pelo menos 6 code smells relevantes;
    • O projeto deve possuir funcionalidades reais (não serão aceitos projetos que sejam apenas exercícios ou exemplos);
    • O projeto deve ser implementado em uma linguagem de programação que suporte testes unitários e ferramentas de linter;
  • Realizar refatorações substanciais que justifiquem 20+ horas de trabalho, podendo estar distribuídas entre os integrantes do grupo;
  • Aplicar melhorias em organização, nomes, estrutura, modularização e dependências;
  • Implementar pelo menos uma suíte de testes para cobertura parcial (cerca de 50% de cobertura);
  • Implementar a estilização do código do projeto usando uma ferramenta de linter;
  • Redesenhar partes do projeto conforme necessário;
  • Eliminar code smells detectados;
  • Organizar dependências e acoplamento de forma adequada;
  • Criar dois branches no repositório:
    • original — versão antiga do projeto;
    • main — versão refatorada.
  • Incluir um arquivo README.md com:
    • Descrição do software e das principais funcionalidades;
    • Análise dos principais problemas detectados;
    • Estratégias de refatoração utilizadas;
    • Descrição dos testes implementados e da cobertura atingida;
    • Descrição da instalação e execução;
  • ChangeLog com descrição das mudanças em um arquivo separado CHANGELOG.md (seguir recomendações de Keep a Changelog);
  • Semana 01 — Lançamento do projeto, organização dos grupos e Entrega 01
  • Semana 02Entrega 02
  • Semana 03 — Refatoração e desenvolvimento do projeto
  • Semana 04 — Entrega final do projeto e Apresentação das equipes;

Cada entrega fora do prazo pode gerar uma penalidade de até 2 pontos na nota final do projeto. Cada entrega deverá ser realizada diretamente no AVA. A entrega final do projeto deverá ser realizada por meio de um repositório público no GitHub, cujo o endereço deverá ser enviado também no AVA.

  • Entrega 01: Documento contendo nome dos integrantes, descrição do software a ser analisado e suas principais funcionalidades, endereço do repositório do código original;
  • Entrega 02: Documento contendo a descrição dos principais problemas detectados e da estratégia de refatoração (quais ferramentas vão utilizar);
  • Entrega Final: Finalização da refatoração e apresentação;

O objetivo das apresentações é compartilhar o software desenvolvido e os desafios encontrados durante a refatoração.

  • Cada grupo terá até 15 minutos para apresentar o projeto.
  • A apresentação deve conter:
    • Descrição do software, principais funcionalidades, finalidade inicial;
    • Demonstração rápida do projeto funcionando.
    • Análise dos principais problemas detectados;
    • Melhorias detectadas no código e na estrutura do projeto;
    • Descrição dos testes implementados e da cobertura atingida;

Cada critério vale 1,0 ponto se estiver Excelente, 0,5 ponto se estiver Satisfatório e 0,0 ponto se Não Atende. Os critérios possuem multiplicadores indicados ao lado do nome. O resultado de cada critério será dado pela pontuação vezes o seu multiplicador. A média final será a soma de todos os multiplicadores ponderados pelo peso total.

Critério (Peso)Excelente (1,0 ponto)Satisfatório (0,5 ponto)Não Atende (0,0 ponto)
README.md e ChangeLog (2x)Documentação clara, completa e ChangeLog bem organizadoDocumentação ou ChangeLog incompletosNão entregou documentação
Identificação de Code Smells (2x)Documentou diversos code smells relevantesDocumentou apenas alguns code smells relevantesNenhum code smell relevante foi identificado
Aplicação de Clean Code (2x)Refatoração profunda e consistente segundo os princípios estudadosRefatoração parcial ou apenas estéticaNão aplicou princípios de Clean Code
Funcionalidades (1x)O projeto apresenta funcionalidades com casos de uso reaisApresenta funcionalidades limitadas, mas com caso de uso realPossui poucas funcionalidades ou não apresenta funcionalidades com casos de uso reais
Organização e Modularização (1x)Organização e modularização consistentes e bem feitasOrganização e modularização não consistenteNão organizou e/ou modularizou o projeto
Integração com Linter (1x)Integrou o uso de linter de forma consistente e em diferentes etapas do projeto (ex.: CICD e Git Hook)Utilizou linter em até uma etapa do projeto (ex.: instalado no projeto)Não há integração de linter em nenhuma etapa
Testes Unitários e Cobertura (1x)Implementou suíte funcional com cobertura significativaCriou testes básicos para cobertura mínimaNão implementou testes