Файл: ОТЛАДКА И ТЕСТИРОВАНИЕ ПРОГРАММ:ОСНОВНЫЕ ПОДХОДЫ И ОГРАНИЧЕНИЯ.pdf
Добавлен: 30.06.2023
Просмотров: 134
Скачиваний: 3
СОДЕРЖАНИЕ
1. Сущность тестирования и отладки.
1.1 Описание процесса тестирования и его истории.
1.2 Тестирование программного обеспечения и его цели .
1.3 Виды и направления тестирования.
1.4 Сущность и методика отладки программ. Виды ошибок
2. Практика отладки python приложений.
2.1 Два важных инструмента в процессе тестирования.
2.2 Применение точек остановки и модификация локальных переменных
Тестирование программного обеспечения (software testing)- это процесс анализа или эксплуатации программного обеспечения с целью выявления дефектов.
Несмотря на всю простоту этого определения, в нем содержатся пункты, которые требуют дальнейших пояснений. Слово процесс (process) используется для того, чтобы подчеркнуть, что тестирование суть плановая, упорядоченная деятельность. Этот момент очень важен, если мы заинтересованы в быстрой разработке, ибо хорошо продуманный, систематический подход быстрее приводит к обнаружению программных ошибок, чем плохо спланированное тестирование, к тому же проводимое в спешке.
Согласно этому определению, тестирование предусматривает "анализ" или "эксплуатацию" программного продукта. Тестовая деятельность, связанная с анализом результатов разработки программного обеспечения, называется статическим тестированием (static testing). Статическое тестирование предусматривает проверку программных кодов, сквозной контроль и проверку программы без запуска па машине, т.е. проверку за столом (desk checks). В отличие от этого, тестовая деятельность, предусматривающая эксплуатацию программного продукта, носит название динамического тестирования (dynamic testing). Статическое и динамическое тестирование дополняют друг друга, и каждый из этих типов тестирования реализует собственный подход к выявлению ошибок.
Последний пункт определения, требующий дополнительных пояснений - это понятие дефекта (bug). Говоря простыми словами, программная ошибка - не что иное, как изъян в разработке программного продукта, который вызывает несоответствие ожидаемых результатов выполнения программного продукта и фактически полученных результатов. Дефект может возникнуть на стадии кодирования, на стадии формулирования требований или на стадии проектирования, либо же его причина может крыться в некорректной конфигурации или данных. Дефектом может быть также что-то другое, что не соответствует ожиданиям заказчика и что может быть, а может и не быть определено в спецификации программного продукта. Более подробное описание терминологии дефектов приводится во врезке.
Отладка - это процесс выявления источников отказов, т.е. ошибок, и внесение в программу соответствующих исправлений.
Теперь стоит более подробно рассказать о видах тестирования программного обеспечения,их чаще всего делят на три группы:
Функциональные виды тестирования
Нефункциональные виды тестирования
Связанные с изменениями виды тестирования
Функциональные тесты сами по себе основываются на функциях, особенностях и на взаимодействии с другими системами. Стоит заметить что всех их можно представить на абсолютно всех уровнях тестирования,в частности на :
компонентном или модульном (Component/Unit testing)
интеграционном (Integration testing),
системном (System testing)
приемочном (Acceptance testing).
Теперь необходимо огласить список большинства распространенных типов функциональных тестов:
Функциональное тестирование (Functional testing)
Тестирование безопасности (Security and Access Control Testing)
Тестирование взаимодействия (Interoperability Testing)
Функциональное тестирование базируется на проведении анализа спецификаций функциональности компонента или самой системы в целом и затрагивает предопределенное в приложении поведение .
Функциональные тесты основаны на выполняемых системой функциях ,сами тесты возможно проводить на всех уровнях тестирования . Обычно эти функции уже описаны в функциональных спецификациях, в требованиях а так же виде случаев использования системы (use cases).
Тестирование безопасности - это стратегия тестирования, используемая для проверки безопасности системы, а также для анализа рисков, связанных с обеспечением целостного подхода к защите приложения, атак хакеров, вирусов, несанкционированного доступа к конфиденциальным данным.
Сам процесс тестирования безопасности представляет из себя проверку тестируемого программного обеспечения на наличие уязвимостей,к примеру:
XSS (Cross-Site Scripting) – к примеру тот случай когда злоумышленники могут попытаться украсть ваши куки, перенаправить вас на сайт, где произойдет более серьезная атака, загрузить в память какой-либо вредоносный объект и т.д., всего навсего разместив вредоносный скрипт у вас на сайте;
XSRF / CSRF (Request Forgery) пример когда атакующий добавляет необходимый код в электронное письмо или выкладывает на веб-сайт, таким образом, что при загрузке страницы осуществляется запрос, выполняющий вредоносный код;
Code injections (SQL, PHP, ASP и т.д.) – это тот тип атаки, при котором система позволит выполнить некоторое действие, которое не планировалось разработчиком. Например, при аутентификации пользователя при вводе в поля формы логина и пароля определенных значений;
Server-Side Includes (SSI) Injection – тот случай когда при определнных обстоятельствах становиться возможным выполнение команд на сервере используя дыры в безопасности написанного программного обеспечения .
Authorization Bypass – обход авторизации , к примеру тот случай когда конфединциальная информация одного пользователя становятся доступна другому пользователю с помощью простой подстановки другого идентификатора в url .
Тестирование взаимодействия (Interoperability Testing) – это вид тестирования которое проверяет способно ли приложение взаимодействовать другими компонентами или системами. Тестирование взаимодействия включает в себя тестирование совместимостии интеграционное тестирование.
Нефункциональное тестирование представляет из себя ряд тестов, которые исключительно важны в процессе определения характеристик программного обеспечения. Говоря просты языком это тестирование того, "Как" программное обеспечение работает,что может выдержать а что не может.Чуть ниже приведены основные типы нефункциональных тестов:
Все виды тестов которые напавлены на тестирование производительности
нагрузочное тестирование (Performance and Load Testing)
стрессовое тестирование (Stress Testing)
тестирование стабильности или надежности (Stability / Reliability Testing)
объемное тестирование (Volume Testing)
Тестирование установки (Installation testing)
Тестирование удобства пользования (Usability Testing)
Тестирование на отказ и восстановление (Failover and Recovery Testing)
Конфигурационное тестирование (Configuration Testing)
Для наилучшего понимания предмета стоит описать все виды нефункционального тестирования ,и начать стоит с описания тестов направленных на тестирование производельности.
Нагрузочное тестирование – представляет из себя серию автоматизированных тестов которые имитируют работу определенного количества пользователей ,или же нагрузка системой определенным( средним,расчетным) количеством заданий для обработки .
Стрессовое тестирование – позволяет произвести проверку того насколько приложение и система в целом готовы к условиям стресса и максимальных нагрузок,а также произвести оценку системы к регенерации(к возвращению к нормальному состоянию после прекращения воздействия стресса). Примером стресса в данном случае может служить повышение интенсивности запросов до запредельных значений или аварийное изменение конфигурации сервера. Еще одной из задач во время проведения стрессового тестирования может быть оценка деградации производительности в условиях стресса.
Тестирование стабильности или надежности – задача этого типа тестов является проверка работоспособности приложения при длительном (многочасовом) тестировании со средним уровнем нагрузки. Время выполнения операций может играть в данном виде тестирования второстепенную роль. При этом на первое место выходит отсутствие утечек памяти, перезапусков серверов под нагрузкой и другие аспекты влияющие именно на стабильность работы.
Объемное тестирование - задачей объемного тестирования является получение оценки производительности при увеличении объемов данных в базе данных приложения, при выполнении этих типов тестов происходит сразу несколько вещей :
измерение времени выполнения выбранных операций при определенных интенсивностях выполнения этих операций
может производиться определение количества пользователей, одновременно работающих с приложением
Тестирование установки (Installation testing) – цель этих тестов - проверка успешной установки и настройки, а также возможность обновления или удаления программного обеспечения.В настоящее время очень распрастранен метод установки программного обеспечения с помощи специальных программ(инсталляторов), работа которых сама по себе требует отдельного тестирования,но стоит учесть что в реальных условиях инсталляторов может и не быть , в этом случае придется самостоятельно выполнять установку программного обеспечения, используя документацию в виде инструкций или readme файлов, шаг за шагом описывающих все необходимые действия и проверки.
Тестирование удобства пользования – в это случае производятся тесты которые направленны на определение уровня удобства использования, обучаемости, понятности и привлекательности для пользователей разрабатываемого продукта.
Тестирование на отказ и восстановление (Failover and Recovery Testing) : в этом типе тестирования выполняется проверка тестируемого продукта на способность противостоять и успешно восстанавится после возможных сбоев, которые могут возникнуть в связи с ошибками программного обеспечения, отказами оборудования или проблемами связи (например, отказ сети). Целью данного вида тестирования является проверка систем восстановления (или дублирующих основной функционал систем), которые, в случае возникновения сбоев, обеспечат сохранность и целостность данных тестируемого продукта.
Конфигурационное тестирование (Configuration Testing) —в этом случае тесты которые направленны на проверку работы программного обеспечения при различных конфигурациях системы (заявленных платформах, поддерживаемых драйверах, при различных конфигурациях компьютеров и т.д.).
Связанные с изменениями виды тестирования.
После проведения необходимых изменений, таких как исправление бага/дефекта, программное обеспечение должно быть перетестировано для подтверждения того факта, что проблема была действительно решена.
Ниже перечислены виды тестирования, которые необходимо проводить после установки программного обеспечения, для подтверждения работоспособности приложения или правильности осуществленного исправления дефекта:
Дымовое тестирование (Smoke Testing)
Регрессионное тестирование (Regression Testing)
Тестирование сборки (Build Verification Test)
Санитарное тестирование или проверка согласованности/исправности (Sanity Testing)
Дымовое тестирование (Smoke Testing) – этот вид тестирования рассматривается как короткий цикл тестов, выполняемый для подтверждения того, что после сборки кода (нового или исправленного) устанавливаемое приложение, стартует и выполняет основные функции. Вывод о работоспособности основных функций делается на основании результатов поверхностного тестирования наиболее важных модулей приложения на предмет возможности выполнения требуемых задач и наличия быстронаходимых критических и блокирующих дефектов.
Регрессионное тестирование (Regression Testing) - это вид тестирования направленный на проверку изменений, сделанных в приложении или окружающей среде (починка дефекта, слияние кода, миграция на другую операционную систему, базу данных, веб сервер или сервер приложения), для подтверждения того факта, что существующая ранее функциональность работает как и прежде.
Тестирование сборки (Build Verification Test) - тестирование направленное на определение соответствия, выпущенной версии, критериям качества для начала тестирования. По своим целям является аналогом Дымового Тестирования, направленного на приемку новой версии в дальнейшее тестирование или эксплуатацию. Вглубь оно может проникать дальше, в зависимости от требований к качеству выпущенной версии.
Санитарное тестирование или проверка согласованности/исправности (Sanity Testing) - это узконаправленное тестирование достаточное для доказательства того, что конкретная функция работает согласно заявленным в спецификации требованиям. Является подмножеством регрессионного тестирования. Используется для определения работоспособности определенной части приложения после изменений произведенных в ней или окружающей среде. Обычно выполняется вручную.
1.4 Сущность и методика отладки программ. Виды ошибок
В целом все возникающие ошибки в работе программного обеспеченипя можно классифицировать ,и классифицировать их можно следующим характеристикам:
Ошибки возникающие во время разработки ПО;
Синтаксические ошибки
Предупреждения (warnings) компилятора
Ошибки времени исполнения(run-time errors)