Разделы портала

Онлайн-тренинги

.
Автоматизация тестирования: учимся экономить
30.12.2008 17:52

Автор: Владислав Орликов

Оригинальная публикация

Сэкономил – значит заработал, – утверждает пословица.

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

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

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

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

Вот пример ситуации с негативными последствиями. Банк предлагает клиентам воспользоваться услугой «Электронный кошелек». Если из-за дефектов программного обеспечения клиенту показан неверный баланс счета. В результате этот клиент вряд ли еще раз воспользуется этой услугой. Другой пример. Оператор мобильной связи использует автоматизированную информационную систему, которая круглосуточно регистрирует платежи абонентов по всей России. Скрытые дефекты этой системы чреваты очень большими финансовыми потерями.

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

Технологически автоматизация позволяет использовать одни и те же тесты многократно. Тесты выполняются быстрее, что позволяет снизить издержки (высвобождается время, которое раньше уходило на ручное тестирование). Многократно возрастает тестовое покрытие. Есть возможность проводить проверки нового или модифицированного приложения на соответствие установленным требованиям по функциональности и производительности.

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

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

Переход к автоматизированному тестированию

Начиная проект по автоматизации тестирования, прежде всего, необходимо выбрать инструментальные средства автоматизированного тестирования и подготовить персонал. При выборе инструментальных средств рекомендуем руководствоваться такими факторами как:

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

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

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

Например, одной из сред управления тестированием является продукт Quality Center компании Hewlett-Packard.

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

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

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

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

  • необходимо определить состояния системы, непосредственно связанные с требованиями технического задания;
  • желательно определить состояния, которые можно проверить, не изменяя код программы, без перекомпиляции;
  • необходимо логически объединить состояния, что поможет выделить несколько макро-групп тестов.

Можно выделить несколько уровней рассматриваемой модели.

Тест-анализ. На данном уровне обычно идет передача знаний между бизнес- пользователями системы и аналитиками. Результат передачи – высокоуровневые тест-кейсы. Пример такого высокоуровневого тест-кейса: вход в систему, выполнение поиска проводок, формирование отчета, выход из системы.

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

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

Разработка тестов. На данном уровне осуществляет кодирование тестов, их отладка.

Запуск тестов. На данном уровне осуществляется запуск и контроль выполнения тестов. Тесты группируются согласно заданным критериям, определенным стратегией тестирования.

При написании автоматических тестов рекомендуем придерживаться рекомендаций относительно именования, структуры и параметризации тестов.

Именование тестов. Каждый автоматический тест должен иметь такое название, чтобы информационное сообщение «Тест Х завершился с ошибкой» значительно сужало список поврежденной функциональности, стоящей за данной ошибкой.

Структура тестов. Самый верхний уровень автоматического теста, который непосредственно определяет тестовый сценарий, должен быть линейным и содержать не более 6-7 шагов. Каждая строка кода, для улучшения визуального охвата, не должна превышать по ширине страницу текста, горизонтальный скроллинг не допустим. Набор тестов на исполнение должен иметь возможность быть представленным линейно. Действия, независимые от других и выполняемые более двух раз, должны быть вынесены в отдельные функции.

Параметризация. Рекомендуется внести понятие параметров по умолчанию для высокоуровневых шагов сценария. Это несколько снизит эффективность понимания теста на начальном этапе (пока не изучен и не освоен контекст использования тех или иных методов), но по истечению срока освоения методики повысит информативность каждого теста и его наглядность (зачем человеку постоянно видеть те параметры, которые в 80% случаев остаются неизменными). Для значений ряда параметров, количество которых невелико, следует ввести мнемокоды. Например, для списка валют и т.п.

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

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

План тестирования

Когда средство автоматизированного тестирования выбрано и группа сформирована, имеет смысл задуматься о плане проведения автоматизированного тестирования.

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

Анализ Планирование Дизайн Разработка, откладка и запуск
Предварительный анализ объекта, подлежащего автоматизации. Выбор стратегии тестирования. Адаптация полученного видения с учетом особенностей автоматизации.

Проектирование архитектуры движка автоматических тестов.

Создание прототипов скелетных функций.

Составление перечня прикладных и служебных функций, разбиение по классам.
Написание тестовых сценариев.

Группировка сценариев по уровням: приемочное тестирование, базовое тестирование, расширенное тестирование.

Выделение единообразных действий в тестовых сценариях.

Реализация скелетных функций.

Реализация прикладных и служебных функций.

Unit тестирование готовых функций.

Выборочный сквозной анализ написанного кода.

Реализация тестовых сценариев из группы приемочного тестирования.

Пробный запуск, выявление недочетов и их исправление.

Реализация сценариев из группы базового тестирования.

Отладка автоматических тестов.

Реализация сценариев из группы расширенного тестирования.

 

Результаты тестирования

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

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

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

Обсудить в форуме