Characteristics of Good Exam Answers
(McCann)


As I warn students on the first day of my classes, I like to ask 'short answer' questions on exams. My definition of a short answer question is one for which a full-credit answer will require 1-4 sentences, with 2 or 3 being the norm for most students. What we look for when we grade such questions is depth of comprehension of the topic addressed by the question. That is, the student's response needs to show that s/he understood the question, addressed the issue(s) raised by the question, and provided an answer that contains sufficient correct and well-organized information to convince us the s/he knows what s/he is talking about.

A Sample Question

Consider this question, which I would happily ask on one of my exams in an introductory programming class on language X:

        Language X supports only pass-by-value parameters. Explain what this means.

The first part doesn't ask for any response from the student; it merely provides context for the question. The query is quite open-ended, which is a sign that an answer of some length will be required to address the implications of the language's parameter-passing mechanism.


Some Really Poor Answers

Here are some answers that show little or no understanding on the part of the student.

        It means it supports pass-by-value parameters.

This is a desperation response, showing that the student read the question but doesn't know anything about the subject. This answer is worth no points.

You might look at the answer and think, "But it doesn't say anything that is incorrect!" True, but by that standard a student could also answer "2+2=4". Should the student receive credit just because the answer isn't incorrect? Of course not.

        We can only send values.

Like the first, the student has read the question. Also like the first, this answer doesn't reveal any understanding of parameter passing. No credit.

        The calling method specifies actual parameters, and the called method receives them as formal parameters.

This is my favorite kind of bad answer, one in which the student answers his or her own question rather than the one that was asked. The question doesn't ask about the names we give to the parameters in various parts of the program; it asks for an explanation of pass-by-value parameters. Answers that don't address the question aren't worth any points, either.


A Somewhat Better Answer

Consider this answer:

        The caller specifies values that are sent to the method being called.

This is a little better; it addresses the question, and it has something to say about how arguments reach the invoked method. Trouble is, it doesn't have much to say. This would be worth a quarter or a third of the question's points. If you think that's harsh, keep reading and I think you'll understand what the answer is lacking.


An OK Answer

        Copies of the caller's actual parameter values are stored in the callee's corresponding formal parameters.

Not only does this answer make appropriate use of the names of the parameters (formal and actual), it connects those names to the correct ends of the exchange (the caller has the actual, and the receiver (callee) has the formal). But even better, it adds the detail about copies of the values being sent to the callee. That's a big part of a good answer about pass-by-value parameters. This answer is worth a large fraction of the question's points, perhaps even all of them, depending on how many points are available. If the question were worth three points, this would probably earn all three. If the question were worth five, it would likely earn just four of them. It's a good answer, but it could have been better. Read on!


A Really Good Answer

This is the sort of answer that distinguishes 'B' students from 'A' students:

        Copies of the caller's actual parameter values are stored in the callee's corresponding formal parameters. This means that we cannot change an actual parameter by changing the content of the corresponding formal parameter. However, if the passed value is an object reference, we can modify the state of the referenced object using the passed value.

This answer begins with the same content as the previous answer, but that's only the beginning. From there, it expands on it by giving additional explanation, and then extends that information by explaining that even though just a value is passed, that value can be used to powerful effect.


Closing Thoughts

Now you know what we're looking for in your answers. A few other tidbits of information for you to consider:
Return to Ol' Doc McCann's Home Page

If you have any comments about this page, drop me a note at mccannl@acm.org