Файл: Отладка и тестирование программ: Основные подходы и ограничения (Сущность тестирования и отладки. Методика выявления ошибок).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.03.2023

Просмотров: 54

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

ВВЕДЕНИЕ

Сегодня многие программисты и организации занимаются прикладным и системным программированием и созданием программного обеспечения для постоянно растущих потребностей пользователей. При этом значительная часть временных и финансовых ресурсов тратится на отладку и тестирование создаваемых ими приложений. Но тем не менее, несмотря на колоссальные затраты, конечный продукт очень часто вызывает много претензий у пользователя, и проблема качества продукта говорит нам о несомненной важности процессов отладки и тестирования программ на сегодняшний день. Этим обусловлена актуальность затрагиваемых в работе проблем. Причем многие «производители» до сих пор внятно даже не смогут дать точное определение тому, что же все-таки называется тестированием и отладкой. Некомпетентность в этом вопросе является одной из причин наводнения рынка некорректным и некачественным программным обеспечением (далее ПО).

Тестированием называется процесс, гарантирующий правильность функционирования программы и показывающий отсутствие ошибок в программном продукте. Можно заметить, что данное определение не совсем корректно и даже неправильно. Человек с некоторым опытом прикладного программирования знает, что полное отсутствие ошибок в программе выявить и показать невозможно. Более правильным будет определить процесс тестирования и отладки как – завершающий этап создания программного продукта, который заключается в выполнении программы с целью выявления сбоев и ошибок программного кода. Вместо того, чтобы гарантировать отсутствие ошибок в новой программе, разумней будет хотя бы продемонстрировать их наличие. Если приложение корректно работает при выполнении множества различных тестов, это придает некоторую уверенность, но еще не гарантирует отсутствие в ней ошибок. Это лишь показывает, что нам пока неизвестно, в каких случаях программа может дать сбой. Получается «парадокс тестирования». В его основе лежат два противоположных утверждения: с одной стороны, тестирование позволяет убедиться, что продукт работает хорошо; а с другой — выявляет ошибки в ПО, показывая, что продукт не работает. Вторая цель тестирования является более продуктивной с точки зрения улучшения качества, так как не позволяет игнорировать недостатки ПО.

Нереально внести в программу надежность в результате тестирования, она определяется правильностью этапов проектирования. Наилучшее Конечно лучшим решением здесь будет – с самого начала не делать ошибок в создаваемой программе. Но стопроцентный безошибочный результат практически невозможен. Вот и роль тестирования и отладки состоит как раз в том, чтобы определить местонахождение немногих ошибок, присутствующих в хорошо спроектированном программном продукте.


Тема работы: «Тестирование и отладка программного обеспечения». Отладка и тестирование тема очень хорошая и важная, какой бы язык программирования или платформа ни использовались. Именно на этой стадии разработчики сталкиваются со многими трудностями, что многих даже приводит в ярость. Отладка заставляет проводить над ней ночи напролет.

Ошибки в программах — это отличная практика. Они помогают нам узнать, как все это работает. Поиск багов и выявление ошибок дает нам ни с чем несравнимый опыт. Этим подтверждается практическая значимость выбранной темы. Разработчику следует найти их до того, как заказчик увидит результат вашей работы. А вот если ошибки в ваших программах находят заказчики, это совсем плохо.

Данная курсовая работа состоит из двух глав и приложений. В первой главе необходимо будет определить, что такое тестирование и отладка программ, что представляет собой сам процесс, какие приемы и способы существуют. Будут даны общие рекомендации по отладке приложений. Кроме этого речь пойдет о различных видах ошибок и способах их выявления. Во второй главе необходимо будет коснуться многих практических моментов на этапах отладки, на примере среды разработки приложений Delphi.

Целью настоящей работы является изучение основных подходов и ограничений в отладке и тестировании программ.

Данная цель может быть достигнута посредством следующих задач:

  • изучить литературные источники по теме;
  • определить суть тестирования и отладки;
  • изучить методику выявления ошибок;
  • провести практическое исследование на предмет отладки приложений в среде Delphi.

Предмет исследования – отладка и тестирование программ.

1. СУЩНОСТЬ ТЕСТИРОВАНИЯ И ОТЛАДКИ. МЕТОДИКА ВЫЯВЛЕНИЯ ОШИБОК

1.1 Тестирование и его виды

В первую очередь необходимо внести ясность – в чем же разница между тестированием и отладкой программы. Эти термины не всегда означают одно и то же, пусть даже большая часть программистов воспринимают их не как отдельные этапы разработки приложений. Важно разделять процесс тестирования и процесс отладки на два различных этапа работы над программой. Тестирование ставит задачу определения наличия ошибок, в то время как отладка служит для определения местоположения найденных ошибок и их устранения. Если цели этих двух этапов разработки программ различны, то используются соответственно и различные методика и инструментарий. Важнее всего при разработке и проектировании программы придерживаться некоторых правил и принципов защиты от ошибок. Для этого существуют некоторые проверенные способы, но о них позже, а пока немного истории.


Самые первые программные продукты начали разрабатывать в рамках программ научных исследований министерств обороны. Тестирование подобных систем проводилось строго формализовано с записью всех тестовых процедур, тестовых данных, полученных результатов. Тестирование было выделено в самостоятельный процесс, который имел место после завершения кодирования, и производилось все, обычно, тем же персоналом.

В 60-е начали уделять большое внимание «исчерпывающему» тестированию, которое проводилось с применением всех путей в коде или всех возможных входных данных. В этих условиях полное тестирование ПО невозможно из-за слишком большого количества возможных входных данных, существующего множество путей, а также сложности в нахождении проблемы в архитектуре и спецификациях. Именно по этим причинам «исчерпывающее» тестирование было признано невозможным и впоследствии отклонено.

В 70-е годы тестирование программное обеспечение обозначалось как «деятельность по подтверждению правильности работы ПО». В зарождавшейся программной инженерии верификация программное обеспечение обозначалась как «доказательство правильности». Данная концепция в целом была перспективна, но в работе она требовала много времени и не была комплексной. Комплексное тестирование – это контроль и испытание системы по отношению к исходным целям. Было принято решение, что доказывать правильность — неэффективно, разве что только - приемо-сдаточные испытания (поиск возможных ошибок, выполняя приложение в заданной реальной среде). Далее тестирование стало представляться, как выполнение программы с целью обнаружить ошибки, а не только продемонстрировать, что программа работает.

Уже в 80-е годы тестирование было дополнено таким понятием, как предупреждение ошибок. Одним из наиболее эффективных методов предупреждения ошибок является – проектирование тестов. Тогда и осознали необходимость методологии тестирования, а именно, что тестирование программы необходимо осуществлять на всем протяжении цикла разработки, и процесс этот должен быть управляемым. При этом проверяется не только спроектированная сборка программ, но и их код, архитектура, спецификации, а также и сами тесты. Все это позволит выявить проблемы в требованиях и архитектуре и тем самым значительно снизить сроки и средства на разработку приложений. Позднее начали появляться первые инструменты для автоматизации процесса тестирования. Поскольку ЭВМ более надежна и способна выполнить больше тестов. Со временем простейшие методы усложнялись и стали использоваться скриптовые сценарии для автоматизированного тестирования.


В 90-е годы тестирование программ дополнилось проектированием, планированием, созданием и поддержкой тестовых систем. Это начался переход на качественно новый уровень на всем цикле разработки. Появляются различные программные инструменты поддержки процесса тестирования: усовершенствованные автоматизированные среды с возможностью написания скриптовых сценариев и автоматического создания отчетов. Кроме этого начинают широко использоваться системы управления тестами и приложения для проведения нагрузочного тестирования. После, с развитием Интернет-технологий, и созданием множества веб-приложений очень популярным стало «гибкое тестирование».

В 2000-е годы появилось еще более широкое определение тестирования, когда в него было добавлено понятие «оптимизация бизнес-технологий» (BTO). BTO направляет развитие информационных технологий в соответствии с целями бизнеса. Основной подход заключается в оценке и максимизации значимости всех этапов жизненного цикла разработки для достижения необходимого уровня качества, производительности, доступности. [5]

1.2 Виды тестирования

В зависимости от преследуемых целей, основные виды тестирования программ, можно условно разделить на три группы:

Функциональные

Нефункциональные

Связанные с изменениями

Функциональные виды тестирования базируются на функционале и особенностях систем, а также взаимодействии с другими системами, и могут быть представлены на всех уровнях тестирования: модульном, интеграционном, системном, и приемочном.

Модульное тестирование – это контроль отдельного программного модуля, обычно в изолированной среде.

Интеграционное тестирование – когда отдельные программные модули объединяются и тестируются в группе.

Системное тестирование - тестирование программ, выполняемое на полной, интегрированной системе с целью проверки соответствия системы исходным требованиям.

Приемочное тестирование - способ проверки и контроля за тем, чтобы работа приложения отвечала функциональным, нефункциональным и другим важным требованиям. [1]

Все эти виды тестирования рассматривают внешнее поведение системы и подразделяются на три подвида: 1) функциональное тестирование; 2) тестирование безопасности; 3) тестирование взаимодействия. [3]

Функциональное тестирование рассматривает заранее указанное поведение и основывается на анализе спецификаций функциональности компонента или системы в целом. Эти тесты описываются в спецификациях и основываются на функциях, выполняемых системой, и могут проводиться на всех уровнях тестирования.


Преимуществом функционального тестирования является имитация фактического использования программы, а к недостаткам можно отнести возможность упущения логических ошибок в продукте и возможную вероятность избыточного тестирования. Широко используется и автоматизация функционального тестирования.

Тестирование безопасности - это способ тестирования, используемый для проверки безопасности системы, а также для анализа рисков, связанных с обеспечением целостного подхода к защите приложения, атак хакеров, вирусов, несанкционированного доступа к конфиденциальным данным.

Стратегия безопасности включает соответствие трем принципам: конфиденциальность, целостность и доступность.

Существует огромное множество видов атак и уязвимостей. После проведения полного цикла тестирования безопасности, никто не может быть на 100% уверенным, что система по-настоящему надежна в плане безопасности. Но проводить тестирование безопасности необходимо, хотя бы для того, чтобы значительно сократить вероятность несанкционированных проникновений, хищений информации и утраты важных данных.

Тестирование взаимодействия можно косвенно отнести к функциональному тестированию, проверяющему способность приложения взаимодействовать с одним и более компонентами. Сюда входит тестирование совместимости и интеграционное тестирование. Программа, хорошо взаимодействующая с другими компонентами и программами, может легко интегрироваться в другие системы, без особой потребности в дальнейших модификациях. При этом количество изменений и время, затрачиваемое на их выполнение, реально использовать для измерения возможности взаимодействия.

Нефункциональное тестирование основывается на тестах, необходимых для определения различных характеристик продукта, которые измеряются всевозможными величинами, т.е. показывает, как программа ведет себя в работе. Нефункциональное тестирование включает в себя целый ряд подвидов. Это тестирование производительности, установки, удобства, тест на отказ и конфигурацию.

Тестирование производительности или нагрузочное тестирование имитирует работу системы несколькими пользователями в распределенных ресурсах программы. Выявляются возможности и недостатки приложения при работе под нагрузкой и в стрессовых условиях – стабильная работа программ.

Тестирование это одна из важнейших задач по обеспечению качества программного обеспечения и служит она для нормальной инсталляции приложения, его настройки и обновления. Сейчас наибольшее распространение получила установка программ с помощью специальных программных модулей – инсталляторов, которые сами нуждаются в надлежащем тестировании.