Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры ТП!!.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
458.75 Кб
Скачать

31. Методы контроля и тестирования по. Статический и динамический контроль. Функциональное тестирование.

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

Визуальный контроль – проверка программы вручную, состоящая из 2-х этапов. На 1-ом этапе внимание уделяется: 1) комментариям и их соответствию тексту программы; 2) условиям в операторах выбора и ветвления; 3) сложным логическим выражениям; 4) возможности незавершенности итерационных циклов. На 2-ом этапе выполняется сквозной контроль (ручная прокрутка на простых заранее подобранных тестах).

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

1) Статический контроль, выполненный стандартным компилятором с целью проверки соответствия текста программы правилам языка программирования. Сообщения компилятора делятся на группы в зависимости от тяжести нарушения правил языка: а) могут являться причиной косвенной ошибки; б) работоспособность объектного кода маловероятна; в) объектный код заведомо некорректен; г) дальнейший контроль не возможен и прекращается.

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

2) Проверка структурированности программы – проверяется правильность организации программы с точки зрения ее модульности.

3) Контроль правдоподобия программы. Выделяются синтаксически правильные конструкции, которые могут нести в себе ошибку. Признаки таких конструкций: а) использование неинициализированных переменных; б) наличие описания элементов, которые в дальнейшем не используются; в) наличие никогда не выполняющихся фрагментов; г) наличие бесконечных циклов.

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

4) Верификация – аналитическое доказательство правильности функционирования ПО. Рассматривают 2 аспекта:

а) Надежность – характеризует как программу, так ее окружение. Допускается определенная вероятность наличия ошибок в программе. Характеристики надежности: а) целостность ПО – способность к защите от отказов; б) живучесть – способность входного контроля данных и их проверки в ходе работы программы; в) работоспособность – способность к восстановлению после сбоев; г) завершенность – 100% появление результата работы программы.

б) Корректность – включает в себя оценку ПО с точки зрения соответствия целям разработки, которые указываются в спецификации (частичная корректность), и с точки зрения завершенности программы. Выделяют 6 задач анализа корректности: доказательство частичной корректности; частичной некорректности; завершенности программы; незавершенности программы; полной корректности; полной некорректности. Для доказательства используются правила логического вывода.

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

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

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

  • организация-разработчик ПО не должна единолично ее тестировать;

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

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

  • следует сохранять используемые тесты для повышения эффективности повторного тестирования;

  • следует учитывать принцип «скопления» ошибок – вероятность обнаружения ошибок в некоторой части программы прямо пропорционально числу ошибок, уже обнаруженных в ней;

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

При построение тестов выделяют два подхода:

1) функциональное тестирование – ПО рассматривается как «черный ящик». Для проверки работоспособности на вход должен подаваться весь набор возможных параметров

2) структурное тестирование – базируется на анализе логики ПО. Используется такой набор входных данных, который позволит пройти по всем ветвям графа состояний вычислительного процесса.

Выделяют следующие методы функционального тестирования:

1) эквивалентное разбиение. Основная цель данного метода – минимизация тестового набора без потери его эффективности. Тестовый набор считается эффективным, если позволяет обнаружить ошибку в программе. Каждый тест должен включать столько входных условий с тем, чтобы минимизировать общее число необходимых тестов. Разработка тестов состоит из 2-х этапов:

а) Выделение классов эквивалентности. Если тест из некоторого класса обнаруживает ошибку А, то все остальные тесты этого класса должны тоже ее обнаружить. Их выделяют путем выбора входного условия. Формируется как минимум 2 класса: правильный и неправильный класс эквивалентности. При выделении следует придерживаться следующих правил:

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

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

  • если входное условие описывает ситуацию «должно быть», то выделяется один правильный и один неправильный класс;

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

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

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

3) применение функциональных диаграмм. В отличие от предыдущих, этот метод исследует комбинации входных условий. Функциональная диаграмма представляет собой формальный язык, на котором транслируется спецификация ПО. Формирование функциональных диаграмм выполняется в несколько этапов:

  • спецификация разбивается на рабочие участки для упрощения построения диаграмм;

  • в спецификации определяются причины и следствия. Причины – входные условия или классы эквивалентности, следствия – выходные условия;

  • спецификация преобразуется в булевый граф, связывающий причины и следствия;

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

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

4) предположение об ошибке. Интуитивно предполагаются вероятные типы ошибок на основании опыта. Выделяются ситуации, в которых наиболее вероятно появление ошибок в программе.

Достоинства тестирования по принципу «черного ящика»:

  • Сокращение необходимого количества тестовых вариантов.

  • Выявление категорий ошибок, не доступных способу «белого ящика».

Недостатки тестирования по принципу «черного ящика»:

  • Невозможно исчерпывающее тестирование.

  • Не реагирует на многие особенности программных ошибок.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]