O PAC da 6ª fase é uma disciplina prática onde os alunos desenvolvem um projeto de software aplicando conceitos de:
- Análise, Projeto e Construção Ágil
- Algoritmos Avançados
- Inteligência Artificial
- Manutenção e Melhoria de Software
Neste semestre, o desafio é criar uma ferramenta CLI que auxilie no ciclo de manutenção e qualidade de código.
Os alunos deverão, individualmente, em duplas ou em trios, desenvolver uma ferramenta CLI para análise de código.
- Line Interface Guidelines <<< excelente guia!
- Build a CLI with Node
- Criando sua CLI com Node
- CLI in Python
- Creating A CLI In Golang
O CLI deve contemplar:
- Um comando/forma para ser instalado.
- Um conjunto de análises, conforme listado abaixo.
- Um Help acessível a partir da ferramenta (ex.: cli --help)
- Um conjunto de testes unitários para cada funcionalidade implementada
- Uma documenação no git do projeto, detalhando o sua arquitetura e seu uso.
As análises que a ferramenta deve suportar, contempla:
| # | Funcionalidade | Justificativa |
|---|---|---|
| 1.1 | Contagem de Linhas de Código (LOC) | Simples pois apenas lê o arquivo e conta linhas de código e comentários. Não exige análise sintática profunda. |
| 1.2 | Contagem de Funções e Classes | Exige parsing básico do código para detectar padrões como def, class ou {}. Pode ser feito com expressões regulares. |
| 1.3 | Linhas de Comentário | Número de linhas de documentação/comentário. |
| 2.1 | Níveis de Indentação | Pode ser feito contando tabulações/espaços por linha. Exige pouca lógica, mas requer atenção para diferentes estilos de código. |
| 2.2 | Número de Dependências Externas | Exige leitura e análise dos imports no código, podendo variar conforme a linguagem. Simples, mas requer um parser para import e require(). |
| 2.3 | Proporção Comentário/Código | Percentual de código comentado com relação ao total de linhas do codigo. Deve ser gerado por Unidade de código |
| 2.4 | Número de Métodos Privados/Públicos | Mede a quantidade de métodos privados e públicos em uma classe. Ajuda a avaliar o nível de encapsulamento e modularidade do código. |
| 3.1 | Tamanho Médio das Funções | Extensão da contagem de funções, somando as linhas de cada uma e dividindo pelo total. Ainda simples, pois usa análise estrutural básica. |
| 3.2 | Identificação de Código Duplicado | Moderado, pois exige análise de trechos de código para encontrar padrões repetidos. Pode ser implementado comparando hashes de blocos de código. |
| 3.3 | Predição de Bugs com IA | Submter trechos de código para uma API de LLM solicitando sugestões de melhoria, indicações de problemas e etc. |
| 3.4 | Análise Assintotica das Funções | técnica usada para estudar o comportamento da complexidade de um algoritmo conforme o tamanho da entrada cresce. |
| A.1 | Identificação de Código Morto | Complexo, pois requer análise de fluxo de execução para detectar funções e classes não utilizadas. Pode exigir análise do Abstract Syntax Tree (AST). |
| A.2 | Análise Ciclomática do Código | Extremamente complexa, pois exige a construção de um grafo de fluxo de controle e cálculo da quantidade mínima de caminhos independentes, demandando análise profunda do código. |
A avaliação do trabalho será baseada na entrega progressiva das funcionalidades e na demonstração prática do CLI.
Cada nível da avaliação segue a seguinte estrutura:
- Nota 6.0: Implementar 1 funcionalidade.
- Nota 8.0: Implementar 2 funcionalidades.
- Nota 10.0: Implementar todas as funcionalidades previstas para N1.
- Nota 6.0: Implementar 2 funcionalidades.
- Nota 7.0: Implementar 3 funcionalidades.
- Nota 8.0: Implementar 4 funcionalidades.
- Nota 9.0: Implementar 5 funcionalidades.
- Nota 10.0: Implementar 6 funcionalidades.
- Nota 6.0: Ter pelo menos 5 funcionalidades concluídas (somando N1, N2 e N3).
- Nota 7.0: Ter pelo menos 6 funcionalidades concluídas (somando N1, N2 e N3).
- Nota 8.0: Ter pelo menos 7 funcionalidades concluídas (somando N1, N2 e N3).
- Nota 9.0: Ter pelo menos 8 funcionalidades concluídas (somando N1, N2 e N3).
- Nota 9.5: Ter pelo menos 9 funcionalidades concluídas (somando N1, N2 e N3).
- Nota 10.0: Ter pelo menos 8 funcionalidades concluídas, sendo 1 funcionalidade avançada.
- Linguagem: Python, Java, JavaScript, Go ou .Net
- Bibliotecas: AST, Pylint, ESLint, SonarQube API
- IA/ML: TensorFlow, PyTorch, Hugging Face
- Pipelines: GitHub Actions, GitLab CI/CD, Azure DevOps
| Entrega | Descrição | Data |
|---|---|---|
| N1 | CLI básico para análise de código + help + teste unitários | 20/03/2025 |
| N2 | N1 + Validações da N2 + pipeline de build | 15/05/2025 |
| N3 | N2 + Integração com IA para suporte a análise + Permitir o uso em CI/CD de projetos de projetos na linguagem | 26/06/2025 |
- A documentação e a qualidade do código também serão consideradas na avaliação.
- Projetos com baixa qualidade de código ou sem funcionamento adequado podem perder pontuação, mesmo que tenham o número mínimo de funcionalidades entregues.
- Recomenda-se que as equipes adotem boas práticas desde o início e realizem testes para validar suas implementações.