Концепция оценщиков

Для оценки поддерживаемых критериев была разработана концепция оценщиков - сервисов, принимающих на вход попытку сдачи задания и осуществляющих проверку в соответствии какому-либо критерию. Каждому поддерживаемому критерию существует соответствие определенного оценщика.

В случае, если программа регистрирует новую попытку сдачи работы, вычисляется набор правил, по которому она должна быть оценена, откуда можно понять, какие оценщики необходимо использовать.

Вследствие того, что критерии могут относиться к различным типам оцениваемых работ, оценщики принимают работы в форматах, определенными критериями. В большей степени это относится к компилируемым языкам, где, например, компиляция осуществляется на основе исходного кода, а запуск программы, на основе результата компиляции.

Так как проверка одного критерия может занимать довольно продолжительное время, было принято решение реализовать асинхронное взаимодействие с оценщиками. Это обеспечивает более удобную организацию распараллеливания задач, а также позволяет уменьшить количество используемых потоков, которые могли быть использованы во время ожидания ответа от оценщика.

Асинхронное взаимодействие предполагает посылку запросов к удаленным сервисам и ожидание срабатывания функции обратного вызова (callback) [46]. Для того, чтобы понять, к какому запросу изначально относится текущий обратный вызов, запросу присваивается случайный идентификатор этого запроса, а также регистрируем этот идентификатор как ожидаемый. В свою очередь ожидается, что пришедший идентификатор запроса от оценщика будет совпадать с ожидаемым. Генерация случайного идентификатора осуществляется с помощью встроенного в язык Java класса SecureRandom [47], который предоставляет возможность генерации криптографически сильных случайных чисел. Длина полученной строки равна 30 символам, где каждый символ принимает одно из 37 возможных значений, что подразумевает различных комбинаций. По этой причине совпадение этих идентификаторов является крайне маловероятным для всех практических значений количества проверяемых работ.

Для того, чтобы учесть возможные ошибки на стороне оценщиков, каждый запрос регистрируется с определенным сроком, после истечения которого будет считаться, что произошла ошибка на стороне оценщика. Даже если после истечения этого срока будет зарегистрирован обратный вызов с удаленным только что идентификатором, то он будет проигнорирован.

 
< Пред   СОДЕРЖАНИЕ   Загрузить   След >