УДК 621.389 А.А. Пивень, Ю.И. Скорин Харьковский национальный экономичес
УДК 621.389
А.А. Пивень, Ю.И. Скорин
Харьковский национальный экономический университет, Харьков.
ТЕСТИРОВАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Проводится анализ, и рассматриваются виды тестирования программного обеспечения, назначение
тестирования программного обеспечения, краткое описание развития тестирования программного обес-
печения с 1990-х годов, а также рассмотрена классификация тестирования программного обеспечения
по объекту тестирования. Проанализированы следующие виды тестирования: функциональное, регресси-
онное, стресс-тестирование, нагрузочное тестирование, тестирование интерфейса пользователя, тести-
рование безопастности, тестирование удобства использования, модульное тестирование и системное те-
стирование программного обеспечения.
Ключевые слова: программное обеспечение, надёжность, практичность, эффективность, мобиль-
ность, функциональность, верификация, качество, производительность, доступность программного обес-
печения, интеграционное и системное тестирование, тестирование стабильности и надежности.
Вступление
Существующие на сегодняшний день методы
тестирования программного обеспечения (ПО) не
позволяют однозначно и полностью выявить все
дефекты и установить корректность функциониро-
вания анализируемой программы, поэтому все су-
ществующие методы тестирования действуют в
рамках формального процесса проверки исследуе-
мого или разрабатываемого ПО.
Наиболее распространёнными проблемами,
возникающими в процессе разработки программно-
го обеспечения, считают недостаточную надеж-
ность. Самый сложный процесс — поиск и исправ-
ление ошибок в программных продуктах.
Существует множество подходов к решению
задачи тестирования и верификации программного
обеспечения, но эффективное тестирование слож-
ных программных продуктов — это процесс в твор-
ческий, не сводящийся к следованию строгим и чёт-
ким процедурам или созданию таковых.
С точки зрения ISO 9126, качество программ-
ных средств можно определить как совокупную ха-
рактеристику исследуемого программного обеспе-
чения с учётом следующих составляющих: надёж-
ность, сопровождаемость, практичность, эффектив-
ность, мобильность, функциональность.
В начале 1990-х в понятие «тестирование» ста-
ли включать планирование, проектирование, созда-
ние, поддержку и выполнение тестов и тестовых
окружений, и это означало переход от тестирования
к обеспечению качества, охватывающего весь цикл
разработки программного обеспечения.
В это время начинают появляться различные
программные инструменты для поддержки процесса
тестирования:
более продвинутые среды для автоматизации с
возможностью создания скриптов и генерации отчетов,
системы управления тестами, программное
обеспечение для проведения нагрузочного тестиро-
вания.
В середине 1990-х с развитием Интернета и
разработкой большого количества веб-приложений
особую популярность стало получать «гибкое те-
стирование» (по аналогии с гибкими методологиями
программирования).
В 2000-х появилось еще более широкое опре-
деление тестирования, когда в него было добавлено
понятие «оптимизация бизнес-технологий».
Оптимизация бизнес технологий направляет
развитие информационных технологий в соответ-
ствии с целями бизнеса.
Основной подход заключается в оценке и мак-
симизации значимости всех этапов жизненного цик-
ла разработки программного обеспечения для до-
стижения необходимого уровня качества, произво-
дительности, доступности [1].
Изложение основного материала
На данный момент существуют различные ви-
ды тестирования, а именно:
Регрессионное тестирование, которое прово-
дится с целью проверить, не влияют ли новые функ-
ции, улучшения и исправленные дефекты на суще-
ствующую функциональность продукта.
Функциональное тестирование, т.е. тестирова-
ние функций приложения на соответствие требова-
ниям. Оценка производится в соответствии с ожида-
емыми и полученными результатами, при условии,
что функции отрабатывали на различных значениях
[2].
Тестирование графического интерфейса поль-
зователя предполагает проверку соответствия при-
ложения требованиям к графическому интерфейсу.
Тестирование безопасности – оценка уязвимо-
сти программного обеспечения к различным атакам.
© А.А. Пивень, Ю. И. Скорин

Page 2
Інформаційні технології в технічних системах
57
Компьютерные системы очень часто являются ми-
шенью незаконного проникновения.
Под проникновением понимается широкий
диапазон действий: попытки хакеров проникнуть в
систему из спортивного интереса, месть рассержен-
ных служащих, взлом мошенниками для незаконной
наживы.
Тестирование безопасности проверяет факти-
ческую реакцию защитных механизмов, встроенных
в систему, на проникновение. В ходе тестирования
безопасности испытатель играет роль взломщика.
Ему разрешено все:
попытки узнать пароль с помощью внешних
средств;
атака системы с помощью специальных утилит,
анализирующих защиты;
подавление, ошеломление системы (в надежде,
что она откажется обслуживать других клиентов);
целенаправленное введение ошибок в надежде
проникнуть в систему в ходе восстановления;
просмотр несекретных данных в надежде найти
ключ для входа в систему.
Тестирование удобства пользования приложе-
нием определяет, соответствует ли приложение по-
требностям целевой аудитории и отвечает ли оно
требованиям пользователя.
При тестировании во внимание принимаются
следующие аспекты: однородность, логика и струк-
тура, навигация.
Если создаваемая нагрузка на систему превышает
нормальные сценарии её использования, с целью про-
тестировать время отклика системы на высоких или
пиковых нагрузках, такое тестирование называется
стресс-тестированием.
В этом случае нагрузка обычно столь высока,
что предсказуема ошибочная работа системы, одна-
ко не существует четкой границы между тем, когда
тестирование является нагрузочным и тем, когда
оно становится стресс-тестированием [3].
Стресс-тестирование – один из видов тестиро-
вания программного обеспечения, которое оценива-
ет надежность и устойчивость системы в условиях
превышения пределов нормального функциониро-
вания.
Стресс-тестирование особенно необходи-мо
для "критически важного" программного обеспече-
ния, однако также используется и для остального
ПО.
Обычно стресс-тестирование лучше обнаружи-
вает устойчивость, доступность и обработку исклю-
чений системой под большой нагрузкой, чем то, что
считается корректным поведением в нормальных
условиях.
В общем случае методология стресс-
тестирования основана на снятии и анализе показа-
телей производительности приложения при нагруз-
ках, значительно превышающих ожидаемые на ста-
дии сопровождения и несёт в себе цель определить
выносливость или устойчивость приложения на
случай всплеска активности по его использованию.
Необходимость стресс-тестирования диктуется
следующими факторами: большая часть всех систем
разрабатываются с допущением о функционирова-
нии в нормальном режиме и даже в случае, когда
допускается возможность увеличения нагрузки, ре-
альные объёмы её увеличения не принимаются во
внимание.
В случае SLA-контракта (соглашения об
уровне услуг) стоимость отказа системы в экстре-
мальных условиях может быть очень велика.
Обнаружение некоторых ошибок или дефектов
в функционировании системы не всегда возможно с
использованием других типов тестирования.
Тестирования, проведенного разработ-чиком,
может быть недостаточно для эмуляции условий,
при которых происходит отказ системы. Предпочти-
тельнее быть готовым к обработке экстремальных
условий системы, чем ожидать её отказа [4]. Тести-
рование стабильности или надежности – один из видов
тестирования программного обеспечения, целью кото-
рого является проверка работоспособности приложе-
ния при длительном тестировании со средним (ожида-
емым) уровнем нагрузки.
Перед тем как подвергать программное обеспе-
чение экстремальным нагрузкам стоит провести
проверку стабильности в предполагаемых условиях
работы, то есть погрузить продукт в полную рабо-
чую атмосферу.
При тестировании, длительность его проведения
не имеет первостепенного значения, основная задача
- наблюдая за потреблением ресурсов, выявить утеч-
ки памяти и проследить чтобы скорость обработки
данных и/или время отклика приложения в начале
теста и с течением времени не уменьшалась.
В противном случае вероятны сбои в работе
продукта и перезагрузки системы.
Часто в "домашних" условиях тестирование
стабильности совмещают со стресс-тестированием,
то есть проверяют не только стабильность, но и спо-
собность приложения переносить жесткие условия и
сильные нагрузки длительное время.
Тестирование совместимости — метод, основ-
ной целью которого является обеспечение каче-
ственной работы конечного продукта с другими
программами, операционными системами,. аппарат-
ными средствами и т.д.
Модульное
тестирование,
или
юнит-
тестирование — процесс, позволяющий проверить
на корректность отдельные модули исходного кода
программы.
Идея состоит в том, чтобы писать тесты для
каждой нетривиальной функции или метода. Это

Page 3
Системи обробки інформації, 2012, випуск 4 (102), том 1
ISSN 1681-7710
58
позволяет достаточно быстро проверить, не привело
ли очередное изменение кода к регрессии, то есть к
появлению ошибок в уже оттестированных местах
программы, а также облегчает обнаружение и
устранение таких ошибок.
Интеграционное тестирование — одна из фаз
тестирования программного обеспечения, при кото-
ром отдельные программные модули объединяются
и тестируются в группе.
Обычно интеграционное тестирование проводит-
ся после модульного тестирования и предшествует
системному тестированию.
Интеграционное тестирование в качестве вход-
ных данных использует модули, над которыми было
проведено модульное тестирование, группирует их в
более крупные множества, выполняет тесты, опреде-
лённые в плане тестирования для этих множеств, и
представляет их в качестве выходных данных и вход-
ных для последующего системного тестирования.
Целью интеграционного тестирования является
проверка соответствия проектируемых единиц
функциональным, приёмным и требованиям надеж-
ности.
Системное тестирование программного обес-
печения — это тестирование программного обеспе-
чения, выполняемое на полной, интегрированной
системе, с целью проверки соответствия системы
исходным требованиям.
Системное тестирование относится к методам
тестирования чёрного ящика, и, тем самым, не тре-
бует знаний о внутреннем устройстве системы.
Основной задачей системного тестирования яв-
ляется проверка как функциональных, так и не функ-
циональных требований к системе в целом. При этом
выявляются дефекты, такие как неверное использова-
ние ресурсов системы, непредусмотренные комбина-
ции данных пользовательского уровня, несовмести-
мость с окружением, непредусмотренные сценарии
использования, отсутствующая или неверная функци-
ональность, неудобство использования и т.д.
Для минимизации рисков, связанных с особен-
ностями поведения системы в той или иной среде,
во время тестирования рекомендуется использовать
окружение максимально приближенное к тому, на
которое будет установлен продукт после выдачи.
Можно выделить два подхода к системному те-
стированию: на базе требований, когда для каждого
требования пишутся тестовые случаи (test cases),
проверяющие выполнение данного требования; на
базе случаев использования (use case based) [5].
Выводы
C ростом важности информационных техноло-
гий для жизни общества возрастает цена ошибок в
программах.
В этих условиях на первый план выходят тех-
нологии и методы тестирования программного
обеспечения, которые позволяют своевременно вы-
явить и исправить эти ошибки. Качественное ПО -
это репутация фирмы, поэтому необходимо серьёзно
относиться к вопросам тестирования, это поможет
не только отстоять свои позиции на рынке но и за-
воевать новые.
Список литературы
1. http://en.wikipedia.org/wiki/Software_testing.
2 Синицын С. В., Налютин Н. Ю. Верификация про-
граммного обеспечения — М.: БИНОМ, 2008. — 368 с.
3. Калбертсон Роберт, Браун Крис, Кобб Гэри Быс-
трое тестирование. — М.: «Вильямс», 2002. — 374 с.
4. Биндер Роберт В.. Testing Object-Oriented Systems:
Objects, Patterns, and Tools. Addison-Wesley Professional.
стр. 45
5. Лайза Криспин, Джанет Грегори Гибкое тести-
рование: практическое руководство для тестировщиков
ПО и гибких команд = Agile Testing: A Practical Guide for
Testers and Agile Teams — М.: «Вильямс», 2010. — 464 с.
Надійшла до редколегії 23.03.2012
Рецензент: д-р техн. наук, доц. К.О. Метєшкін, Харківсь-
ка національна академія міського господарства, Харків.
ТЕСТУВАННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ
А.О. Півень, Ю.І. Скорін
Проводиться аналіз та розглядаються види тестування програмного забезпечення, призначення тестування про-
грамного забезпечення, стислий опис розвитку тестування програмного забезпечення з 1990х років, а також розгляне
на класифікація тестування програмного забезпечення по об’єкту тестування . Проаналізовані наступні види тесту-
вання: функціональне, регресивне тестування, стрес-тестування, навантажувальне тестування, тестування інтер-
фейсу користувача, тестування безпеки, тестування зручності користування, модульне тестування та системне те-
стування програмного забезпечення.
Ключові слова: програмне забезпечення, надійність, практичність, ефективність, мобільність, функціональність,
верифікація, якість, продуктивність, інтеграційне і системне тестування, тестування стабільності і надійності.
SOFTWARE TESTING
A.A. Pivem, Yu.I. Skorin
Analyzes, and discusses types of software testing, the purpose of software testing, a brief description of of software testing with the
1990s, as well as the classification of software testing facility testing. Analyzed the following types of testing: functional, regression,
stress testing, stress testing, user interface, testing, safety, usability testing, unit testing and system testing software.
Keywords: software, reliability, practicality, efficiency, mobility, functionality, quality, productivity, availability of soft-
ware, integration and system testing, testing of stability and reliability.