Эволюция QA-автоматизации

Тестирование программного обеспечения прошло 70 лет эволюции. То, что при зарождении было ручным процессом, утомительным даже для гиков, к 2020-м превратилось в супер-автоматизированный процесс на переднем крае технологий, в котором автоматизировано почти всё. Рассмотрим этапы пути.

Примитивные начала

Чтобы понять истоки автоматизации тестирования, нужно вернуться в 1950-е, когда индустрия ПО находилась в зачаточном состоянии. В те годы программное обеспечение считалось вторичным по отношению к аппаратному. Программы были как бы «дополнением», написанным для демонстрации возможностей компьютеров. Тестирования ПО не существовало в том виде, в котором мы его знаем сейчас. В обязанности программиста входило тестирование написанного им кода.

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

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

Первые шаги. Разделение на юнит, интеграционное и функциональное

В 1970-х годах возникли парадигмы структурированного программирования. Сложность кода росла в геометрической прогрессии, по мере того как программное обеспечение обеспечивало все новые функциональные возможности. В этот период возникло разделение процесса на этапы:

Юнит-тестирование — тестирование отдельных изолированных модулей уже тогда стало неотъемлемой практикой проверки функциональности небольших частей кода. Несмотря на то, что модульное тестирование выполнялось вручную, оно ознаменовало собой ранние фазы перехода к строгости и структуре в тестировании ПО.

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

Функциональное тестирование — проверка поведения программного обеспечения в соответствии с написанными спецификациями стала краеугольным камнем. Тестирование «черного ящика», вводов и выводов — помогло формализовать процессы тестирования.

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

1980-е. Настоящая автоматизация: DDT, GUI, скрипты, регрессы

К 1980-м годам размер и сложность компьютерных программ значительно возросли. По мере ускорения темпов разработки временнЫе затраты и дублирование задач при ручном тестировании достигли неприемлемого уровня. Ошибки в коде, ускользнувшие мимо людей-тестеров, приводили к катастрофическим сбоям, в том числе в медицинской сфере и в военном деле. Сфера Quality Assurance больше не могла полагаться только на человеческие усилия, контроль и надзор, и на ad-hoc-подходы.

В ответ на растущую сложность ПО и необходимость повышения эффективности в конце 1980-х и в начале 1990-х годов появились первые коммерческие инструменты автоматизации тестирования:

  • Тестирование на основе данных — (Data-Driven Testing, DDT). Тестовые данные были впервые отделены от тестовых процедур, что позволило проводить повторять тесты с другими данными, без изменения самих сценариев.
  • Средства тестирования графических интерфейсов — инструменты автоматизации теперь могли программно взаимодействовать с графическими пользовательскими интерфейсами и тестировать их. Это расширило возможности автоматизации за пределы бекенд-систем.
  • Тестовые сценарии — тестировщики теперь получили возможность программировать сложные пользовательские процессы и системные взаимодействия с помощью сценариев, вместо прохода всех шагов вручную. Эти тестовые сценарии уже могли выполняться без человека, что позволило снять с людей-тестировщиков рутинные задачи.
  • Программное регрессионное тестирование — теперь автоматизация открыла путь для более-менее надежного регрессионного тестирования путем при внесении изменений в код. Это дало «быструю уверенность» в отсутствии «побочных эффектов» после улучшений продукта и других модификаций кода.

Эти нововведения резко изменили процессы в тестировании, повысив эффективность, согласованность, надежность и покрытие. Однако, на этом этапе инструменты автоматизации все еще работали изолированно, поэтому сфера Quality Assurance оставалась фрагментированной. Настоящая революция в тестировании произошла, когда были усовершенствованы методологии разработки в следующую эпоху.

Нулевые. Эра CI/CD. Сдвиг влево

Автоматизация тестирования в начале 1990х уже как-то решала проблему медленного и хаотичного ручного тестирования. Но дальнейшее ускорение создания программных продуктов сдерживалось устаревшими традиционными — «водопадными» циклами разработки. В начале 2000-х годов ситуация существенно изменилась с появлением Agile-методологий, которые обеспечили возможность непрерывных итераций и частых релизов.

Теперь автоматизация вышла за рамки локального выполнения тестов и превратилась в сквозную, end-to-end систему с интегрированными инструментами непрерывной сборки, тестирования, интеграции и развертывания. Это привело к внедрению практик DevOps, которые убрали барьер между разработкой и поддержкой ПО. DevOps стал катализатором новой модели — непрерывной интеграции и непрерывной доставки, которая доминирует в современной разработке.

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

Благодаря внедрению культуры DevOps, непрерывной интеграции, непрерывной доставки, и автоматизации инфраструктуры — тестирование перестало быть препятствием для ускоренной доставки, а стало ее ускорителем.

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

Современность: AI и ML в QA

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

  • Тестирование API — для монолитных приложений было вполне достаточно автоматизации GUI-тестирования, но распределенные микросервисные архитектуры требуют специализированных инструментов для тестирования API. Фреймворки нового поколения теперь предоставляют интегрированные возможности тестирования API.
  • ИИ-генерация тест-кейсов — использование нейронных сетей для автоматической генерации тест-кейсов и сценариев тестирования, которые люди-тестировщики могли упустить.
  • ИИ-аналитика тестового покрытия — ИИ собирает метрики сложности кода, чтобы обеспечить адекватное тестовое покрытие по всем вероятным путям.
  • Самовосстановление (Self-Healing) и автоматический мониторинг — Можно не ждать, пока человек напишет тесты. ИИ-системы автономно мониторят состояние системы и запускают исправляющие действия без вмешательства человека.

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

Что дальше?

За 60 лет QA-тестирование прошло путь от неформализованной, хаотичной человеческой работы до все более специализированной и сложной автоматизации, которую теперь вытесняют ИИ-системы. Этот путь отражает эволюцию программной инженерии в целом; автоматизация решает все более сложные задачи.

Возникает вопрос: может ли искусственный интеллект избавить тестирование, а в перспективе и разработку, от необходимости участия человека? Возможно. Но подобные прогнозы часто не оправдываются. На практике парадигмальные инновации, описанные выше, открывают новые сферы и видоизменяют весь ландшафт до неузнаваемости.Поэтому предсказать невозможно. Например, мэйнфреймам в свое время предсказывали блестящее будущее; да, они остаются неотъемлемой частью ИТ; но распространение персональных компьютеров и смартфонов изменило жизнь людей так, как не сумели предсказать фантасты 1950х-1960х. В свое время прогнозировалось, что автоматизация тестирования заменит ручное тестирование; а этого не произошло; человеческая интуиция по-прежнему важна — поскольку критерии качества постоянно расширяются.

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

Источник


Какой была ваша первая зарплата в QA и как вы искали первую работу?

Мега обсуждение в нашем телеграм-канале о поиске первой работы. Обмен опытом и мнения.

Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Мы в Telegram

Наш официальный канал
Полезные материалы и тесты
Готовимся к собеседованию
Project- и Product-менеджмент

? Популярное

? Telegram-обсуждения

Наши подписчики обсуждают, как искали первую работу в QA. Некоторые ищут ее прямо сейчас.
Наши подписчики рассказывают о том, как не бояться задавать тупые вопросы и чувствовать себя уверенно в новой команде.
Обсуждаем, куда лучше податься - в менеджмент или по технической ветке?
Говорим о конфликтных ситуациях в команде и о том, как их избежать
$1100*
медианная зарплата в QA в июне 2023

*по результатам опроса QA-инженеров в нашем телеграм-канале

Собеседование

19%*
IT-специалистов переехало или приняло решение о переезде из России по состоянию на конец марта 2022

*по результатам опроса в нашем телеграм-канале

live

Обсуждают сейчас