Данный доклад посвящён системе ejudge, разрабатываемой автором. Система изначально разрабатывалась для проведения студенческих командных олимпиад по программированию, но достаточно скоро эволюционировала в достаточно развитую и мощную систему для поддержки проведения различных мероприятий, требующих автоматическое тестирование программ.
С самого начала система распространялась в исходных кодах под лицензией GPL. И к настоящему времени, на взгляд автора, система ejudge все более и более становится жизнеспособным открытым проектом.
Разработка системы началась осенью 2000 года при подготовке очередной московской студенческой командной олимпиады по программированию (http://acm.msu.ru). Система PC2, которая использовалась ранее, уже не могла удовлетворить возросшим требованиям к проведению (в частности эта система не поддерживала и до сих пор не поддерживает автоматическое выставление результата тестирования). В самой первой версии системы ejudge поддерживались только турниры по системе командных чемпионатов ACM, но в дальнейшем система развивалась и начала поддерживать турниры и по другим правилам. Сначала система использовалась только для студенческих олимпиад на факультете ВМиК МГУ, а с 2002 года стала применяться и для проведения московских школьных олимпиад по информатике (www.informatics.ru). С 2004 года система используется как основная при проведении Открытого кубка CBOSS (www.opencup.ru). С 2005 года система используется в Летней компьютерной школе. Система используется автором для поддержки некоторых учебных курсов на ВМиК МГУ. Кроме того, система используется в нескольких школах и учебных заведениях России.
В задачах на программирование очень часто требуется написать программу на одном из языков программирования, которая считывает входные данные из указанного файла (или со стандартного потока ввода) в определённом формате, обрабатывает их в соответствии с постановкой задачи и выводит результат в определённом формате в указанный файл (на стандартный поток вывода). Такая постановка задач типична для олимпиад по информатике и программированию и в курсах по программированию. Один из признанных способов проверки правильности программ - запуск проверяемой программы на наборе тестов. После выполнения проверяемой программы на каждом тесте выданный ею ответ сравнивается по некоторым правилам с эталонным ответом, в результате чего выносится вердикт о том, пройден ли тест или нет. Если программа прошла все тесты, то она считается правильным решением задачи. (При таком подходе, конечно же, возникает проблема полноты покрытия системой тестов, корректности эталонных ответов и правил сравнения при принятии вердикта, но эти вопросы в рамках данной работы рассматриваться не будут).
По различным критериям задачи могут группироваться в турниры. Например, задачи олимпиады могут считаться турниром. С другой стороны, задачи учебного курса также могут рассматриваться как турнир. Система ejudge предназначена для автоматизации проведения турниров, то есть для приёма решений на проверку, запуска поступивших решений на тестовых наборах, выставления вердиктов, оповещения об этом пользователей и ведения таблицы результатов турнира.
Основной сайт проекта размещается по адресу http://www.ejudge.ru. На сайте доступна документация по системе, последние версии исходных кодов, работает Wiki-раздел и форум. Предоставляется анонимный и пользовательский доступ к системе контроля версий SVN для исходных кодов и документации системы.
Сама система ejudge способна работать в любом более-менее современном дистрибутиве Linux. Для доступа к WEB-интерфейсу требуется настроенный WEB-сервер apache.
Система написана на языке C и состоит из совокупности демонов, отвечающих за основные сервисы, CGI-программ, реализующих WEB-интерфейс со стороны сервера, и утилит командной строки и утилит с текстовым интерфейсом.
В настоящее время примерный объем исходного кода системы составляет порядка 150000 строк кода на языке C.
Текущая версия системы ejudge поддерживает следующие возможности:
Система ejudge успешно применяется автором в учебном процессе. На 2 курсе ВМиК МГУ она используется для преподавания языков C и C++, а на 3 курсе - для преподавания языка Scheme. Автоматическая система тестирования освобождает преподавателя от утомительной и чреватой ошибками проверки программ вручную. Автоматическая проверка позволяет практически изжить такой анахронизм, как написание программ на бумаге с последующей их проверкой преподавателем. Таким образом преподаватель освобождается от рутинных функций проверки правильности программ и может сконцентрироваться на выработке у учащихся культуры программирования. Кроме того, преподаватель может включить в курс большое количество заданий, чтобы стимулировать постоянную языковую практику у учащихся.
По опыту преподавания в последние годы все студенты имеют доступ к компьютеру во внеучебное время в достаточном объёме, чтобы и домашние работы принимать в автоматическом режиме. При автоматической проверке учащимся не показываются тесты, на которых их программа отработала неправильно, кроме того, попытки сдачи штрафуются некоторым количеством баллов, что стимулирует развитие навыков самостоятельного тестирования программ. Положительным с точки зрения учащегося является то, что автоматическая проверка работает круглосуточно и абсолютно объективна.
У части программистов, желающих продвигать свою программную систему как открытый проект, присутствует заблуждение, что достаточно выложить исходники проекта для всеобщего доступа под "правильной" лицензией, или (в лучшем случае) завести страницу где-нибудь на sf.net, а все остальное случится само собой. Результатом этого является огромное количество заброшенных проектов.
На самом деле успех и жизнеспособность открытого проекта определяются тем, какое сообщество пользователей (community) сложилось вокруг проекта. Именно сообщество пользователей в открытом проекте во многом берет на себя функции компании-разработчика, то есть разработку и поддержку проекта, документирование, поддержку новых пользователей, маркетинг и рекламу. Создание же сообщества пользователей - процесс, требующий времени и особенных усилий первоначального автора. И здесь требуются даже не столько какие-либо уникальные возможности программы, а скорее наличие более-менее адекватной документации (в силу самой природы открытых проектов их документация всегда отстаёт от текущего состояния), более-менее простой процедуры установки программы и желания автора отвечать на вопросы пользователей.
Иногда практикуется выдача заданий на разработку компонент открытого проекта в качестве курсовых и дипломных работ студентам. Опыт автора говорит о том, что такое привлечение студентов вредит проекту, особенно в его начальных стадиях, по следующим причинам: