Pular para o conteúdo principal

Análise de projetos de outras universidades

· Leitura de 4 minutos
Renan Yudi
Ingresso em 2020

A fim de escolher as melhores tecnologias e os procedimentos para a reescrita do FCT App, a comissão de 2024 analisou projetos de outras universidades. A seguir, estão listados os projetos analisados, os problemas encontrados e as soluções propostas.

Projetos analisados

NomeDescriçãoTecnologiaUniversidade
SemcompSite da Semana de ComputaçãoNextJS + TSICMC-USP
Xnths/symcompSite do Simpósio da ComputaçãoNextJS + JSIME-USP
apoiobcc/site-semana-2023Site da Semana da ComputaçãoNextJS + TSIME-USP
apoiobcc/site-semana-2022Site da Semana da ComputaçãoVue + JSIME-USP
cecomp-rp/siteSite do Centro Estudantil da Ciência da ComputaçãoHandlebarsFFCLRP-USP
eccjr/site-cacic-2023Site do Centro Acadêmico de Ciência da ComputaçãoGatsbyIBILCE-Unesp SJRP
semac.ccSite da Semana da ComputaçãoNextJSIBILCE-Unesp SJRP
seccomp.com.brSite da Semana da ComputaçãoVueIGCE-Unesp RC
petcompufc/petcompufc.github.ioSite do PET ComputaçãoGatsbyUFC
secompufscar/site-secompSite da Semana de ComputaçãoFlaskUFSCar
secompufscar.com.brSite da Semana de ComputaçãoNextJSUFSCar
secompufscar/site-secomp-vueSite da Semana de ComputaçãoVue + JSUFSCar
secompufscar/site-secompbetaSite da Semana de ComputaçãoReactUFSCar
pedrozle/semcomp-unirSite da Semana de ComputaçãoNextJS + TSUNIR
DevMobUFRJ/BandejAppSite dos Restaurantes UniversitáriosReactUFRJ
caecomp-ufrn🥇Site do Centro Acadêmico de Engenharia de ComputaçãoVue + JSUFRN
nota

Nem todos os projetos analisados estão listados, pois foram perdidos. :-(

Problemas encontrados

Organização do projeto

  • Projeto sem licença;
  • Projeto com licença, mas sem arquivo LICENSE;
  • Falta de documentação acessível:
    • Se alguma documentação existe, as instruções são insuficientes;
  • Monorepo:
    • Projetos sem uso permanecem no repositório;
    • Divisão desnecessária de frontends (sem a aplicação de uma estrutura de microfrontends);
  • Commits sem padrão:
    • Commitlint não foi adicionado ou foi desativado posteriormente;
    • Commits com mensagens longas, vagas ou com emojis.
    • Commits vazios (sem alterações).

GitHub

  • Uso desnecessário da língua inglesa:
    • Por quê escrever as instruções de desenvolvimento e descrições de issues em inglês se os desenvolvedores são brasileiros?
  • Labels inadequadas:
    • Pouco explicativas;
    • Fixação de prazos por labels, o que deveria ser feito na aba de Projetos.
  • Issues e PRs:
    • Sem labels;
    • Linguajar pouco direto;
    • PRs com muitas alterações não relacionadas;
  • Aplicativos não usados continuam instalados;
  • Desenvolvedores têm poderes no repositório ao invés do desenvolvimento acontecer em forks.

Escolhas técnicas

  • Uso do npm ao invés de soluções mais rápidas;
  • Falta de Continuous Integration (CI);
  • Técnicas de deploy estranhas e manuais:
    • Script dá git pull && docker compose up --build no servidor;
  • Uso de frameworks muito nichados:
    • Handlebars;
    • Gatsby.

Segurança

  • Desenvolvedores têm acesso ao arquivo .env do backend;
  • Publicação de chaves de API;
  • Publicação de banco de dados sem criptografia;
  • Vazamento de informações pessoais ou sensíveis em capturas de telas;

Qualidade e organização do código

  • Desenvolvedores não testam antes do merge;
  • Múltiplas pastas com o mesmo propósito;
  • Sem tratamento de erros para requisições;
  • Imagens não otimizadas somam-se significativamente ao tamanho do site:
    • Em um dos projetos, o tamanho total de um site ficou em 20 MB.
  • Código antigo não removido:
    • Em um dos projetos, o TailwindCSS é importado três vezes no frontend, ora por CDN, ora por pacote;
  • Falta de padronização:
    • Sem execução do Eslint ou do Prettier;
    • Uso misto de JavaScript e TypeScript:
      • Componentes ora com tipagem, ora sem;
    • Componentes:
      • Grandes demais (500 linhas);
      • Pequenos demais (11 linhas que poderiam estar em um componente maior).
  • Links quebrados (404);
  • Branch da produção mais avançada que a de desenvolvimento;
  • Passagens de dados (props) para child-components sem sentido;

Interface do usuário

  • Interface do usuário comum não mobile-first;
  • Interface não funciona em dispositivos com telas horizontais;
  • Falta de compatibilidade com leitores de tela;
  • Contraste inadequado;
  • Reaproveitamento de componentes sem testes para averiguar o funcionamento da lógica em todos os locais;