I am collecting a program assignments from students. I want to check students are solving by own or copying from other students. is there any automation available for code diff checking?
I would also like to know about this because they often like to copy things from each other
This is a tricky one, and I’m passionate about student integrity.
First of all, there is Google originality reports. I haven’t tried it with code, but maybe someone else has.
Secondly, you have to consider that if you set up automated grading/unit tests, then it’s quite possible that much of the code for student solutions will be similar.
Beyond that, I usually start the course with my thoughts on integrity and require students to sign an academic integrity statement. I honestly only choose to fight the battle when students are so poor at cheating that they do something like forget to change their name on the code comment (I have them to add their name to the code).
I hate going down this road as an educator. I have zero respect for a student who simply copies solutions. I try and consider what a professional is expected to do and what practices they follow.
First of all, correct me if I’m wrong, but I’m fairly confident that developers are paid to find solutions to new problems. They aren’t getting paid for copy and paste.
Here’s one solution: students are graded on their ability to contribute to open-source software. You learn their GitHub username, and it’s their job to get a pull-request accepted on an open-source software project to fix a bug or meet a feature request.
That way, they are solving a real problem, that either doesn’t yet exist, or has not been applied to that real problem.
Here’s another solution: students work on a collaborative project that’s open-ended Students have to generate an idea for a software project. Maybe you give them a choice of problems to solve, and students have to develop a project that meets a set of requirements.
The kicker is that students are graded on both the solution AND their contribution as measured in commits/edits per commit. In fact, that’s one of the reasons why I fell in love with Git as an education tool.
Git is your proof as to how much a student contributed to the project. Number of commits, number and quality of changes.
I can only second what @HundredVisionsGuy has said. I have been using #github-classroom in a 2nd-semester bachelor’s course, and I have noticed a significant reduction in code-copying because of the Git/GitHub workflow.
I requested students to create commits for each step of their exercise, so just one commit with a “Finished exercise” message is not enough. By doing so, it becomes quite some effort for them to split copied code into single commits meaningfully. And even if they do so, it’s often noticeable that commits make no sense and therefore might have been created without much thought or knowledge.
Students see the assignments as more interactive with support from the educator and TAs (responding to issues and PRs). They are then, in my opinion, more inclined to work on the solution themselves.
I’m using Stanford’s MOSS tool to check for code plagiarism between students. It works pretty well and is able to detect student tricks like changing the order of functions in the file, renaming identifiers, adding or removing comments, etc.
I have a Python script which downloads all student repos from GitHub Classroom and then runs them through MOSS. The results still have to be analysed manually though. MOSS just finds similar code patterns, but the decision to mark student’s submission as inappropriate plagiarism should be made by a teacher.
My experience is that any two student submissions with more than 70% similarity shown by MOSS should be reviewed manually. MOSS similarity of more than 90-95% is a guarantee that one student submitted someone else’s code without any modification.
There is also a Python tool called MOSSUM. It uses output from MOSS to draw a graph which shows presence of shared code between different students. I like to show such graphs to students in the middle of semester to frighten them slightly. It helps to reduce the amount of plagiarism significantly.