I'm teaching an Introduction to Computer Science Course, where we mainly do C programming. I've been assigned a lab for teaching the course, but there are more students than available computers. Also, I have no control over those PCs there, and almost every student has admin rights to them. It is also common that students bring their laptop to the classroom and connect to campus Wi-Fi, which I don't have control at all.

Exams are small algorithms to solve, and initially I was planning - as do other teachers in the course - to allow using a computer (from the lab or their own) for the students to verify the correctness of their algorithms. However, in the current state of things I think is pretty easy for students to cheat: They could use Facebook, e-mail, or any Internet tool to exchange source code or information.

Are there software tools that can help to allow use of a computer but still prevent unauthorized collaboration?

  • 6
    +1 Same problem exists (typically) in Computational Physics lab components. Looking forward to reading the answers. – 299792458 Sep 21 '14 at 5:10
  • 3
    Sorry but this question seems to be off-topic to me for two reasons. 1. Are there Software Tools that can help to use a Computer and avoid plagiarism? If you are looking for softwares to prevent your students from cheating; you may ask your question on SoftwareRecommendations.SE. 2. Your question is not specifically about academia, what about a company manager who wants to test it's employees via a computer-based exam? – Enthusiastic Engineer Sep 21 '14 at 8:36
  • 4
    This question appears to be off-topic because it is a shopping request for software. Try Software Recommendations - biut see their meta first, for guidelines on how to ask, there. – EnergyNumbers Sep 21 '14 at 9:07
  • 4
    @Enthusiastic per this meta post, the community does not consider software questions as inherently off topic, if they are otherwise OK questions (focused, not too broad) – ff524 Sep 21 '14 at 15:37
  • 15
    Strongly disagree with the close votes. This is a question about computer science pedagogy, not just about software recommendations. Pedagogical questions are firmly on topic. – JeffE Sep 21 '14 at 18:02

At my university in the UK we have two kinds of assessment for programming courses. Pass/fail 'practicals' where students are given programming tasks, and are explicitly allowed to discuss them with each other and search online. When the student is ready to submit their solution a demonstrator will look it over and ask questions etc to make sure the student understands why they wrote the code they wrote. Students don't get a grade for this that counts towards their overall mark for the year, but they are required to 'pass' the practicals in order to pass the year.

Then there are written exams with no computer access. There are questions along the lines of 'write some code that will solve this problem', and also more conceptual 'why is this the case? When would you use that?' questions. For the 'write code' bits, the markers will deduct very few points for simple syntax errors and things like that. The question is not so much 'can the student write a program that will compile on the first try?' as 'can the student come up with a good algorithm which solves the problem and give a reasonable expression of it in code?'. Note that these courses (at my uni) are never for specific languages; they are courses like 'functional programming' or 'object oriented programming' or 'machine learning', which will each use a particular language, but we care more that the student understands the concepts than learns the intricacies of the course's language.

This also encourages students to learn ways of designing and writing provably correct programs: if they can reason about programs on a deeper level than intuition, then writing programs on paper is a better test of this than allowing them to experiment and test until the output 'looks right' for the inputs they've given it.

This seems like a good way to avoid cheating on grades that matter and encourage solid understanding of the important course material. That said, many students hate having to write code on paper without access to S.O. or a compiler!

  • 21
    Having graduated from a UK University where we had pass/fail practicals and hand-written exams I have to disagree with your last paragraph. I hated it not because I didn't have access to the Internet, I hated it because a piece of paper is not a good IDE. It often took me 3-4 cycles of "write some code -> see a deficiency fixable by a line in the middle -> rewrite entire exercise, because there is no space". This is trivial to do even in Notepad, yet so frustrating and time consuming on paper. However I cannot imagine the proctors ever agreeing to an exam with any kind of electronics. – Ordous Sep 22 '14 at 11:27
  • Also common in the United States, and even in technical portions of job interviews. 2 of my last 4 had me either write on paper or whiteboard how I would do certain actions in a language, and the last basically asked me questions specific to the language. It doesn't have to compile, but it should make sense! – Compass Sep 22 '14 at 13:28
  • 6
    Regarding "why is this the case" questions: I always hate it when my professor asks a question like "why does this code compile?" because my response is always "because there's no error!" :) If you're going to ask "Why does ___ do ___?" sort of questions, please ask them in a form that only has one specific answer. – apnorton Sep 22 '14 at 15:38
  • 2
    +1, this may be an intro CS class, but that just means it's the best time to train the students that CS isn't actually about computers! – Brian S Sep 22 '14 at 19:37
  • 3
    @Magus: but then, exams aren't intended to prepare students for reality even if the course they're examining was. The ways programmers are actually assessed in reality probably aren't suitable for undergraduate assessment, although it would be fun to try. Put 8 students in a room with a 200k loc code base and a sheaf of user stories, and tell them they have 2 weeks to close as many outstanding feature requests as possible to the satisfaction of the QA team ;-) – Steve Jessop Sep 23 '14 at 8:17

Consider two things that are (almost) unique to computer science:

  • researching programming methods on the internet is standard practice, with stackexchange.com being the #1 hit for many searches. Requiring someone to memorize the details is not industry practice. I would not consider accepting a programming job anywhere that said "no internet access". And I hit the function references 10 times a day to verify things like function_name vs. functionName or replace(needle, haystack) / replace(haystack, needle) headaches.

  • It is quite likely that 10 students will return nearly-identical results for simple algorithms. There just aren't too many ways to answer "write a function to average the values in an array". Lets see: loop, sum, count. vars i, s, c. If you taught standard code formatting it's quite possible you might get 8/10 absolutely identical responses yet zero cheating. This is a common problem for cheat/plagiarism processors that are not tweaked for CS.

Good luck, and do come back with whatever solution worked out for you.

  • 23
    "It is quite likely that 10 students will return nearly-identical results for simple algorithms." Don't underestimate students' imagination ;-) – Massimo Ortolano Sep 21 '14 at 8:17
  • 3
    "Requiring someone to memorize the details is not industry practice." Hmmm ... requiring student to know the syntax and idiom of the language is standard practice. Likewise for know the identifying features and most common applications of data structures and algorithms studied in an introductory class. – dmckee Sep 21 '14 at 17:13
  • 2
    With a tough time limit, there is not enough time to google everything. – Per Alexandersson Sep 21 '14 at 17:16
  • 2
    @dmckee - idioms, sure. But syntax? I google syntax every day, and I'm considered one of the best programmers, if not the best, in my company. – Davor Sep 21 '14 at 17:24
  • 5
    He's teaching c. I don't use it regularly and the only thing I need to look up is the precedence of the less commonly used operators. I agree that you might need to look up syntax in a big language, but c is so small you might call it "cute". Well, I also look up function pointer syntax if (FSM forbid) I have to go that route. – dmckee Sep 21 '14 at 17:33

In one of my programming subjects, we were allowed the class notes, our own solved exercises, and internet; but no communication with other students (email, facebook...). There was nothing really blocking them, just the lecturer wandering around.

Really, it is not that difficult to check: a student should be most of the time working on the IDE, and only sporadically browsing. If anyone seems to browse too much, you can do a closer inspection. GMail or Facebook will blatantly shine on the screen.

You can of course be more sneaky, like using Lynx to enter your mail. But really, if you can do that, you can probably write a simple algorithm without cheating.

  • 3
    It is very easy to exchange code between the students or even an outside tutor. All a student has to do is save a file into drop box, google drive ... that is shared. No teacher walking around the room will ever notice. – Matthias Aug 7 '15 at 22:38

Though you may not count this as a software tool: A custom Linux live distribution, which is directly booted from a removable medium, and contains just the necessary development tools (no browser, maybe even remove the ethernet/wifi drivers) would do it; just make them boot that for the exam.

(If anyone is able – within the time limit and with the tools provided – to write the drivers and a browser he not only gets a passing grade but a job offer.)

  • 2
    Yes, a custom Linux counts as a software tool. Or tools, if you want to go deeper. Also, if you want to go deeper, put the Linux on a rewritable media, and preset the IDE to write to that medium. Then the students can surrender the media at the end of the assignment if desired. Also disable mounting of the hard drives. – Mindwin Sep 22 '14 at 20:27
  • 1
    Our administrator just locked down the installed linux distribution, disabling non-local network routes (and this was in a networking course, so we needed access to specific servers to test our work). Of course, students didn't have admin rights, that sounds like a very bad idea... – fmark Sep 23 '14 at 5:13

The solution employed by my professor is to allow the textbook in the classroom (or any other sheet of paper), but no internet access; not even computer access. The whole exam was on paper.

The exam itself was to develop some algorithms, or maybe creating some classes; stuff for which the textbook is useless , but it still gives you the opportunity to look up names and basic concepts.

As a student, I think there is nothing wrong with this method. Of course others may disagree.

  • 6
    +1 I was about to suggest paper. I think making students do some computing exams on paper is a good teaching method. Aside from preventing cheating it helps to challenge the modern world's over-reliance on the internet (not saying I'm any better of course). It's also an excellent way to make sure students have been taking the knowledge in; students can't expect to be using the internet every 5 minutes if they get a real programming job - they'll have to know by heart. – Pharap Sep 21 '14 at 15:56
  • 2
    This. They won't learn real-world programming at university, anyway, so why bother? Teach them the concepts and ignore syntax "errors". – Raphael Sep 21 '14 at 18:16
  • Let us continue this discussion in chat. – Raphael Sep 22 '14 at 10:56

Law schools have been solving this problem for many years by making students buy software for exams that locks their systems down and only allows them to use the exam-taking software during the examination time. However, there have been problems. Also, law school exams are generally essays or other non-functional questions, whereas a programming exam could also require a compiler. I'm not aware of a version of this that exists to allow a text-editor, terminal, and compiler.

  • 4
    The students have to pay for software that performs a function one would expect from a virus? I think I'd rather write my essay on the table in blood. – Pharap Sep 21 '14 at 16:01
  • 1
    @Pharap, it does no such thing. I don't like the practice, but it's a pretty effective anti-cheating device that allows students to type out an essay on a device that they are familiar with. It's reasonably efficient and makes grading easier than going through hand-written exams written in haste. If you have a better solution, you stand to make some money. – Bill Barth Sep 21 '14 at 16:08
  • 1
    I'd say the ability to lock down a system something that would be somewhat beneficial to a virus. If it's merely a full screen word processor/office suite that won't quit until a certain amount of time has elapsed, that's not so bad. Personally I still think there's no substitute for making students use computers provided (with said computers having strict rights management applied). – Pharap Sep 21 '14 at 16:18
  • 3
    @Pharap, the hallmarks of a virus is that it's invocation isn't voluntary, and that there is a malicious purpose. Being able to execute is also beneficial to a virus, but not all executables are viruses. Simply not being able to quit isn't enough to prevent cheating; the rest of the machine needs to be locked out as well. Some allow for pen and paper exams to be done instead if you don't the software, but most students these days work more effectively at their own keyboard. Having enough labs full of computers for law school exams and not much else is a prohibitive cost for many law schools. – Bill Barth Sep 21 '14 at 16:28
  • 1
    Sure, the blackboard CMS provides a locked-down browser (used for taking quizzes and exams) which has a similar purpose: only the browser can be accessed. – dmckee Sep 21 '14 at 17:16

Are there Software Tools that can help to use a Computer and avoid plagiarism?

I can't answer the above question and I'd be surprised by the effectiveness of such a tool. So, I suggest another solution: do the exams on paper, scan the papers at the end of the exams, send the copies back to the students and give them a couple of days to debug their programs. The differences between the paper version and the working one can thus be taken into account to decide the final mark.

  • 1
    Please don't. We are already producing plenty of "programmers" who can't program for the life of them. Let them use literature during the exam, they can use it in the workplace anyway... – Davor Sep 21 '14 at 17:27
  • @Davor I haven't written anything about not allowing students to use literature during the exam. Indeed, they won't be able to use online literature, but they could surely bring their own books to the exam. – Massimo Ortolano Sep 21 '14 at 17:48
  • 4
    We are already producing plenty of "programmers" who can't program for the life of them. Let them use literature during the exam, they can use it in the workplace anyway. — Oh, the irony. – JeffE Sep 21 '14 at 17:58
  • 2
    If the design goal of a computer science course is to produce craftsmen (programmers) then something is seriously amiss. – Raphael Sep 21 '14 at 18:17
  • @Raphael As with a lot of disciplines CS has programs have several goals. One, of course, is to advance the state of the art but as a side effect they turn out a corps of people who will find work as programmers but (hopefully) bring a deeper theoretical knowledge than their less specifically educated peers. A great deal of technical work can be done just fine with people who have very task focused education and training, but it is often useful to have a few deep thinkers hanging around the place. – dmckee Sep 21 '14 at 19:28

Well, I haven't checked whether there are actual software tools for that, but I'll tell you what I used to do. The number of approaches to a correct solution are quite limited; if it's an exam-type problem, you should expect to receive many almost-identical, or even actually-identical, replies - as @Peter points out. But

the ingenuity of error is infinite, and the creativity of the misguided is boundless...

So mistakes + copying = easy to catch. If you want to mechanize, check for the same or similar parsing/compilation errors, or identical choices of identifiers of programs which fail to compile or run as expected.

  • The issue seems to be unauthorized collaboration (i.e. students can help each other by sharing information), not necessarily students handing in identical code. – ff524 Sep 22 '14 at 8:41
  • Its difficult if not impossible to detect (or prevent) students from chatting in the computer lab. Student who understand the concepts will hand in similar but working code (normal), student who do not will hand in similar broken code, which should raise a red flag. – sevensevens Feb 3 '15 at 15:36

Two such programs are MOSS and JPlag:


Moss (for a Measure Of Software Similarity) is an automatic system for determining the similarity of programs. To date, the main application of Moss has been in detecting plagiarism in programming classes. Since its development in 1994, Moss has been very effective in this role. The algorithm behind moss is a significant improvement over other cheating detection algorithms (at least, over those known to us).


JPlag is a system that finds similarities among multiple sets of source code files. This way it can detect software plagiarism. JPlag does not merely compare bytes of text, but is aware of programming language syntax and program structure and hence is robust against many kinds of attempts to disguise similarities between plagiarized files. JPlag currently supports Java, C#, C, C++, Scheme and natural language text.

Tools similar to these (not sure exactly which) were used at both the schools I've been to. Students were caught and penalized even after they had renamed variables and changed order of functions in the file.

  • 2
    The issue seems to be unauthorized collaboration (i.e. students can help each other by sharing information), not necessarily students handing in identical code. – ff524 Sep 22 '14 at 8:41
  • 1
    Solutions to any reasonably scoped exam problem are bound to be similar. Syntactical similarity is therefore a bad indicator for cheating. – Raphael Sep 22 '14 at 11:00

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