Automatic Assessment of Programming Exercises

Loading...
Thumbnail Image
Journal Title
Journal ISSN
Volume Title
Perustieteiden korkeakoulu | Master's thesis
Date
2021-06-14
Department
Major/Subject
Computer Science
Mcode
SCI3042
Degree programme
Master’s Programme in Computer, Communication and Information Sciences
Language
en
Pages
43+6
Series
Abstract
Programming assignments are a key part in teaching programming skills. The students' solutions to the assignments have to be collected and graded and as course sizes grow, so does the amount of work required for the teaching staff to organize, analyze and grade them as well as provide guidance or feedback to the students. It is therefore reasonable to seek ways to automate at least parts of the process of grading. An automatic grading system carries some of the burden of repetitive tasks for the one-time investment of developing such a system. The students also benefit by gaining access to immediate feedback on their submissions, aiding them in the development of the solutions depending on the system's functionality. Of course, the system may need upgrades later, like many systems do, and the requirements may also change as courses and programming languages evolve over time. On the other hand, a next generation grading system can prove to be an even more significant aid to teaching. This thesis aims to showcase various different methods an automatic grading system could analyze programming assignments as well as implement one analyzer of its own in Python for Python assignments for teaching purposes. Though there are dynamic methods as well, this thesis concentrates on static methods of analyzing software complexity. The complexity metrics used in the analyzer are: Lines of Code, Cyclomatic complexity, the ABC-metric and five Halstead's metrics: Volume, Bugs, Difficulty, Effort and Programming Time. The anonymized test data consists of one 300-student course's worth of python programming assignments and their unit test results, a total amount of over 5000 submission results gathered by another assessment system outside this project. Single submissions are not the focus of this thesis though the data does exist for future development purposes. It is discovered that Halstead's software metrics produce very similar results to each other in terms of the analysis, therefore for their usage here they are interchangeable. No radically different major solutions were found in the data, though it does point toward alternative solution groups in some exercises. A clear evolution of metrics from faulty submissions to perfect submissions is not visible in the analysis. The reasoning behind a student submitting multiple perfect solutions to an exercise is noted as a curious question perhaps worth further work.

Ohjelmointitehtävät ovat tärkeä osa ohjelmointitaitojen oppimista. Opiskelijoiden kotitehtäväpalautukset on kerättävä ja arvioitava. Opiskelijamäärien kasvaessa myös tarvittavan arviointityön määrä kasvaa, joten on järkevää kehittää automatisoituja työkaluja tarkastuksen tueksi. Automaattinen tarkastusjärjestelmä pystyy hoitamaan suuren osan tarkastuksen vaatimista toistuvista tehtävistä järjestelmän kehittämisen vaatiman kertaluontoisen ohjelmointityöpanoksen hinnalla. Automaattisen järjestelmän etuihin kuuluu myös nopea toiminta kellon ympäri, jolloin opiskelija voi saada palautetta lähes välittömästi kotitehtävän palautuksen yhteydessä. Järjestelmää on toki jatkokehitettävä tarpeiden muuttuessa ja tekniikoiden kehittyessä, mutta siitä seuraa myös järjestelmän tehostuminen ja palvelun paraneminen. Tässä työssä luodaan katsaus automaattiseen ohjelmistotehtävien tarkastukseen sekä luodaan Python-kielellä järjestelmä, joka analysoi niinikään Python-kielisiä ohjelmointitehtäviä tarkoituksena ymmärtää paremmin, miten opiskelijat ovat tehtäviä ratkoneet ja millaisia ongelmia siihen on liittynyt. Tässä työssä keskitytään erityisesti staattisen analyysin metodeihin ohjelmien kompleksisuuden arvioinnissa. Analysaattorissa käytetään seuraavia metriikoita: koodirivien määrä, syklomaattinen kompleksisuus, ABC-metriikka sekä 5 Halsteadin metriikkaa: volume, bugs, difficulty, effort ja programming time. Testiaineistona toimi yhden 300 opiskelijan kokoisen kurssin ohjelmointitehtävien palautukset ja yksikkötestien tulokset. Kurssilla oli 9 tehtäväkierrosta, ja aineisto sisälsi yli 5000 yksittäistä palautusta. Analyysiä tehtäessä huomataan, että Halsteadin metriikat tuottavat hyvin samankaltaisia kuvaajia, eivätkä ne tuo kovin paljon lisäarvoa toisiinsa verrattuna tässä analyysissä. Nähdään myös, että joissain tehtävissä löytyy mahdollisia kompleksisuuden näkökulmasta erilaisia ratkaisumalleja, joita suurempi määrä opiskelijoista on käyttänyt. Lisäksi analyysi näyttää selkeästi yksittäisiä erittäin mutkikkaita ratkaisuja. Täysien pisteiden arvoisia palautuksia oli enemmän kuin kurssin opiskelijoita, mutta syitä siihen, miksi jotkut opiskelijat palauttivat useamman täysiin pisteisiin oikeuttavan ratkaisun ei tarkemmin selvitetty tässä työssä, joskin se voi olla kiinnostava kysymys jatkossa.
Description
Supervisor
Malmi, Lauri
Thesis advisor
Lehtinen, Teemu
Keywords
programming, exercise, assessment, Python, metrics
Other note
Citation