Как стать автором
Обновить

Как заставить машину написать тесты из кода за тебя

Время на прочтение17 мин
Количество просмотров9.5K
Всего голосов 22: ↑22 и ↓0+22
Комментарии8

Комментарии 8

Давно хотел автогенерацию смоук тестов

«Мы не хотим писать и поддерживать автотесты, поэтому мы создаем инструмент, затратив при этом в N раз больше ресурсов, чтобы у нас была видимость создания автотестов, правда, поддерживать их надо вручную».
Интересная задача для разработчика (пишем какую-то софтину для автоматизации чего-то вместо тестов), но бесполезные расходы для бизнеса.
Откуда сложилось ощущение, что это расходы бизнеса? Нигде не сказано, что это рабочий проект. Разумеется любое метапрограммирование не целесообразно для решения 1 конкретной задачи для 1 конкретного бизнеса. На подобные вещи никто денег не выделяет. Это исключительно своё личное время и свои затраты.
Не нужно писать руками smoke-тесты, не нужно. У нас блин повсюду искусственный интеллект, машинное зрение и черт в ступе, а вы говорите, что электронный болван не может отличить упавшую систему от кое-как работающей? Смоук-тест поисковой строчки гугла — это не полноценный e2e-тест. Это просто скриптик, вводящий туда слово (настоящее слово, например «помидор») и видящий, что в ответ есть какие-то результаты. Все, тест пройден, дым не идет. Результаты поиска какие-то не совсем релевантные? Пофиг, это уже слишком детально для smoke-теста, для этого настоящие тесты будут на куче уровней, а у smoke-теста в названии заложена возможность большого количества false-positive.
Даже не так, можно еще больше понизить планку для нашего smoke-теста поисковой строки. Заходишь на страничку гугла — а он тебе показывает что-то похожее на то, что показывал в течение последних двух месяцев. Сообщение об ошибке или пустой экран не очень похожи на поисковую строчку — в этом случае тест упадет. Во всех остальных — пройдет.

Мне кажется, это очень однобокий взгляд на Smoke-тесты. Взять ваш же пример со страничкой гугла. Вы делаете акцент на "что-то похожее", наверное, потому, что всё-таки готовы к каким-то изменениям на странице. Проблема в том, что очень трудно понять, когда изменения позитивные, а когда негативные. Например, зайдёт такой "умный" тест на страничку гугла, а поисковой строки не будет вовсе. "Достаточно похоже", — подумает алгоритм, и тест пройдёт. Если Вы думаете, что поисковая строка слишком большой элемент, чтобы его проигнорировать, представьте интернет магазин, у которого удалили кнопку + ("плюс") для добавления товара в корзину. Ничего купить нельзя, зато мы сэкономили время на написании Smoke-тестов.
На моей практике, все попытки масштабной автогенерации тестов сводятся к фразе: "ну мы же не обязаны использовать только сгенерированные тесты!". Это правда, и по факту данные сгенерированные тесты занимают лишь малую часть тестирования, и уж точно не способны целиком заменить smoke-тестирование.
Обычно сгенерированные тесты оказываются хороши для каких-то специфических проверок, в тех случаях, когда никакого интеллекта не нужно, но объём тестов либо очень большой, либо динамически меняется. Например, если команда делает конструктор для создания страниц компании в одинаковом стиле. Имея список созданных страниц, может быть полезно при релизе пройти по ним и проверить, что ни одна из них не возвращает 500.

По мне так кнопка добавления в корзину — это уже не про чистые smoke-тесты. Важная функция, спору нет, и тестами ее покрыть надо капитально, но инженерной точки зрения отсутствие такой кнопки — это еще не smoke, а просто critical bug, невозможность выполнить один из самых основных юзкейсов. При этом другие юзкейсы доступны — пользователи все еще могут просматривать продукты, добавлять их в избранное, искать их. Smoke — это невозможность выполнить никакие юзкейсы, это когда вместо страницы выдается код ошибки, или неинтерпретированный код на html или php, или вообще другая страница вместо нужной.

Насколько я понимаю, у нас с Вами разное понимание smoke-тестирования. Возможность выполнить один из самых основных юзкейсов, на мой взгляд, это тоже часть smoke-сценариев (проверил заодно, что ISTQB думает по этому поводу). Судя по


Smoke-тест должен проверить, что все работает на выходе и не сломалось минимально. Совсем примитивный smoke-тест о том, что система запустилась и как-то работает, в нашем случае не приносит никакой пользы. Допустим, мы проверили, что подключение к базе есть, что-то запускается, UI получает какой-то API. А потом шаг влево, шаг вправо — и ничего не работает. То есть smoke-тест как бы есть, но с продакшена все равно летят ошибки.

команда Юлии тоже воспринимала smoke, как к проверку на "невозможность выполнить никакие юзкейсы", и это не приносило практической пользы. И в итоге, проблема была решена unit-тестами, что хорошо (shift-left, все дела).


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

Думаю, отсутствие тестов порождается по двум причинам:
1. Отсутствие адекватных требований, по которым можно составить интерфейс, а затем его протестировать. Почему-то многие думают, что писать и проектировать — это одно и тоже. Однако в действительности очень редко ставятся чёткие задачи и, соответственно, очень редко проводится адекватное тестирование. Как задача поставлена, так её и выполняют, а остальное не принесёт денег в краткосрочной перспективе.
2. Некоторые тесты покрывают другие тесты. Поэтому проще протестировать какой-то большой блок и с вероятностью 5% ошибки, писать отдельные тесты. В противном случае 95% тестов не приносят результата, но тратят ресурсы.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий