Еще совсем недавно тестирование программ проводилось вручную либо самими программистами, либо пользователями, что вряд ли можно было назвать системным подходом и к тому же не позволяло оценивать качество кода. Чуть позже тестирование выделилось в отдельную область знаний в составе разработки программного обеспечения, но быстро пришло понимание того, что тестирование вручную неэффективно, поскольку требует больших трудовых ресурсов и много времени. Первые средства автоматизации тестирования практически представляли собой библиотеки, которые можно было использовать для написания тестов, что требовало от тестировщика умения программировать на уровне разработчика. Современные средства автоматизированного тестирования позволяют создавать автоматизированные тесты с минимальным участием человека.
Если провести поверхностную классификацию, то средства автоматизации тестирования можно поделить на две группы: инструменты функционального и инструменты нагрузочного тестирования. К первой группе относятся инструменты, предназначенные для проверки соответствия приложения предъявляемым бизнес-требованиям, а вторую группу образуют инструменты для проверки и оценки производительности приложений.
На рынке средств функционального тестирования сегодня представлены главным образом продукты следующих компаний: HP (QuickTest Professional, WinRunner), IBM (Robot, Functional Tester), Borland (SilkTest) и AutomatedQA (TestComplete), представляющие собой средства разработки приложений. Причем часть из них использует «промышленные» языки программирования (например, QTP используется в качестве языка разработки скриптов VB, а Functional Tester реализован в среде Eclipse и позволяет создавать скрипты на Java), а часть применяет «диалекты» или свои собственные специальные языки (например, Robot использует язык SQABasic, а TestComplete – язык 4Test). Большинство инструментов ориентировано на работу с Web-приложениями либо с обычными приложениями, написанными на .Net или Java. При этом поддержку «старых» платформ, таких как Centura или PowerBuilder, обеспечивают в основном крупнейшие разработчики средств тестирования, HP и IBM.
Разработчики средств автоматизированного функционального тестирования достаточно оперативно реагируют на появление новых механизмов и платформ разработки программного обеспечения. И все же, несмотря на то что на рынке существует огромное разнообразие различных продуктов для автоматизированного тестирования, некоторые компании–разработчики программного обеспечения предпочитают создавать собственные инструменты, приспособленные для тестирования разрабатываемых ими приложений. Причин для этого как минимум две: высокая стоимость средств автоматизированного тестирования и уникальность тестируемого программного обеспечения, которая не позволяет использовать стандартные средства автоматизации тестирования.
Инструменты нагрузочного тестирования являются более сложными – они фактически «перехватывают» трафик между тестируемым приложением и сервером и представляют его в виде, удобном для работы. Практически все производители продуктов для автоматизированного тестирования предлагают средства нагрузочного тестирования, поскольку в современном виде функциональное тестирование в чистом виде мало кого интересует. Лидерами на рынке средств автоматизированного нагрузочного тестирования являются HP с продуктом LoadRunner и IBM с продуктами Robot
и Performance Tester, поддерживающими множество протоколов (включая терминальные протоколы). Большинство средств нагрузочного тестирования работают лишь с Web-приложениями.
Помимо собственно средств тестирования существуют так называемые средства поддержки процесса тестирования, позволяющие вести учет требования и тест-кейсов, проводить анализы покрытия требования тестами, управлять ходом выполнения тестирования, вести учет обнаруженных дефектов и т.п. Лидирует в данной области Web-приложение HP Quality Center – единый инструмент управления процессом тестирования (включая управление требованиями и дефект-менеджмент), интегрируемый со средствами функционального и нагрузочного тестирования HP QuickTest Professional и LoadRunner. С данным инструментом конкурирует продукт Rational Quality Manager (RQM) от IBM, представляющий собой Web-приложение на платформе Jazz.
Исторически сложилось так, что Россия отстает от остального компьютерного мира по применению средств автоматизации тестирования, и для этого, на мой взгляд, есть несколько причин. Во-первых, неправильное отношение к тестированию как таковому – многие руководители до сих пор считают, что разработчик может написать программу, которая не содержит ошибок. Во-вторых, высокая стоимость инструментов автоматизации тестирования. В-третьих, желание сэкономить на квалифицированных кадрах – работа специалиста по средствам автоматизации тестирования обходится дороже, чем труд обычного тестировщика, поэтому многие компании предпочитают пригласить трех студентов, которые будут вручную тестировать программное обеспечение (в большинстве случае к тому же бессистемно), чем нанять одного специалиста-автоматизатора. В-четвертых, ограничение по срокам – автоматизация тестирования требует значительных временных затрат и имеет смысл только в том случае, если проект как минимум среднесрочный (от полугода и более). И наконец, в-пятых, неудачный опыт применения таких средств и ожидание мгновенного эффекта от их внедрения. А ведь результаты внедрения таких продуктов заметны далеко не сразу и затраты на автоматизацию окупаются за длительный период времени, что не позволяет полностью отказаться от тестирования вручную.
Автоматизация тестирования
Автоматизация не сокращает этап подготовки к тестированию, а, наоборот, увеличивает его, что может напугать неискушенного руководителя проекта, однако, как только будет выпущена первая стабильная версия приложения и станет возможным проведение регрессионного тестирования, преимущества автотестирования станут очевидны. На моем опыте средства автоматизации тестирования позволили сократить сроки проверки версии с пяти рабочих дней до двух – автотесты прогонялись ночью, а на следующий день анализировался лог и выполнялось ручное тестирование функционала, проверка которого по ряду причин не автоматизировалась.
Автоматизация тестирования позволяет если не избежать, то значительно уменьшить синдром «замыленного глаза», когда тестировщик перестает замечать ошибки при выходе новых версий. Благодаря автоматизации можно не просто ускорить процесс тестирования, но и увеличить тестовое покрытие за счет большего количества перебираемых комбинаций входных данных, что в свою очередь позволяет снизить требования к квалификации разработчиков – с большей вероятностью их ошибки будут обнаружены на этапе тестирования. Если раньше для того, чтобы гарантировать, что с вероятностью 99% в программе не будет критических ошибок, мы должны были использовать команду из 10 высококлассных разработчиков, то теперь мы обходимся командой из 10 разработчиков, среди которых только 2-3 высококлассных специалиста.
Продукты автоматизации тестирования могут успешно применяться не только в компаниях-разработчиках, но и в организациях, использующих готовое ПО, – для них особенно актуальны средства автоматизации нагрузочного тестирования, позволяющие делать прогнозы (например, как долго сможет функционировать система на имеющемся оборудовании при запланированном росте бизнеса?), оптимизировать конфигурацию (настройка серверов для повышения производительности), находить ошибки функциональности, связанные с работой в многопользовательском режиме (подобные ошибки трудно обнаружить на этапе функционального тестирования).
А зачем компаниям, оказывающим услуги по тестированию и разработке программного обеспечения, пропагандировать использование средств автоматизации? Затраты на средства автоматизации несопоставимы с возможными потерями от сбоев системы, вызванных как функциональными ошибками, так и неудовлетворительной производительностью, – экономия на тестировании приведет к потерям на этапе эксплуатации подобного программного обеспечения. Центр тестирования компании «Аплана» уже давно занимается аутсорсингом функционального и нагрузочного тестирования, и, выполнив множество проектов с использованием различных средств автоматизации, мы можем с уверенностью сказать, что сегодня нет одного инструмента, который полностью удовлетворил бы всех заказчиков. Однако можно выбрать инструмент, максимально соответствующий предъявляемым требованиям.
Выбор инструмента
Для функционального тестирования важна поддержка конкретной среды разработки, возможность построения отчетов о тестировании, автоматическая регистрация обнаруженных дефектов, наличие сценариев восстановления (recovery-сценариев). Для инструментов нагрузочного тестирования требуется поддержка протокола, который используется тестируемым приложением, наличие встроенных средств мониторинга параметров серверов, возможность гибкой настройки сценариев нагрузочного тестирования, наличие средств анализа результатов и построения отчетов о нагрузочном тестировании.
Важную роль при выборе инструментов тестирования играет наличие документации и линии технической поддержки – современные инструменты тестирования не менее сложны, чем средства разработки. Следует обратить внимание и на наличие специализированных форумов, посвященных средствам тестирования, – существование форума по конкретному инструменту и, главное, многочисленной группы активных пользователей говорит о широкой распространенности данного инструмента, что в дальнейшем поможет быстрее получить ответ на интересующий вопрос. Кроме того, нужно обращать внимание на возможность интеграции инструментов тестирования с программным обеспечением, которое используется в компании. К примеру, если в компании уже выстроен процесс разработки программного обеспечения и в качестве средств автоматизации используются продукты IBM, то выбирать в качестве инструмента тестирования TestComplete, возможно, не самая удачная идея.
Следует руководствоваться также стоимостью инструментов тестирования – если вы планируете одноразовое тестирование, то покупать дорогостоящие инструменты нецелесообразно. В качестве альтернативы приобретению лицензий на инструментальные средства тестирования является аренда лицензий (покупка временных лицензий), что обычно значительно дешевле.
Мы предпочитаем работать со средствами тестирования компаний HP и IBM, хотя у нас есть опыт использования инструментов других производителей и собственные средства автоматизированного тестирования. Прежде чем начинать разработку автоматизированных тестов, мы выполняем анализ и готовим отчет, на основании которого заказчик принимает решение о том, какой инструмент тестирования ему больше подходит, однако часто встречаются ситуации, когда инструмент выбран заранее. На мой взгляд, практически каждую задачу можно решить с помощью любого инструмента тестирования, однако трудоемкость и стоимость решения будут сильно отличаться. Например, если используемый инструмент автоматизации тестирования не имеет собственного отладчика скриптов, то разработка и отладка скриптов увеличит на 30-40% время, необходимое на тестирование. Отсутствие средств анализа результатов и построения отчетов о тестировании может привести к потере преимущества автоматизации функционального тестирования перед тестированием вручную – если время, которое требуется для анализа результатов автоматизированного тестирования, сопоставимо со временем, требуемым для проведения ручного тестирования, то о выгоде говорить уже не приходится.
Петр Можаев (Peter.Mozhaev@aplana.com) – руководитель центра тестирования компании «Аплана» (Москва).
Средства от IBM Rational
В процессе создания информационных систем нередки ошибки и дефекты – это вполне ожидаемое и нормальное явление, а в условиях ограниченных временных ресурсов и высоких требований к качеству программных продуктов неизбежно возникает необходимость в организации эффективного контроля и управления всем процессом тестирования. Контроль качества ПО невозможен сегодня без автоматизации всех задач тестирования.
IBM Rational Robot – универсальное средство автоматизации тестирования общего назначения для команд разработчиков, выполняющих функциональное тестирование клиент-серверных приложений. Дает возможность обнаруживать неполадки в ПО благодаря расширению сценариев тестирования средствами условной логики, позволяющей целиком охватить тестируемое приложение. Robot позволяет создавать сценарии тестирования с вызовом внешних библиотек DLL или исполняемых модулей.
IBM Rational Performance Tester – инструмент нагрузочного и стрессового тестирования, с помощью которого можно выявлять проблемы системной производительности и их причины. Позволяет создавать тесты без написания кода и не требуя навыков программирования. Обеспечивает гибкие возможности моделирования и эмуляции различных пользовательских нагрузок. Выполняет сбор и интеграцию данных о серверных ресурсах с данными о производительности приложений, получаемыми в режиме реального времени.
IBM Rational Functional Tester – набор средств автоматизированного тестирования, позволяющих выполнять функциональное и регрессионное тестирование, тестирование пользовательского интерфейса и тестирование, управляемое данными. Инструмент применяет технологию ScriptAssure (бесшовная проверка достоверности динамических данных) и функции поиска соответствия по шаблону, позволяющие повысить устойчивость сценариев тестирования в условиях частых изменений пользовательских интерфейсов приложений. Тестировщики могут выбрать язык сценариев для разработки и настройки тестов: Java в среде Eclipse или Microsoft Visual Basic .Net в среде Visual Studio .Net.
IBM Rational Quality Manager – решение для реализации процессов управления тестированием и качеством, поддерживает сотрудничество участников групп по разработке программных продуктов, предоставляя им возможность обмениваться информацией, применять средства автоматизации для сокращения графиков выполнения проектов, а также составлять отчеты по проектным показателям для принятия обоснованных решений. Rational Quality Manager может быть дополнен средством управления ресурсами тестирования Rational Test Lab, обеспечивающим учет ресурсов тестирования (серверов), их бронирование, автоматизацию развертывания тестовой среды на сервере и запуск скриптов тестирования, а также отчетность по использованию ресурсов тестирования.
Rational Quality Manager и Rational Test Lab созданы на базе открытой платформы Jazz, которая предоставляет стандартные интерфейсы и удобные возможности для интеграции с решениями партнеров и других производителей.
Наследие Mercury
В ноябре 2006 года в состав компании HP вошла компания Mercury Interactive – известная своими разработками в области тестирования, что позволило существенно дополнить портфель решений HP BTO Software (Business Technology Optimization).
HP QualityCenter – программный продукт, представляющий собой интегрированный пакет инструментов на платформе Web, предназначенных для построения и поддержки процесса тестирования приложений, а также обеспечения тесного взаимодействия команды из специалистов по тестированию. Включает в себя модули управления требованиями, релизами и циклами, тестовые примеры, а также модуль тестирования и аналитический портал отчетности.
HP QuickTest Professional – набор средств автоматизации функционального и регрессионного тестирования программных систем, созданных с помощью основных платформ разработки. Продукт поддерживает такие среды, как Windows Presentation Foundation, Macromedia Flex, Ajax, Delphi, PowerBuilder, .Net, J2EE, обеспечивает работу с Web-сервисами, а также учитывает особенности ERP- и CRM-приложений.
HP LoadRunner – программный продукт для автоматизации нагрузочного тестирования широкого набора программных сред и протоколов. Поддерживает SOA, работу с Web-сервисами, Ajax, RDP, SQL, продуктами Citrix, платформы Java, .Net, а также все основные ERP- и CRM-приложения от PeopleSoft, Oracle, SAP и Siebel. Пакет HP LoadRunner включает в себя более 60 мониторов сбора данных о тестируемой инфраструктуре и предоставляет детальную диагностику по работе приложений.
Примеры
Средства автоматизированного тестирования активно применяются в практике компании «Аплана», помогая, в ряде случаев существенно повысить качество проекта.
Разработка системы автоматизированных функциональных тестов (САФТ) и системы нагрузочных тестов (СНТ) для корпоративного портала одного из крупнейших банков России. Помимо выполнения собственно разработки для заказчика потребовалось выстроить процесс тестирования и выбрать инструмент его управления. По требованию заказчика выбор был ограничен инструментальными средствами компаний HP и IBM. После проведения анализа и получения комплексной оценки предпочтение было отдано продуктам HP QuickTest Professional (QTP) – функциональное тестирование, HP LoadRunner (LR) и Quality Center (QC) – поддержка процесса тестирования. Преимуществом QTP было наличие возможности работы с внутренней структурой Web-приложения (получение полного доступа к свойствам и методам тестовых объектов на уровне, имеющемся у разработчиков приложения) и всесторонняя поддержка работы с таблицами. Основное преимущество LR состояло в наличии специального протокола для тестирования Web-приложений – web click&script. Этот протокол позволяет записывать нагрузочные скрипты в виде взаимодействия с элементами интерфейса (нажатия на кнопки, выбор из списков и т.п.), а не в виде отправки команд на сервер. Был развернут и настроен тестовый репозиторий, который использовался не только для хранения скриптов автоматизированного тестирования и тест-кейсов, но и для учета требований и дефектов. Встроенные отчеты QC позволяют быстро и наглядно получать информацию о покрытии функциональности автоматизированными скриптами, а также отслеживать динамику обнаружения/исправления дефектов.
Разработка системы автоматизированного функционального тестирования Web-сервисов и хранимых процедур для системы Internet-трейдинга одного из крупных российских банков. Приложение должно было обеспечить возможность передачи различных наборов данных тестируемым Web-сервисам и хранимым процедурам, а также получение выходных данных и их автоматический анализ (оценивать правильность работы Web-сервисов и процедур). На момент начала работ на рынке еще не было средств тестирования Web-сервисов (например, таких, как HP Service Test и IBM Rational Functional Tester), поэтому было принято решение о разработке собственной программы для проведения автоматизированного тестирования Web-сервисов. В результате была написана утилита, позволявшая с помощью специального файла, содержащего входные тестовые наборы данных и ожидаемый результат работы Web-сервисов и хранимых процедур, вызывать Web-сервисы и хранимые процедуры с заданными тестовыми данными, а также формировать собственный лог-файл, в котором зафиксированы все расхождения, выявленные во время тестирования. Важно отметить, что анализ результатов, полученных в ходе функционального тестирования, не занял много времени, поскольку вся необходимая информация с заданным уровнем детализации уже содержалась в лог-файле, который мог быть сразу же передан разработчикам Web-сервисов и хранимых процедур и не требовал дополнительной модификации или редактирования. Если бы данный проект выполнялся сейчас, то, вероятнее всего, удалось бы воспользоваться существующими продуктами.