Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Diplom.doc
Скачиваний:
101
Добавлен:
28.11.2015
Размер:
1.6 Mб
Скачать
    1. Подходы к автоматизации тестирования программного обеспечения

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

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

К основным целям внедрения автоматизации функциональности тестирования стоит отнести:

• Экономия затрат на тестирование за счет автоматизации прогона тестов;

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

• Надежность – автоматизированные тесты предполагают исключение человеческого фактора.

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

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

• Жесткая запрограммированность – автоматизированный тест не в состоянии выявить дефекты, на который он не запрограммирован;

• Автоматизированные тесты, как и любой программный комплекс, нуждаются в поддержке, что приводит к дополнительным затратам на всем этапе разработки и тестирования приложения;

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

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

• Тестирование на уровне кода;

• Тестирование приложения через графический интерфейс.

Тестирование на уровне кода.

Этот подход используется в основном при модульном и регрессионном тестировании. Модульное тестирование проверяет функциональность и ищет дефекты в частях приложения, которые доступны и могут быть протестированы по-отдельности (модули программ, объекты, классы, функции и т.д.).

Преимущества модульного тестирования включают:

• Поощрение изменений. Модульное тестирование позже позволяет программистам проводить рефакторинг, будучи уверенными, что модуль по-прежнему работает корректно (регрессионное тестирование);

• Упрощение интеграции. Модульное тестирование помогает устранить сомнения по поводу отдельных модулей и может быть использовано для подхода к тестированию «снизу вверх»: сначала тестируются отдельные части программы, затем программа в целом. Такой подход значительно упрощает интеграционное тестирование;

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

Конечно, при тестировании на уровне кода присутствуют и свои недостатки:

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

• Большой объем тестового кода. Тестирование программного обеспечения — комбинаторная задача. Например, каждое возможное значение булевской переменной потребует двух тестов: один на вариант TRUE, другой — на вариант FALSE. В результате на каждую строку исходного кода потребуется 3-5 строк тестового кода;

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

Инструментарий для облегчения выполнения модульного тестирования разработан для широкого спектра языков. В языках D и Cobra модульное тестирования интегрировано в саму грамматику языка и доступно без использования дополнительных библиотек.

Для Java: JUnit, TestNG, JavaTESK и др.

Для C++: CPPUnit, Boost Test, Google C++ Testing Framework и др.

Для PHP: SimpleTest, PHPUnit и др.

Для JavaScript: JsUnit и др.

Тестирование приложения через графический интерфейс.

Популярность такого вида тестирования объясняется двумя факторами:

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

• Можно тестировать приложение, не имея при этом доступа к исходному коду.

UI-автоматизация развивалась в течение 4 поколений инструментов и техник:

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

• Сценарии (Scripting) — форма программирования на языках, специально разработанных для автоматизации тестирования программного обеспечения. Разработкой занимаются программисты высокого уровня, которые работают отдельно от тестировщиков, непосредственно запускающих тесты. К тому же скрипты больше подходят для тестирования GUI и не могут быть внедренными, пакетными или вообще каким-либо образом объединены в систему. Наконец, изменения в тестируемом ПО требуют сложных изменений в соответствующих скриптах;

• Data-driven testing — методология, которая используется в автоматизации тестирования. Особенностью является то, что тестовые скрипты выполняются и верифицируются на основе данных, которые хранятся в центральном хранилище данных или БД. Роль БД могут выполнять ODBC-ресурсы, csv или xls файлы и т.д. Data-driven testing — это объединение нескольких взаимодействующих тестовых скриптов и их источников данных в фреймворк, используемый в методологии. В этом фреймворке переменные используются как для входных значений, так и для выходных проверочных значений: в тестовом скрипте обычно закодированы навигация по приложению, чтение источников данных, ведение логов тестирования. Таким образом, логика, которая будет выполнена в скрипте, также зависит от данных;

• Keyword-based автоматизация подразумевает разделение процесса создания тестовых случаев на 2 этапа: этап планирования и этап реализации.

Популярные программы для такого вида тестирования включают в себя:

• Коммерческие:

o HP LoadRunner, HP QuickTest Professional, HP Quality Center

o IBM Rational FunctionalTester, IBM Rational PerformanceTester, IBM Rational TestStudio

o AutomatedQA TestComplete

• С открытым исходным кодом:

o Selenium

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

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

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

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

• Wapiti. Позволяет провести аудит на предмет безопасности веб-приложений. Приложение проводит сканирование с позиции злоумышленника. То есть, приложение просканирует страницы веб-приложения на наличие скриптов или форм, через которые можно провести взлом.

• Netsparker Community Edition. Представляет собой сканер на предмет SQL Injection. Это бесплатная версия сканера веб-уязвимости, так что пользователь может начать сканировать свой веб-сайт сразу же. Сканер очень удобен в использовании, быстрый и легок в применении, пользователю не нужно будет беспокоиться о ложных тревогах.

• N-Stalker Free Version. Предоставляет проводить ограниченное количество проверок Web Security Assessment, которые помогут повысить общий уровень безопасности инфраструктуры web-сервиса. Инструмент использует самую полную базу сигнатур веб-атак, на сегодняшний день доступную – «N-Stealth Web Attack Signature Database».

• Websecurify – это продвинутый инструмент для тестирования, разработанный специально для быстрого и точного обнаружения уязвимостей в веб-приложении.

• OWASP Zed Attack Proxy Project – Инструмент для тестирования безопасности на базовом уровне, позволяет провести проверки на уязвимости к XSS атакам, производиться базовые проверки на возможность SQL инъекций, позволяет производить сканирование портов приложения, фаззинг, а также позволяет контролировать используемые протоколы во время тестирования. Данный инструмент будет особенно полезен тестировщикам безопасности, а также разработчикам. Сканер предоставляет возможность работать как в пассивном режиме, так и в активном. Сканер безопасности находится в свободном распространении.

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

Исходя из представленных альтернатив внедрение сканера OWASP Zed Attack Proxy Project будет лучшим вариантом.