Регрессионное тестирование, когда «тест oracle» - это неформальное сравнение вывода
-
27-10-2019 - |
Вопрос
Я поддерживаю программу Python, которая дает советы по определенным темам. Это происходит путем применения сложного алгоритма к входным данным.
Код программы регулярно изменяется, как для разрешения вновь найденных ошибок, так и для изменения базового алгоритма.
Я хочу использовать регрессионные тесты. Проблема в том, что невозможно сказать, что является «правильным» выводом для определенному вводу - кроме запуска программы (и даже тогда, только если у него нет ошибок).
Я описываю ниже своего текущего процесса тестирования. Мой вопрос Есть ли инструменты, которые помогут автоматизировать этот процесс (и, конечно, есть какие -либо другие отзывы о том, что я делаю).
В первый раз, когда программа, казалось, работала правильно для всех моих входных случаев, я сохранил их выходы в папке, которую я назначил для «проверенных» выходов. «Валированный» означает, что вывод, насколько мне известно, является правильным для данной версии моей программы.
Если я найду ошибку, я внесу любые изменения, я думаю, исправил бы это. Затем я перезапустил программу на всех входных наборах и вручную сравниваю выходы. Всякий раз, когда вывод меняется, я стараюсь неформально рассмотреть эти изменения и выяснить, есть ли:
- Изменения связаны исключительно из -за исправления ошибки, или
- Изменения связаны, по крайней мере частично, с новой ошибкой, которую я представил
В случае 1, я увеличиваю счетчик внутренней версии. Я отмечаю выходной файл с суффиксом, равным счетчику версии, и перемещаю его в папку «проверка». Затем я совершаю изменения в репозиторий ртути.
Если в будущем, когда эта версия больше не будет актуальна, я решаю развеять ее, мне понадобятся эти проверенные результаты в качестве «правильных» для этой конкретной версии.
В случае 2, я, конечно, постараюсь найти недавно представленную ошибку и исправить ее. Этот процесс продолжается до тех пор, пока я не считаю, что единственные изменения по сравнению с предыдущей проверенной версией связаны с предполагаемыми исправлениями ошибок.
Когда я изменяю код, чтобы изменить алгоритм, я следую аналогичному процессу.
Решение
Вот подход, который я, вероятно, использую.
- Попросите ртутного управления кодом, входными файлами и выходами регрессионных тестов.
- Начните с определенного пересмотра родителей.
- Сделать и документировать (предпочтительно как можно меньше) модификаций.
- Запустить регрессионные тесты.
- Просмотрите различия с результатом регрессионного теста на регрессию родителей.
- Если эти различия не соответствуют ожиданиям, попробуйте увидеть, была ли введена новая ошибка или неверные ожидания. Либо исправьте новую ошибку и перейдите к 3, либо обновите ожидания и перейдите к 4.
- Скопируйте вывод регрессионных тестов в папку, представленную для проверенных выходов.
- Сделайте изменения в Mercurial (включая код, входные файлы и выходные файлы).