Файл: Отладка и тестирование программ: основные подходы и ограничени.pdf
Добавлен: 29.03.2023
Просмотров: 230
Скачиваний: 2
- Тестирование цепочек
Тестирование цепочек подразумевает проверку группы модулей, составляющих функцию программного продукта. Эти действия известны еще как модульное тестирование, с его помощью обеспечивается адекватное тестирование компонентов системы. Данное тестирование выявляет, достаточно ли надежно работают модули для того, чтобы образовать единый модуль, и выдает ли модуль программного продукта точные и согласующиеся результаты.
- Исследование покрытия
При выборе инструмента для исследования покрытия важно, чтобы группа тестирования проанализировала тип покрытия, необходимый для приложения. Исследование покрытия можно провести с помощью различных технологий. Метод покрытия операторов часто называют С1, что также означает покрытие узлов. Эти измерения показывают, был ли проверен каждый исполняемый оператор. Данный метод тестирования обычно использует программу протоколирования (profiler) производительности.
- Покрытие решений
Метод покрытия решений направлен на определение (в процентном соотношении) всех возможных исходов решений, которые были проверены с помощью комплекта тестовых процедур. Метод покрытия решений иногда относят к покрытию ветвей и называют С2. Он требует: чтобы каждая точка входа и выхода в программе была достигнута хотя бы единожды, чтобы все возможные условия для решений в программе были проверены не менее одного раза и чтобы каждое решение в программе хотя бы единожды было протестировано при использовании всех возможных исходов.
- Покрытие условий
Покрытие условий похоже на покрытие решений. Оно направлено на проверку точности истинных или ложных результатов каждого логического выражения. Этот метод включает в себя тесты, которые проверяют выражения независимо друг от друга. Результаты этих проверок аналогичны тем, что получают при применении метода покрытия решений, за исключением того, что метод покрытия решений более чувствителен к управляющей логике программы.
-
-
Метод «черного ящика»
-
Тестирование методом «черного ящика» [7], также известное как тестирование, основанное на спецификации или тестирование поведения – техника тестирования, основанная на работе исключительно с внешними интерфейсами тестируемой системы.
Согласно ISTQB (Международный совет по тестированию программного обеспечения) [8]:
- тестирование черного ящика – это: метод (стратегия) тестирования функционального поведения объекта (программы) с точки зрения внешнего мира, при котором не используется знание о внутреннем устройстве тестируемого объекта;
- тестирование, как функциональное, так и нефункциональное, не предполагающее знания внутреннего устройства компонента или системы;
- тест-дизайн, основанный на технике черного ящика – процедура написания или выбора тест-кейсов на основе анализа функциональной или нефункциональной спецификации компонента или системы без знания ее внутреннего устройства.
Почему именно «черный ящик»? Тестируемая программа для тестировщика – как черный непрозрачный ящик, содержания которого он не видит. Целью этой техники является поиск ошибок в таких категориях:
- неправильно реализованные или недостающие функции;
- ошибки интерфейса;
- ошибки в структурах данных или организации доступа к внешним базам данных;
- ошибки поведения или недостаточная производительности системы.
Пример:
Тестировщик проводит тестирование веб-сайта, не зная особенностей его реализации, используя только предусмотренные разработчиком поля ввода и кнопки. Источник ожидаемого результата – спецификация.
Поскольку это тип тестирования, по определению он может включать другие его виды. Тестирование черного ящика может быть как функциональным, так и нефункциональным. Функциональное тестирование предполагает проверку работы функций системы, а нефункциональное – соответственно, общие характеристики нашей программы.
Техника черного ящика применима на всех уровнях тестирования (от модульного до приемочного), для которых существует спецификация. Например, при осуществлении системного или интеграционного тестирования, требования или функциональная спецификация будут основой для написания тест-кейсов.
Техники тест-дизайна, основанные на использования черного ящика, включают:
- классы эквивалентности;
- анализ граничных значений;
- таблицы решений;
- диаграммы изменения состояния;
- тестирование всех пар.
Преимущества:
- тестирование производится с позиции конечного пользователя и может помочь обнаружить неточности и противоречия в спецификации;
- тестировщику нет необходимости знать языки программирования и углубляться в особенности реализации программы;
- тестирование может производиться специалистами, независимыми от отдела разработки, что помогает избежать предвзятого отношения;
- можно начинать писать тест-кейсы, как только готова спецификация.
Недостатки:
- тестируется только очень ограниченное количество путей выполнения программы;
- без четкой спецификации (а это скорее реальность на многих проектах) достаточно трудно составить эффективные тест-кейсы;
- некоторые тесты могут оказаться избыточными, если они уже были проведены разработчиком на уровне модульного тестирования.
- Метод отладки программы
Для получения информации об ошибке можно выполнить добавочные тесты или использовать специальные методы и средства:
- Отладочный вывод;
- Интегрированные средства отладки;
- Независимые отладчики.
Отладочный вывод - это метод, который требует включения в программу дополнительного отладочного вывода в узловых точках. Узловыми считают точки алгоритма,в которых основные переменные программы меняют свои значения.
Данный метод не очень эффективен и в настоящее время практически не используется, так как в сложных случаях в процессе отладки может потребоваться вывод большого количества значений многих переменных, которые выводятся при каждом изменении. Кроме того, внесение в программы дополнительных операторов может привести к изменению проявления ошибки, что нежелательно.
Интегрированные средства отладки позволяют:
- Выполнять программу по шагам, при чем, как с заходом в подпрограммы, так и выполняя их целиком;
- Предусматривать точки останова;
- Выполнять программу до оператора, указанного курсором;
- Отображать содержимое любых переменных при пошаговом выполнении;
- Отслеживать поток сообщений и т.п.
Применять интегрированные средства в рамках среды достаточно просто. Используют разные приемы в зависимости от проявлений ошибки. Если получено сообщение об ошибке, то сначала уточняют, при выполнении какого оператора программы оно получено, Для этого устанавливают точку останова в начало фрагмента, в котором проявляется ошибка, и выполняют операторы в пошаговом режиме до появления ошибки.
Для уточнения появления ошибки возможен анализ машинных кодов, флагов и представления программы и значений памяти в 16-ричном виде.
При отладке программ [9] иногда используют специальные программы - отладчики, которые позволяют выполнить любой фрагмент программы в пошаговом режиме и проверить содержимое интересующих программиста переменных. Как правило, такие отладчики позволяют отлаживать программу только в машинных командах, представленных в 16-ричном коде.
Несмотря на то, что при разработке через тестирование требуется написать большее количество кода, общее время, затраченное на разработку, обычно оказывается меньше. Тесты защищают от ошибок. Поэтому время, затрачиваемое на отладку, снижается многократно. Большое количество тестов помогает уменьшить количество ошибок в коде. Устранение дефектов на более раннем этапе разработки, препятствует появлению хронических и дорогостоящих ошибок, приводящих к длительной и утомительной отладке в дальнейшем.
Тесты позволяют производить рефакторинг кода без риска его испортить. При внесении изменений в хорошо протестированный код риск появления новых ошибок значительно ниже. Если новая функциональность приводит к ошибкам, тесты, если они, конечно, есть, сразу же это покажут. При работе с кодом, на который нет тестов, ошибку можно обнаружить спустя значительное время, когда с кодом работать будет намного сложнее. Хорошо протестированный код легко переносит рефакторинг. Уверенность в том, что изменения не нарушит существующую функциональность, придает уверенность разработчикам и увеличивает эффективность их работы. Если существующий код хорошо покрыт тестами, разработчики будут чувствовать себя намного свободнее при внесении архитектурных решений, которые призваны улучшить дизайн кода.
-
Практическое применение на основе информационной системы
Для проведения тестирования и отладки была выбрана разработанная программа для шифрования/дешифрования текстовых файлов, написанная на языке программирования C# (рисунок 1).
Рисунок 1 - Форма программы шифрования/дешифрования
Программа включает одну форму, на которой расположены необходимые инструменты: поля для ввода ключа; поля для отображения используемых файлов в процессе работы программы; кнопки, выполняющие основные функции (выбор файла для задач, выполнение процесса шифрования/дешифрования файла (рисунок 2), сохранение выполненной задачи в файл).
Рисунок 2 - Результат шифрования/дешифрования текстовых документов
Функционал программы состоит в преобразовании данных файлов в двоичную систему, процесс шифрования/дешифрования над ними и сохранение полученных результатов.
Целью тестирования является повышение вероятности того, что приложение будет работать правильно при любых обстоятельствах.
Целью отладки является анализ причины появления ошибки и устранение ее на этапе разработки.
Процесс тестирования разделен на этапы:
- Проектирование тестов - разработка стратегии тестирования, разработка планов тестирования, разработка и документирование тестовых кейсов;
- Выполнение тестового цикла - анализ спецификаций и кода, кодирование и прогон тестовых кейсов;
- Улучшение тестирования программного обеспечения [11] - проведение исследований по результатам выполненного тестирования с получением информации по покрытию тестовыми кейсами исходного коа или функциональности программы; разработка рекомендаций по улучшению тестирования;
- Улучшение качества программного продукта - выдача рекомендаций по улучшению программного обеспечения в целом или с целью соответствия поставленным требованиям и задачам;
- Оптимизация тестирования программного обеспечения [10] - разработка программ, позволяющих в автоматическом режиме обрабатывать исходные коды и делать необходимые заключения по качеству.
- Отладка программы
Как правило, в большинстве случаев ошибки отображаются на стадии компиляции программы или при первом интерпретировании программы. Но есть один существенный момент - когда выражение допустимо, но зависит от конкретного компилятора или интерпретатора.
Как и тестирование, отладка не является способом улучшения качества программного обеспечения. Отладка - это способ исправления дефектов в программе. В последние годы все чаще для проведения отладки используются программы отладчики. Основными возможностями таких программ являются:
- Точки останова на конкретных строчках кода
- Остановка при изменении переменных
- Остановка при присваивании конкретного значения
- Прохождение кода строчка за строчкой
- Откат по программе и т.д.
В разработанной программе была рассмотрена отладка с применением точки останова:
- Случай 1: проверка зашифрованного текста (рисунок 3). Устанавливается точка останова на переменную, которой назначается хранение зашифрованного текста.
Рисунок 3 - Проверка зашифрованного текста
- Случай 2: проверка расшифрованного текста (рисунок 4). Устанавливается точка останова на переменную, которой назначается хранение расшифрованного текста.
Рисунок 4 - Проверка расшифрованного текста
-
-
Тестирование программного продукта
-
Обычно исходный код снабжается тестами, которые регулярно выполняются. Полученный отчёт анализируется с целью выявить невыполнявшиеся области кода, набор тестов обновляется, пишутся тесты для непокрытых областей. Цель состоит в том, чтобы получить набор тестов для регрессионного тестирования, тщательно проверяющих весь исходный код.
Покрытие кода, по своей сути, является тестированием методом белого ящика. Тестируемое ПО собирается со специальными настройками или библиотеками и/или запускается в особом окружении, в результате чего для каждой используемой (выполняемой) функции программы определяется местонахождение этой функции в исходном коде. Этот процесс позволяет разработчикам и специалистам по обеспечению качества определить части системы, которые, при нормальной работе, используются очень редко или никогда не используются (такие как код обработки ошибок и т.п.). Это позволяет сориентировать тестировщиков на тестирование наиболее важных режимов.
Процесс тестирования проводится на основе рассмотренных ранее этапов:
- Проектирование тестов:
- Разработка стратегии тестирования. В связи с тем, что функционал программы ограничен всего на несколько методов, был сделан выбор проведения модульного тестирования. Данный метод удобен, так как позволяет делать проверку с каждым модулем (методом) разрабатываемой программы.
- Тест план:
- Объект тестирования - программа по шифрованию/дешифрованию текстовых файлов.
- Методы и функции, которые выполняют основные операции программы.
- Используемый метод тестирования - модульный.
- Подготовка (разработка макета программы) - Написание тестов - анализ результатов.
- Тестирование функционала работы модуля в отдельности.
- Тест кейс: Разработка тестов под функции
- создать методы которые выполняют шифрование и дешифрование;
- Написать тест по проверке предыдущей операции, насколько качественно выполняется задача;