Особенности автоматизации проверки задач по программированию
Features of automation of check of tasks on programming 03.05.2018 Выходные сведения: Авторы: Authors: Ключевые слова: Keyword: Аннотация: Решениями задач в программирования являются программы, а задачи в представлены условием и набором тестов – входных и выходных файлов. Программе-решению на вход подается файл с исходными данными. На основе этих данных программа должна решить задачу и выдать результат в другой файл, который проверяется тестирующей системой. Для проверки, обычно, используется специальная программа-чекер, сравнивающая ответ программы-решения с эталонным ответом. Программа-решение задачи не только должно выдать верный ответ на тест, но и решить задачу наиболее оптимально. Критерии оптимальности решения задачи могут быть самыми разными: время выполнения программы, используемая память, объём исходного кода и т.д. Исходя из того, что решением задачи в программировании является программа, встает вопрос безопасности тестирования программ: пользователи могут использовать возможности языков программирования для нанесения вреда системе тестирования, её взлома и т. д. В статье описаны меры безопасности, которые следует предпринимать при проверке решений в автоматизированном режиме, а также конкретные инструменты для создания безопасной среды выполнения решений пользователей. Практически любое соревнование в области программирования не обходится без использования тестирующей системы, т.к. ручная проверка решений занимает большое количество времени, а отслеживание вышеописанных ограничений и вовсе становится невозможным. Annotation: Solutions to problems in programming are programs, and tasks in are represented by a condition and a set of tests — input and output files. The program with the input data is supplied with the input data file. Based on this data, the program must solve the problem and output the result to another file, which is checked by the testing system. To check, usually, a special program-checker is used, which compares the response of the program-solution with the standard response. The program-solution of the problem not only must give the correct answer to the test, but also solve the problem most optimally. Criteria for optimality of the solution of the problem can be very different: the execution time of the program, the memory used, the amount of source code, etc. Proceeding from the fact that the solution of the problem in programming is the program, there arises the question of the security of testing programs: users can use the capabilities of programming languages to harm the testing system, hacking it, etc. The article describes the security measures that should be taken when verifying decisions in automated mode, as well as specific tools for creating a secure execution environment for user solutions. Virtually any competition in programming can not do without the use of a testing system, because manual verification of decisions takes a lot of time, and monitoring of the above limitations is completely impossible.
Введение Качество профессионального образования зависит от многих условий, среди которых важную роль играет контроль. От тщательно спланированной системы контроля качества знаний зависит результативность процесса обучения, ведь проверка и оценка знаний обучающихся – это важнейшая часть любого учебного процесса. Основной задачей контроля качества знаний является объективное определение уровня усвоения материала. Одним из методов контроля знаний, позволяющим объективно измерить уровень подготовки специалиста, является тестирование. Развитие компьютерных и инфокоммуникационных технологий затронуло практически все области жизни, включая и сферу образования. Теперь ни одно учреждение не может обойтись в своей работе без применения компьютеров, которые с успехом выполняют рутинную работу, повышая эффективность любой деятельности. Последние достижения в области информационных технологий привели к новым концепциям в учебном процессе: применяемые в учебной деятельности письменные тесты с успехом трансформируют в компьютерные тесты. Идея автоматизированного контроля знаний позволяет более эффективно использовать время, охватить больший объем содержания, быстро установить обратную связь с обучающимися и определить результаты усвоения материала. Положительной стороной данного процесса также является то, что студенты находятся в одинаковых условиях, исключаются элементы необъективности экзаменационного процесса. Кроме того, в процессе компьютерного тестирования, обучающиеся могут оценивать собственные знания по дисциплине самостоятельно.
Материалы и методы Системы, позволяющие проводить тестирование знаний, называются автоматизированными тестирующими системами. Автоматизация играет большую роль ввиду большого объема проверяемых данных. Такие системы востребованы в процессе обучения в школах, в университетах, а также в олимпиадах различного рода. Автоматизированная тестирующая система – это комплекс программных (или программно-аппаратных) средств, которые позволяют в автоматическом режиме проводить тестирование решений пользователей в рамках объекта тестирования. Тесты в таких системах могут быть совершенно разными в зависимости от тестируемого предмета: это могут быть тестовые задания открытого или закрытого типа, тесты с множественным выбором, тесты установления соответствий и т. д. Говоря о задачах по программированию важно отметить то, что они кардинально отличаются от всех остальных задач. Например, задача по математике или физике состоит из условия задачи и единственного вопроса, на который нужно предоставить ответ. В задачах программирования система оценки совершенно иная: решением задачи в программировании является программа, которая решает целый класс однотипных задач, которые отличаются входными данными.
Основные результаты исследования Классическая задача по программированию, если говорить об её представлении в автоматизированных тестирующих системах, состоит из нескольких компонентов: · Непосредственно условие задачи в текстовом виде; · Набор входных и выходных тестов (файлов). При этом, тесты могут разделяться на тесты предварительного и полного тестирования. · Программа-чекер — это специальная программа, которая проверяет ответ решения пользователя. Чекер, обычно, создается под каждую задачу индивидуально: в одних задачах достаточно проверить сходство ответа пользователя с эталонным ответом, а в других — правильных ответов может быть несколько, и простая сверка ответов уже не подойдет.
Задача по программированию — это не просто получение правильного ответа на тест. В задачах по программированию участнику также предстоит оптимизировать свою программу так, чтобы она прошла через ряд ограничений. Эти ограничения могут быть разными в зависимости от определенных требований к проведению состязания, от возможностей тестирующей системы и т. д. В основном, к решениям предъявляются требования по следующим критериям: · Время выполнения. Программа-решение должна выдавать ответ за определенное время. Обычно, на каждый тест программе выделяется 1 секунда, и если за это время программа не завершается и не выдает ответ — решение задачи является неоптимальным и баллы за него не начисляются. · Количество используемой оперативной памяти также является важным фактором. Если программа выделяет слишком много памяти, то это в большинстве случаев говорит о её неоптимальности. · Размер исходного кода программы также учитывается в тестирующих системах, и слишком большие по размеру файлы исходных кодов в тестирующие системы просто не пропускаются.
Наряду с определенными ограничениями, касающимися непосредственно задачи, нельзя забывать о том, что пользователи могут попытаться навредить тестирующей системе, попытаться вывести её из строя или обойти защиту системы и начислить себе фиктивные баллы — поэтому, вопрос безопасности в таких системах очень важен. Ввиду того, что решением задачи по программированию является программа (программный код), никто не гарантирует, что загруженный в тестирующую систему код не содержит вредоносных инструкций, поэтому, система должна обрабатывать такие случаи. Программа, присланная на проверку в тестирующую систему, запускается непосредственно на сервере тестирования вместе со всеми другими решениями, поэтому, теоретически, она может управлять сервером любыми доступными её командами. В лучшем (простейшем) случае вредоносное решение может удалять файлы на сервере тестирования, в худшем – похищать какие-либо данные. Защита системы от вредоносных решений обычно выполняется в три этапа. Первый этап – поверхностный, это проверка исходного кода решения на вредоносные участки. Такая проверка является наиболее простой и быстрой, так как позволяет ещё на этапе загрузки решения в систему проверить её исходный код. Обычно, производится проверка на использование различных библиотек, которые в большинстве случаев необходимы для доступа к низкоуровневым системным функциям, а также проверяется наличие ASM (ассемблер) вставок, которые также используются для доступа к низкоуровневым командам процессора. Второй этап проверки производится на этапе компиляции программы. Компиляторы языков программирования в тестирующей системе должны быть устроены так, чтобы исключить лишние библиотеки, которые в нормальных условиях не понадобятся пользователям для решения задач – это могут быть различные библиотеки для работы с интернет, с системными функциями и т. д. Также, средствами компилятора, с помощью различных ключей командной строки ограничиваются ресурсы и библиотеки, используемые решением. Третий этап является самым важным и сложным в реализации, так как он напрямую зависит от операционной системы. Программа-решение участника должно запускаться в специальном «контейнере», который ограничен одной единственной директорией исполнения. В Linux-системах для реализации такого контейнера используется утилита chroot, в Windows-системах необходимо создавать специальные Job-объекты, внутри которых есть возможность запускать процессы с наложением ограничений.
Выводы Появление автоматизированных систем тестирования сопровождается большими объемами данных, которые необходимо проверять, что в ручном режиме становится не самой простой задачей. Одними из наиболее сложных тестирующих систем являются системы для проверки задач по программированию, т. к. для полноценного тестирования программ необходима реализация целого комплекса различных компонентов. В настоящее время ни одна олимпиада по программированию не обходится без таких систем, т. к. проверка даже сравнительного небольшого объема данных может занять много ресурсов и времени, а автоматизированные тестирующие системы решают эту проблему и дают возможность проводить тестирование в режиме реального времени. Библиографический список 1.Андриенко А.В. Компьютерное тестирование как механизм оценки качества образования [Текст] / А.В. Андриенко // Тестирование в сфере образования: проблемы и перспективы развития: материалы II Всероссийской научно-практической конференции 19-20 мая 2009 г., Красноярск: СибГТУ, 2009. –С.267-277 References 1.Andrienko A.V. Komp’yuternoe testirovanie kak mekhanizm ocenki kachestva obrazovaniya [Tekst] / A.V. Andrienko // Testirovanie v sfere obrazovaniya: problemy i perspektivy razvitiya: materialy II Vserossijskoj nauchno-prakticheskoj konferencii 19-20 maya 2009 g., Krasnoyarsk: SibGTU, 2009. –S.267-277 |