This may be a bit off-topic for this forum, but at least we use Python CodeRunner for the questions and I hope that others in this forum may have spent some thoughts on that particular topic too!
We are running a programming course for mechanical engineers. The aim of the course is that students learn the basics of programming and can apply it for engineering problems. Our aim is really the basics and the pinnacle of the course is to use numpy and matplotlib on easy problems.
The exam consists of two programming questions plus additional theory questions, with 70%/30% split of the points. Each programming question is worth 35%, and typically they should implement a function or a class or even write some code, that does not rely on writing a function at all (like a small script).
We saw that a lot of students already struggle to fully implement such "simple tasks" and thus we give partial points for each of the programming questions. Otherwise, the grades would probably be 80% failed and 20% best grade ;) Especially, as they do not study computer science, we want to be somewhat forgiving.
However, those partial points are directly related to the test-cases of CodeRunner and are given manually. The reason for that is: 1) Testing code in-depth is really hard with CR in my opinion (i.e., testing if certain functions were (not) used or if something is hardcoded) and 2) even if we could test in that level of detail, giving points with a fine granularity is also very hard to do in CR (except for even more tests).
But, as you can imagine, this brings trouble. Grading code is a PITA and often not that easy... Of course, I have read Appendix 2 and I totally agree with it. But to change the mode, we would need to move away from the type of questions we are using right now (solving a somewhat complex problem) towards many smaller questions (solving one concept at a time). Because the aim of our course is that they learn to write code for a complex problem, we also want to examine that. Thus, I would like to keep the questions as they are but change the grading scheme. But how?
I'm pretty sure I need a minimal set of requirements for the code, otherwise the submission is 0 points: For example, code submitted must be free from syntax-errors.
Next, the grading must be fair and comparable. I.e., solving the same thing with other code must give the same amount of points.
However, everything else ... I'm totally unsure what the best way would be, and I see pros and cons for anything... So before I ramble even more about this, I would like to know the following things:
- are you also grading exam questions with partial points? If so, how do you do it? Simply sum up the working unit-tests?
- If not, do you then have more, shorter programming questions? Does this work in such an exam setting, specifically for non-computer-scientists? In such a case, I would really be interested how your exams look like!