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

Компоненты системы


Современная информационная система – большой, сложный и комплексный продукт, состоящий из множества компонентов:

  • Клиента с GUI
  • Программного сервера
  • СУБД
  • Аппаратного обеспечения
  • И т.д.

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

Этапы жизненного цикла системы


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

  • этап разработки и внедрения,
  • этап сопровождения и развития,
  • работы по обновлению целевой системы в связи с выпуском вендорами новых версий ее компонентов.

На этих этапах присутствуют:

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

Для обеспечения стабильности системы в связи с изменением ее компонентов и алгоритмов применяются различные методы тестирования.

Методы тестирования


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

  1. Модульное тестирование (Unit test)
    Цель: проверить, что код работает именно так, как должен (при заданных входных параметрах выдает предполагаемый результат).
  2. Анализ покрытия кода тестами (Test coverage)
    Цель: проверить, что весь наш код отрабатывает при модульном тестировании, что нет не участвующих в тестировании участков кода.
  3. Анализ стилистики кода
    Цель: проверка кода на соблюдение стандартов разработки (отраслевых, корпоративных, принятых на проекте).
  4. Анализ производительности (Benchmark, Profiling)
    Цель: проанализировать производительность ключевых операций, потребление памяти, утечку памяти.

Анализ стилистики, производительности, интеграционное и прочие виды тестирования здесь рассматриваться не будут.

Технологии тестирования


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

  • Исходные данные: в систему внесен документ реализации товаров на сумму 100 руб., со ставкой НДС 20%, НДС сверху.
  • Действия пользователя: пользователь формирует отчет по продажам за период, в котором введен документ.
  • В результате в отчете отображена сумма реализации 100 руб. и сумма НДС 20 руб.
  • Вручную такое тестирование как правило выполняется единожды, поскольку выполнять каждый раз полный комплект тестов очень трудоемко.
  • Нет гарантии того, что тесты, описанные в техническом задании покрывают
функциональность полностью. Т.е. даже если тесты описаны и проводятся регулярно, вероятно наличие не протестированного функционала.

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

Инструменты автоматизированного тестирования


В зависимости от платформы, применяются различные инструменты тестирования. Рассмотрим те инструменты, которые можно применить на платформе 1С:

  1. Для Unit-тестирования можно применять систему «1С: Сценарное тестирование 8», хотя сценарное тестирование и отличается от блочного.
  2. Для проверки соблюдения стандартов 1С существует инструмент «Автоматизированная проверка конфигураций».
  3. Для анализа производительности можно применять хорошо себя зарекомендовавший «Корпоративный инструментальный пакет 8».

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

Преимущества применения технологий тестирования


Как и у любой активности, в случае применения тестирования есть свою плюсы и минусы.
Проведенный опрос показал, что к минусам причисляют:

  1. Дополнительно надо писать сами тесты и писать их правильно.
  2. Надо строить свой код таким образом, чтобы тесты могли исполняться.

К плюсам, на мой взгляд, относятся:

  1. Повышение качества разрабатываемого функционала.
  2. Снижение трудозатрат на повторное тестирование. Тем более, что тестировать полезно каждую сборку целевой системы.
  3. Повышение привлекательности компании для заказчиков. Применение технологий автоматизированного тестирования является показателем высокой культуры разработки и практически мировой тенденцией.
  4. Также разработанные тесты могут быть монетизированы как продукт интеллектуальной деятельности. Например, по завершению проекта тесты могут быть переданы заказчику если заказчик планирует развивать систему силами собственного ИТ-подразделения.

А что касается обозначенных «минусов», то их я скорее считаю плюсами, которые позволят обеспечить преемственность кода.

Выводы


Технологии автоматизированного тестирования – полезны и повышают качество продукта, а их применения является ценным и повышает привлекательность компании для клиентов. Следует стремиться их применять и совершенствовать.