Incremental quiz grading in Captivate

One service that monkeylogic design provides that isn’t listed on our site yet is creating asynchronous online learning trainings for the web. The tool we use is Adobe Captivate, version 6 as of this post, and while Captivate does many great things it’s the quizzing feature that has some limitations.

Captivate can only have one quiz per training module so if you need to have periodic quizzes or knowledge checks in a module which also give you individual results for each quiz, then this is where the problem lies. The reason, if you’ve never had any experience with designing an online training or dealt with a Learning Management System (LMS), is that Captivate only has a set list of variables it uses to track the data of all the questions of a quiz without a built in way to break up the questions of a quiz into groups. Even though you can move individual questions of the quiz to any slide you want in the module, you don’t have a way to tell Captivate or your LMS that the questions on slides 5-9 are one group, the questions on slides 13-16 are another group and to then give the scored results of each group individually to the person going through the module.

If you do design online trainings in Captivate then you likely already know of this limitation or if you didn’t you do now. Research into the problem on the web will return a few pages that give some workarounds but it requires quite a bit of manipulation to the files that Captivate generates including combining different files together in a zip file and changing data in an XML file amongst a few other things. If you’re willing to go this extra step then it’s not a problem but as it does land on the more technical side of things I wondered if there was an easier way. The good news is that an easier way is possible and its really simple as long as you understand Captivate’s variables and advanced actions.

Click here to view what this post will be creating.

Variables, advanced actions, and buttons

A Captivate file will place all the quiz slides together when you add them to a module. The visual structure would appear as the following:

  • Introduction
  • Content slide 1
  • Content slide 2
  • Quiz slide 1
  • Quiz slide 2
  • Quiz slide 3
  • Quiz slide 4
  • Quiz slide 5
  • Quiz slide 6
  • Quiz results

We want to spread out the quiz so the first three questions appear after Content Slide 1 and the last three questions appear after Content Slide 2 so the structure changes to:

  • Introduction
  • Content slide 1
  • Quiz slide 1
  • Quiz slide 2
  • Quiz slide 3
  • Content slide 2
  • Quiz slide 4
  • Quiz slide 5
  • Quiz slide 6
  • Quiz results

Captivate doesn’t have a way to show the total points scored after the first three quiz slides so you have to setup an advanced action to acquire the score from Captivate and a variable to house that score. (To help you see how to setup a file using this method there is a link to a Captivate CS6 file at the end of this post).

In the file there are two quizzes so you have to setup two variables named Subscore1 and Subscore2 and assign them both a value of 0. On the Submit button Action on Quiz slide 3 I setup an advanced action, named QuizSubscore1, with the following parameters:

Actions
Assign Subscore1 with 0
Expression Subscore1 = Subscore1 + cpQuizinfoPointsscored
Go to Next Slide

The reason why the first action is to assign Subscore1 with 0 is that it makes it possible to report a running total at the bottom of every quiz slide in group 1 as long as you’ve assigned the advanced action to the Submit button on each quiz slide in the group. The Captivate file in this post uses this feature at the bottom of every quiz slide. If the value wasn’t reset to 0 each time you would be adding the value of each current slide to the next slide which would give you a total score higher than what it actually is.

The expression then recalculates the value of Subscore1 by using a basic algebra equation, X = (X + Y). This may seem like a backwards way of approaching this, but it works. The plain language version is: “Set Subtotal1 to 0. Let Subtotal1 equal Subtotal1 plus cpQuizinfoPointsscored.”

We want to report to the user what their score was for group 1 and 2 so you add a new slide after Quiz slide 3 and Quiz slide 6 for the subscores.

  • Introduction
  • Content slide 1
  • Quiz slide 1
  • Quiz slide 2
  • Quiz slide 3
  • Quiz Subscore 1 results
  • Content slide 2
  • Quiz slide 4
  • Quiz slide 5
  • Quiz slide 6
  • Quiz Subscore 2 results
  • Quiz results

On the Quiz Subscore 1 results page you add two text captions. One to display the value stored in Subscore1 and the other to identify what the value is. Unless you’re specifying what the points are for each slide or each quiz question is a different value, it wouldn’t make sense to tell the user how many points they received if they don’t know how many possible points there were. So I placed an additional text caption on the subscore page that stated how many total points were possible. As the quiz questions aren’t random I just typed in the total possible score rather than using an advanced action to figure it out.

The advanced action, named QuizSubscore2, for the second subscore page  is similar to the first but requires an additional line to function:

Actions
Assign Subscore2 with 0
Expression Subscore2 = Subscore2 + cpQuizinfoPointsscored
Expression Subscore2 = Subscore2 – Subscore1
Go to Next Slide

The script does the same thing as the first but as the total points for all the quiz questions includes the points from the first group you have to subtract the points of the first group from the second to get the correct value for the second group.

You could setup the second quiz group results slide the same as the first and just say how many points were earned as well as the total possible points, but I’ve also included the total number of points from both quizzes as well as the maximum score possible.

Last thoughts  

This is a proof of concept to show that it’s possible to do incremental quiz scoring on a linear training that doesn’t have branching, you would need to do some additional work in order to get this solution to function under a few different circumstances. If you had a branching training and each branch ended in a different quiz, you would need to build in additional conditional advanced actions so that the subscore variables were being calculated correctly.

I do need to credit Lieve Weymeis for having a similar solution to this problem which she posted back in September of 2012. Unfortunately the site Posterous, which is where she posted about an alternative solution, is shutting down April 30, 2013 but you can view her post until then at this link, http://blog.lilybiri.com/intermediate-score-slides. (UPDATE: The link is now directed to the new site) Her solution allows you to do a lot more with a Captivate file, primarily if you want the user to be able to select a random quiz to take, but this post along with her post should give you more flexibility and possibilities when creating Captivate trainings.

CAPTIVATE FILE USED IN THIS POST

Incremental Quiz Reporting Captivate 9 file

UPDATE: The original file was accidentally deleted so it had to be recreated in Captivate 9.

« | »