[QTI] More questions about stringInteractions
Daniel Cassidy
ims-qti at danielcassidy.me.uk
Tue Nov 11 18:38:47 GMT 2008
Hi List,
Sorry to bombard this normally very quiet list with two questions in
one day :).
I have a couple of questions/issues regarding stringInteractions:
1) Regarding the placeholderText attribute, the spec says:
"In visual environments, string interactions are typically
represented by empty boxes into which the candidate writes
or types. However, in speech based environments it is
helpful to have some placeholder text that can be used to
vocalize the interaction. Delivery engines should use the
value of this attribute (if provided) instead of their
default placeholder text when this is required. Implementors
should be aware of the issues concerning the use of default
values described in the section on responseVariables."
The expected behaviour here isn't terribly clear. For example,
for an empty text box, normally a screenreader will read
something like:
"BEGIN INPUT FIELD END INPUT FIELD"
Assuming placeholderText="bananas", the spec suggests that this
should become one of:
"BEGIN INPUT FIELD bananas END INPUT FIELD"
"bananas"
The first case doesn't seem terribly useful. In the second case
it becomes unclear how to read a text box which does contain an
answer while still making it clear to the candidate that that
answer may be changed.
Furthermore, the phrase "should use the value of this attribute
(if provided) instead of their default placeholder text when this
is required" is highly ambiguous:
* If the environment is visual, should the delivery engine
place placeholderText in the input box initially?
* If the environment is aural, should the delivery engine ignore
the placeholderText if it has some other mechanism for
representing an input field (such as that described above)?
Some examples of correct usage would be appreciated.
2) Regarding the patternMask attribute, there doesn't seem to be any
user-friendly way to feed back to the candidate that their input
is not valid.
Some possible implementations I've thought of:
* The delivery engine prevents the candidate from entering input
which isn't valid by ignoring keystrokes. This isn't very
user-friendly since the candidate may not understand why their
keystrokes are being ignored.
It also can't guarantee valid input. For example, if
patternMask="^(ab|c)$", the delivery engine doesn't know whether
to initially accept a keystroke of "a", since an entry of just
"a" is invalid and the delivery engine can't know if the user
intends to type "b" next. Therefore this method must always be
combined with some other method.
* The delivery engine allows any input but informs the user if
their input is not valid. Unfortunately, the user may not
understand why the input is not valid, and it is difficult for
the delivery engine to provide useful feedback.
Some mechanism to provide a custom message to display to the
user in the case of invalid input would be immensely helpful
here. Even better would be if it were possible to provide
several messages, selected based on which part of the input is
invalid.
* The delivery engine allows any input, but highlights individual
characters from the input which are invalid. A message is
displayed to the user to the effect that their input is not
valid.
This is better from a usability point of view than the other
options, but is not always feasible. For example, if
patternMask="^(adc|dbc|abd)$" and the user's input is "abc",
which character(s) should we highlight?
I notice that the QTI 2.1 draft has introduced additional guidance
as follows:
"Care is needed to ensure that the format of the required input
is clear to the candidate, especially when validity checking of
responses is required for progression through a test. This
could be done by providing an illustrative sample response in
the prompt, for example."
However, in my view, this really isn't sufficient. It is a
principle of usable interface design that (human) memory load
should be minimised. Each requirement that a candidate must
memorize in order to successfully input their response represents
additional memory load.
Similarly, it is a principle that recognition is easier than
recall. A generic message indicating that a user's input is
invalid is not helpful because it requires the user to recall (or
reread) all the relevant validation rules, and work out which
apply to their input to make it invalid.
A message relating specifically to the input entered by the user,
informing them *why* it is invalid, is much more helpful, since
the user is likely to immediately recognise the relevant rule and
fix their input accordingly. Unfortunately this is nearly
impossible to achieve with QTI as described above.
Finally, I don't believe that patternMask is usable in practice:
* It is nearly impossible to design an authoring tool which can
be used by a non-technical person (except in the case where
the user simply selects from a set of predefined patterns).
* It is highly inadvisable for a patternMask to be defined by
anyone without an extensive understanding of software
usability.
These facts make me wonder why it is included in QTI at all?
Thanks,
Dan.
More information about the IMS-QTI
mailing list