Показаны сообщения с ярлыком тестовые системы проверки программ. Показать все сообщения
Показаны сообщения с ярлыком тестовые системы проверки программ. Показать все сообщения

пятница, 14 декабря 2012 г.

Автоматизированная проверка программ

При проведении олимпиад по программированию возникает проблема проверки задач. Обычно используют простой способ запуска готовых программ с ручным вводом данных или с помощью тестовых файлов, а затем идет сравнение результатов с исходными.
Такой способ очень затруднителен. Можно написать bat-файл для быстрой проверки уже созданных exe-файлов (выполняемый код программы после компиляции) на готовых тестовых файлах типа inputNN.txt и outputNN.txt, при этом можно не использовать в программе чтение и вывод в файл. Для проверки совпадений используется стандартная программа ДОС для сравнения двух файлов fc.com.
rem taskb.bat name - вызов файла для программы name
echo %1 >test.txt
%1.exe <input01.txt >output.txt
fc.com output.txt output01.txt >>test.txt 

%1.exe <input02.txt >output.txt
fc.com output.txt output02.txt >>test.txt 

rem скопируйте две строчки столько раз, сколько нужно 
rem проверить тестов, например до 10:

%1.exe <input10.txt >output.txt
fc.com output.txt output10.txt >>test.txt

Если в программе используются входные и выходные файлы, то предварительно исходные файлы для ввода данных нужно перекопировать:
rem taskb.bat name
echo %1 >test.txt
copy input01.txt input.txt
%1.ex
fc.com output.txt output01.txt >>test.txt 

copy input02.txt input.txt
%1.ex
fc.com output.txt output02.txt >>test.txt 

rem скопируйте три строчки столько раз, сколько нужно 
rem проверить тестов, например до 10:

copy input10.txt input.txt
%1.ex
fc.com output.txt output10.txt >>test.txt

После этого просматриваем файл test.txt и ищем, сколько раз нашлось сочетание "различия не найдены". Это и будет результатом  - количество пройденных тестов.

Конечно это тоже "ручная проверка", но очень облегчает работу жюри. Но есть в этом и свои подводные камни, так например в программе на Паскале нельзя использовать модуль CRT и соответствующие вызовы процедур CLRSCR, ReadKey, а также нужно исключить пустые Readln, которые учащиеся оставляют для паузы. Кроме этого не все среды программирования создают exe-файл, например: PascalABC (можно воспользоваться компилятором FreePascal), QBasic (можно использовать Turbo Basic, но не очень помогает). При этом нужно проверять на время выполнения программы на каждом тесте. Как поступить в этом случае? Есть готовые системы проверки, которые можно заранее установить и провести проверку:
- contester (не учитывает проверки всех тестов)
- ejudje
- polygon (созданные туры и задачи размещаются на сайте informatics.mccme.ru)
- система проверки, разработанная Епанешниковым А. И.
Попробуйте и вы с помощью языка программирования создать свою программу проверки тестов (один студент в свое время так и сделал). Удачи!

понедельник, 17 октября 2011 г.

Проверка задач на тестовых файлах

Часто возникает необходимость проверки своих задач на уже готовых тестовых файлах. Для этого приходится неоднократно проводить рутинную работу: изменять имя файла, запускать программу на выполнение и сравнение двух файлов. Последнее требует иногда написание дополнительной программы для сравнения файлов по-символьно. Все это занимает уйму времени. А хочется побыстрее. Предлагаемый мною вариант я использую для проверки программ на школьных олимпиадах.
Итак, у вас есть файлы, например: input1.txt, output1.txt, input2.txt, output2.txt, ..., input10.txt, output10.txt для какой-то задачи. И есть исходный код программы programA, ориентированный на ввод и вывод в файлы input.txt, output.txt (или другие имена, на самом деле это не важно). Нужно предварительно его скомпилировать и получить exe-файл. Кроме этого рассмотрим два варианта:
1) ввод-вывод осуществлен с помощью файлов
2) ввод-вывод осуществлен через стандартный консоль ввода-вывода: клавиатура и монитор.
Все файлы должны быть в одном каталоге.
Пишем bat-файлы:
rem taskA.bat
rem создаем файл для отчета
echo %1 >test.txt
rem организуем цикл по всем тестам от 1 до 10
for %%a in (1 2 3 4 5 6 7 8 9 10) do call bat1.bat %1 %%a

ren bat1.bat
rem копируем  исходный тестовый файл как input.txt
copy input%2.txt input.txt
rem если 1-й вариант, просто запускаем файл
%1.exe
rem если 2-й вариант, то 
%1.exe <input.txt >output.txt
rem  сравниваем два файла с помощью fc.exe 
rem  и выводим результат проверки в файл для отчета
rem  вместо fc.exe можно поставить свою программу 
rem  для проверки двух файлов
echo %2: >>test.txt
fc.exe output%2.txt output.txt >>test.txt

Далее запускаем из командной строки
C:\>taskA.bat programA
И смотрим файл test.txt. Если отличий не найдено, то будет выведено сообщение "различия не найдены". Сколько таких сообщений, столько и верно пройденных тестов. Можно подготовить несколько файлов для разных задач taskB.bat, taskC.bat  и т. д., изменив только числа в скобочках в строке for - это номера тестов. Тогда проверка файлов занимает меньше времени. Но таким образом нельзя проверить на время выполнения, только на правильность прохождения тестов.
Буду рада, если кому-то мои знания помогут!

вторник, 27 сентября 2011 г.

On-line проверка олимпиадных задач

Есть много сайтов, на которых уже накопился большой архив олимпиадных задач и есть возможность поучаствовать в разных on-line турах или проверить в режиме on-line какую-нибудь задачу. Почти все сайты поддерживают несколько языков программирования, в том числе и Паскаль, только разные компиляторы Free Pascal, Delphi. Но Basic в консольном виде нигде не используется.
olimpic.nsu.ru - сайт НГУ. Есть архив олимпиад и круглосуточные тренировки. Регистрация требуется команды из трех человек, но можно и одному зарегистрироваться и потренироваться. Немного необычный и непонятный интерфейс при отправке заданий. При решении необходимо использовать текстовые файлы для ввода и вывода результата.
acmp.ru - сайт "Школа программиста". Требуется регистрация только одного пользователя. При решении необходимо использовать текстовые файлы для ввода и вывода результата. Задачи хорошо классифицированы по уровню сложности и по тематике. Есть форум, где можно обсудить решение задачи. На некоторые задачи есть готовые решения. Здесь есть ссылки и на другие сайты.
acm.timus.ru - сайт Уральского университета. Большой архив задач и соревнований. Текст некоторых задач представлены  на английском и русском языках или только на английском. Программы не требуют использования текстовых файлов. Ввод и вывод должен быть консольный. Но при проверке, естественно, используются готовые тестовые файлы. Поэтому можно отладить программу на файлах, а затем убрать связь с ними. Регистрация участника - проще некуда.
neerc.ifmo.ru- сайт международных соревнований по программированию по системе АСМ (на английском языке).
neerc.ifmo.ru/school/ - сайт школьных олимпиад Санкт-Петербурга. Есть большой архив задач, тестов и решений жюри.
olym.nstu.ru - сайт НГТУ, на базе которого проходят четвертьфинал АСМ олимпиады. Есть набор задач с тестами для этих олимпиад и работает сервер для проверки задач. Можно задавать вопросы на форуме.
informatics.mccme.ru - сайт дистанционной подготовки по информатике. Есть теоретический материал по разным темам, проводятся различные чемпионаты. Есть раздел по подготовке к ЕГЭ.
На всех сайтах соблюдайте ввод и вывод как представлен в примерах, без лишних знаков препинания, пробелов и т. д. Многие задачи с этих сайтов я не смогла решить. Попробуйте быть первым, кто решит их  все! Удачи!