Avaliando a Construção do Conhecimento em Programação Através da Taxonomia SOLO

A great challenge in the teaching of programming is evaluating the process of building this knowledge. Automated assessment tools evaluate the final produced code. However, the development process that involves choosing adequate structures to implement the problem solution can reveal a clear picture of the beginner’s knowledge of programming. In this work, we seek to evaluate the students’ progress considering the code complexity of their programming exercises using a framework that extends the SOLO taxonomy through the use of predefined programming building blocks. In the empirical study we have carried out, we evaluated the correlation between the mastery of basic design skills and the automated program assessment. Resumo. Um dos grandes desafios no ensino de programação é avaliar o processo de construção deste conhecimento. Mecanismos de avaliação automática de programas avaliam o produto final gerado. Entretanto, o processo de construção envolve escolha de estruturas adequadas para implementar a solução do problema revela mais sobre o conhecimento do iniciante em programação. Neste trabalho, avaliamos o progresso dos alunos considerando a complexidade das respostas de seus exercı́cios utilizando um framework que estende a taxonomia SOLO através de blocos de construção dos programas. No estudo empı́rico realizado, exploramos a correlação entre o domı́nio das habilidades básicas de design e a avaliação automática dos programas. 1. Introdução No ensino de programação para iniciantes, sabemos que o desempenho dos alunos está fortemente correlacionado com a quantidade de programas que eles produzem [Araújo et al. 2013]. A avaliação automática (AA) de programas é um recurso didático que procura diminuir a carga sobre o professor, manter a consistência das correções e garantir que será dado rapidamente um feedback ao aluno. Entretanto há muitos aspectos a serem considerados na resolução dos problemas de computação que vão além da correção funcional, usualmente fornecida pelos avaliadores automáticos e juı́zes online. Estas questões vão desde a compreensão do que é o problema, definição de um plano de solução, implementação deste plano utilizando as adequadas construções de uma linguagem de programação e, por fim, a reavaliação da solução e realização de testes [Polya and Conway 2004]. De modo ortogonal a tudo isso, é necessário garantir a qualidade do software criado ao longo deste processo. Os mecanismos de avaliação automática (AA) de programas costumam enfocar o produto final, ou seja, o código gerado pelo estudante. É importante observar que o processo de construção do programa pode revelar muito sobre o conhecimento do iniciante IX Congresso Brasileiro de Informática na Educação (CBIE 2020) Anais do XXXI Simpósio Brasileiro de Informática na Educação (SBIE 2020) 1813 DOI: 10.5753/cbie.sbie. 2020.1813 em programação. Ele envolve a definição de estratégia e escolha de estruturas adequadas para a implementação da solução do problema. Os conceitos de programação, estruturas de dados, padrões de resoluções de problemas são revelados na estrutura interna do programa, no seu design. Estes elementos são reflexo da construção de conhecimento e da transformação ocorrida no aluno a partir de sua exposição às situações de aprendizado promovidas pelo professor ao longo do curso. No contexto de disciplinas introdutórias de programação, uma abordagem para entender como alunos escrevem código é analisar a performance destes em exames e exercı́cios [Lopez et al. 2008, Sheard et al. 2008]. Diversos trabalhos identificam dificuldades enfrentadas pelos alunos, com destaque em problemas de compreensão de variáveis e atribuições [Jimoyiannis 2011], rastreamento de pequenos pedaços de código [Lopez et al. 2008], assim como no entendimento de como os alunos planejam a resolução dos exercı́cios [Costantini et al. 2020]. Em [Izu et al. 2016] as habilidades de design de código são examinadas através de um framework que usa a taxonomia SOLO [Biggs et al. 2014] para avaliar a complexidade de exercı́cios de programação. De maneira objetiva, a taxonomia SOLO (Structure of Observed Learning Outcomes) descreve as respostas que um aluno pode oferecer para uma tarefa. É um meio de classificar os resultados da aprendizagem em termos de complexidade, permitindo avaliar o trabalho dos alunos em termos de qualidade, em vez de quantas linhas ou bits de código estão corretos. Os autores deste trabalho adaptaram a taxonomia SOLO incluindo blocos de construção e conduzem uma análise detalhada do desempenho dos alunos. Neste trabalho, procuramos avaliar o progresso dos alunos com base na estratégia proposta na literatura por [Izu et al. 2016]. Objetivamos ir além da verificação funcional do código final, exploramos o potencial da taxonomia SOLO para avaliar as habilidades dos alunos iniciantes em programação, considerando a resolução de problemas. Observamos os aspectos de construção do programa, contrastando com a compreensão abstrata dos conceitos de programação mapeados pela taxonomia. Utilizamos o mecanismo de AA para verificar os programas dos alunos e contrastar com a classificação obtida através da utilização do framework. Para tanto, foi conduzido um estudo empı́rico, com o proposito de analisar o desempenho dos alunos ao final do curso (após 15 semanas de instrução). Verificamos três exercı́cios de escrita de código que combinam os conceitos de vetores unidimensionais, loops e funções. No estudo, observamos os seguintes pontos: • A capacidade de projetar e escrever o código corretamente com o objetivo de manipular vetores acima do nı́vel não-estrutural da taxonomia SOLO; • A consistência entre os nı́veis SOLO identificados para os três exercı́cios; • A correlação entre o nı́vel SOLO das respostas e o desempenho geral no curso, medido pelo resultado fornecido pela ferramenta de testes automáticos e pela média na disciplina. Para avaliar os resultados deste processo, verificamos a classificação SOLO das respostas e a correlacionamos com o desempenho dos alunos no curso e com as avaliação automática realizada com as ferramentas empregadas no curso. Além disso, mapeamos os erros mais comuns que ilustram os desafios que os alunos enfrentam ao tentar combinar construções de programação de maneiras não triviais. No estudo correlacional, não encontramos fortes evidências de que as notas obtidas pelos estudantes na disciplina IX Congresso Brasileiro de Informática na Educação (CBIE 2020) Anais do XXXI Simpósio Brasileiro de Informática na Educação (SBIE 2020)