{"id":1167,"date":"2024-12-06T11:56:12","date_gmt":"2024-12-06T11:56:12","guid":{"rendered":"https:\/\/blogs.kcl.ac.uk\/proged\/?p=1167"},"modified":"2024-12-07T12:30:11","modified_gmt":"2024-12-07T12:30:11","slug":"the-terrible-state-of-mcqs","status":"publish","type":"post","link":"https:\/\/blogs.kcl.ac.uk\/proged\/2024\/12\/06\/the-terrible-state-of-mcqs\/","title":{"rendered":"The terrible state of MCQs"},"content":{"rendered":"<p style=\"font-weight: 400\">In academia \u2013 as in many other contexts \u2013 Multiple Choice Questions (MCQs) are a fact of life. We have many situations in which we need to assess a large cohort of learners, and MCQs make this easier.<\/p>\n<p style=\"font-weight: 400\">Here, I don\u2019t want to debate the value of MCQs as an examination technique in general, but talk about <em>how <\/em>they are written. If we accept that they are part of our work, let\u2019s at least make them not terrible.<\/p>\n<p style=\"font-weight: 400\">There are three very common ways in which MCQs can be obviously bad. I see them all the time.<\/p>\n<p style=\"font-weight: 400\">They are:<\/p>\n<ol>\n<li>The question only examines surface knowledge<\/li>\n<li>The distractors are random<\/li>\n<li>The off-by-one way of writing distractors<\/li>\n<\/ol>\n<p style=\"font-weight: 400\">Let\u2019s look at each briefly.<\/p>\n<p style=\"font-weight: 400\"><strong>The question only examines surface knowledge<\/strong><\/p>\n<p style=\"font-weight: 400\">This is quite an easy and obvious shortcoming to recognise: Often, MCQs just ask questions about terminology. They do not touch on concepts or deeper understanding. This is a very common trap to fall into for people who are not used to writing MCQs. Writing MCQs that test understanding is harder, and it\u2019s easy to slip into the trap of just testing surface issues.<\/p>\n<p style=\"font-weight: 400\">We have probably all seen it.<\/p>\n<p style=\"font-weight: 400\">When you write your questions, examine each question critically in this light. Strive for meaningful questions.<\/p>\n<p style=\"font-weight: 400\"><strong>The distractors are random<\/strong><\/p>\n<p style=\"font-weight: 400\">Another very common gripe of mine is that the <em>distractors<\/em> (the incorrect options in MCQs) are chosen at random. Let\u2019s consider an example. Assume we have this question:<\/p>\n<p style=\"font-weight: 400;padding-left: 40px\"><strong>Question 54:<\/strong><\/p>\n<p style=\"font-weight: 400;padding-left: 40px\"><em>What is the output of the following segment of code?<\/em><\/p>\n<pre style=\"font-weight: 400;padding-left: 40px\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 int sum = 0;\u00a0\u00a0\u00a0\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 for (int i=0; i&lt;=5; i+=2) {\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sum = sum + i;\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.out.println(sum);<\/pre>\n<p style=\"font-weight: 400\">If you speak Java, then you can work out that the answer is 6. So we use 6 as one of the possible options, and add a few random distractors:<\/p>\n<p style=\"font-weight: 400;padding-left: 40px\"><em>Answer:<\/em><\/p>\n<pre style=\"padding-left: 80px\">(A) 1\r\n(B) 896\r\n(C) 6\r\n(D) -4\r\n(E) 5<\/pre>\n<p style=\"font-weight: 400\">In this case, if students have a common misconception, they may arrive at an answer that is not on the list. For example, a student who does not understand that this definition makes the loop increment by 2 might assume that the answer is 15. But 15 is not on the list. So the student is implicitly told that they are wrong, and they can discard unlikely options (\u201cNegative? \u2013 No.\u201d \u201cMore then 800? \u2013 No.\u201d) and make a random guess between a few remaining options.<\/p>\n<p style=\"font-weight: 400\">This question is even worse in a way: Another common mistake is not being able to correctly distinguish between &lt;= and &lt; in the loop condition, and getting the answer wrong because of this. The way the question is written, however, it is not even possible to expose this misconception, because both variants happen to result in the same output!<\/p>\n<p style=\"font-weight: 400\">A badly written question.<\/p>\n<p><strong style=\"font-weight: 400\">The off-by-one way of writing\u00a0<\/strong><b>distractors<\/b><\/p>\n<p style=\"font-weight: 400\">The other very common pattern I see all the time has an example in this question.<\/p>\n<p style=\"font-weight: 400;padding-left: 40px\"><strong>Question 31:<\/strong><\/p>\n<p style=\"font-weight: 400;padding-left: 40px\">\u00a0<em>Which of the following code segment would execute the stored procedure &#8220;getPassword()&#8221; located in a database server?<\/em><\/p>\n<ol>\n<li>\n<pre>CallableStatement cs = con.prepareCall(\"{call.getPassword()}\");\r\ncs.executeQuery();<\/pre>\n<\/li>\n<li>\n<pre>CallabledStatement callable = con.prepareCall(\"{call getPassword()}\");\r\ncallable.executeUpdate();<\/pre>\n<\/li>\n<li>\n<pre>CallableStatement cab = con.prepareCall(\"{call getPassword()}\");\r\ncab.executeQuery();<\/pre>\n<\/li>\n<li>\n<pre>Callablestatement cstate = con.prepareCall(\"{call getpassword()}\");\r\ncstate.executeQuery();<\/pre>\n<\/li>\n<\/ol>\n<p style=\"font-weight: 400\">The way questions like this are written is usually this: The question setter writes the correct response, and then creates three distractors by introducing one error in each.<\/p>\n<p style=\"font-weight: 400\">It is trivial to reverse-engineer the correct answer from this. To do this, we spot the differences, and for each differences discard the odd one out. For example:<\/p>\n<ul>\n<li>One difference is that <strong>&#8220;{call getpassword()}&#8221;<\/strong> is written with a dot in the middle once, but without the dot three times. So the dot is the odd one out, we discard Answer 1.<\/li>\n<li>Another difference: <strong>CallableStatement<\/strong> is written with w capital S three times, with lowercase s once. So we discard answer 4.<\/li>\n<li>Last one: The second line calls <strong>executeQuery()<\/strong> three times, and <strong>executeUpdate()<\/strong> once. Answer 2 is out.<\/li>\n<\/ul>\n<p style=\"font-weight: 400\">And voil\u00e0 \u2013 there is our answer: 3. We can do this without any knowledge or understanding of the subject matter. Keep your eyes open for this pattern in MCQ tests. It is astonishing how often you will see this question pattern.<\/p>\n<p style=\"font-weight: 400\"><strong>A better example<\/strong><\/p>\n<p style=\"font-weight: 400\">Here is an example of something you could do:<\/p>\n<p style=\"font-weight: 400;padding-left: 40px\"><strong>Question 8:<\/strong><\/p>\n<pre style=\"font-weight: 400;padding-left: 40px\">HashMap&lt;Integer, String&gt; myMap = new HashMap&lt;&gt;();\r\n\r\nmyMap.put(2, \"Tiger\");\r\nmyMap.put(4, \"Lion\");\r\nmyMap.put(13, \"Lion\");\r\nmyMap.put(2, \"Elephant\");\r\nmyMap.put(3, \"Chicken\");\r\n\r\nSystem.out.println(myMap.get(2));<\/pre>\n<p style=\"font-weight: 400;padding-left: 40px\"><em>When you try to compile and run this code, what will happen?<\/em><\/p>\n<ul>\n<li style=\"list-style-type: none\">\n<ol>\n<li>The code has an error, because the value \u201cLion\u201d is used twice in the HashMap.<\/li>\n<li>The code has an error, because the key 2 is used twice in the HashMap.<\/li>\n<li>The code will run and print \u201cTiger\u201d.<\/li>\n<li>The code will run and print \u201cLion\u201d.<\/li>\n<li>The code will run and print \u201cElephant\u201d.<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<p style=\"font-weight: 400\">\u00a0In this case, the question tests an understanding of how maps work.<\/p>\n<ul>\n<li>Option 1 tests the possible misconception that values cannot appear twice in a map.<\/li>\n<li>Keys, on the other hand, are unique in a map. Option 2 tests the misconception that they cannot be replaced by a new entry.<\/li>\n<li>Option 3 tests the misconception that the first entry for a given key persists.<\/li>\n<li>Option 4 tests the misconception that the get(n)-parameter is an index, mirroring list-behaviour (referring to either the second or third element entered, depending whether the list is zero-based or one-based).<\/li>\n<li>And Option 5 is correct.<\/li>\n<\/ul>\n<p style=\"font-weight: 400\">This is by far not all that there is to say about MCQ writing. But it\u2019s a start. It is the absolute minimum you should consider if ever you find yourself in the position to write and MCQ test.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In academia \u2013 as in many other contexts \u2013 Multiple Choice Questions (MCQs) are a fact of life. We have many situations in which we need to assess a large cohort of learners, and MCQs make this easier. Here, I &hellip; <a href=\"https:\/\/blogs.kcl.ac.uk\/proged\/2024\/12\/06\/the-terrible-state-of-mcqs\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":179,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[86],"class_list":["post-1167","post","type-post","status-publish","format-standard","hentry","category-teaching","tag-programming-education"],"_links":{"self":[{"href":"https:\/\/blogs.kcl.ac.uk\/proged\/wp-json\/wp\/v2\/posts\/1167","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.kcl.ac.uk\/proged\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.kcl.ac.uk\/proged\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.kcl.ac.uk\/proged\/wp-json\/wp\/v2\/users\/179"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.kcl.ac.uk\/proged\/wp-json\/wp\/v2\/comments?post=1167"}],"version-history":[{"count":8,"href":"https:\/\/blogs.kcl.ac.uk\/proged\/wp-json\/wp\/v2\/posts\/1167\/revisions"}],"predecessor-version":[{"id":1189,"href":"https:\/\/blogs.kcl.ac.uk\/proged\/wp-json\/wp\/v2\/posts\/1167\/revisions\/1189"}],"wp:attachment":[{"href":"https:\/\/blogs.kcl.ac.uk\/proged\/wp-json\/wp\/v2\/media?parent=1167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.kcl.ac.uk\/proged\/wp-json\/wp\/v2\/categories?post=1167"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.kcl.ac.uk\/proged\/wp-json\/wp\/v2\/tags?post=1167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}