CMI5, или Жизнь после SCORM

В детстве я мечтала стать учителем. Детская мечта частично сбылась: мои взрослые рабочие будни проходят «в школе». И хотя я не учитель в реальном классе, а программист системы дистанционного обучения (СДО), цель у меня та же: сделать обучение доступным, а его процесс интересным. Правда, программисту для этого необходимо умение «жонглировать» не мелом и указкой, а стандартами дистанционного обучения. Я предлагаю совершить путешествие во времени на 20 лет назад, чтобы узнать, как эволюционировали стандарты дистанционного обучения и какие средства в арсенале программистов СДО есть сейчас.

В 1999 году, когда мои ровесники обводили карандашом в кружок теорему Пифагора в учебнике геометрии, компания ADL стартовала проект, в котором скучные учебники планировали заменить электронными курсами. В 2001 ею была выпущена первая официальная версия SCORM (Sharable Content Object Reference Model) — формального языка и спецификации для создания обучающих курсов и их интеграции в СДО.

ADL — не единственная компания, которая пыталась стандартизировать дистанционное обучение. На создание SCORM ее вдохновила разработанная компанией AICC одноименная спецификация. AICC первоначально предназначалась для авиации, но в результате стала популярна и за ее пределами.

SCORM «под капотом» — это:

  • описание структуры учебных блоков и пакетов учебного материала (Content Aggregation Model) — метаданных и ресурсов (изображения, HTML-файлы, Flash и т.д.);
  • требования к среде выполнения: правила запуска курсов, ECMAScript API для коммуникации SCORM-клиента с СДО, структура модели данных;
  • правила организации учебных материалов и навигации между ними в зависимости от успеваемости ученика.

Несмотря на то, что реализация курса и его поддержки на стороне СДО — задача непростая, SCORM выглядел привлекательным со многих сторон:

  • Конфигурация SCORM-курсов не завязана на конкретной СДО. Однажды созданные курсы могут быть использованы в любых системах, поддерживающих SCORM. Справедливо и обратное: для СДО не важно, кто является провайдером курса. Достаточно того, чтобы курс соответствовал стандарту.
  • SCORM-курс может содержать проверочные тесты, обучающие модули, интерактивные игры в любом формате, поддерживаемом браузерами. 
  • СДО получает информацию о прогрессе ученика: оценку, если это тест, процент прохождения курса, время, затраченное на обучение, и т. д.
  • Курсы хорошо структурированы, блоки и модули следуют друг за другом в заданном порядке.
  • Ученик может прервать курс и продолжить в любое другое время. СДО позаботится о том, чтобы в следующий раз курс открылся на том месте, на котором был остановлен.

xAPI

Со временем SCORM показал свои слабые стороны.

  • Исторически сложилось, что большинство курсов реализовано на некогда популярном Flash. Решение о прекращении поддержки Flash привело к тому, что обновленные браузеры «не хотят» добровольно запускать такие SCORM-курсы.
  • Мобильные гаджеты, оснащенные приложениями для обучения, стали конкурировать с ПК за «место на парте», и зависимый от браузера SCORM остался не у дел.
  • SCORM-курс не способен существовать отдельно от СДО: и хоститься они вынуждены вместе, чтобы избежать кроссдоменных конфликтов, и сам по себе такой курс вне СДО становится бесполезным.
  • Обнаружилось, что взломать SCORM-курс способен даже школьник («спасибо» ECMAScript API).

ADL решила не латать дыры в SCORM, а создать новую спецификацию, которая не повторит ошибок SCORM и в будущем станет его достойной заменой. Так появился xAPI (или TinCan).

xAPI, схема

Изюминки нового стандарта — это основанная на REST архитектура и Learning Record Store (LRS) — отдельно выделенное хранилище, которое получает информацию о каждом шаге учащегося и выдает ее по запросу. Что это дало пользователям и разработчикам xAPI?

  • Стало возможным обучаться на мобильном устройстве.
  • Формат контента курса безграничен. Устаревший Flash, произвольные HTML-страницы, аудио, видео, обучающие игры и симуляторы — из всего этого можно «приготовить» контент. 
  • Курсовой контент и LRS могут быть размещены где угодно, а не только на том сервере, где «живет» СДО.
  • Курсы доступны даже офлайн. Информация о прохождении курса не будет потеряна, как это происходит в SCORM, а синхронизируется с LRS сразу, как только восстановится связь. Также ученик может продолжить обучение на любом другом устройстве с того места, где он остановился, а не проходить курс заново. 
  • Неограниченные возможности для сбора аналитики.
  • Наконец, курсы стали доступны вне СДО. Теперь всю работу по хранению и выдаче аналитики выполняет за нее LRS.

xAPI + СДО =?

Хотя xAPI и выглядит как серебряная пуля для электронного обучения, на практике оказалось, что отдельные xAPI-курсы не могут заменить полноценную СДО. Попытка же подключать такие курсы к СДО сильно осложнилась тем, что язык xAPI лишен жестких правил. Так, например, нет способа систематизировать и однозначно идентифицировать действия учащегося, если в одном курсе глагол, означающий завершение курса, — это “completed”, а в другом — “passed”. 

В 2016 появился CMI5 (Computer Managed Instruction) — совместное «детище» компаний AICC и ADL, известное как xAPI, модифицированная для использования в СДО. Создатели спецификации утвердили единую структуру курса, правила взаимодействия курса и СДО, словарь слов, описывающих действия учащегося. В итоге CMI5 унаследовала лучшие качества SCORM и xAPI: гарантированную совместимость курсов и СДО и большие возможности для обучения и аналитики процесса обучения. 

CMI5, схема

CMI5 в действии

Рассмотрим простейший CMI5-курс для изучения русского языка.

Один из его блоков, информационный, содержит правило для запоминания падежей.

Пример задания

Модуль «Падежи» — только для чтения. При нажатии на кнопку Продолжить будет сгенерировано событие «Иван Иванов изучил 'Падежи'. », или на языке CMI5 “Ivan Ivanov experienced 'Падежи'.”. На запрос информации о произошедшем событии LRS ответит следующим JSON:

Ivan Ivanov experienced 'Падежи'.
{
"id": "5f174065-3b34-4995-97d9-9ed542a85c91", 
    "actor": { 
        "account": { 
            "homePage": "http://test.scorm.com", 
            "name": "test" 
        }, 
        "objectType": "Agent", 
        "name": "Ivan Ivanov" 
    }, 
    "verb": { 
        "id": "http://adlnet.gov/expapi/verbs/experienced", 
        "display": { 
            "en-US": "experienced" 
        } 
    }, 
    "context": { 
        "extensions": { 
"https://w3id.org/xapi/cmi5/context/extensions/sessionid": "bb6253b8-9470-405b-962c-6e12b1cb4e18" 
        }, 
        "registration": "3f0210f7-82fc-4adf-bea8-0b5b6c7555ab", 
        "contextActivities": { 
            "grouping": [ 
                { 
                    "id": "https://test.cmi5/E6577A53-68D2-4863-B1CE-F606338992A3/presentation", 
                    "objectType": "Activity" 
                } 
            ], 
            "parent": [ 
                { 
                    "id": "https://test.cmi5/E6577A53-68D2-4863-B1CE-F606338992A3/presentation", 
                    "objectType": "Activity" 
                } 
            ] 
        } 
    }, 
    "timestamp": "2020-02-15T16:29:59.000Z", 
    "stored": "2020-02-15T16:29:59.494Z", 
    "authority": { 
        "account": { 
            "homePage": "http://test.scorm.com", 
            "name": "test" 
        }, 
        "objectType": "Agent", 
        "name": "Ivan Ivanov" 
    }, 
    "version": "1.0.0", 
    "object": { 
        "id": "http://test.scorm.com/cmi5/lms-id/3a45d09ae8d81f3e2c195ca0c92517c1bc9c4099/4deaa592-477f-4b79-9081-c1cf95edba7a/slides/0", 
        "definition": { 
            "name": { 
                "ru-RU": "Падежи" 
            }, 
            "type": "http://adlnet.gov/expapi/activities/module" 
        }, 
        "objectType": "Activity" 
    } 
} 

В этой структуре можно разглядеть следующую информацию:

  • actor — описывает того, кто проходит обучение. В приведенном примере обучающийся — один человек («objectType»: «Agent»), но проходить модуль может также и группа из нескольких людей («objectType»: «Group»).
  • verb — глагол, обозначающий действие учащегося. То, что отличает CMI5 от xAPI, — это утвержденные 9 глаголов-действий: Launched, Initialized, Terminated, Passed, Completed, Failed, Abandoned, Waived, Satisfied;
  • timestamp — фиксированный момент времени прохождения модуля;
  • stored — время, когда событие было записано в LRS;
  • authority — информация об авторизованном пользователе; 
  • object описывает текущий модуль. 

Другой модуль курса — проверочный. От учащегося требуется выбрать несколько правильных ответов из предложенных вариантов.

Пример задания

Наш неграмотный ученик частично ошибается, выбрав 3 и 4 варианты. JSON-отчет для этого события выглядит так:

Ivan Ivanov incorrectly answered 'Выберите предложения, в которых -бы пишется РАЗДЕЛЬНО.' with response '2,3' with score 0%.
{ 
    "id": "e0d2bc32-31f4-478e-83cf-f5a29c707c64", 
    "actor": { 
        "account": { 
            "homePage": "http://test.scorm.com", 
            "name": "test" 
        }, 
        "objectType": "Agent", 
        "name": "Ivan Ivanov" 
    }, 
    "verb": { 
        "id": "http://adlnet.gov/expapi/verbs/answered", 
        "display": { 
            "en-US": "answered" 
        } 
    }, 
    "result": { 
        "score": { 
            "scaled": 0, 
            "raw": 0, 
            "min": 0, 
            "max": 10 
        }, 
        "success": false, 
        "response": "2[,]3", 
        "duration": "PT0H0M21S" 
    }, 
    "context": { 
        "extensions": { "https://w3id.org/xapi/cmi5/context/extensions/sessionid": "bb6253b8-9470-405b-962c-6e12b1cb4e18" 
        }, 
        "registration": "3f0210f7-82fc-4adf-bea8-0b5b6c7555ab", 
        "contextActivities": { 
            "grouping": [ 
                { 
                    "id": "https://test.cmi5/E6577A53-68D2-4863-B1CE-F606338992A3/presentation", 
                    "objectType": "Activity" 
                } 
            ], 
            "parent": [ 
                { 
                    "id": "http://test.scorm.com/cmi5/lms-id/3a45d09ae8d81f3e2c195ca0c92517c1bc9c4099/4deaa592-477f-4b79-9081-c1cf95edba7a/quizzes/3eb2m2qum2ic-gi7dizsu4d26", 
                    "objectType": "Activity" 
                } 
            ] 
        } 
    }, 
    "timestamp": "2020-02-15T16:30:12.000Z", 
    "stored": "2020-02-15T16:32:06.654Z", 
    "authority": { 
        "account": { 
            "homePage": "http://test.scorm.com", 
            "name": "test" 
        }, 
        "objectType": "Agent", 
        "name": "Ivan Ivanov" 
    }, 
    "version": "1.0.0", 
    "object": { 
        "id": "http://test.scorm.com/cmi5/lms-id/3a45d09ae8d81f3e2c195ca0c92517c1bc9c4099/4deaa592-477f-4b79-9081-c1cf95edba7a/quizzes/3eb2m2qum2ic-gi7dizsu4d26/questions/Slide1_Q_i68jbjynkg0v-wgrvgh6ix86p", 
        "definition": { 
            "name": { 
                "ru-RU": "Выберите предложения, в которых -бы пишется РАЗДЕЛЬНО." 
            }, 
            "description": { 
                "ru-RU": "Выберите предложения, в которых -бы пишется РАЗДЕЛЬНО." 
            }, 
            "type": "http://adlnet.gov/expapi/activities/cmi.interaction", 
            "correctResponsesPattern": [ 
                "1[,]2" 
            ], 
            "choices": [ 
                { 
                    "id": "0", 
                    "description": { 
                        "ru-RU": "Ира делает селфи, что(бы) привлечь внимание Димы." 
                    } 
                }, 
                { 
                    "id": "1", 
                    "description": { 
                        "ru-RU": "Что(бы) ни опубликовал Иван в Инстаграме, Маше все нравилось." 
                    } 
                }, 
                { 
                    "id": "2", 
                    "description": { 
                        "ru-RU": "\"Что(бы) заказать: суши или вок?\" - думала Вика." 
                    } 
                }, 
                { 
                    "id": "3", 
                    "description": { 
                        "ru-RU": "Что(бы) быть в тренде, Антон купил пальто." 
                    } 
                } 
            ], 
            "interactionType": "choice" 
        }, 
        "objectType": "Activity" 
    } 
} 

Объект result содержит результат прохождения теста: ответ ученика, набранные учеником очки, максимальное и минимальное количество очков, время, затраченное на тест и т.д. Объект object описывает содержимое теста, включая список вариантов и правильный ответ.

Заключение

В 2019 году компания Rustici Software опубликовала статистику курсов, загружаемых на SCORM Cloud.

Диаграмма — статистика курсов на SCORM Cloud

Согласно статистике, процент использования xAPI-курсов растет с каждым годом, хотя спецификация все еще далека по популярности не только от различных версий SCORM, а даже от его прародителя AICC.

Причин для этого несколько. Самые очевидные — трудовые и финансовые затраты, необходимые для внедрения xAPI. К тому же большое число СДО доступны только в браузере, и если исключить проблемные Flash-курсы, то сложно придумать весомый повод для того, чтобы отказаться от рабочих SCORM-курсов и переписать их на xAPI. 

Процент CMI5-курсов на этом графике минимальный. При этом CMI5 отлично справляется со своей главной миссией: обеспечивает совместимость LRS и xAPI-подобных курсов с СДО и, как следствие, выступает более мощной и современной альтернативой SCORM.

Есть ли жизнь после SCORM? Однозначно есть. И она объективно более интересная, более технологичная и разнообразная, чем та, что помещается в браузерное окно.

Ссылки на материалы, использованные в статье:

Вам также может понравиться:

Блог Доступный дизайн компонентов на примерах
15 ноября, 2021
Статья об основных руководствах по доступности и о ключевых моментах, на которые стоит обратить внимание, а именно: о порядке фокуса, о клавиатурном взаимодействии и об ARIA-атрибутах.
Блог Разработка системы тестирования SQL запросов. Часть 2
29 сентября, 2021
Продолжение истории о фреймворке, разработанном с целью автоматизации и упрощения процесса тестирования сложных SQL-запросов на крупном проекте.
Блог Техники обработки отказов сервиса в микросервисных архитектурах
07 сентября, 2021
Эта статья может быть полезна для тех, кто пострадал от нестабильной работы внешних API: какие бывают стратегии обработки отказов и какой путь избрали мы.