I am teaching some programming topics to university students (some 300+) including python, sql etc. I would welcome some tips on what's the best way to assess the students and also avoid giving them the chance to copy each other.

So far the major piece of assignment, e.g., in SQL, is to give them a scenario describing an information system, explaining what are users, types of data, relations etc. And they are asked to use sql to implement a database, populate some data, and perform some queries.

The problem with this is that the correct solution is quite standard, so it is often the case that students submit same or very similar solutions. This itself may not be the problem, but combined with the factor that the large majority of the cohort gets very high grades (>70%), I fear that they are copying, but I cannot think of an easy way to find out, or address this.

Does anyone teach similar technical subjects and if so, how would you suggest to fix this?

Many thanks!

  • I have found MOSS to be very helpfjul in scanning for code plagiarism: theory.stanford.edu/~aiken/moss – Daniel R. Collins Jan 18 '18 at 15:01
  • Thank you for the quick reply. But I think in this case it is a harder issue. The task itself does not have a very large solution space (perhaps I should consider improving this but...) so for example, if two students come up with very similar SQL statements to create the database, while only differ in the data types they choose (both could be correct), I cannot really say this pair alone are a case of plagiarism. But my problem here is that it appears to be the case for a large number of students some i know lacks technical skills, which makes me worry – Ziqi Jan 18 '18 at 15:10
  • similar questions are on here : see this one for starters : academia.stackexchange.com/questions/77429/… – Solar Mike Jan 18 '18 at 16:01

In general, it sounds like your problem is not to find out how to assess whether plagiarism occurred, but rather how to make tests that are harder to plagiarize. I will try to answer to both:

Plagiarism reduction can be achieved building a database of questions to be leveraged to create "individualised" tests. To elaborate further, you could:

  • build a database with a number of questions larger than the one you intend to submit to students (as suggested in a previous answer)
  • build personalised tests by pulling questions randomly from the database above.
  • randomise the input values of the questions (making up a trivial SQL example: "what is the n_th most likely value in m_th column of table k?" where n,m and k are randomly exctracted).

Existing e-learning platforms (Moodle for example) contain all three features abobe, and allow you to collect the student responses in a centralised manner - so you don't need to reinvent the wheel.

Plagiarism detection becomes easier if you receive the test answers digitally. For humanities, text analytics would be needed, and I would recommend using off-the-shelf tools. For quantitative subjects, you can cluster students according to the submission time and score received in each test, and see whether some groups of students cluster too closely together (in small classes, no actual clustering algorithm is needed). This will not suffice to trigger punishment, but you can use it to focus on scrutinizing the student's thought process that led to the solution in a face-to-face exam.

| improve this answer | |
  • thank you. indeed the question is how to make the assignment harder to plagiarise, and it does take a lot more effort to address. I am thinking whether this has been the problem for most practical-based subjects... and certainly taking some elements into exam instead of using coursework/assignment can help – Ziqi Jan 21 '18 at 10:09
  • Glad it helped. I added a small description above to make the point that some of the suggestions above are already implemented in e-learing platforms. The problem you are facing is very general, and the solution above applies to most subjects (other than input randomisation, that applies only to quantitative subjects) – famargar Jan 22 '18 at 9:37

This depends also on the effort that you are willing to put on correcting. You could create a database of questions and randomly select the questions (of the same topic) to the students. This will give a set of correct answers that will have to be validated.

EDIT: You can also always indicate that any test may be have to be orally explained. Once clustered as the other answer suggested you may ask for comments on the solutions.

| improve this answer | |

So far the major piece of assignment, e.g., in SQL, is to give them a scenario describing an information system, explaining what are users, types of data, relations etc. And they are asked to use sql to implement a database, populate some data, and perform some queries.

You can ask them to come up with their own scenarios or pick from an available pool of scenarios. As new concepts come up, you can assign them to implement new functionality into their existing projects.

I have personally seen this approach work best on database and game programming classes since both can have projects that can be iterated upon. Students also get a sense of attachment to their projects which increases motivation by a lot.

However, it does introduce a grading overhead since you have to keep track of the progress of individual projects. We have done this to groups of ~40 students but I can see it working with proper preparation to 300 students.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.