[Из песочницы] Автоматизация тестирования программных систем

На сегодняшний день мало кто сомневается в целесообразности проведения процесса тестирования разрабатываемых программных продуктов. Целью любого проекта по тестированию является обеспечение качества разрабатываемого продукта. Автоматизация повышает эффективность тестирования и, следовательно, улучшает качество создаваемого программного обеспечения (ПО). Основная задача статьи — создать у читателя достаточно чёткую картину того, что собой представляет автоматизация тестирования.Основные понятия Первое, с чего мне хотелось бы начать — это освежить в вашей памяти основные термины и понятия, которые будут использованы в данной статье в дальнейшем: Тестирование — процесс, содержащий в себе все активности жизненного цикла, как динамические, так и статические, касающиеся планирования, подготовки и оценки программного продукта и связанных с этими результатами работ с целью определения их соответствия описанным требованиям, и демонстрации их пригодности для заявленных целей и определения дефектов; Автоматизация тестирования — использование программного обеспечения для осуществления или помощи в проведении определенных тестов процессов, например, управление тестированием, проектирование тестов, выполнение тестов и проверка результатов; Автоматизированное тестирование ПО — процесс тестирования ПО, при котором основные функции и шаги теста, такие как запуск, инициализация, выполнение, анализ и выдача результата производятся автоматически с помощью некого стека технологий, в котором главное место занимает инструмент для автоматизированного тестирования; Инструмент для автоматизированного тестирования — это ПО, посредством которого специалист по автоматизированному тестированию осуществляет создание, отладку, выполнение и анализ результатов прогона тест-скриптов; Интерфейс программирования приложений (иногда интерфейс прикладного программирования) (англ. application programming interface, API [эй-пи-ай]) — набор готовых классов, процедур, функций, структур и констант, предоставляемых приложением (библиотекой, сервисом) для использования во внешних программных продуктах. Используется программистами для написания всевозможных приложений; Нагрузочное тестирование — вид тестирования производительности, проводимый с целью оценить поведение компонента или системы под увеличивающейся нагрузкой (число одновременно работающих пользователей и/или число транзакций) для определения максимально допустимого уровня нагрузки для исследуемого компонента или системы; Регрессионная спираль смерти — данный эффект наступает тогда, когда на тестирование проекта тратится все больше и больше времени, т.к. готовой функциональности в продукте становится все больше и надо постоянно контролировать, что она по-прежнему работает; Регрессионное тестирование — тестирование уже протестированной программы, проводящееся после модификации для уверенности в том, что процесс модификации не внес или не активизировал ошибки в областях, не подвергавшихся изменениям. Проводится после изменений в коде программного продукта или его окружения; Тест-скрипт — это набор инструкций, для автоматической проверки определенной части ПО; Тестовый набор — это комбинация тест-скриптов, для проверки определенной части ПО, объединенной общей функциональностью или целями, преследуемыми запуском данного набора; Тестовые данные — данные, которые существуют (например, в базе данных) на начало выполнения теста\тест-скрипта и влияют на работу, или же испытывают влияние со стороны тестируемой системы или компонента; Фреймворк (англ. framework — каркас, структура) — структура программной системы; программное обеспечение, облегчающее разработку и объединение разных компонентов большого программного проекта. (Употребляется также слово «каркас», а некоторые авторы используют его в качестве основного, в том числе не базируясь вообще на англоязычном аналоге); Функциональное тестирование — тестирование, основанное на анализе спецификации функциональности компонента или системы.Виды тестирования Немного разобравшись с основными понятиями, предлагаю вам рассмотреть и основные виды тестирования: • Первым пунктом в этом списке стоит нагрузочное тестирование. Без автоматизации его выполнение трудно себе представить (программными продуктами имитируется нагрузка следующим образом: подключаются виртуальные пользователи, выполняющие различные скрипты (действия), по различным сценариям.); • Следом идёт регрессионное тестирование. Ошибки, которые возникли после внесения изменений в программу называют регрессионными ошибками (англ. regression bugs). Выполняется с регулярной частотой, задаваемой в зависимости от многих условий: может проводиться с каждой новой сборкой проекта или с каждой версией для заказчика; • Функциональное тестирование проводится в целях проверки реализуемости функциональных требований, то есть способности ПО в определённых условиях решать задачи, нужные пользователям. (Одна из основных задач автоматизации регрессионного\функционального тестирования заключается в том, чтобы уберечь проект от регрессионной спирали смерти.)Преимущества и недостатки автоматизированного тестирования Но всё ли так хорошо и красиво, как описано выше? Для ответа на эти вопросы, предлагаю «взвесить все за и против», чтобы сделать для себя соответствующие выводы.Преимущества: • Исключен «человеческий фактор» во время выполнения: тест-скрипт не допустит ошибки по неосторожности; • Быстрое выполнение; • Автоматически формируемые и сохраняемые отчёты о результатах тестирования; • Выполнение в фоне — во время выполнения тестов можно заниматься другими задачами или выполнять тест-скрипты в нерабочее время.Недостатки: • Однотипность — все написанные тесты всегда будут выполняться строго по алгоритму, реализованном в них, в то время как тестировщик, выполняя тест вручную, может обратить внимание на некоторые детали и найти дефект. (Например, после очередного обновления проекта на форме операции было добавлено необязательное поле, но разработчик допустил ошибку и формат данных для ввода оказался не верным. Во время функционального\регрессионного тестирования приложения тест-скрипт отработает без ошибок, т.к. в его алгоритме взаимодействие с этим полем не реализовано.); • Затраты на поддержку — чем чаще изменяется приложение, тем они выше. (В результате доработок конкретный функционал может изменяться, что приведёт к частичной или полной непригодности тест-скриптов. Перед специалистом по автоматизированному тестированию встанет задача привести тест-скрипт (ы) к актуальному состоянию.); • Большие затраты на разработку тестового каркаса для конкретного проекта (фактически идёт разработка приложения, которое тестирует другое).Внедрение автоматизированного тестирования Прежде, чем задумываться о внедрении автоматизации тестирования, необходимо убедиться, что процесс контроля качества на ваших проектах выстроен, документирован и работает как часы. Помните, что внедрение автоматизации — это не дань моде. Это задача, призванная поднять контроль качества на вашем проекте на новый уровень, ввиду чего повышается эффективность тестирования проекта (без дополнительной головной боли). Вторым шагом будет обращение к специалистам, которые помогут Вам поставить процесс автоматизации на профессиональном уровне и в сжатые сроки. Несомненно, можно пробовать развивать направление собственными силами, но без опытных специалистов этот процесс, вероятно, выльется в существенные сроки, будет проходить методом проб и ошибок, затронет больший бюджет, и, в конечном итоге, вполне может и вовсе отбить у вас всё желание применять автоматизированное тестирование. При внедрении на проекты автоматизации тестирования «с нуля», в большинстве случаев рекомендуется разработка фрэймворка. Данный подход позволит вашим специалистам самостоятельно дорабатывать фреймворк и развивать покрытие тест-скриптами. На сегодняшний день это наиболее технологически продвинутое решение по соотношению цена / трудозатраты / эффективность.К особенностям такого фрэймворка можно отнести: • Максимальная повторная используемость кода: фактически создается API, который обеспечивает управление процессом выполнения; • Применение методик Data Driven (тестирование по одному и тому же сценарию, проводимое при различных наборах и/или значений исходных данных); • Все сценарии тестирования (test cases) и пакеты запуска (test suites) также описываются во внешних файлах что позволяет легко управлять параметрами запуска; • Фреймворк обладает максимальной гибкостью: вы можете легко добавлять, удалять, редактировать существующие сценарии тестирования и пакеты запуска, при этом для данной задачи не требуется дополнительной квалификации, необходимо лишь умение работать с фреймворком; • В систему легко могут быть добавлены новые операции, или изменены существующие; при этом не потребуется каких-либо сложных действий, необходимо будет только написать новую функцию. Это позволяет легко и безболезненно расширять сам фреймворк; • Для многих отделов тестирования данное решение может оказаться панацеей, т.к. по результатам разработки фреймворка и проведения краткого обучения работе с ним, требования к квалификации специалистов, покрывающих систему авто тестами, существенно снижается, достаточно навыков работы XML.Итоги Напоследок стоит отметить, что целью автоматизации является повышение эффективности процесса (в данном случае тестирования) за счёт высвобождения специалистов и, следовательно, уменьшения затрат. При рассмотрении вопроса автоматизации стоит помнить о затратах на внедрение. Большинство средств автоматизации тестирования являются платными, кроме того, требуются дополнительные трудозатраты на адаптацию. Поиск баланса между ручным и автоматизированным тестированием любого программного продукта является важной задачей подразделения тестирования в любой организации.

© Habrahabr.ru