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.
Objetivos
Seção intitulada “Objetivos”- 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.
Requisitos do Projeto
Seção intitulada “Requisitos do Projeto”- 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.mdcom:- 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);
Cronograma
Seção intitulada “Cronograma”- Semana 01 — Lançamento do projeto, organização dos grupos e
Entrega 01 - Semana 02 —
Entrega 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.
Entregas (todos postam)
Seção intitulada “Entregas (todos postam)”- 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;
Apresentação
Seção intitulada “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;
Rubrica de Avaliação (Total: 10 pontos)
Seção intitulada “Rubrica de Avaliação (Total: 10 pontos)”Cada critério vale 1,0 ponto se estiver
Excelente, 0,5 ponto se estiverSatisfatórioe 0,0 ponto seNã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 organizado | Documentação ou ChangeLog incompletos | Não entregou documentação |
| Identificação de Code Smells (2x) | Documentou diversos code smells relevantes | Documentou apenas alguns code smells relevantes | Nenhum code smell relevante foi identificado |
| Aplicação de Clean Code (2x) | Refatoração profunda e consistente segundo os princípios estudados | Refatoração parcial ou apenas estética | Não aplicou princípios de Clean Code |
| Funcionalidades (1x) | O projeto apresenta funcionalidades com casos de uso reais | Apresenta funcionalidades limitadas, mas com caso de uso real | Possui 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 feitas | Organização e modularização não consistente | Nã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 significativa | Criou testes básicos para cobertura mínima | Não implementou testes |