Файл: ОТЛАДКА И ТЕСТИРОВАНИЕ ПРОГРАММ:ОСНОВНЫЕ ПОДХОДЫ И ОГРАНИЧЕНИЯ.pdf

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

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

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

Добавлен: 30.06.2023

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

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

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

Введение

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

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

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


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

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

1. Сущность тестирования и отладки.

1.1 Описание процесса тестирования и его истории.

Для того чтобы лучше понимать суть вопроса нужно сначала разобратся что же такое тестирование ПО и какая у данного процесса история.

На протяжении десятилетий развития разработки ПО к вопросам тестирования и обеспечения качества подходили очень и очень по-разному. Можно выделить несколько основных «эпох тестирования».

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

В 70х годах фактически родились две фундаментальные идеи тестирования: тестирование сначала рассматривалось как процесс доказательства работоспособности программы в некоторых заданных условиях, а затем — строго наоборот: как процесс доказательства неработоспособности программы в некоторых заданных условиях. Это внутреннее противоречие не только не исчезло со временем, но и в наши дни многими авторами совершенно справедливо отмечается как две взаимодополняющие цели тестирования.


Отметим, что «процесс доказательства неработоспособности про-граммы» ценится чуть больше, т.к. не позволяет закрывать глаза на обнаруженные проблемы.

Итак, ещё раз самое важное, что тестирование «приобрело» в 70-е годы:

тестирование позволяет удостовериться, что программа соответствует требованиям;

тестирование позволяет определить условия, при которых программа ведёт себя некорректно.

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

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

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

В нулевые годы нынешнего века развитие тестирования продолжалось в контексте поиска всё новых и новых путей, методологий, техник и подходов к обес-печению качества. Серьёзное влияние на понимание тестирования оказало появ-ление гибких методологий разработки и таких подходов, как «разработка под управ-лением тестированием9 (test-driven development10, TDD)». Автоматизация тестирования уже воспринималась как обычная неотъемлемая часть большинства проек-тов, а также стали популярны идеи о том, что во главу процесса тестирования сле-дует ставить не соответствие программы требованиям, а её способность предоста-вить конечному пользователю возможность эффективно решать свои задачи.[1]

1.2 Тестирование программного обеспечения и его цели .


Прежде чем приступить к обсуждению процесса разработки программного обеспече­ния, дадим определения ряда основных терминов и понятий. По логике вещей лучше всего начать с определения, что собой представляет тестирование программного обеспечения. Тестирование программного обеспечения (software testing)— это процесс анализа или эксплуатации программного обеспечения с целью выявления дефектов. Несмотря на всю простоту этого определения, в нем содержатся пункты, которые требуют дальнейших пояснений. Слово процесс (process) используется для того, чтобы подчеркнуть, что тестирование суть плановая, упорядоченная деятельность. Этот момент очень важен, если мы заинтересованы в быстрой разработке, ибо хорошо продуманный, систематический подход быстрее приводит к обнаружению про­граммных ошибок, чем плохо спланированное тестирование, к тому же проводимое в спешке. Согласно этому определению, тестирование предусматривает "анализ" или "экс­плуатацию" программного продукта. Тестовая деятельность, связанная с анализом результатов разработки программного обеспечения, называется статическим тести­рованием (static testing). Статическое тестирование предусматривает проверку про­граммных кодов, сквозной контроль и проверку программы без запуска па машине, т.е. проверку за столом (desk checks). В отличие от этого, тестовая деятельность, предусмат­ривающая эксплуатацию программного продукта, носит название динамического тес­тирования (dynamic testing). Статическое и динамическое тестирование дополняют друг друга, и каждый из этих типов тестирования реализует собственный подход к выявлению ошибок. Последний пункт определения, требующий дополнительных пояснений — это по­нятие дефекта (bug). Говоря простыми словами, программная ошибка— ни что иное, как изъян в разработке программного продукта, который вызывает несоответствие ожидаемых результатов выполнения программного продукта и фактически получен­ных результатов. Дефект может возникнуть на стадии кодирования, на стадии фор­мулирования требований или на стадии проектирования, либо же его причина может крыться в некорректной конфигурации или данных. Дефектом может быть также что-то другое, что не соответствует ожиданиям заказчика и что может быть, а может и не быть определено в спецификации программного продукта.

Тестирование программного обеспечения — проверка соответствия между реальным и ожидаемым поведением программы, осуществляемая на конечном наборе тестов, выбранном определенным образом. В более широком смысле, тестирование — это одна из техник контроля качества, включающая в себя активности по планированию работ (Test Management), проектированию тестов (Test Design), выполнению тестирования (Test Execution) и анализу полученных результатов (Test Analysis).


Цели тестирования:

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

1.3 Виды и направления тестирования.

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

Итак, тестирование можно классифицировать:

  • По запуску кода на исполнение:
      • Статическое тестирование — без запуска.
      • Динамическое тестирование — с запуском.
  • По доступу к коду и архитектуре приложения:
      • Метод белого ящика — доступ к коду есть
      • Метод чёрного ящика — доступа к коду нет
      • Метод серого ящика — к части кода доступ есть, к части — нет
  • По степени автоматизации:
      • Ручное тестирование — тест кейсы выполняет человек.
      • Автоматизированное тестирование — тест кейсы частично или полностью выполняет специальное инструментальное средство.
  • По уровню детализации приложения (по уровню тестирования):
      • Модульное (компонентное) тестирование — проверяются отдельные небольшие части приложения
      • Интеграционное тестирование — проверяется взаимодействие между несколькими частями приложения.
      • Системное тестирование — приложение проверяется как единое целое.
  • По (убыванию) степени важности тестируемых функций (по уровню функционального тестирования):
      • Дымовое тестирование — проверка самой важной, самой ключевой функциональности, неработоспособность которой делает бессмысленной саму идею использования приложения.
      • Тестирование критического пути — проверка функциональности, используемой типичными пользователями в типичной повседневной деятельности.
      • Расширенное тестирование — проверка всей (остальной) функциональности, заявленной в требованиях.
      • По принципам работы с приложением:
      • Позитивное тестирование — все действия с приложением выполняются строго по инструкции без недопустимых действий, некорректных данных и т.д. Можно образно сказать, что приложение исследуется в «тепличных условиях».
      • Негативное тестирование — в работе с приложением выполняются (некорректные) операции и используются данные, потенциально приводящие к ошибкам (классика жанра — деление на ноль).[2]