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

Как можно протестировать этот алгоритм? Единственная идея, которая у меня была до сих пор, - это взять образец пар, сопоставленных людьми, и убедиться, что алгоритм может успешно сопоставить их, опуская строки, которые я не мог разумно ожидать от нашего алгоритма. Есть ли способ лучше?

3
Samantha Branham 7 Июл 2009 в 23:15

8 ответов

Лучший ответ

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

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

3
Javier 7 Июл 2009 в 19:35

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

1
Janusz 7 Июл 2009 в 19:18

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

0
Paul Sonier 7 Июл 2009 в 19:19

Звучит справедливо. Если возможно (с учетом временных ограничений) получить как можно большую выборку человеческих совпадений, вы сможете получить представление о том, насколько хорошо работает ваш алгоритм. Вы можете разработать специальные модульные тесты, которые пройдут, если они будут в пределах X% от правильности.

Удачи.

0
Jon Onstott 7 Июл 2009 в 19:19

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

Выпуск 1 - это регулярное тестирование. Проблема 2 Я бы использовал предыдущие наборы результатов (т.е. сравнивал результаты алгоритма с человеческими).

0
Avi 7 Июл 2009 в 19:27

То, что вы описываете, - лучший способ, потому что это субъективно, что лучше всего подходит, только человек может придумать соответствующие тестовые примеры.

0
rado 7 Июл 2009 в 19:29

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

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

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

Образцы с явно правильными ответами (точные совпадения, нулевые совпадения, важные угловые случаи) должны храниться в отдельном тесте.

0
VoiceOfUnreason 7 Июл 2009 в 19:56

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

Если можете, добавьте новые совпадения в модульные тесты.

1
Hans Malherbe 7 Июл 2009 в 19:23