Большинство команд разработчиков программного обеспечения считают, что они плохо тестируют. Они понимают, что дефекты качества имеют существенное влияние, и вкладывают большие средства в обеспечение качества, но все равно не получают желаемых результатов. Это не из-за недостатка талантов или усилий — технология, поддерживающая тестирование программного обеспечения, просто неэффективна. Отрасль недостаточно обслуживается.
Не может быть успешного выпуска, пока программное обеспечение не будет должным образом и тщательно протестировано, а тестирование иногда может потребовать значительных ресурсов, учитывая количество времени и человеческие усилия, необходимые для правильного выполнения работы. Эта острая потребность только начинает восполняться.
Машинное обучение (ML), изменившее и улучшившее многие отрасли, только начинает пробиваться в тестирование программного обеспечения. Головы кружатся, и не зря: индустрия уже никогда не будет прежней. В то время как машинное обучение все еще растет и развивается, индустрия программного обеспечения использует его все больше и больше, и его влияние начинает существенно менять способ проведения тестирования программного обеспечения по мере совершенствования технологии.
Давайте углубимся в текущее состояние дел в области тестирования программного обеспечения, рассмотрим, как развивается машинное обучение, а затем исследуем, как методы машинного обучения радикально меняют индустрию тестирования программного обеспечения.
Содержание статьи
Некоторые сведения о тестировании программного обеспечения
Тестирование программного обеспечения — это процесс проверки того, работает ли программное обеспечение так, как оно было разработано. Функциональное тестирование обеспечения качества (QA), форма тестирования, которая гарантирует, что ничего принципиально не нарушено, выполняется тремя способами: модульное, API и сквозное тестирование.
Модульное тестирование — это процесс проверки того, что блок кода дает правильный вывод для каждого ввода. Тесты API вызывают интерфейсы между модулями кода, чтобы убедиться, что они могут взаимодействовать. Эти тесты небольшие, дискретные и предназначены для обеспечения функциональности детерминированных фрагментов кода.
Сквозное тестирование (E2E) гарантирует, что все приложение будет работать, когда оно все собрано и работает в «дикой природе». E2E-тестирование проверяет, как весь код работает вместе и как приложение работает как один продукт. Тестировщики будут взаимодействовать с программой так же, как потребитель, посредством основного тестирования (где они проверяют, что было сделано повторно) и пограничного тестирования (где они проверяют неожиданные взаимодействия). Эти тесты обнаруживают, когда приложение не реагирует так, как хотелось бы заказчику, и позволяют разработчикам внести исправления.
Обычное тестирование E2E может быть ручным или автоматическим. Ручное тестирование требует, чтобы люди нажимали на приложение каждый раз, когда оно тестируется. Это требует много времени и подвержено ошибкам. Автоматизация тестирования включает в себя написание сценариев, заменяющих людей, но эти сценарии, как правило, работают непоследовательно и требуют огромных затрат времени на обслуживание по мере развития приложения. Оба метода дороги и во многом зависят от человеческой интуиции. Все пространство для тестирования E2E достаточно дисфункционально, чтобы его можно было разрушить методами AI / ML.
Что такое машинное обучение?
Хотя машинное обучение часто используется как синоним ИИ, это не совсем одно и то же. В машинном обучении для принятия решений используются алгоритмы, а для обновления этих алгоритмов используется обратная связь от человека.
Хороший пример — машинное зрение. Приложение машинного зрения может идентифицировать что-то как кошку, хотя на самом деле это собака. Человек исправляет это (говоря: «Нет, это собака») и набор алгоритмов, определяющих, является ли что-то кошкой или собакой, обновляет на основе этой обратной связи. Машинное обучение предназначено для принятия более эффективных решений с течением времени на основе постоянной обратной связи от тестировщиков и пользователей.
Машинное обучение изо всех сил пыталось достичь мира E2E-тестирования из-за отсутствия данных и обратной связи. E2E-тестирование обычно строится на интуиции человека в отношении того, что важно тестировать или какие функции кажутся важными или рискованными. Новые приложения используют данные аналитики продуктов для информирования и улучшения автоматизации тестирования, открывая двери для циклов машинного обучения, чтобы значительно ускорить обслуживание и создание тестов.
Итак, каково будущее тестирования программного обеспечения?
Будущее тестирования программного обеспечения — это более быстрые тесты, более быстрые результаты и, самое главное, тесты, которые узнают, что действительно важно для пользователей. В конечном счете, все тестирование направлено на то, чтобы убедиться, что пользовательский интерфейс прекрасен. Если мы сможем научить машину тому, что волнует пользователей, мы сможем тестировать лучше, чем когда-либо прежде.
Обычно тестирование отстает от разработки как по скорости, так и по полезности. Автоматизация тестирования часто является слабым местом для инженерных команд. ML может сделать его силой.
ML означает для будущего тестирования программного обеспечения автономию . Умные машины смогут, используя данные о текущем использовании приложений и прошлом опыте тестирования, создавать, поддерживать, выполнять и интерпретировать тесты без участия человека.
Вероятно, не все аспекты разработки программного обеспечения нужно автоматизировать. Учитывая давнюю традицию тестирования E2E, в основе которой лежит человеческая интуиция и человеческие ресурсы, отрасль в целом может поначалу сопротивляться передаче процесса машинам. Практически во всех отраслях инсайдеры утверждают, что машины никогда не смогут выполнять работу человека. Те, кто сопротивлялся росту ML и удвоил человеческий труд, часто оказываются брошенными.
В мире тестирования разворачивается знакомая история: автоматизация тестирования на основе машинного обучения сегодня находится в зачаточном состоянии, но, вероятно, всего через несколько лет, чтобы захватить отрасль.
Автономные сквозные тесты
Основное преимущество машинного обучения при тестировании E2E заключается в возможности использовать очень сложные аналитические данные продукта для выявления и прогнозирования потребностей пользователей. Тестирование на основе машинного обучения позволяет наблюдать за каждым взаимодействием пользователя с веб-приложением, понимать общие (и пограничные) пути, через которые проходят пользователи, и гарантировать, что эти варианты использования всегда работают должным образом.
Если эта машина тестирует множество приложений, то она может учиться на всех этих приложениях, чтобы предвидеть, как новые изменения в приложении повлияют на взаимодействие с пользователем. Благодаря этим данным тестирование на основе машинного обучения уже может создавать лучшие и более значимые тесты, чем люди.
Тесты, разработанные автоматизацией на основе машинного обучения, создаются и поддерживаются быстрее и дешевле, чем автоматизация тестирования, созданная людьми. Такое тестирование приводит к гораздо более быстрому (и более качественному) развертыванию и является благом для бюджета любого вице-президента по проектированию.
А как насчет тестеров?
Что насчет людей, которые в настоящее время выполняют эту работу?
Инженеры по качеству по-прежнему должны играть важную роль в разработке программного обеспечения. Самый эффективный способ обеспечить качество программного обеспечения — это встроить контроль качества в проектирование и разработку самого кода. Тестирование существует только потому, что этот процесс несовершенный.
Поскольку ML берет на себя бремя тестирования E2E от инженеров-испытателей, эти инженеры могут использовать свой опыт совместно с разработчиками программного обеспечения для создания высококачественного кода с нуля. Судя по нашим собственным интервью по этому поводу, кажется, что большинство инженеров по качеству предпочли бы это, а не заниматься тестовым обслуживанием весь день.
Будущее выглядит ярким
ML предлагает более рациональный и эффективный процесс тестирования программного обеспечения. Он устанавливает процесс, который лучше приспособлен для обработки объема разработок и создания необходимых специализированных тестов. Интеллектуальное тестирование программного обеспечения означает тесты на основе данных, точные результаты и инновационное развитие отрасли.
Мы надеемся, что эта статья помогла вам подготовиться к будущему тестирования программного обеспечения и к удивительным вещам, которые машинное обучение приготовило для нашего мира.