Перфоманс Лаб

AI
CI
exploratory testing
автотестирование
боты
ИИ
непрерывная интеграция
20 апреля, 2017

Применение искусственного интеллекта в тестировании ПО

Время чтения: 10 мин.
20 апреля, 2017
Автор:

Да, у нас есть опыт применения ИИ

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

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

Что грядет

Технологии постепенно поглощают всё больше сфер деятельности, на очереди тестирование программного обеспечения. Мы все настолько избалованы повсеместной автоматизацией, что при появлении подходящих инструментов с радостью бы передали большую часть тест-дизайна и валидации тестов на откуп искусственного интеллекта (ИИ).

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

Ручное тестирование

Ручное функциональное тестирование является дорогим, как по времени, так и по деньгам. Самые продвинутые команды разработки приложений и вендоры кодят тысячи строк тестов для своих приложений: строка за строкой набирая одно и тоже «нажмите сюда» и «проверьте то». Такой подход имеет много недостатков, в том числе в плане финансирования команды тестирования. Создание таких тестов отвлекает внимание разработчиков от основной цели, которую они создают – самого продукта.

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

На что тратятся силы в автоматизации

На что тратятся силы в автоматизацииЕсли рассматривать классический подход к автоматизации тестирования, то поддержка тестов является фактором, дополнительно повышающим её стоимость: чем больше тестов – тем трудозатратнее и дороже становится их поддержка.

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

Боты ИИ развиваются и после изменений в коде. Поскольку боты не жестко закодированы, они адаптируются и сами учатся находить новые функции приложения. Когда ИИ находит изменения, он автоматически оценивает их, чтобы определить, что это: новый функционал или дефекты нового релиза. Таким образом, жестко-закодированные тестовые скрипты являются хрупкими и требуют ручной доработки после каждого изменения в коде приложения, а ИИ ботов самостоятельно развивается после изменения кода.

Что происходит при усложнении приложения

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

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

Чем ИИ лучше

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

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

А теперь пришло время рассмотреть возражения от скептиков:

Возражение 1: «Мое приложение является особенным, ИИ тут не поможет»

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

Возражение 2: «Эй, я всегда буду умнее бота!»

Врачи, кредитные и финансовые консультанты однажды тоже думали, что не могут быть заменены ИИ и автоматизированы. А правда в том, что вы знаете только то, что вы знаете – ваше приложение и тест-кейсы, книгу или две, и может быть то, что вы выучили в ходе беседы на конференции о тестировании. ИИ как Терминатор: не знает усталости, ничего не забывает, без страха и боли неумолимо идёт к своей цели. Вы действительно умнее и в состоянии сделать больше, чем 100, 1000 или 10000 ботов, анализирующих ваше приложение? Даже если вы умнее –не предпочли бы вы иметь ботов, делающих всю скучную работу за вас, чтобы вы вместо этого смогли сосредоточиться на творческих или более сложных вопросах?

Возражение 3: «Конечно, но как ИИ знает, какие тестовые данные подойдут для приложения?»

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

Возражение 4: «Хорошо, но как эти боты узнают, правильно ли приложение работает?»

Хороший вопрос. Действительно, как вы узнаете, что приложение функционирует нормально? Вы никогда этого не делаете. У вас есть какие-то тесты, может быть, 100 ручных или автоматизированных тестовых скриптов, и они проходят успешно, но они тестируют только небольшой кусочек возможного пространства состояний вашего приложения. Вы также знаете, что самую большую ценность имеет информация в виде обратной связи, ошибок от реальных пользователей и их планомерное исправление. То, что вы действительно хотите знать в тестировании так это: «Работает ли оно так же, как вчера?». Если нет, то в чем различия – это хорошо или плохо? Это действительно то, что является результатом большинства испытаний. ИИ боты отлично подходят для поиска по тысячам точек в вашем приложении, проверяя множество вещей, чтобы убедиться, что все работает так, как это было вчера. С помощью быстрого сканирования, бот может сказать вам, что 99% вашего приложения работает так же, как это было на последнем релизе, а вы можете сосредоточиться на 1% того, что изменилось.

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

Данный текст является адаптированным переводом статьи: https://www.linkedin.com/pulse/ai-software-testing-jason-arbon

Автор оригинала Джейсон Арбон, генеральный директор Appdiff

Чтобы узнать подробнее о наших услугах