More than 7 years ago I wrote a post ‘Quiz and Frustration
‘. It was about a use case, asked for by a forum user, how to stop an assessment when the learner could never succeed because he lost already too much points. It feels like being kind to the learner, avoiding frustrations. Recently a similar question appeared, this time about a Pretest. Pretest slides as designed since many versions in Captivate, are also frustrating because of their limitations. You need to have all the Pretest slides in sequence at the start of the course, all navigation will be disabled, almost all commands for On Enter events are greyed out. In short: there is almost no possibility to tweak Pretest slides, reason why I don’t remember having used them ever.
In Flanders there is a saying ‘Twee vliegen in één klap’ (killing two flies at once). Let me show a workaround for a Pretest (without the normal limitations) and update that old post, taking advantage of improvements since …. version 6. Have to refurbish a lot of posts, which are still attracting visitors, with HTML5 output. Here is one of them.
Explore this published file:
The course starts with a Pretest (7 questions). Based on the obtained scores, 3 situations are possible:
Learner gets a passing score on the Pretest. In that case he will see the score slide.
Learner answers some questions, but due to the low score, will not be able to finish the pretest with succes even if all remaining questions are answered correctly. In that case the remaining questions will be skipped and the learner will have to view content slides.
Learner finishes pretest but at the end didn’t get a passing score, same situation as in the second one: learner will have to view content slides.
I didn’t add content slides, just a symbolic one. It is possible that other actions are wanted at the end, but focus of this example is only on the workflow to have questions skipped (second situation).
It was not possible to use the default Pretest slides because they do not allow advanced actions to be triggered with the On Enter slide event, which is possible with normal Quiz slides. That is why I needed to use those slides for the 'Pretest'. This may lead to a problem if you want to add a final quiz. Quizzing system variables, part of which are transferred to the LMS, will take into account all quiz slides. The easiest way to avoid this is to have the final quiz in a separate file, to which you link from this course. With JS or with the CpExtra widget by InfoSemantics - Australia, it is possible to change the values of the system variables if you really need the final quiz in the same course.
I will explain the variables used in this example, and the actions/events in the rest below.
Several variables were used in the file, both quizzing system and user variables:
cpQuizInfoPointsPerQuestionSlide: reusable variable, has the max score which the learner can get on the active quiz slide
cpQuizInfoPointsscored: the points scored so far by the learner, is updated after the Submit button is clicked.
cpInfoLastVisitedSlide: is used to check if the learner gets to a slide from the previous slide or from another slide (because getting a passing score has become impossible.
v_MaxPretest: has to be defined with the maximum score possible for the Pretest. In the example file I could have used the system variable cpQuizInfoTotalQuizPoints. I preferred not to do so. If the developer wants a final quiz in the same course, that variable has to be manipulated with JS or with the CpExtra Widget (InfoSemantics). The value has to be filled in on definition, in this case it was 40 points. All questions also have penalty, and partial score for MCQ with multiple correct answers.
v_PassPerc: required pass percentage for the Pretest. As explained for the previous variable, I preferred a specific variable instead of the system variable cpQuizInfoPassPercent. The value has to be filled in on definition, in this case it was set to 80 %.
v_PassScore: will be calculated from the two previous variables (is same in the example as cpQuizInfoPassPoints.
v_MaxUntil: will be calculated. What is the maximum score the learner would have gotten until the present question (all answers correct).
v_MaxRemain: will be calculated. What is the maximum score the learner can obtain with the remaining questions? Logically the sum of v_MaxUntil and v_MaxRemain should be equal to v_MaxPretest.
v_Possible: will be calculated, what is the maximum score which the learner can obtain if he/she gives a correct answer to all questions still to be answered.
Advanced Actions – Events
I used 4 advanced actions in the project. Three of them are triggered by On Enter Slide events, and one by all Success and Last Attempt actions for the quiz slides. I had only one attempt in each quiz slide.
This action is triggered by the On Enter event of the first Question slide. No condition in this action, just a sequence of commands. It is meant to calculate the values of some system variables as you can see in this screenshot:
The variable v_Passcore is calculated from two other variables having a default value. In this case v_MaxPretest was 40 points (maximum score) and v_PassPerc = 80% required for passing the test. Result will be 32 points for v_Passscore.
The variable v_MaxUntil will get its first value, which is the score possible to obtain for this first quiz slide.
Is also a simple, non-conditional action, triggered by all On Enter events of the question slides, with the exception of the first one (used 6 times in the example file). On each slide the variable v_Until is increased with the new value of the question score on that slide.
This action is triggered by both the Success and the Last Attempt action of each quiz slide, in total 14 times.
The trick used is to calculate v_Possible, which is the maximum score a learner can still get after the present question, supposing he/she will give a correct answer to all the remaining questions (value of v_MaxRemain). Learner already obtained a score stored in cpQuizInfoPointsscored. This calculation happens in the first decision ‘Maths’.
The second decision is conditional, and will navigate the learner out of the Pretest (Jump to Score slide) if he will not be able to pass the test. If it is still possible to acquire the passing score, the test continues.
This is the most complicated action, because it has to take care of three situations. Each situation results in a conditional decision:
- If the learner has finished all questions (last visited slide was slide 8, which is the last question slide), but did fail, (comparing score with v_PassScore). In that case the appropriate state of an multistate SVG and a multistate text container is shown. The Next button appears as well.
- If the learner has not finished all questions, (last visited slide was not slide 8) another state is made visible for both multistate objects, and the Next button appears.
- If the learner has a passing score for the test, another state is shown and not the Next button, but the ‘ToTest’ button appears, which will navigate the learner to the results slide (from which a separate quiz file can be launched).
Next button has the usual ‘Go to Next Slide’, whereas the ToTest’ button jumps to the results slide, which is the last slide in the example file.
Of course the same approach can be used for a normal quiz. It can spare the learner a lot of frustrations if he started the quiz, without mastering the content, and quickly sees that the result will never be sufficient. That was the original reason for the first older post.
It would be interesting to know if you ever use the default Pretest slides, because I really dislike the many limitations. All Pretest slides need to be at the start of the course and in sequence. All navigation will be disabled, on the playbar as well in the TOC, not only for the Pretest slides but also for content slides which is very annoying. What do you think?
Would it be possible to replace the Pretest slides by Knowledge Check slides? I suspect it would be possible, maybe stuff for another 'anti-frustration' post? The advantage would be that a final quiz will be easier to set up.