Pull to refresh

Comments 9

Теория это конечно круто, но было бы неплохо посмотреть на пример такого теста.

Есть некоторое пересечение с аугментацией — расширении обучающего датасета на задачах класса Machine Learning. Тоже берется небольшое количество данных и увеличивается. Например изображение котика масштабируется, сдвигается, другим способом корежится — и соответственно меняется описание того, что в данном элементе датасета (размеры объекта в Kitti-файле для задач Computer Vision)

Не думал что у этого есть модное название. Когда был студентом — переизобретал это метаморфическое тестирование три раза в день (никогда не нравилась идея тестировать умножение матриц и прочую линейную алгебру по ключевым точкам), сейчас иногда использую в интеграционных тестах.

ИМХО, он не популярен не потому что научные статьи за деньги, а потому что с одной стороны есть широкая тема контрактного программирования, которая про тоже самое, с другой — такие тесты сложно написать и не всегда уместны. С тем же анализом голоса: ну нейронная сеть будет отвечать на все подряд, такой тест ничего не тестирует. Он не проверяет — упадёт ли она, если ей пол часа начитывать, и все такое. Скачивать каждый раз случайный ролик — это круто, но на практике подобные зависимости от внешних сред злы, потому что никто не любит когда их тесты падают через раз, пооому что внешний сервис может стать недоступным и ваши тесты все.
Ловит особые кейсы, когда система совсем начинает бредить. Зато охват значений большой.
Это хорошо, но вопрос в том сколько стоит разработка таких тестов и какие шансы что они что-то выловят. Я не помню как называются, но есть тесты, построенные на основе передачи случайного бреда в функцию, и смотреть — отдаёт ли функция что-то вообще. Мне кажется, что такие тесты проще в исполнении, а шансы выловить что-то точно такие же. А если есть ресурсы на разработки подробные и сложные тесты как эти, лучше сразу идти в контрактное программирование и тестировать тоже по нему

out может быть одним и тем же во всех метаморфозах, но при этом ошибочным (например сообщением об ошибке распознавания речи).

В тестировании есть два вопроса — «что» и «как». В чем мы хотим убедиться. И как мы можем в этом убедиться. Оба вопроса нетривиальны. Если на вопрос «что» мы еще можем ответить систематическим, рациональным, «инженерным» размышлением, то на вопрос «как» часто может просто не быть исчерпывающего ответа.
Как убедиться в том, что поиск по запросу «кошки» выдает только кошек? Проверять каждую картинку с помощью ИИ? А подбор выдачи картинок уже был создан с помощью ИИ. Все — замкнутый круг.

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

И получается, что с точки зрения научного подхода, все что можно сделать — исследовать частные случаи, а это впринципе не очень интересно.
Sign up to leave a comment.

Articles