Тестирование программного обеспечения является наиболее важной фазой жизненного цикла разработки программного обеспечения. Тестируемое программное обеспечение проходит различные фазы, которые, согласно исследованию, являются тестовым анализом: планирование тестирования; подготовка тестового примера данных, среды; выполнение теста; регистрация ошибок; отслеживание и закрытие;
В прошлом было проведено много исследований для оптимизации всего процесса тестирования с целью улучшения качества программного обеспечения за минимальное время. После оценки всех доступных процессов тестирования было обнаружено, что для разных типов приложений используются разные модели разработки, и для тестирования используются разные методы тестирования. На основе исследований, проведенных в ходе изучения этой статьи, было проанализировано, что каждая компания модифицирует свой процесс тестирования в соответствии с потребностями и выполняет тестирование в зависимости от критичности приложений. Наиболее важные компоненты каждого приложения должны быть тщательно протестированы, чтобы убедиться, что их функции, производительность и функции безопасности работают должным образом. В этой статье говорится об обеспечении качества всех типов программных приложений путем выполнения определенных типов методов тестирования и оптимизированных процессов тестирования программного обеспечения. В соответствии с исследованиями и проведенными исследованиями типы тестирования могут быть разделены на три основных метода тестирования: функциональное тестирование, тестирование производительности и безопасности, а также основной процесс тестирования программного обеспечения, называемый анализом, подготовкой, выполнением и закрытием.
Ключевые слова: функциональное тестирование, тестирование производительности и безопасности (FPS), анализ, планирование и подготовка, выполнение и закрытие (APEC), методы тестирования программного обеспечения, жизненный цикл тестирования программного обеспечения (STLC), жизненный цикл разработки программного обеспечения (SDLC).
Software testing is the most critical phase of the Software Development Life Cycle. Software under test goes through various phases, which as per the study are test analysis: test planning, test case data, environment preparation, test execution, bug logging and tracking and closure.
There is lot of research which has been done in past to optimize overall testing process with intent of improving quality of software in a minimum amount of time. After evaluating all available testing processes, it has been found that different development models are used for different types of applications and different testing techniques are performed to test the same. Based on the research during the study of this paper, it has been analyzed that each company modifies their testing process as per the needs and performs testing based on the criticality of the applications. The most critical components of each application have to be tested thoroughly to ensure their functional, performance and security features are behaving as expected. This paper talks about ensuring the quality of all types of software applications by performing certain types of testing techniques and optimized software testing processes. As per the study and research done testing types can be categorized under three major testing techniques which are Functional, Performance and Security Testing and major software testing process called as Analysis, Preparation and Execution and closure
Keywords: Functional, Performance and Security Testing (FPS), Analysis, Planning and Preparation, Execution and Closure (APEC), Software Testing Techniques, Software Testing Life Cycle (STLC), Software Development Life Cycle (SDLC).
Эта статья состоит из двух разделов. В первом разделе описывается оптимизированный процесс тестирования, в котором рассматриваются все этапы жизненного цикла тестирования, а во втором разделе рассматриваются типы тестирования.
Существует множество доступных типов тестирования, таких как тестирование «черного ящика», тестирование «белого ящика», тестирование на основе состояния, тестирование безопасности, тестирование на приемлемость, приемочное тестирование, системное тестирование, альфа- и бета-тестирование, а также тестирование на основе конфигурации, проверка и валидация.
Основываясь на проведенных исследованиях и исследованиях, эта статья классифицировала их всех по трем типам тестирования высокого уровня, а именно: Функциональность, Производительность и Безопасность (FPS). Последний раздел посвящен заключению, которое показывает актуальность нашего оптимизированного процесса тестирования программного обеспечения и FPS как основа для методов тестирования.
Оптимизированный процесс тестирования программного обеспечения
Этапы STLC связаны с обнаружением и исправлением любой ошибки с использованием различных методов тестирования программного обеспечения.
В этом разделе представлены обязательные этапы жизненного цикла тестирования, без которых жизненный цикл программного обеспечения не будет выполнен эффективно. Тестирование в основном дает критику или сравнение, которое определяет поведение системы в отношении ее спецификаций, механизмов, принципов, характеристик и соответствующих стандартов. Процесс тестирования программного обеспечения может быть настроен в соответствии с потребностями клиента или проекта. Процесс оптимизации, который можно использовать при тестировании программного обеспечения, — это анализ, планирование и подготовка, выполнение и закрытие. Процесс программного обеспечения обеспечивает поток системы и повышает гарантию продукта, который будет произведен.
Этап анализа тестирования
Первый этап, который является этапом анализа, является основным этапом процесса тестирования программного обеспечения. Эта фаза включает анализ функциональных и нефункциональных требований, например, бизнес-требования, функциональная документация и документ технической спецификации и т. д.
Сбор требований должен быть согласован с клиентами, чтобы идентифицировать фактические и ожидаемые результаты тестирования, которые в основном являются нефункциональными требованиями, такими как: удобство использования, масштабируемость, тестируемость, производительность и безопасность.
Все требования, которые не могут быть проверены из-за ограничений системы и среды тестирования, должны быть сообщены бизнес-команде.
На этом этапе команда тестирования рассматривает и анализирует требования и определяет тесты, которые должны быть выполнены, и устанавливает приоритеты для тестирования — членов команды.
Требования к среде тестирования включают требования к аппаратному и программному обеспечению, в соответствии с которыми необходимо тестировать необходимое программное обеспечение, и параллельно разработчики программного обеспечения начинают с планирования и разработки.
Этап планирования и подготовки теста
Этап подготовки теста включает подготовку плана тестирования, тестовый набор, данные теста и подготовку среды тестирования.
План тестирования является первым документом, который должен быть подготовлен, в котором описываются объем, цели, характеристики, подлежащие тестированию, функции, которые не должны тестироваться, типы тестирования, которые должны быть выполнены, роли и обязанности группы тестирования, критерии входа и выхода и предположения [1, с. 122].
Одновременно команды тестирования начинают готовить тестовые наборы и тестовые данные. Тестовый пример — это документ, в котором описаны шаги, необходимые для тестирования любой функциональности с ожидаемым и фактическим результатом. Если фактический результат не совпадает с ожидаемым, открывается ошибка. Для каждого требования подготавливаются положительные и отрицательные тестовые примеры, что обеспечивается матрицей прослеживаемости требований (RTM). RTM — это документ, который сопоставляет требования с тестовыми примерами, чтобы гарантировать, что тестирование выполнено на 100 %
Все действительные и недействительные наборы тестовых данных должны быть подготовлены для каждого тестового случая и подготовлен документ с тестовыми данными. Тестовые данные также генерируются на основе некоторых алгоритмов и инструментов. Подготовка тестового набора включает в себя различные этапы, которые начинаются с создания тестового набора, выбора тестового набора, оценки и определения приоритетов тестового набора [7, с. 57].
Эрик Д. Свайн предложил метод генерации тестовых случаев с использованием соответствующих диаграмм последовательности, а также определяет ограничения для определенных артефактов. В то же время методы генерации тестовых наборов полезны для выявления синхронизации и зависимости вариантов использования и сообщений, взаимодействия объектов и ошибок работы [8, с. 87].
Подготовка тестовой среды является одним из наиболее важных этапов, которые обычно готовятся отдельными средами обработки команды. После завершения части кода код проверяется инструментом управления конфигурацией, а затем готовится тестовая сборка, где тестировщики должны начать выполнение теста.
Этап выполнения теста
На этом этапе тестеры выполняют программное обеспечение в соответствии с контрольными примерами. Везде, где фактические и ожидаемые результаты не совпадают, тестировщик открывает ошибки и назначает их разработчикам.
Закрытие теста
Закрытие теста — это важный этап, который включает в себя все отчеты о тестировании, гарантирующие, что вся система, интеграция, приемочное тестирование пользователя пройдены, и принято решение о том, все ли требования проверены, и нет критической ошибки, ожидающей исправления ИЛИ проверки. Просмотр всех тестовых артефактов выполняется менеджером. Как только все артефакты рассмотрены и утверждены, выполняется выпуск программного обеспечения. Проводится дальнейший анализ первопричин, чтобы провести мозговой штурм по поводу того, что прошло хорошо, что не удалось, и областей улучшения. Существуют различные инструменты и методы анализа первопричин, по которым в прошлом было проведено много исследований.
Виды тестирования программного обеспечения
Существуют различные методы тестирования программного обеспечения согласно исследованию и изучению, такие как черный ящик, белый ящик, серый ящик, регрессия, надежность, удобство использования, производительность, модуль, система, интеграция, безопасность, дым, здравомыслие и объектно-ориентированное тестирование и т. д.
Невозможно выполнить все виды тестирования на программном обеспечении, поскольку для тестирования всегда выделяется определенное количество времени.
Функциональное тестирование очень распространено, и в прошлом было проведено немало исследований, поэтому только в редких случаях происходит сбой сайта из-за отсутствия функционального тестирования.
Эта раздел статьи будет посвящена основным методам тестирования, таким как функциональное [F], производительность [P] и тестирование безопасности [S]. Правильное сочетание тестирования должно быть включено со всех заголовков F, P и S.
Функциональность — это прежде всего аспект тестирования программного обеспечения, обеспечивающий качество программного обеспечения.
Проверка и валидация выполняются с использованием статического и динамического тестирования соответственно. Статическое тестирование включает в себя все виды проверок, проверок и прохождений. Динамическое тестирование или фактическая проверка включает все функциональные и нефункциональные типы тестирования.
Функциональное тестирование
Основным фактором качества в программном обеспечении является соответствие его требуемым функциональным возможностям и поведению. Функциональная часть программного обеспечения включает внешнее поведение, которое в основном определяет все требования пользователя. Разработка программного обеспечения высокого уровня производится таким образом, чтобы заказчик был удовлетворен на ранней стадии проектирования и разработки.
Существуют различные типы функционального тестирования, которые могут выполняться на различных уровнях тестирования, то есть модульное тестирование, интеграционное тестирование (тестирование сверху вниз и тестирование снизу вверх) и тестирование системы.
Существует много тестов, проводимых на различных уровнях тестирования, таких как тестирование черного ящика, тестирование белого ящика, тестирование серого ящика, регрессионное тестирование, нечеткое тестирование, тестирование варианта использования, предварительное тестирование, тестирование на дым., тестирование работоспособности, приемочное тестирование, альфа-тестирование, бета-тестирование и т. д.
Основные типы функционального тестирования кратко описаны в таблице 1:
Таблица 1
Описание типов функционального тестирования
№ |
Тип тестирования |
Описание |
1 |
Модульное тестирование |
Самый низкий уровень тестирования в основном выполняется разработчиком для тестирования модуля кода |
2 |
Интеграционное тестирование |
Это делается для проверки связи между различными модулями, чтобы убедиться, что данные правильно передаются между различными компонентами. Это делается по принципу «сверху вниз» или «снизу вверх». |
3 |
Тестирование системы |
Система тестируется в целом, чтобы убедиться, что она ведет себя или функционирует так, как задумано и указано в документе с требованиями. Регрессионное тестирование проводится, чтобы убедиться, что в системе ничего не сломано после исправления ошибок и тестирования ошибок. Общее тестирование Smoke and Sanity проводится, чтобы убедиться, что все ссылки и функции работают и среда стабильна. |
4 |
Тестирование белого ящика и черного ящика |
Тестирование черного ящика проводится для того, чтобы убедиться, что результат приложения является правильным для всех различных типов положительных и отрицательных входных данных. Существуют различные типы типов тестирования «черного ящика», такие как разделение по классам эквивалентности, анализ граничных значений, определение ошибок и т. д. Белый ящик имеет дело с внутренней обработкой кода, чтобы гарантировать отсутствие избыточного кода, написанного в программном обеспечении. Это включает в себя тестирование строки кода, программы, потока, логики, цикла, структуры, функций, тестирования взаимодействия классов и другого внутреннего тестирования программы. |
Тестирование производительности
Это один из типов нефункционального тестирования, который тестирует производительность программного обеспечения при всех благоприятных и неблагоприятных условиях. Включает в себя все связанные со временем параметры, такие как время загрузки, время доступа, время выполнения, время выполнения и т. д. Сюда также входят частота успеха, частота отказов, среднее время между отказами и общая надежность программного обеспечения.
Наиболее популярными типами тестирования, выполняемыми в тестировании производительности, являются стресс-тестирование и нагрузочное тестирование [9. с. 155].
Стресс-тестирование проводится, чтобы найти и понять верхние пределы пропускной способности в системе. Чрезвычайная нагрузка дается приложению для определения надежности системы.
Нагрузочное тестирование называется испытанием на выносливость. Это тестирование проводится, чтобы определить, может ли система выдерживать постоянную ожидаемую нагрузку.
Тестирование безопасности
Согласно текущим сценариям наиболее частыми являются атаки по времени и переполнению буфера. В объектно-ориентированных системах проблемы уровня проектирования включают обработку ошибок. Некоторые другие проблемы на уровне проектирования, такие как проблемы совместного использования и доверия, незащищенные каналы передачи данных, неправильные или отсутствующие механизмы контроля доступа, отсутствие аудита, неправильное ведение журналов и времени и ошибки порядка, также приводят к угрозам безопасности.
Программное обеспечение требуется для проверки функций безопасности, таких как строгая аутентификация, криптография и контроль доступа, а также некоторых других механизмов безопасности.
Гэри МакГроу предполагает, что уязвимость — это ошибка, которую злоумышленник может использовать [5, с. 45].
Тестирование безопасности программного обеспечения важно для защиты информации, услуг, навыков и ресурсов злоумышленников, а также стоимости потенциальных средств защиты [9, с. 243].
Тестирование безопасности в основном следует двум типам подходов:
Тестирование программного обеспечения относительно функциональных механизмов программного обеспечения;
Выполнение подхода, основанного на риске в соответствии с мышлением злоумышленников.
Тест на проникновение — это тестирование безопасности, в ходе которого оценщики пытаются обойти функции безопасности системы, основываясь на своем понимании структуры и реализации системы.
Еще один тип, который называется Fuzz Testing, был дан Бартоном Миллером из Висконсинского университета в 1988 году. Это методика тестирования программного обеспечения, при которой автоматически выдаются неверные, случайные и неожиданные данные для определения реакции программного обеспечения. Это хорошо для тестирования того программного обеспечения, где входные данные не имеют контроля над предопределенными данными. Этот метод тестирования используется только для поиска простых функций программного обеспечения, но не сложного программного кода.
Теперь, чтобы подвести итог вышеприведенным разделам тестирования, в таблице 2 приведены все типы тестирования.
Таблица 2
Описание всех типов тестирования
Тип тестирования |
Метод |
Функциональное тестирования |
Черный ящик, Белый ящик, тестирование всех пар, таблицы переходов состояний, таблицы решений, тестирование на основе моделей, тестирование на основе использования, предварительное тестирование, тестирование на основе спецификаций, регрессионное тестирование, тестирование дыма, тестирование работоспособности. |
Тестирование производительности |
Нагрузка, стресс, выдержка и тестирование конфигурации. |
Тестирование безопасности |
Статический анализатор, атака методом грубой силы, SQL-инъекция и межсайтовый скриптинг (XSS), тестирование на проникновение и тестирование Fuzz. |
Вывод
Целью данной работы было исследование различных этапов жизненного цикла тестирования программного обеспечения и различных типов тестирования. После анализа различных этапов жизненного цикла программного обеспечения выяснилось, что существуют четыре основных этапа жизненного цикла тестирования, которые можно отнести к категории «Анализ, планирование и подготовка, выполнение и закрытие». В данном документе предлагается общий жизненный цикл тестирования программного обеспечения — АТЭС.
Поскольку всегда есть область применения, в дополнение к этой статье можно провести исследование в области тестирования программного обеспечения, чтобы предложить общую среду и методы тестирования для поддержки функционального тестирования, тестирования производительности и безопасности, для объектно-ориентированной среды разработки и других платформ, использующих некоторые алгоритмы без использование инструментов в минимальные сроки.
Литература:
- Прессман, Р. С. Программная инженерия: практический подход / Р. С. Прессман. — 4-е изд. — 1997. — Текст: электронный.
- Соммервилль, М. Разработка программного обеспечения / М. Соммервилль. — 5-е изд. — 1998. — Текст: электронный
- Майерс, Г. Д. Искусство тестирования программного обеспечения / Г. Д. Майерс. — Текст: электронный.
- МакГроу, Г. Программа защиты программного обеспечения / Г. МакГроу. — 2004. — Текст: электронный.
- МакГроу, Г. Анализ рисков в разработке программного обеспечения / Г. МакГроу. — 2004. — Текст: электронный.
- Бертолино, А. Практический подход к выводу интеграционных тестов на основе UML / А. Бертолино, Ф. Басаньери. — Текст: электронный // В материалах четвертой Международной недели качества программного обеспечения в Европе и Международной недели качества Интернета в Европе (QWE). — Брюссель, Бельгия:, 2000.
- Богдады, П. Предлагаемый метод генерации тестовых наборов на основе диаграмм действий / П. Богдады, Н. Бадр, Л. Хашем, М. Толба. — 2011. — Текст: электронный.
- Свайн, Э. Д. Генерация тестовых примеров на основе сценария использования и последовательности / Э. Д. Свайн. — 2010. — Текст: электронный.
- Бейзер, Б. Методы тестирования программного обеспечения. Технологическое созревание и исследовательские стратегии / Б. Бейзер. — 1990. — Текст: электронный.