Файл: Отладка и тестирование программ: основные подходы и ограничения (Понятия тестирования и отладки и их классификация ).pdf

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

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

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

Добавлен: 23.04.2023

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

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

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

ВВЕДЕНИЕ

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

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

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

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

Задачами курсовой работы является:

  • Изучение теоретических основ тестирования и отладки программного обеспечения;
  • Изучение стратегий тестирования и отладки программного обеспечения.

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

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


Причиной многих несчастий разработчиков являются программные ошибки, из-за которых на их многострадальные головы сваливаются и давно просроченные проекты, и бессонные ночи. Ошибки могут сделать жизнь разработчиков действительно несчастной, потому что, достаточно нескольким ошибкам вкрасться в их программы, как заказчики прекращают этими программами пользоваться, а сами они могут потерять работу.[12]

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

1. ТЕОРЕТИЧЕСКИЕ ОСНОВЫ ТЕСТИРОВАНИЯ И ОТЛАДКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

1.1. Понятия тестирования и отладки и их классификация

Тестирование программного обеспечения (software testing) – это процесс анализа или эксплуатации программного обеспечения с целью выявления дефектов.[13]

Несмотря на всю простоту этого определения, в нем содержатся пункты, которые требуют дальнейших пояснений. Слово процесс (process) используется для того, чтобы подчеркнуть, что тестирование суть плановая, упорядоченная деятельность.[1] Этот момент очень важен, если выражена заинтересованность в быстрой разработке, ибо хорошо продуманный, систематический подход быстрее приводит к обнаружению программных ошибок, чем плохо спланированное тестирование, к тому же проводимое в спешке.

Тестирование – это выполнение программы с целью обнаружения факта наличия в программе ошибки.[3]

Отладка – определение места ошибки и внесение исправлений в программу.[12]

В русском языке словосочетание «обнаружить ошибку» может иметь, по крайней мере, два смысла: «обнаружить факт наличия ошибки» и «обнаружить место, где допущена ошибка».


Под тестированием понимается обнаружение ошибки в первом смысле, под отладкой – во втором.

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

Цель тестирования – обнаружение ошибок в программе.

Отметим важный психологический момент: цель тестирования – не доказать правильность программы, а обнаружить в ней ошибки. Если вы ставите себе задачей показать, что программа правильная и ошибок не содержит, то (на подсознательном уровне) и тесты будете подбирать такие, которые ошибок в программе не обнаружат.[7]

Отсюда следующее неожиданное рассуждение. Какой тест считать удачным? Если цель тестирования – найти в программе ошибку, то удачным должен считаться тест, который обнаруживает наличие в ней ошибки.[11] Это положение противоречит интуитивному представлению о тестировании и требует сознательного психологического настроя.

Тестирование можно классифицировать по очень большому количеству признаков, и практически в каждой серьёзной книге о тестировании автор показывает свой (безусловно имеющий право на существование) взгляд на этот вопрос.[7]

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

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

Негативные тесты не предполагают возникновения в приложении ошибки. Напротив – они предполагают, что верно работающее приложение даже в критической ситуации поведёт себя правильным образом (в примере с делением на ноль, например, отобразит сообщение «Делить на ноль запрещено»).[13]

Часто возникает вопрос о том, чем различаются «тип тестирования», «вид тестирования», «способ тестирования», «подход к тестированию» и т.д. и т.п. Если вас интересует строгий формальный ответ, посмотрите в направлении таких вещей как «таксономия110» и «таксон111», т. к. сам вопрос выходит за рамки тестирования как такового и относится уже к области науки.

Но исторически так сложилось, что как минимум «тип тестирования» (testing type) и «вид тестирования» (testing kind) давно стали синонимами.[15]

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

Этапы часто переплетаются, но все же разделены – отладка не занимается проверкой на существование ошибок, а в процессе тестирования не следует искать их точное месторасположение и причину.[16]

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

Приведем классификацию видов отладки.

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

Под удаленной отладкой понимается такой процесс отладки, когда отлаживаемое приложение запущено на машине пользователя, а отладочный инструмент – на машине разработчика.[4]

Удаленная отладка используется:

• при отладке приложения в условиях работы, которые нельзя воспроизвести на компьютере разработчика;

• при отладке ПО для отдельных устройств;

• при отладке кроссплатформенных приложений;

• при отладке распределенных систем.[2]

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


• не требуют дополнительных средств (визуальный просмотр кода);

• требуют только сравнительно небольших дополнений в исходном коде программного продукта (протоколирование, диагностика в процессе исполнения);

• требуют отдельных самостоятельных программных продуктов-инструментов (интерактивный отладчик, графические средства).[2]

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

• возможность просмотра текущих значений переменных;

• возможность изменения текущих значений переменных;

• возможность устанавливать (удалять) контрольные точки и условия остановки программы;

• кроссплатформенность;

• рефлексивность (возможность отладить отладчик им же самим);

• возможность удаленной работы;

• поддержка контекстно-зависимого графического вывода.[14]

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

1.2. Принципы и ограничения тестирования и отладки

Тестирование предусматривает «анализ» или «эксплуатацию» программного продукта. Тестовая деятельность, связанная с анализом результатов разработки программного обеспечения, называется статическим тестированием (static testing). Статическое тестирование предусматривает проверку программных кодов, сквозной контроль и проверку программы без запуска па машине, т.е. проверку за столом (desk checks).[11] В отличие от этого, тестовая деятельность, предусматривающая эксплуатацию программного продукта, носит название динамического тестирования (dynamic testing). Статическое и динамическое тестирование дополняют друг друга, и каждый из этих типов тестирования реализует собственный подход к выявлению ошибок.

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

1. Ошибки в программе есть. Необходимо исходить из того, что ошибки в программе есть. Иначе тестирование не будет иметь для вас никакого смысла, и отношение к нему будет соответственное.[6]

2. Тест – это совокупность исходных данных и ожидаемых результатов. Очень частая ошибка заключается в том, что на вход программе подаются данные, для которых заранее не известны правильные результаты.[8] Здесь в дело опять вступает психология. Человеческая психика устроена так, что наши глаза очень часто видят не то, что есть на самом деле, а то, что нам хочется видеть. Если заранее не зафиксировать ожидаемый результат, то всегда возникает искус объявить, что полученные результаты – это и есть то, что должно было получиться.