Методы автоматизированного тестирования
Данная статья скорее является размышлениями на тему необходимости, целесообразности и обоснованности применения автоматизированных тестов, нежели погружением в то, как именно их применять.
Современная информационная система – большой, сложный и комплексный продукт, состоящий из множества компонентов:
Каждый из видов компонентов при этом может быть не в единственном числе, а сама система может взаимодействовать по разным каналам с другими столь же сложными системами, внешними сервисами, подключаемым оборудованием и т.д.
Также, целевые информационные системы строятся на основе систем, компонент, библиотек сторонних вендоров, которые развиваются с течением времени. Здесь под целевой информационной системой подразумевается внедряемая/сопровождаемая информационная система.
В данном обзоре коснемся только подходов, технологий и инструментов некоторых типов автоматизированного тестирования кода клиента и программного сервера целевой информационной системы.
В процессе жизненного цикла любая информационная система проходит через несколько этапов, среди которых для целей обзора имеет смысл выделить:
На этих этапах присутствуют:
Для обеспечения стабильности системы в связи с изменением ее компонентов и алгоритмов применяются различные методы тестирования.
Среди методов тестирования информационных систем, коих существует множество, выделим следующие, как наиболее часто используемые:
Анализ стилистики, производительности, интеграционное и прочие виды тестирования здесь рассматриваться не будут.
Рассмотрим какие технологии можно применить для модульного тестирования и покрытия кода тестами.
Как в ходе выполнения проекта, так и при развитии системы, изменения в ее алгоритмы вносятся в соответствии с техническими заданиями, хотя данный документ может иметь различные названия. В технических заданиях, как правило, описываются критерии приемки: как мы и заказчик убедимся в том, что заказанный функционал работает верно.
В качестве примера можно привести такой упрощенный критерий:
Автоматизированное тестирование лишено данных недостатков. Конечно, возникает отдельная задача кодирования данного теста на основании критериев приемки, но это скорее дисциплинирующий фактор.
В зависимости от платформы, применяются различные инструменты тестирования. Рассмотрим те инструменты, которые можно применить на платформе 1С:
К сожалению, инструмента анализа покрытия кода 1С тестами пока не встречал.
Приведенные инструменты пусть и не являются идеальными, тем более если речь идет о различных этапах жизненного цикла систем, но позволяют с чего-то начать, автоматизировать наиболее трудоемкие задачи рутинного характера.
Как и у любой активности, в случае применения тестирования есть свою плюсы и минусы.
Проведенный опрос показал, что к минусам причисляют:
К плюсам, на мой взгляд, относятся:
А что касается обозначенных «минусов», то их я скорее считаю плюсами, которые позволят обеспечить преемственность кода.
Технологии автоматизированного тестирования – полезны и повышают качество продукта, а их применения является ценным и повышает привлекательность компании для клиентов. Следует стремиться их применять и совершенствовать.
Компоненты системы
Современная информационная система – большой, сложный и комплексный продукт, состоящий из множества компонентов:
- Клиента с GUI
- Программного сервера
- СУБД
- Аппаратного обеспечения
- И т.д.
Каждый из видов компонентов при этом может быть не в единственном числе, а сама система может взаимодействовать по разным каналам с другими столь же сложными системами, внешними сервисами, подключаемым оборудованием и т.д.
Также, целевые информационные системы строятся на основе систем, компонент, библиотек сторонних вендоров, которые развиваются с течением времени. Здесь под целевой информационной системой подразумевается внедряемая/сопровождаемая информационная система.
В данном обзоре коснемся только подходов, технологий и инструментов некоторых типов автоматизированного тестирования кода клиента и программного сервера целевой информационной системы.
Этапы жизненного цикла системы
В процессе жизненного цикла любая информационная система проходит через несколько этапов, среди которых для целей обзора имеет смысл выделить:
- этап разработки и внедрения,
- этап сопровождения и развития,
- работы по обновлению целевой системы в связи с выпуском вендорами новых версий ее компонентов.
На этих этапах присутствуют:
- изменения алгоритмов функционирования системы и отдельных ее модулей, зачастую, весьма масштабные,
- система, находящаяся в опытной или промышленной эксплуатации,
- требования по стабильности ее работы.
Для обеспечения стабильности системы в связи с изменением ее компонентов и алгоритмов применяются различные методы тестирования.
Методы тестирования
Среди методов тестирования информационных систем, коих существует множество, выделим следующие, как наиболее часто используемые:
- Модульное тестирование (Unit test)
Цель: проверить, что код работает именно так, как должен (при заданных входных параметрах выдает предполагаемый результат). - Анализ покрытия кода тестами (Test coverage)
Цель: проверить, что весь наш код отрабатывает при модульном тестировании, что нет не участвующих в тестировании участков кода. - Анализ стилистики кода
Цель: проверка кода на соблюдение стандартов разработки (отраслевых, корпоративных, принятых на проекте). - Анализ производительности (Benchmark, Profiling)
Цель: проанализировать производительность ключевых операций, потребление памяти, утечку памяти.
Анализ стилистики, производительности, интеграционное и прочие виды тестирования здесь рассматриваться не будут.
Технологии тестирования
Рассмотрим какие технологии можно применить для модульного тестирования и покрытия кода тестами.
Как в ходе выполнения проекта, так и при развитии системы, изменения в ее алгоритмы вносятся в соответствии с техническими заданиями, хотя данный документ может иметь различные названия. В технических заданиях, как правило, описываются критерии приемки: как мы и заказчик убедимся в том, что заказанный функционал работает верно.
В качестве примера можно привести такой упрощенный критерий:
- Исходные данные: в систему внесен документ реализации товаров на сумму 100 руб., со ставкой НДС 20%, НДС сверху.
- Действия пользователя: пользователь формирует отчет по продажам за период, в котором введен документ.
- В результате в отчете отображена сумма реализации 100 руб. и сумма НДС 20 руб.
- Вручную такое тестирование как правило выполняется единожды, поскольку выполнять каждый раз полный комплект тестов очень трудоемко.
- Нет гарантии того, что тесты, описанные в техническом задании покрывают
Автоматизированное тестирование лишено данных недостатков. Конечно, возникает отдельная задача кодирования данного теста на основании критериев приемки, но это скорее дисциплинирующий фактор.
Инструменты автоматизированного тестирования
В зависимости от платформы, применяются различные инструменты тестирования. Рассмотрим те инструменты, которые можно применить на платформе 1С:
- Для Unit-тестирования можно применять систему «1С: Сценарное тестирование 8», хотя сценарное тестирование и отличается от блочного.
- Для проверки соблюдения стандартов 1С существует инструмент «Автоматизированная проверка конфигураций».
- Для анализа производительности можно применять хорошо себя зарекомендовавший «Корпоративный инструментальный пакет 8».
К сожалению, инструмента анализа покрытия кода 1С тестами пока не встречал.
Приведенные инструменты пусть и не являются идеальными, тем более если речь идет о различных этапах жизненного цикла систем, но позволяют с чего-то начать, автоматизировать наиболее трудоемкие задачи рутинного характера.
Преимущества применения технологий тестирования
Как и у любой активности, в случае применения тестирования есть свою плюсы и минусы.
Проведенный опрос показал, что к минусам причисляют:
- Дополнительно надо писать сами тесты и писать их правильно.
- Надо строить свой код таким образом, чтобы тесты могли исполняться.
К плюсам, на мой взгляд, относятся:
- Повышение качества разрабатываемого функционала.
- Снижение трудозатрат на повторное тестирование. Тем более, что тестировать полезно каждую сборку целевой системы.
- Повышение привлекательности компании для заказчиков. Применение технологий автоматизированного тестирования является показателем высокой культуры разработки и практически мировой тенденцией.
- Также разработанные тесты могут быть монетизированы как продукт интеллектуальной деятельности. Например, по завершению проекта тесты могут быть переданы заказчику если заказчик планирует развивать систему силами собственного ИТ-подразделения.
А что касается обозначенных «минусов», то их я скорее считаю плюсами, которые позволят обеспечить преемственность кода.
Выводы
Технологии автоматизированного тестирования – полезны и повышают качество продукта, а их применения является ценным и повышает привлекательность компании для клиентов. Следует стремиться их применять и совершенствовать.