<p>I have the task of developing an online examination software for a small university, I need to implement measures to prevent cheating...</p>

<p>What are your ideas on how to do this? </p>

<p>I would like to possibly disable all IE / firefox tabs, or some how log internet activity so I know if they are googling anwsers...is there any realistic way to do such things from a flex / web application?</p>

[{'answer_id': 46875, 'author': 'Ben Scheirman', 'author_id': 3381, 'author_profile': 'https://Stackoverflow.com/users/3381', 'pm_score': 0, 'selected': False, 'text': '<p>Randomize questions, ask a random set of questions from a large bank... time the answers...</p>\n\n<p>Unless you mean hacking your site, which is a different question.</p>\n'}, {'answer_id': 46876, 'author': 'Ryan Lanciaux', 'author_id': 1385358, 'author_profile': 'https://Stackoverflow.com/users/1385358', 'pm_score': 0, 'selected': False, 'text': "<p>Short of having the application run completely on the user's machine, I do not believe there is a way to make sure they are not google-ing the answers. Even then it would be difficult to check for all possible loop-holes.</p>\n\n<p>I have taken classes that used web based quiz software and used to work for a small college as well. For basic cheating prevention I would say randomize the questions.</p>\n"}, {'answer_id': 46877, 'author': 'Guy Starbuck', 'author_id': 2194, 'author_profile': 'https://Stackoverflow.com/users/2194', 'pm_score': 1, 'selected': False, 'text': "<p>I'd probably implement a simple winforms (or WPF) app that hosts a browser control in it -- which is locked in to your site.  Then you can remove links to browsers and lock down the workstations so that all they can open is your app.</p>\n\n<p>This assumes you have control over the workstations on which the students are taking the tests, of course.</p>\n"}, {'answer_id': 46879, 'author': 'pix0r', 'author_id': 72, 'author_profile': 'https://Stackoverflow.com/users/72', 'pm_score': 3, 'selected': False, 'text': '<p>Simply put, <strong>no</strong> there is no realistic way to accomplish this if it is an online exam (assuming they are using their own computers to take the exam).</p>\n'}, {'answer_id': 46880, 'author': 'EBGreen', 'author_id': 1358, 'author_profile': 'https://Stackoverflow.com/users/1358', 'pm_score': 2, 'selected': False, 'text': '<p>Will they always take the test on test machines, or will they be able to take the test from any machine on the network? If it will be specific machines, just use the hosts file to prevent them from getting out to the web.</p>\n\n<p>If it is any machine, then I would look at having the testing backend change the firewall rules for the machine the test is running on so the machine cannot get out to the interwebs.</p>\n'}, {'answer_id': 46893, 'author': 'jdelator', 'author_id': 438, 'author_profile': 'https://Stackoverflow.com/users/438', 'pm_score': 0, 'selected': False, 'text': '<p>Try adding SMS messages into the mix.</p>\n'}, {'answer_id': 46895, 'author': 'Community', 'author_id': -1, 'author_profile': 'https://Stackoverflow.com/users/-1', 'pm_score': 2, 'selected': False, 'text': '<p>Is opening the browser window full screen an option? You could possibly also check for the window losing focus and start a timer that stops the test after some small period of time.</p>\n'}, {'answer_id': 46914, 'author': 'Ben Collins', 'author_id': 3279, 'author_profile': 'https://Stackoverflow.com/users/3279', 'pm_score': 1, 'selected': False, 'text': "<p>As a teacher, I can tell you the single best way would be to have human review of the answers.  A person can sense copy/paste or an answer that doesn't make sense given the context of the course, expected knowledge level of the students, content of the textbook, etc, etc, etc.</p>\n\n<p>A computer can do things like check for statistical similarity of answers, but you really need a person for final review (or, alternatively, build a massive statistical-processing, AI stack that will cost 10x the cost of human review and won't be as good ;-))</p>\n"}, {'answer_id': 46932, 'author': 'Adam Davis', 'author_id': 2915, 'author_profile': 'https://Stackoverflow.com/users/2915', 'pm_score': 1, 'selected': False, 'text': '<p>No, browsers are designed to limit the amount of damage a website or application can do to the system.  You might be able to accomplish your goals through Java, an activex control, or a custom plugin, but other than that you aren\'t going to be able to \'watch\' what they\'re doing on their system, much less control it.  (Think if you could!  I could put a spy on this webpage, and if you have it open I get to see what other websites you have open?)</p>\n\n<p>Even if you could do this, using a browser inside a VM would give them the ability to use one computer to browse during the test, and if you could fix that they could simply use a library computer with their laptop next to it, or read things from a book.</p>\n\n<p>The reality is that such unmonitored tests either have to be considered "open book" or "honor" tests.  You must design the test questions in such a manner that references won\'t help solve the problems, which also means that each student needs to get a slightly different test so there is no way for them to collude and generate a key.</p>\n\n<p>You have to develop an application that runs on their computer, but even then you can\'t solve the VM problem easily, and cannot solve the side by side computers or book problem at all.</p>\n\n<p>-Adam</p>\n'}, {'answer_id': 46943, 'author': 'EBGreen', 'author_id': 1358, 'author_profile': 'https://Stackoverflow.com/users/1358', 'pm_score': 0, 'selected': False, 'text': '<p>I agree with Adam, that even with the limitations that I suggested, it would still be trivial to cheat. Those were just "best effort" suggestions.</p>\n'}, {'answer_id': 46954, 'author': 'David Singer', 'author_id': 4618, 'author_profile': 'https://Stackoverflow.com/users/4618', 'pm_score': 0, 'selected': False, 'text': "<p>Your only hopes are a strong school honor code and human proctoring of the room where the test is being given.  </p>\n\n<p>As many other posters have said, you can't control the student's computer, and you certainly can't keep them from using a second computer or an iPhone along side the one being used for the test -- note that an iPhone (or other cellular device) can bypass any DNS or firewall on the network, since it uses the cellular provider's network, not the college's.</p>\n\n<p>Good luck; you're going to need it.</p>\n"}, {'answer_id': 46961, 'author': 'Rob Rolnick', 'author_id': 4798, 'author_profile': 'https://Stackoverflow.com/users/4798', 'pm_score': 2, 'selected': False, 'text': "<p>Random questions and large banks of questions help. Randomizing even the same question (say changing the numbers, and calculating the result) helps too. None of these will prevent cheating though.</p>\n\n<p>In the first case, if the pool is large enough, so that no two students get the same question, all that means is that students will compile a list of questions over the course of several semesters. (It is also a ton of work for the professors to come up with so many questions, I've had to do it as a TA it is not fun.)</p>\n\n<p>In the second case, all you need is one smart student to solve the general case, and all the rest just take that answer and plug in the values. </p>\n\n<p>Online review systems work well with either of these strategies (no benefit in cheating.) Online tests? They won't work. </p>\n\n<p>Finally, as for preventing googling... good luck. Even if your application could completely lock down the machine. The user could always run a VM or a second machine and do whatever they want.</p>\n"}, {'answer_id': 47040, 'author': 'Ben Robbins', 'author_id': 1880, 'author_profile': 'https://Stackoverflow.com/users/1880', 'pm_score': 2, 'selected': False, 'text': '<p>My school has always had a download link for the <a href="http://www.respondus.com/lockdown/installinfo.pl?ID=595735824" rel="nofollow noreferrer">Lockdown browser</a>, but I\'ve never taken a course that required it. You can probably force the student to use it with a user agent check, but it could probably be spoofed with some effort.</p>\n\n<p>Proctored tests are the only way to prevent someone from cheating. All the other methods might make it hard enough to not be worth the effort for most, but don\'t discount the fact that certain types of people will work twice as hard to cheat than it would have taken them to study honestly.</p>\n'}, {'answer_id': 47102, 'author': 'Community', 'author_id': -1, 'author_profile': 'https://Stackoverflow.com/users/-1', 'pm_score': 0, 'selected': False, 'text': '<p>Ban them from using any wireless device or laptop and keylog the machines?</p>\n'}, {'answer_id': 47116, 'author': 'Christopher Mahan', 'author_id': 479, 'author_profile': 'https://Stackoverflow.com/users/479', 'pm_score': 2, 'selected': False, 'text': "<p>Since you can't block them from using google, you've got to make sure they don't have time to google. Put the questions in images so they can't copy and paste (randomize the image names each time they are displayed). </p>\n\n<p>Make the question longer (100 words or more) and you will find that people would rather answer the question than retype the whole thing in google.</p>\n\n<p>Give them a very short time. like 30-45 seconds. Time to read the question, think for a moment, and click either A, B, C, D, E, </p>\n\n<p>(having just graduated from CSUN I can tell you scantron tests work.)</p>\n\n<p>For essay questions? do a reverse google lookup (meaning put their answer into google as soon as they click submit) and see if you get exact matches. If so, you know what to do.</p>\n"}, {'answer_id': 47125, 'author': 'Tyler', 'author_id': 3561, 'author_profile': 'https://Stackoverflow.com/users/3561', 'pm_score': 0, 'selected': False, 'text': "<p>You could enforce a small time window during which the test is available.  This could reduce the chance that a student who knows the answers will be free to help one who doesn't (since they both need to be taking the test at the same time).</p>\n\n<p>If it's math-related, use different numbers for different students.  In general, try to have different questions for different copies of the test.</p>\n\n<p>If you get to design the entire course: try to have some online homeworks as well, so that you can build a profile for each student, such as a statistical analysis of how often they use certain common words and punctuations.  Some students use semi-colons often; others never, for example.  When they take the test you get a good idea of whether or not it's really them typing.</p>\n\n<p>You could also ask a couple questions you know they don't know.  For example, list 10 questions and say they must answer any 6 out of the 10.  But make 3 of the questions based on materials not taught in class.  If they choose 2 or 3 of these, you have good reason to be suspicious.</p>\n\n<p>Finally, use an algorithm to compare for similar answers.  Do a simple hash to get rid of small changes.  For example, hash an answer to a list of lower-cased 3-grams (3 words in a row), alphabetize it, and then look for many collisions between different users.  This may sound like an obvious technique, but as a teacher I can assure you this will catch a surprising number of cheaters.</p>\n\n<p>Sadly, the real trouble is to actually enforce punishment against cheaters.  At the colleges where I have taught, if a student objects to your punishment (such as flunking them on the test in question), the administration will usually give the student something back, such as a positive grade change.  I guess this is because the student('s parents) have paid the university a lot of money, but it is still very frustrating as a teacher.</p>\n"}, {'answer_id': 47166, 'author': 'Raleigh Buckner', 'author_id': 1153, 'author_profile': 'https://Stackoverflow.com/users/1153', 'pm_score': 2, 'selected': False, 'text': '<p>@Chuck - a good idea. </p>\n\n<p>If the test was created in Flash/Flex, you could force the user to make the application fullscreen in order to start the test (fullscreen mode has to be user-initiated). Then, you can listen for the Flash events dispatched when flash exits fullscreen mode and take whatever appropriate action you want (end the test, penalize the user, etc.).</p>\n\n<p><a href="http://livedocs.adobe.com/flex/3/langref/flash/events/FullScreenEvent.html" rel="nofollow noreferrer">Flash/Flex fullscreen event info.</a></p>\n\n<p><a href="http://blog.flexexamples.com/2007/08/07/creating-full-screen-flex-applications/" rel="nofollow noreferrer">blog.flexexamples.com</a> has an example fo creating a fullscreen-capable app.</p>\n'}, {'answer_id': 47184, 'author': 'Ben Childs', 'author_id': 2925, 'author_profile': 'https://Stackoverflow.com/users/2925', 'pm_score': 0, 'selected': False, 'text': '<p>The full screen suggestions are quite limited in their effectiveness as the user can always use a second computer or w/ multi monitor a second screen to perform their lookups. In the end it is probably better to just assume the students are going to cheat and then not count online tests for anything important.</p>\n\n<p>If the tests are helpful for the students they will then do better on the final / mid term exams that are proctored in a controlled setting. Otherwise, why have them in the first place...</p>\n'}, {'answer_id': 47441, 'author': 'John Channing', 'author_id': 3305, 'author_profile': 'https://Stackoverflow.com/users/3305', 'pm_score': 0, 'selected': False, 'text': '<p>Make the questions and answers jpeg images so that you cannot copy and paste blocks of text into a search engine or IDE (if it is a coding test).  This combined with a tight time limit to answer each question, say three minutes, makes it much harder to cheat.</p>\n'}, {'answer_id': 537788, 'author': 'Christophe Herreman', 'author_id': 17255, 'author_profile': 'https://Stackoverflow.com/users/17255', 'pm_score': 0, 'selected': False, 'text': '<p>I second what Guy said. We also created a Flex based examination system which was hosted in a custom browser built in .NET. The custom browser launched fullscreen, all toolbars were hidden and shortcuts were disabled.</p>\n\n<p>Here is <a href="http://www.c-sharpcorner.com/UploadFile/mahesh/WebBrowserInCSMDB12022005001524AM/WebBrowserInCSMDB.aspx" rel="nofollow noreferrer">tutorial</a> on how to create a custom browser with C# and VB.NET.</p>\n'}, {'answer_id': 988877, 'author': 'Praesagus', 'author_id': 58013, 'author_profile': 'https://Stackoverflow.com/users/58013', 'pm_score': 0, 'selected': False, 'text': '<p>This will solve your problem. <a href="http://www.neuber.com/usermonitor/index.html" rel="nofollow noreferrer">http://www.neuber.com/usermonitor/index.html</a>\nThis will allow you to view the student\'s browser history during and after the test as well as look in on their screen during the test.  Any urls visited during test time will be logged, so you can show them the log when you put a big F on their report card.  :)  </p>\n'}, {'answer_id': 27244160, 'author': 'vipul_surana', 'author_id': 3128670, 'author_profile': 'https://Stackoverflow.com/users/3128670', 'pm_score': 0, 'selected': False, 'text': '<p>No one can stop people from cheating, but everyone can receive different questions altogether.</p>\n\n<p>I prefer you buy available online scripts in market as starting point for it. This will save you time, cost and testing efforts.</p>\n\n<p>Below is one of the fine scripts that I worked with and it worked like charm. Using this as base I developed a online testing portal of over 1000 users using computer adaptive test.</p>\n\n<p><a href="http://codecanyon.net/item/online-skills-assessment/9379895" rel="nofollow">http://codecanyon.net/item/online-skills-assessment/9379895</a></p>\n\n<p>It is a good starting point for people looking to develop Online Exam System.</p>\n\n<p>I customized the script with the help of their support.</p>\n'}]
['https://Stackoverflow.com/questions/46873', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/1638/']