СОДЕРЖАНИЕ
Глава 1. Сущность и основные принципы функционального тестирования программного обеспечения
1.1 Тестирование как метод обеспечения качества программного обеспечения
1.2 Стратегии «белого» и «черного» ящика при тестировании программного обеспечения
1.3 Этапы и уровни функционального тестирования
Глава 2. Характерные особенности тестирования мобильных приложений
Глава 3. Практическое применение инструментов функционального тестирования мобильных приложений
Для функционального тестирования, как правило, используются такие инструменты как TeamCity, Selenium, Web Driver, Firebug, XPather, IE Developer Toolbar, JUnit, JMeter, VMWare, TestLink и др., а также багтрэкинговые системы Bugzilla, Mantis, Jira, XBtrack[52].
Методики функционального тестирования[53]:
К недостаткам функционального тестирования можно отнести следующие факторы[55]:
• велика вероятность при проверке функциональности упустить различные логические ошибки в ПО;
• вероятность избыточного тестирования.
Так как основная часть функциональных тестов проводиться основываясь на тестовых случаях и особое внимание уделяется работе частей приложения, то есть риск упустить сложные логические ошибки находящиеся в разных частях программы и часто не попадающие в один тестовый случай. Для примера можно взять — изменение имени в профиле человека — имя отображается во многом количестве модульных частей приложения, и все их могут забыть проверить, или упустить из виду.
Избыточность тестирования особенно актуальна на ранних этапах тестирования, избежать ее можно — строгими требованиями, профессионализмом, четкой постановкой задач[56].
В ходе этапа тестирования производительности в первую очередь проводят нагрузочное тестирование, целью которого является проверка, будет ли система адекватно реагировать на внешние воздействия в режиме, близком к режиму реальной эксплуатации[57].
Кроме нагрузочного тестирования проводят испытания в условиях минимальных аппаратных средств и максимальной нагрузки – стрессовое тестирование, а также, испытания в условиях предельных объемов обрабатываемой информации – объемное тестирование.
Выделяют еще один вид тестирования: тестирование стабильности и надежности, которое включает в себя не только длительное испытание программного продукта в нормальных условиях, но и способность его возвращаться в нормальный режим функционирования после непродолжительных периодов стрессовых нагрузок[58].
Как уже было указано выше, тестирование проводится в соответствии с программой и методикой испытаний, которая разрабатывается в соответствии с ГОСТ 34.603-92.
Для проведения тестирования разрабатывается контрольный пример, который должен содержать достаточно данных для проверки всех режимов работы программного продукта. Обычно, контрольный пример создается совместно заказчиком и исполнителем на основе реальных данных[59]. Для проведения всех видов тестирования производительности чаще всего создается так называемый генератор данных, который позволяет в автоматическом режиме создать достаточное количество данных, для достижения объективного результата при оценке производительности.
В ходе проведения тестирования составляется протокол тестирования, куда заносится информация о прохождении всех этапов и шагов тестирования и замечаниях полученных на испытаниях. Если результат тестирования отрицательный, проводится устранение недостатков и повторное тестирование[60].
Исследовательское тестирование (ad hoc тестирование - подвид функционального тестирования. Оно применяется в быстрорастущих проектах с гибкими методиками разработки, где нет четкой документации и требований. Исследовательское тестирование - высший пилотаж в тестирование программного обеспечения. Качественное тестирование доступно специалистам с высшей квалификацией и практически полностью зависит от исполнителя, его опыта, знаний (как в предметной области, так и в методиках тестирования), способности быстро проникать в сущность.
Нагрузочное тестирование - процесс анализа производительности тестируемой системы под воздействием нагрузок[61]. Цель нагрузочного тестирования- определить способность приложения к внешним нагрузкам. Обычно испытания проводятся в несколько этапов[62]:
1. Генерация тестовых сценариев. Для эффективного анализа сценарии должны быть наиболее близки к реальным сценариям использования. Важно понимать, что всегда возможны исключения, и даже самый подробный план тестирования может не покрыть отдельно взятого случая.
2. Разработка тестовой конфигурации. Имея сценарии тестирования, важно распределить порядок возрастания нагрузки. Для успешного анализа необходимо выделить критерии оценки производительности (скорость отклика, время обработки запроса и т.д.).
3. Проведение тестового испытания. При проведении тестов важно своевременно следить за исполнением сценариев и откликом тестируемой системы. Для эмуляции высоких нагрузок требуется серьезная аппаратная и программная инфраструктура. В некоторых случаях для удешевления работ применяются методы математического моделирования. За основу берутся данные, полученные при низких нагрузках, и аппроксимируются. Чем выше уровень моделируемой нагрузки, тем ниже точность оценки. Однако подобный способ существенно сокращает расходы[63].
Основная особенность автоматизированного тестирования - возможность быстрого проведения регрессионных тестов. Главными плюсами автоматизации является увеличение эффективности персонала, более раннее обнаружение дефектов и более высокое качество бизнес-процессов[64]. Эти преимущества компенсируются существенным недостатком: дороговизна, - из-за высокой цены на внедрение и поддержку автоматизации тестирования, около 50% компаний до сих пор применяют в основном ручное тестирование.
Любое приложение создается для того, чтобы им воспользовались. Удобство использования - важный качественный показатель программы. IT индустрия знает множество примеров, когда проекты взлетали после удачного исправления удобства использования[65]. Чем шире аудитория, тем важнее фактор юзабилити. Тестирование юзабилити включает в себя детальный анализ поведения пользователей. Для оценки эргономики важно иметь данные не только о скорости выполнения бизнес-задачи, но и об эмоциях пользователя, мимике лица, тембра голоса.
У любой системы есть предел нормального функционирования. При превышении предела система попадает в состояние стресса и значительно меняет свое поведение. Стресс тестирование проверяет работу приложения в условиях превышения предлов нормального функционирования. Особенно это важно для "критичных" программ: банковского ПО, программ авиационной отрасли, медицины. Стресс тестирование проводят не только на стадии разработки программного обеспечения, но и на протяжении всего цикла функционирования с целью получения и обработки данных поведения системы за долгий период времени[66].
Мобильные приложения представляет собой приложения, процесс тестирования которых значительно отличается от тестирования десктопных приложений[67]. При разработке мобильных приложений, а следовательно, и при тестировании, следует учитывать ряд определенных моментов[68]:
Еще одна важная вещь в процессе тестирования мобильных приложений — это тип приложения. Существует три основных типа мобильных приложений[70]: мобильные веб-приложения, нативные приложения и гибридные приложения.
Фактически, мобильным веб-приложением является веб-сайт, открытый в гаджете (смартфоне или планшете) с помощью мобильного браузера[71]. Достоинства мобильных веб-приложений:
Недостатки мобильных веб-приложений:
Нативное приложение — это приложение, разработанное специально для одной платформы (Android, iOS, BlackBerry)[72]. Достоинства нативных приложений:
Недостатки нативных приложений:
Гибридное приложение — это сочетание нативного и мобильного веб-приложений. Его можно определить как отображение содержимого мобильного сайта в формате приложения. Достоинства гибридных приложений[74]:
Недостатки гибридных приложений:
Процесс тестирования начинается до разработки и сразу после передачи разработчикам навигационной схемы и дизайна макетов экранов. Этих материалов более чем достаточно для начала процесса разработки. Но в навигационной схеме зачастую не хватает некоторых элементов: нет каких-либо экранов, на которые предусмотрен переход, не прописаны ограничения на поля ввода, к некоторым пунктам меню нет доступа не из одного экрана или меню, не отображаются ошибки и т.д. Еще одна существенная проблема – неочевидность предоставленной информации: анимация, работа в критических ситуациях, работа скрытого от пользователя функционала приложения.