Файл: Отладка и тестирование программ: основные подходы и ограничения (Сущность тестирования и отладки).pdf
Добавлен: 03.07.2023
Просмотров: 299
Скачиваний: 3
СОДЕРЖАНИЕ
1. Сущность тестирования и отладки. Методика выявления ошибок/
1.3 Сущность и методика отладки программ. Виды ошибок
2. Практика отладки и тестирования WEB-приложений в среде PHP
2.1 Отладка и тестирование приложения с помощью XDebug в IDE PhpStorm
2.2 Применение точек остановки
Введение
В наше время разработчики, организации и фирмы занимающиеся разработкой ПО применяют разные подходы. К сожалению, не все до конца осознают полезность тестирования и отладки, а особенно тестирования. Очень часто присутствует подход «самый лучший тестировщик – это пользователь». Таким подходом зачастую грешат небольшие фирмы. Крупные же фирмы, наоборот, вкладывают в тестирование и отладку огромное количество человеческих ресурсов и финансов. Но всё же, несмотря на это до конца не удаётся избежать возникновения ошибок в ПО и это вызывает много претензий у пользователей. Это происходит независимо от того внутренний это продукт или для массового использования. И даже там, где используется отладка и тестирование разработчики, на которых зачастую возложено и тестирование не могут дать внятного ответа что же такое отладка и тестирование ПО.
В данной работе я постараюсь разъяснить необходимость подхода разработки, в котором используется отладка и тестирование ПО на всех этапах жизненно цикла разработки и эксплуатации программного обеспечения.
Тестированием называют процесс, который даёт гарантии правильности функционирования программы и демонстрирующей отсутствие ошибок в продукте. Необходимо заметить, что такое определение не совсем верно и даже можно сказать неправильно. Человек с опытом разработки программирования знает, что нельзя гарантировать полное отсутствие ошибок, даже поле тестирования. Правильнее будет назвать процесс тестирования и отладки как – один из последних этапов при создании ПО, и он заключается в выполнении программы с целью обнаружения сбоев и ошибок в коде. Взамен гарантий отсутствия ошибок, наиболее правильно будет как минимум продемонстрировать их наличие. Если программное обеспечение проходит все тесты, то это придаёт уверенности в его работоспособности, но это не даёт гарантии в полном отсутствии ошибок. Это показывает, то, что нам на данный момент пока не известно при каких обстоятельствах и где программа может дать сбой. Мы получаем «парадокс тестирования». С одной стороны, тестирование позволяет убедиться, что ПО работает хорошо; а с другой - обнаруживает ошибки в нём, показывая, что ПО работает не совсем корректно. Вторая цель сточки зрения качества является более продуктивной, потому что не позволяет игнорировать недостатки в программном обеспечении.
Невозможно сделать программу надёжной в результате тестирования, она определяется правильностью этапов проектирования ПО. Наиболее правильным решением будет - с самого начала не допускать наличия ошибок в создаваемой программе. Но как уже говорилось ранее невозможно написать код и соответственно ПО совсем без ошибок. Исходя из этого роль тестирования в большей степени состоит в том, чтоб найти наибольшее количество и местонахождение ошибок в хорошо спроектированном продукте.
Тема работы: «Тестирование и отладка программного обеспечения». Отладка и тестирование тема очень важная, какой бы язык программирования или платформа ни использовались. Именно на этой стадии разработчики сталкиваются с большинством.
Ошибки в программах- это отличная практика. Они помогают узнать, как все работает. Поиск багов и выявление ошибок дает нам огромный опыт. Этим подтверждается практическая значимость выбранной темы. Разработчику следует найти их до того, как заказчик увидит работы. А если ошибки в программах находят заказчики, это очень плохо.
Данная курсовая работа состоит из двух глав и приложений. В первой главе необходимо будет определить, что такое тестирование и отладка программ, что представляет собой процесс, какие способы и приёмы существуют. Будут даны общие рекомендации по отладке ПО. Кроме этого, речь пойдет о различных видах ошибок и способах их обнаружения. Во второй главе необходимо будет коснуться практических моментов на этапах отладки, на примере среды разработки приложений PHP.
1. Сущность тестирования и отладки. Методика выявления ошибок/
1.1 Тестирование и его виды
В первую очередь необходимо внести ясность - в чем же разница между отладкой и тестированием. Эти два термина не всегда означают одно и то же, даже если большая часть разработчиков воспринимают их не как отдельные этапы создания приложений. Очень важно разделять процесс тестирования и процесс отладки ПО на различные этапы работы над ПО. Тестирование ПО ставит задачу поиска ошибок, а отладка служит для определения местоположения обнаруженных ошибок и их устранения. Если цели этих этапов создания программ отличаются, то соответственно используются и отличающаяся методика, и инструментарий. Важнее всего при разработке и проектировании ПО придерживаться правил и принципов защиты от ошибок. Для этого существуют проверенные способы, но о них позже, а сейчас немного истории.
Первые программные продукты начали создавать в рамках программ научных исследований министерств обороны. Тестирование подобных систем делалось строго формализовано с записью всех процедур тестирования, данных и полученных результатов. Тестирование было выделено в самостоятельный процесс, который имел место после завершения написания кода, и производилось все, обычно, тем же персоналом, который занимался разработкой.
В 60-е начали уделять внимание «исчерпывающему» тестированию, которое проводилось с применением всех путей в коде или всех возможных входных данных. В этих условиях полное тестирование программ невозможно из-за большого количества возможных входных данных, существующего множества путей, а также сложности в обнаружении проблемы в архитектуре и спецификациях. Именно по этим причинам «исчерпывающее» тестирование было признано невозможным и впоследствии от него отказались.
В 70-е годы тестирование программного обеспечения обозначалось как «деятельность по подтверждению правильности работы ПО». В зарождавшейся программной инженерии проверка программного обеспечения обозначалась как «доказательство правильности». Данная концепция в общем была перспективна, но в работе она требовала достаточно много времени и была не комплексной. Комплексное тестирование - это испытание и контроль системы по отношению к исходным целям. Было принято решение, что доказывать правильность – является неэффективным, разве что только - приемо-сдаточные испытания, а именно поиск возможных ошибок, выполняя приложение в заданной реальной среде. Дальше тестирование стало представляться, как выполнение программы с целью обнаружения ошибок, а не только продемонстрировать, что ПО работает.
Уже в 80-е годы тестирование было дополнено таким понятием, как предупреждение ошибок. Одним из самых эффективных методов предупреждения ошибок является - проектирование тестов. Тогда и поняли необходимость методологии тестирования, а именно, что тестирование программы необходимо осуществлять на всем протяжении разработки, и он должен быть управляемым. При этом проверяется не только спроектированная сборка ПО, но и их код, спецификации, архитектура и сами тесты. Все это позволит обнаруживать проблемы в архитектуре и требованиях и тем самым снизить сроки и средства на разработку ПО. Позже начали появляться первые инструменты для автоматизации тестирования. Так как ЭВМ более надежна и способна выполнить больше тестов, со временем простые методы усложнялись и стали использоваться скриптовые сценарии для автоматического тестирования.
В 90-е годы тестирование ПО дополнилось проектированием, планированием, созданием и поддержкой тестовых систем. Начался переход на новый уровень на всем цикле разработки. Появляются различные программные инструменты поддержки тестирования: усовершенствованные автоматизированные среды с возможностью написания сценариев и автоматического создания отчетов. Помимо этого, начинают широко использоваться системы управления тестами и ПО для проведения нагрузочного тестирования. Потом, с развитием Интернет-технологий, и созданием множества веб-приложений популярным стало «гибкое тестирование».
В 2000-е годы появляется еще более широкое определение тестирования, когда в него было добавлено понятие «оптимизация бизнес-технологий» (BTO). BTO направляет развитие информационных технологий в соответствии с целями бизнеса. Основной подход заключается в оценке и максимизации значимости всех этапов цикла разработки для достижения нужного уровня качества, производительности, доступности [9].
1.2 Виды тестирования
В зависимости от нужных целей, виды тестирования программ, можно условно разделить на три группы:
1)Функциональные
2)Нефункциональные
3)Регрессионное
Функциональные виды тестирования базируются на функционале и особенностях систем, а также взаимодействии со сторонними системами, и могут быть представлены на всех этапах тестирования: модульном, интеграционном, системном, и приемочном.
Модульное тестирование - это контроль отдельного программного модуля, как правило в изолированной среде.
Интеграционное тестирование - когда отдельные модули объединяются и тестируются в вместе.
Системное тестирование - тестирование программ, выполняемое на полной, интегрированной системе с целью проверки соответствия системы требованиям.
Приемочное тестирование - способ проверки и контроля за тем, чтобы работа приложения отвечала функциональным, нефункциональным и другим важным требованиям [1].
Все эти виды тестирования рассматривают внешнее поведение системы и подразделяются на три подвида:
1) функциональное тестирование;
2) тестирование безопасности;
3) тестирование взаимодействия [5].
Функциональное тестирование рассматривает заранее известное поведение и основывается на анализе спецификаций функциональности компонента или системы в общем. Данные тесты описываются в спецификациях и основываются на функциях, выполняемых системой, и могут проводиться на всех уровнях тестирования.
Преимуществом функционального тестирования является имитация использования программы. К недостаткам можно отнести возможность пропуска логических ошибок в продукте и вероятность избыточного тестирования. Так же широко используется автоматизация функционального тестирования.
Тестирование безопасности - способ тестирования, который используется для проверки безопасности системы, и для анализа рисков, связанных с обеспечением целостного подхода к защите приложения таких как атаки хакеров, вирусов, несанкционированного доступа к данным.
Стратегия безопасности включает соответствие трем принципам: конфиденциальность, целостность и доступность.
Существует большое количество видов атак и уязвимостей. После проведения полного цикла тестирования безопасности, никто не может быть полностью уверенным, что система по-настоящему безопасна. Но проводить тестирование безопасности необходимо, как минимум для того, чтобы значительно сократить вероятность несанкционированных проникновений, хищений информации и потери важных данных.
Тестирование взаимодействия можно отнести к функциональному тестированию, проверяющему способность ПО взаимодействовать с одним и более компонентами. Оно включает тестирование совместимости и интеграционное тестирование. ПО, хорошо взаимодействующее с другими компонентами и программами, может без проблем интегрироваться в другие системы, без большой потребности модификаций. При этом количество изменений и время, затрачиваемое на их выполнение, реально использовать для измерения возможностей взаимодействия.
Нефункциональное тестирование основывается на тестах, нужных для определения различных характеристик продукта, которые измеряются разными величинами, т.е. показывает, как ПО ведет себя при работе. Нефункциональное тестирование содержит ряд подвидов. Это тестирование производительности, установки, удобства (UI), тесты на отказ и конфигурацию.
Тестирование производительности или по-другому нагрузочное тестирование имитирует работу системы несколькими пользователями в распределенных ресурсах программы. Выявляются возможности и недостатки ПО при работе под большой нагрузкой и в стрессовых ситуациях.
Тестирование - одна из важнейших задач по обеспечению качества ПО и служит для нормальной установки приложения, его настройки и обновления. Сейчас наибольшее распространение получила установка программ с помощью специальных модулей - инсталляторов, которые сами нуждаются в тестировании.
Если инсталляторов нет, то установка производится самостоятельно согласно инструкциям, либо специальному плану установки; например, в распределенных системах.
Тестирование удобства пользования не имеет ничего общего с тестированием функциональности пользовательского интерфейса, оно лишь проводится на пользовательском интерфейсе, равно как и на многих других компонентах продукта. Это метод тестирования, определяющий удобство в использовании ПО, обучению, понятности для пользователей ПО в определённых условиях. При этом оценивается удобство использования программы исходя из требований производительности, эффективности, действий пользователя, запоминаемости, а также эмоциональная реакция человека после работы с продуктом.