Nesta subseção, apresentam-se os dados obtidos com o método definido na
subseção 4.2.2. Para obter esses dados, utilizou-se o sistema de Análise de Similaridade, que, após realizar uma comparação com múltiplos algoritmos, gera uma tabela contendo os dados da previsão e da revocação conformativa, bem como a respectiva média harmônica, conforme apresentado na seção 4.1.
Assim, para cada um dos 88 problemas, somadas as 4 turmas (A, B, C e D), executou-se o JPlag, MOSS e SIM comparando com o Sherlock N-Overlap com normalizações 3 e 4. Os dados foram consolidados em planilhas contendo os quantitativos de ocorrências por limiares e por média harmônica. Mais de 5 mil linhas de dados foram processadas para obtenção desses dados, o que inviabiliza figurarem nos anexos. Entretanto, os dados contudo estão disponíveis na Web1.
Para cada uma das quatro ferramentas e para cada uma das 4 turmas, foram efetuadas 22 execuções da verificação de similaridade, uma para cada problema proposto. Com os resultados de cada verificação de similaridade, foi calculada a média harmônica para quatro faixas de limiares (60%, 70%, 80% e 90%). Para cada limiar e para cada ferramenta, para efeito de comparação, os valores das médias harmônicas foram somados e apresentados nos gráficos das Figuras5.14, 5.15, 5.16 e 5.17.
Nasubseção 5.1.2, os valores da média harmônica foram representados pela área sob a região do gráfico para limiares específicos. Essa representação, no presente contexto, não é apropriada, pois a contagem dos parâmetros analisados (principalmente para ocorrências e ausências isoladas) podem variar sem guardar inter-relação entre limiares vizinhos. Assim, decidiu-se somar as médias harmônicas, obtidas para cada limiar, como forma de obter o resultado acumulado com o desempenho geral.
Comparam-se o Sherlock N-Overlap, o JPlag, o SIM e o MOSS em cada uma das figuras (5.14, 5.15, 5.16 e 5.17), que são divididas em dois gráficos: o da esquerda com o Sherlock N-Overlap com a normalização 3 e o da direita com o mesmo algoritmo usando
5.2. Avaliação conformativa: códigos gerados por alunos em práticas laboratoriais 76
Figura 5.14 – Turma A - Códigos Reais
(a) Sherlock N-Overlap normalização 3
60 70 80 90 5 10 15 20 25 Limiar(%) Somatório Média Harmônica
(b) Sherlock N-Overlap normalização 4
60 70 80 90
Limiar(%)
Overlap JPlag SIM MOSS
Figura 5.15 – Turma B - Códigos Reais
(a) Sherlock N-Overlap normalização 3
60 70 80 90 5 10 15 20 25 Limiar(%) Somatório Média Harmônica
(b) Sherlock N-Overlap normalização 4
60 70 80 90
Limiar(%)
Overlap JPlag SIM MOSS
a normalização 4. É interessante relembrar que a diferença de normalização somente é aplicada ao Sherlock N-Overlap, contudo o desempenho dos demais algoritmos também pode ser alterado, pois, com o método de conformidade, as indicações de similaridade dada por uma ferramenta é utilizado para avaliar o desempenho das demais em função da contabilização de ocorrências e ausências isoladas.
5.2. Avaliação conformativa: códigos gerados por alunos em práticas laboratoriais 77
Figura 5.16 – Turma C - Códigos Reais
(a) Sherlock N-Overlap normalização 3
60 70 80 90 5 10 15 20 25 Limiar(%) Somatório Média Harmônica
(b) Sherlock N-Overlap normalização 4
60 70 80 90
Limiar(%)
Overlap JPlag SIM MOSS
Figura 5.17 – Turma D - Códigos Reais
(a) Sherlock N-Overlap normalização 3
60 70 80 90 5 10 15 20 25 Limiar(%) Somatório Média Harmônica
(b) Sherlock N-Overlap normalização 4
60 70 80 90
Limiar(%)
5.2. Avaliação conformativa: códigos gerados por alunos em práticas laboratoriais 78 5.17. Em todas elas o Sherlock N-Overlap com normalização 4 apresenta ganho bastante significativo em relação à execução com a normalização 3, ficando, para a maioria dos limiares, superior a todas as outras ferramentas. Nos gráficos com a normalização 4, o MOSS apresenta notória distância das demais ferramentas e sempre com o pior desempenho. Essas conclusões reafirmam os resultados obtidos ao empregar o método tradicional de cálculo.
Também é possível observar que a variação de limiar não altera de forma significativa o desempenho comparativo em relação aos algoritmos analisados.
Capítulo
6
Conclusão
Este trabalho se contextualiza na análise de similaridade entre códigos-fonte gerados em práticas laboratoriais de turmas de programação em cursos universitários. Objetivou-se instrumentalizar o professor para o acompanhamento e a avaliação de turmas numerosas, situação frequente em turmas de primeiro ano em cursos de Engenharia e de Ciência da Computação, devido não só ao ingresso de novos alunos, mas também à grande incidência de alunos repetentes.
Discutiu-se a importância em diferenciar plágio de similaridade, e as razões que justificam a ocorrência da similaridade no contexto de práticas de programação. Entretanto, por se tratar de uma investigação que se concentra especificamente na concepção de uma ferramenta capaz de identificar, de maneira eficiente, o grau de similaridade entre códigos-fonte, elencaram-se as principais modificações empregadas pelos alunos com a intenção de plagiar, o que serviu de base para análises de resultados em códigos controlados. As principais técnicas e algoritmos encontrados na literatura sobre detecção de plágio em código-fonte foram apresentadas e discutidas.
De maneira a preencher uma das diversas lacunas ainda existente no domínio da detecção de plágio e da análise de similaridade, foram estudadas e elaboradas técnicas de normalização que preparam os códigos antes da comparação, destacando suas propriedades relevantes e eliminando características irrelevantes.
O algoritmo de comparação Sherlock foi alvo de estudo aprofundado, devido às suas características intrínsecas e ao fato de ser um algoritmo de código aberto, disponível para modificações. De maneira especial, descobriu-se que a utilização de regras de
80
pré-processamento produz melhora significativa dos resultados do Sherlock. Além disso, a substituição da métrica de Jaccard pelo coeficiente de sobreposição (Overlap) alavancou os resultados do Sherlock, complementando a solução denominada Sherlock N-Overlap, principal contribuição deste trabalho.
Para avaliar essas duas propostas de modificação, foi necessário comparar os seus resultados com os das ferramentas mais bem recomendadas para esta finalidade e que, de alguma maneira, estão disponíveis, notoriamente o JPlag, o MOSS e o SIM. Dada a quantidade de códigos reunido para análise, seria muito dispendioso avaliar em separado o resultado de cada ferramenta com suas formatações específicas. Por isso, foi desenvolvido um ambiente computacional de análise que integra todas as ferramentas e técnicas de processamento e permite a inclusão de novas abordagens.
Mesmo tendo à disposição os resultados de todas as ferramentas de maneira simultânea em uma mesma interface, uma análise mais consistente de dados requer uma abordagem sistematizada. O método de avaliação, baseado no cálculo da precisão e da revocação, amplamente utilizado na literatura, exige o conhecimento a priori e a contabilização de falsos positivos e falsos negativos para avaliar a qualidade do resultado obtido. Para um conjunto de códigos que não foi construído de maneira controlada, a determinação do status plágio/não-plágio é feita com base na experiência de um ser humano. Muitas vezes, essa determinação é subjetiva e não garante reprodutibilidade, além de ser uma operação praticamente inviável para grandes quantidades de códigos. Neste sentido, de maneira a viabilizar a análise da qualidade do Sherlock N-Overlap, foi proposto neste trabalho um método baseado na contagem dos resultados de ferramentas de referência, ou método de conformidade, que pode ser generalizado para o estudo de novos algoritmos de detecção de plágio e análise de similaridade.
Assim, com os dois métodos disponíveis, foram avaliados, num primeiro momento, códigos produzidos e plagiados propositalmente e, num segundo momento, códigos produzido por alunos em uma disciplina anual de programação.
Os resultados mostram que tanto as técnicas de normalização quanto a substituição da métrica originalmente utilizada no Sherlock pelo coeficiente de sobreposição produz melhores resultados no domínio de práticas laboratoriais de programação.