Регрессионное тестирование, когда «тест oracle» - это неформальное сравнение вывода

StackOverflow https://stackoverflow.com/questions/9347392

Вопрос

Я поддерживаю программу Python, которая дает советы по определенным темам. Это происходит путем применения сложного алгоритма к входным данным.

Код программы регулярно изменяется, как для разрешения вновь найденных ошибок, так и для изменения базового алгоритма.

Я хочу использовать регрессионные тесты. Проблема в том, что невозможно сказать, что является «правильным» выводом для определенному вводу - кроме запуска программы (и даже тогда, только если у него нет ошибок).

Я описываю ниже своего текущего процесса тестирования. Мой вопрос Есть ли инструменты, которые помогут автоматизировать этот процесс (и, конечно, есть какие -либо другие отзывы о том, что я делаю).

В первый раз, когда программа, казалось, работала правильно для всех моих входных случаев, я сохранил их выходы в папке, которую я назначил для «проверенных» выходов. «Валированный» означает, что вывод, насколько мне известно, является правильным для данной версии моей программы.

Если я найду ошибку, я внесу любые изменения, я думаю, исправил бы это. Затем я перезапустил программу на всех входных наборах и вручную сравниваю выходы. Всякий раз, когда вывод меняется, я стараюсь неформально рассмотреть эти изменения и выяснить, есть ли:

  1. Изменения связаны исключительно из -за исправления ошибки, или
  2. Изменения связаны, по крайней мере частично, с новой ошибкой, которую я представил

В случае 1, я увеличиваю счетчик внутренней версии. Я отмечаю выходной файл с суффиксом, равным счетчику версии, и перемещаю его в папку «проверка». Затем я совершаю изменения в репозиторий ртути.

Если в будущем, когда эта версия больше не будет актуальна, я решаю развеять ее, мне понадобятся эти проверенные результаты в качестве «правильных» для этой конкретной версии.

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

Когда я изменяю код, чтобы изменить алгоритм, я следую аналогичному процессу.

Это было полезно?

Решение

Вот подход, который я, вероятно, использую.

  1. Попросите ртутного управления кодом, входными файлами и выходами регрессионных тестов.
  2. Начните с определенного пересмотра родителей.
  3. Сделать и документировать (предпочтительно как можно меньше) модификаций.
  4. Запустить регрессионные тесты.
  5. Просмотрите различия с результатом регрессионного теста на регрессию родителей.
  6. Если эти различия не соответствуют ожиданиям, попробуйте увидеть, была ли введена новая ошибка или неверные ожидания. Либо исправьте новую ошибку и перейдите к 3, либо обновите ожидания и перейдите к 4.
  7. Скопируйте вывод регрессионных тестов в папку, представленную для проверенных выходов.
  8. Сделайте изменения в Mercurial (включая код, входные файлы и выходные файлы).
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top