Вопрос проверяет понимание практик тестирования и валидации алгоритмов после переноса между языками.
После портирования алгоритм проверяют с помощью тестов и сравнения результатов с эталонной реализацией. Используют одинаковые входные данные и проверяют совпадение результатов. Желательно покрыть краевые случаи и случайные данные. Автоматические тесты позволяют быстро выявить расхождения.
После переноса алгоритма на другой язык основная задача — убедиться, что логика осталась прежней.
Определение:
Эталонная реализация — это версия алгоритма, корректность которой уже подтверждена.
Подход:
Подготовить набор входных данных
Получить результат в старой версии
Сравнить с новой
Пример:
assert new_impl(x) == reference_impl(x)
Если тесты существовали ранее:
Запустить их на новой версии
Проверить, что все проходят
Пример PyTest:
def test_algorithm():
assert algorithm(10) == 100
Иногда полезно генерировать входные данные автоматически:
import random
for _ in range(1000):
x = random.randint(1, 1000)
assert new_impl(x) == reference_impl(x)
Важно учитывать:
Различия в типах данных
Поведение float
Переполнение
Лучший способ проверить корректность после портирования — сравнение с эталонной реализацией и запуск автоматических тестов на широком наборе входных данных.