Skip to content

Grupo 01 - 2020/2 - Scraping de turmas e professores, User stories#122

Open
masathayde wants to merge 18 commits intoEngSwCIC:developfrom
masathayde:master
Open

Grupo 01 - 2020/2 - Scraping de turmas e professores, User stories#122
masathayde wants to merge 18 commits intoEngSwCIC:developfrom
masathayde:master

Conversation

@masathayde
Copy link

Engenharia de Software 2020/2 - Grupo 01

Sprint #1

Integrantes

João Moraes (@joaoadm94) - 16/0126975
Marco Antônio (@masathayde) - 18/0126814
Daniel Carvalho (@danielc-957) - 16/0116821
Rafael Barbosa de Sousa (@rafaelbarbosas) - 17/0043827

Funcionalidade principal

  • Realizar scraping dos dados presentes no HTML gerado pelo SIGAA (turmas, professores responsáveis).

User stories adicionadas

  1. Exibir uma lista de disciplinas importada do site SIGAA
  2. Filtrar lista de disciplinas importadas do site de matrícula
  3. Adicionar disciplinas importadas do site de matrícula ao banco de dados
  4. Adicionar todas as disciplinas importadas do site de matrícula ao banco de dados
  5. Inverter marcação das caixas na página de importação de disciplinas
  6. Importar uma lista de professores importada do site SIGAA

icaronr and others added 11 commits March 30, 2021 07:03
fix gemfile and migrations
…aping de dados de disciplinas e de professores do SIGAA
…stories novas que se alinham melhor com os objetivos do grupo.
anterior..
- Removida restrição de números no nome de disciplinas.
* dashboard_controller
 - Adicionado método parse_turmas_file.
 - Adicionado método criar_professor_com_valores_padroes.
 - Adicionado método criar_disciplina_com_valores_padroes.
 - Adicionado método criar_turma_a_partir_de_parametros.

Comentários: Inicialmente, eu queria ter colocado todas as funções novas
em um concern, mas tive problemas com a inclusão e uso de concerns.
Então, decidi deixar os métodos no controller, e refatorar depois.

* dashboard/importar_disciplinas.html.haml
 - Adicionado formulário para importar arquivos.

* routes.rb
 - Adicionada rota 'post' para 'dashboard/importar_disciplinas'

* db/migrate/20191025183323_create_turmas.rb
 - Adicionado campo para professor auxiliar.

* features/step_definitions/custom_steps.rb
 - Ajustes em definições que não estavam funcionando corretamente.

* features/files/turmas_test_happy.html
 - Arquivo para testes adicionado.

* features/adminImportarDisciplinas.feature
* features/adminVerTurmasEmDisciplina.feature
 - Ajustes nas histórias para conformar com outras alterações no código.

Comentários: Embora em testes manuais, o parsing e criação de
disciplinas pareça estar funcionando corretamente, o segundo cenário no
teste adminImportarDisciplinas.feature, o qual envolve importar
disciplinas que já existem e verificar se não há duplicatas, não está passando. Em outras palavras,
quando testo manualmente, não há problemas, mas quando o teste é feito
automaticamente pelo Cucumber, aparecem disciplinas repetidas. Ainda não
sei o motivo dessa discrepância.
* spec/controllers/dashboard_controller_spec.rb
 - Método raspar_disciplinas agora checa se um arquivo foi enviado.
 - Método parse_turmas_file agora extrai código da disciplina, remove o
prefixo 'CIC', então converte a string para inteiro.

* Modelo Disciplina
 - O atributo 'cod_disciplina' agora deve ser único.

* features/adminImportarDisciplinas.feature
 - Alteração nos testes.

* spec/controllers/dashboard_controller_spec.rb
 - Adicionados testes unitários para os métodos criados neste branch.
* A view turmas/show agora é disciplinas/show, para melhor se adequar à
estrutura esperada da página.
* Ajustes em definições de passos incorretas nos testes de Cucumber.
@masathayde
Copy link
Author

Engenharia de Software 2020/2 - Grupo 01

Sprint #2

Integrantes

Funcionalidade principal

  • Realizar scraping dos dados presentes no HTML gerado pelo SIGAA (turmas, professores responsáveis).

User stories

  1. Importar uma lista de disciplinas do site SIGAA
  2. Ir para página de turmas de uma disciplina
  3. Ver uma lista de turmas de uma disciplina

Política de branching

Feature branching.

Mudanças

  1. Alterações nas user stories
  2. Adicionado funcionalidade de parsing de arquivo. A partir de um arquivo html em formato padrão, o sistema cria registros de disciplinas, professores e turmas.
  3. Alterações na view importar_disciplinas, para inclusão da nova funcionalidade
  4. Alterações nas views dashboard/disciplinas para inclusão de link para páginas de disciplinas individuais
  5. Adicionados testes de Cucumber, juntamente com as definições de passos necessárias
  6. Adicionados testes unitários (RSpec) para os métodos relacionados a funcionalidade de scraping

Comentários

As user stories iniciais foram alteradas após uma reunião com o monitor Ícaro no dia 29/03/2021, na qual foram ele proveu especificações mais detalhadas, além de oferecer conselhos. Com isso, o número de stories passou para 3, as quais foram completadas com sucesso.
A funcionalidade de parsing e criação de registros foi adicionada. No entanto, na próxima sprint, planeja-se uma refatoração, de forma a remover código excessivo do controller dashboard e aumentar modularização.
Para maiores detalhes, checar as mensagens de commit.

* models/turma.rb
- Método criar_disciplinas_a_partir_de_parametros movido para cá, vindo
de dashboard_controller.rb. O método também foi refatorado.
* models/disciplina.rb
- Método criar_disciplinas_com_valores_padroes colocado aqui.
Previamente estava em dashboard_controller.rb. Também foi refatorado.
* models/professor.rb
- Método criar_professores_com_valores_padroes colocado aqui.
Previamente estava em dashboard_controller.rb. Também foi
refatorado.
* controllers/concerns/turmas_parser.rb
- Métodos relacionados ao parsing do arquivo de turmas enviado foram
movidos aqui. Anteriormente estavam em dashboard_controller.rb

* controllers/dashboard_controller.rb
- Método raspar_disciplinas foi refatorado. Agora possui nota de
complexidade no padrão exigido (<20).
* controllers/concerns/turmas_parser.rb
- Os métodos do módulo foram refatorados para reduzir complexidade.
* spec/controllers/dashboard_controler_spec.rb
- Testes ajustados para conformar com a refatoração.

Documentação:

* controllers/concerns/turmas_parser.rb
- Módulo completo foi documentado.

* controllers/dashboard_controller.rb
- Método raspar_disciplinas, feito pelo grupo, foi documentado.
@masathayde
Copy link
Author

Engenharia de Software 2020/2 - Grupo 01

Sprint #3

Integrantes

Funcionalidade principal

  • Realizar scraping dos dados presentes no HTML gerado pelo SIGAA (turmas, professores responsáveis).

User stories

  1. Importar uma lista de disciplinas do site SIGAA
  2. Ir para página de turmas de uma disciplina
  3. Ver uma lista de turmas de uma disciplina

Política de branching

Feature branching.

Mudanças

  1. Utilização da gema RubyCritic para avaliar qualidade do código
  2. Refatoração dos métodos criados durante as sprints anteriores
  3. Alteração dos testes unitários (RSpec) para estarem de acordo com os novos métodos
  4. Documentação dos métodos criados

Comentários

Na sprint anterior, foi implementada a funcionalidade principal atribuída ao grupo. Fora alterações em views, a lógica havia sido colocada exclusivamente no arquivo controllers/dashboard_controller.rb. Com a orientação do monitor Ícaro, decidiu-se remover o código do controller e colocá-lo em um módulo à parte, utilizando-se um concern.
A gema RubyCritic foi utilizada para avaliar o código, de forma a conduzir o processo de refatoração. Em geral, os métodos criados apresentaram alto nível de complexidade, e pouca modularidade. O método responsável pelo parsing do arquivo, em particular, apresentava nota flog igual a 54. Já o método chamado na view para importação de disciplinas - raspar_disciplinas -, apresentou nota flog de 45.
Após a refatoração, todos os métodos tiveram uma redução de complexidade significativa, com uma redução drástica de "smells". A tabela a seguir resume a diferença entre o código antes e depois da refatoração, usando as medidas do RubyCritic.

---------- Nota Linhas Complexidade/método Nº de métodos Smells
Antes C 83 23.5 5 40
Depois B 122 9.2 9 11

Os smells remanescentes referem-se a alertas de número grande de instruções em certos métodos. Em alguns deles, o número de instruções excedeu o limite de 5, seguindo a configuração padrão do RubyCritic. Nesses métodos, escolheu-se não diminuir mais o número de instruções, pois julgou-se que poderia haver perda de legibilidade e clareza. Ainda assim, o número máximo de instruções nos métodos não passou de 7.
Ao final, cada um dos métodos criados pelo grupo foi documentado, de acordo com o padrão RDoc. Documentação também foi gerada com o uso da gema RDoc.

Para maiores detalhes do refatoramento, checar as mensagens de commit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants