Алгоритмы и структуры данных. Подгруппы 102-1, 102-2, 107-2. Check.py

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск

Программа.

Инструкция по использованию программы check.py

Создайте папку с тестами для вашей программы. Каждый тест - это пара файлов X.in со входными данными и X.out с правильным ответом (X - название теста). После этого запустите программу со следующими аргументами:

$ check.py <программа и аргументы> -d <папка с тестами>

Например:

$ check.py python myprog/main.py -d myprog/tests/

Дополнительную информацию можно получить, вызвав программу с аргументом -h:

$ check.py -h

Как писать хорошие тесты

Рассмотрим написание тестов на примере задачи 1 из семинара 7 (непрерывный участок с наибольшей суммой).

1. Базовые тесты

Начнем с того, что напишем несколько простых тестов, для которых ответы составим вручную. Например, такие:

Вход Ответ
1 2 -1 3 -4 2 5
1 -2 3 1 0 4 -1 5 12

Рекомендуется делать таких тестов хотя бы 5 штук.

2. "Граничные" тесты

Далее нужно внимательно изучить условия на входные данные в задаче и попытаться придумать такие тесты, которые близки к недопустимым и из-за этого могут "сломать" программу. Примеры:

Вход Ответ
пустая последовательность 0
-1 -1 -1 0

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

3. Случайные тесты

Для надежности тестирования рекомендуется дополнительно создавать случайные тесты для программы. Для этого нужно сначала написать простую версию решения без ограничения на ее сложность (возможна даже экспоненциальная сложность). В данном примере подойдет перебор всех возможных непрерывных участков. Это решение можно протестировать на тестах из групп 1 и 2. Далее на основе этого решения нужно написать программу, которая генерирует случайные входные данные, а в качестве правильного ответа полагает тот, который выдало простое решение (не гарантируется, что это решение верно, поэтому если какие-то тесты не будут работать, нужно проверять это решение тоже).

4. Большие тесты

Наконец, нужно придумать несколько тестов, которые нужны, чтобы проверить, как программа работает на больших значениях параметров. Они должны быть не слишком сложные, чтобы можно было самостоятельно посчитать ответы, но и не слишком простыми, чтобы программа их обрабатывала так же, как все остальное. Примеры:

Вход Ответ
Миллион единиц 1000000
-1 1 -1 1 ... (миллион раз) 1