How to minimize cheating while running a computer-based quiz?
If you have control over the lab software
Have your IT dept install software that will allow you to monitor the activity on each system. I think the term is Classroom management software. Sit back and watch for suspicious activity.
Otherwise - adapt
I like the strategies discussed in this question about take-home exams (How to prevent cheating on take-home exams)
The TL/DR - think about how you might test learning of the material in a situation where students ARE going to collaborate and ARE going to access materials on the subject.
My two cents on the concept of computer based exams
it seems to me that this is a better way to evaluate students' programming skills than a paper-based quiz/exam, given that in the real world, people write code on a computer, not on paper.
I don't agree with this statement, because in the real world people also have access to other supports like references and peers while writing code on a computer.
I don't think writing a coding exam on a computer actually tests knowledge of coding any better than writing code on paper. In fact, in some ways it hampers student performance because they must focus on creating properly formatted, compilable, code instead of getting their knowledge of the concepts on paper. Pseudo code is faster to write and easier to evaluate.
If you want to test their ability to write executable code, give them assignments.
it seems to me that this is a better way to evaluate students' programming skills than a paper-based quiz/exam, given that in the real world, people write code on a computer, not on paper.
If you want your exams to better approximate the real world, then speaking as an IT professional, let me make a few comments.
The Real World
- In the real world programmers have access to documentation.
Not only do they have access to documentation, they are expected to use it and refer to it regularly, if not constantly. It is a red flag to any good technical manager to have a programmer waste time trying to "figure something out" by trial and error rather than consulting the documentation or other online information.
(Of course, it is also a red flag if the programmer can't write a simple "for" loop without consulting the documentation.)
Yes, it is an advantage to know your language so well that you can use all the standard library features without consulting any references or examples. But few programmers are that good—and the ones who are, got that way by practice (experience), not by reading textbooks or doing classroom assignments.
- Writing the actual code is a very small part of designing a solution.
Design questions are important in the real world. Vast books have been written on the subject. It's not enough that your code works. It must be sufficiently robust for the conditions it will actually run in; it must be maintainable; it must be possible to modify it to accommodate new requirements without throwing the entire codebase away and starting from scratch.
Design also includes understanding the requirements and can even include querying them (proposing alterations) or surveying the source of the requirements to be sure they are really, truly understood before a solution is implemented. A classroom setting almost never simulates this accurately. In class, you are given a precise assignment, and you must solve exactly the use case precisely (even rigorously) stated. The real world isn't like that.
- In the real world, collaboration is highly desirable.
A standardized exam to be taken during class should probably not focus on practical programming. Take-home extended assignments would be a much better gauge of ability to write code, as abase states in his answer.
A feasible solution would be to use firewalls that can be configured to allow only certain sites, such as the ones required for the exam, to connect over the Internet and block all else. This would be able to thwart Internet based messaging and web referencing.
If you are concerned about the possible communication over the intranet, for instance a telnet connection which is to be part of the programming examination, there are software which could control code plagiarism. For example, Moss from Standford is an automated system that determines the similarity of programs. I've also heard of some that would be able to check the similarity at the opcode level in such a way that even renaming variables wouldn't allow perpetrators to escape.