v2_ArtigoCodeSmells_et_al_2023
v2_ArtigoCodeSmells_et_al_2023
v2_ArtigoCodeSmells_et_al_2023
Abstract. Computer science teaching approaches are aiming for more dynamic
teaching. The work developed in this article aims to describe the course of
Code Refactoring offered by the LearningLab project to students of the Russas
Campus of the Universidade Federal do Ceará (UFC), which uses interactive
teaching with a theoretical and practical base. The CodeSmells course for
beginners was conducted face-to-face with 20 students from the Software
Engineering and Computer Science courses. The results show, according to the
teaching methodology applied and the perception of the students, that the
majority enjoyed the practical activity and that more than 80% understood
and would be able to apply in practice the concepts learned.
Resumo. Abordagens de ensino de Computação estão visando um ensino mais
dinâmico. O trabalho desenvolvido neste artigo tem como objetivo descrever o
curso de Refatoração de Códigos ofertado pelo projeto LearningLab aos
estudantes do Campus Russas da Universidade Federal do Ceará (UFC), o
qual utilizou o ensino interativo de base teórica e prática. O curso CodeSmells
para iniciantes foi realizado presencialmente com 20 estudantes dos cursos de
Engenharia de Software e Ciência da Computação. Os resultados mostram, de
acordo com a metodologia de ensino aplicada e a percepção dos estudantes,
que a maioria gostou da atividade prática e que mais de 80% compreendem e
seriam capazes de aplicar na prática os conceitos aprendidos.
1. Introdução
O ensino de Engenharia de Software (ES) propõe o desenvolvimento de habilidades
como trabalho em equipe, aplicação de técnicas para gestão de projetos de software e
desenvolvimento de diferentes soluções para diferentes domínios (Souza et al., 2021).
Anomalias que podem indicar problemas nos aspectos da qualidade do código do
software são chamadas de code smells (Fowler, 2018). As ocorrências desses problemas
podem dificultar a manutenção do software e levar à necessidade da refatoração de
código (Fontana et al., 2012). O trabalho de Mendes et al., (2020) retrata que a
Manutenção de Software foi uma das três disciplinas de maior dificuldade no
aprendizado, dada a forma rápida e genérica com que os conteúdos foram transmitidos e
explicados em sala de aula.
Hartwig et al., (2019) identificam as metodologias ativas mais apropriadas para
o ensino de computação e informática nos cursos de graduação. Além disso, afirmam
que as mesmas estão ganhando espaço nas salas de aula com foco na inovação. Portanto,
a aprendizagem ativa envolve construir conhecimento em vez de recebê-lo passivamente
(Barbosa e Moura, 2013). Diante deste contexto, este artigo apresenta os resultados de
um relato de experiência do ensino e aprendizagem do curso presencial intitulado:
“CodeSmells? Aqui não! Limpando e Refatorando Códigos na Prática”.
O curso foi ofertado pelo projeto Laboratório de Ensino e Pesquisa de
Tecnologias alinhadas à Gestão do Conhecimento e Inovação em Processos de Software
(LearningLab) da Universidade Federal do Ceará (UFC) do Campus de Russas. O
objetivo do LearningLab é ensinar na prática os conceitos teóricos de computação
abordados em sala de aula. As aulas do curso foram ministradas presencialmente em
laboratórios da UFC, utilizando a ferramenta de comunicação WhatsApp para a
comunicação. Os dados coletados das percepções dos estudantes em relação ao ensino
do curso foram analisados de forma qualitativa e quantitativa.
Além desta seção introdutória, o artigo está organizado da seguinte forma: a seção 2
apresenta os trabalhos relacionados a este trabalho; a seção 3 detalha a metodologia
utilizada, durante a execução do curso; a seção 4 detalha os resultados obtidos através
das análises e discussões; e, por fim, a seção 5 apresenta a conclusão e considerações
finais.
2. Trabalhos Relacionados
A fim de potencializar a efetividade do ensino de programação, é fundamental resgatar
na comunidade do meio os seus conhecimentos, enriquecendo o aprendizado a partir de
artifícios e exemplos de diferentes âmbitos e experiências. Portanto, para complementar
o trabalho desenvolvido nesse artigo, foram identificados demais estudos com propostas
para a aplicação do ensino de programação, voltadas para a refatoração de códigos,
visando a qualidade do software e as boas práticas de codificação.
Piccinin et al. (2020) apresentam um estudo qualitativo dos relatos de
profissionais de desenvolvimento de software quanto à sua rotina de aprendizagem. Os
insumos extraídos das entrevistas realizadas constatam a importância da gerência da
rotina desses profissionais, mapeando que suas experiências se assemelham às de
aprendizes autorregulados e que suas dificuldades de planejamento se destacam como
pontos fracos em seu aprendizado.
É com foco no projeto de desenvolvimento na área de tecnologia da informação
que a refatoração atua como um dos principais pontos fortes de qualidade e manutenção.
Dito isso, Martin et al., (2008) define refatoração como um processo que melhora a
estrutura interna do código sem alterar o seu comportamento interno. O trabalho de
Rabelo et al., (2018), ressalta a importância de aplicar a refatoração na prática para que
a etapa de desenvolvimento tenha um código bem estruturado e com boa qualidade, por
meio da utilização de ferramentas ou na técnica de revisão de código, chamada de
review.
O presente artigo trata de analisar a experiência do ensino da refatoração de
códigos em um curso rápido de 5 dias para os estudantes de Engenharia de Software e
Ciência da Computação da Universidade Federal do Ceará, Campus de Russas. O curso
adotou uma abordagem prática e de revisão de critérios de qualidade para preparar os
alunos para o mercado de trabalho.
3. Metodologia
O propósito do curso do projeto LearningLab é aproximar os alunos das vivências
práticas dos conteúdos ensinados em sala de aula. A metodologia de estudo utilizada
neste trabalho é composta por 4 etapas substanciais: (a) planejamento do curso - parte
teórica e prática; (b) divulgação do curso; (c) aplicação do curso; e, (d) coleta e análise
de dados. A seguir, serão descritas cada uma das etapas da metodologia do curso.
3.1. Planejamento
O curso foi planejado pela categorização de suas necessidades básicas, que incluem: (1)
base de estudo teórica e definição da prática; (2) escolha do público alvo; e, (3) plano de
ensino. Primeiramente, definir a base teórica do curso é essencial para consulta e
construção do material, o qual extraiu conteúdo do livro “Código Limpo” de Robert
Martin (Martin, 2008). A partir dele, foram extraídos os pontos-chave da refatoração de
códigos para o Notion(1) (aplicação de gerenciamento de conhecimento) e para uma
apresentação com slides. Portanto, com base na revisão de códigos e no alicerce teórico,
foram criadas as atividades práticas.
Para atingir aqueles que necessitavam, o planejamento do curso definiu seu
público-alvo com base no perfil comum dos estudantes do campus. Em síntese, a
organização do curso concluiu que alunos do 2º ao 6º período enfrentam dificuldades em
programação devido ao conhecimento introdutório e raso, motivando a sua busca por
otimização. Portanto, estudantes do 2° período em diante dos cursos de Engenharia de
Software e Ciência da Computação podiam participar das inscrições. Das 40 inscrições
no curso, 19 foram de alunos de Engenharia de Software e 21 de Ciência da
Computação da UFC, com 20 alunos participando efetivamente das aulas. Com foco em
auxiliar aqueles que mais convivem com a dificuldade no aprendizado de programação,
a orientação do desenvolvimento das atividades, materiais e divulgação do curso foi
guiada a captar a atenção e satisfazer as necessidades dos estudantes iniciantes do
campus e com conhecimento escasso, os quais se encontram principalmente entre os 2º
e 6º semestre dos cursos de Engenharia de Software e Ciências da Computação. O curso
foi presencial com 5 aulas (duração de 2 horas cada), e foi executado no período de
agosto (dia 30) a setembro (dia 15) de 2022. O plano de ensino do curso foi
desenvolvido pelo time do projeto LearningLab, composto pelo instrutor, coordenadora
e monitores. A visão ampla construída a partir dessa equipe, juntamente com a revisão
da orientadora do projeto (que também é professora da cadeira de Manutenção de
Software desde 2020.1 da UFC - Campus-Russas), resultou em um cronograma
presencial focado no cotidiano dos alunos do campus. O plano de ensino é descrito a
seguir:
4. Resultados e Discussões
A fim de coletar o feedback preciso dos alunos, as perguntas foram recolhidas em
formato qualitativo e quantitativo, buscando opiniões sinceras e análises numéricas. As
etapas para análise e coleta dos dados foram: (i) Realização do Curso: possibilitou aos
estudantes vivenciarem as experiências para responderem o formulário de feedback; (ii)
Coleta de Dados: um formulário(6) elaborado pelos integrantes do projeto e validado
pela orientadora foi utilizado para coletar dados dos alunos sobre fatores relacionados à
aprendizagem; (iii) Análise dos Dados: a análise qualitativa utilizou procedimentos de
codificação para identificar as principais categorias de resultados, incluindo (a) o que
mais gostou no curso e (b) aspectos positivos da metodologia de ensino. A análise
quantitativa utilizou de um formulário baseado no método IMI (Inventário de Motivação
Intrínseca) (McAuley et al., 1991) para análise dos dados coletados. Foram coletados
insumos sobre o nível de conhecimento em Código Limpo, bem como percepções sobre
satisfação, apreensão, dificuldades e facilidades durante o curso.
A seguir será descrito os resultados que foram obtidos através de ambas análises
que foram utilizadas nesta pesquisa.
(1)
https://bit.ly/notionCodeSmells;
(2)
https://bit.ly/materialCodeSmells;
(3)
https://www.whatsapp.com/?lang=pt_br;
(4)
https://github.com/usrmaia/curso-codesmells-aqui-nao;
(5)
https://www.instagram.com/learninglabuf/;
(6)
https://bit.ly/formulariocodesmells.