8. Основные стратегии тестирования, их характеристики, достоинства и недостатки. Основные типы ошибок, выявляемых каждой из стратегий.
Существуют две основные стратегии тестирования:
• тестирование программы как «черного ящика» (функциональное тестирова-ние), при котором программа рассматривается как объект, внутренняя струк-тура которого неизвестна;
• тестирование программы как «белого ящика» (структурное тестирование) подразумевает знание исходного кода программы и полный доступ к нему.
При тестировании программы как «черного ящика» исследуется работа каждой функции программы в соответствии со спецификацией. Основное место приложения тестов «черного ящика» - интерфейс ПС.
Тесты функционального тестирования демонстрируют:
• выполнение функций программы;
• корректность ввода исходных данных;
• процесс получения результатов.
При тестировании «черного ящика» принимаются во внимание специфициро-ванные системные характеристики программ, а их внутренняя логическая структура игнорируется. Исчерпывающее тестирование, как правило, невозможно. Например, ес-ли в программе 10 входных величин и каждая принимает по 10 значений, то потребует-ся 1010 тестовых вариантов. Тестирование «черного ящика» не реагирует на многие программные ошибки.
Тестирование «белого ящика» исследует корректность работы внутренних эле-ментов программы и связей между ними. Объектом тестирования здесь является не внешнее, а внутреннее поведение программы. Проверяется корректность построения всех элементов программы и правильность их взаимодействия друг с другом. Обычно анализируются управляющие связи элементов, реже — информационные связи. Тести-рование по принципу «белого ящика» характеризуется степенью, в какой тесты выпол-няют или покрывают логику (исходный текст) программы. Исчерпывающее тестирова-ние также затруднительно.
Существуют также разновидности тестирования.
Детерминированное тестирование, при котором контролируется каждая комби-нация исходных эталонных данных и соответствующая ей комби¬нация результатов функционирования программ. На практике полное де¬терминированное тестирование обычно нереализуемо.
Стохастическое тестирование, при котором исходные тестовые данные берутся случайным образом, как правило, с использованием статистиче¬ского распределения.
Ручное тестирование, которое проводится без исполнения тестируемой про-граммы на компьютере.
Тестирование программ в процессе разработки
Поскольку в процессе разработки приходится тестировать еще не завершенную программу, все подходы к тестированию делятся на две группы.
Тестирование сверху вниз. Применяется, если программа разрабатывается сверху вниз. В данном случае используются "заглушки" - фрагменты кода, имитирующие еще не написанные части программы.
Тестирование снизу вверх. При этом, как правило, дополнительно должна быть создана небольшая программа-- "драйвер", организующая взаимодействие уже напи-санных модулей.
Отладка программы
Когда фиксируется ошибка — начинается отладка. Отладка — процесс локали-зации и устранения ошибок. Такой процесс носит творческий характер, плохо форма-лизуем и непредсказуем по времени. Заранее неизвестно, сколько потребуется времени на поиск места дефекта и исправление ошибки. Такая неопределенность приводит к большим трудностям в планировании действий. Тем не менее, основной идее отладки (базирующейся на анализе данных) можно придать вид следующего алгоритма:
1.Изучить исходные и полученные результирующие данные.
2.Сформулировать некоторую гипотезу, которая объясняет получение таких ре-зультирующих данных.
3.Подготовить новые исходные данные и провести эксперимент, который по-зволит доказать или опровергнуть гипотезу.
Тестовые данные
Для тестирования программ методом черного ящика готовятся определенные группы тестов.
Для тестирования классов эквивалентностей. Классы эквивалентностей позво-ляют вместо большого количества тестов использовать лишь их не¬большое подмноже-ство. Каждый тест представляет набор тестов, на ко¬торых программа ведет себя одина-ково. Существует два основных типа классов эквивалентностей:
• Класс корректных тестовых случаев, отражающих типичную "нормальную" ситуацию.
• Класс тестов, содержащих ненормальную ситуацию, т. е. описывающих си-туацию, которой быть не должно.
Для тестирования граничных значений.
Для анализа причинно-следственных связей. Эти тесты применяются для про-грамм, в которых взаимодействуют объекты.
Для тестирования тех утверждений, которые приводятся в документации.
Для оценки результатов тестирования используются эталонные ("золотые") фай-лы, которые содержат ожидаемые результаты работы программы (эта¬лонные результа-ты). Основные варианты получения эталонных результатов таковы:
- использование справочников;
- вычисление вручную;
- использование результатов, полученных при помощи другой программы, ко-торой мы доверяем.
Тестовое покрытие — это набор тестов, покрывающих программу (каждый ли-нейный участок). Тестовое покрытие важно знать, чтобы определить участки кода, пропущенные при тестировании.
Особый важный класс составляют тесты, измеряющие производительность. Существуют специальные группы и компании, которые разрабатывают такие тесты.
Структурное тестирование программного обеспечения
Объектом тестирования является внутреннее поведение программы. Проверяет-ся корректность построения всех элементов программы и правильность их взаимодей-ствия друг с другом. Обычно анализируются управляющие связи элементов, реже — информационные связи. Тестирование по принципу «белого ящика» характеризуется степенью, в какой тесты выполняют или покры¬вают логику (исходный текст) програм-мы.
Особенности тестирования «белого ящика»
Обычно тестирование «белого ящика» основано на анализе управляющей струк-туры программы. Программа считается полностью проверенной, если проведено ис-черпывающее тестирование маршрутов (путей) ее графа управления.
В этом случае формируются тестовые варианты, в которых:
- гарантируется проверка всех независимых маршрутов программы;
- проходятся ветви True, False для всех логических решений;
- выполняются все циклы (в пределах их границ и диапазонов);
- анализируется правильность внутренних структур данных.
Недостатки тестирования «белого ящика»:
1. Количество независимых маршрутов может быть очень велико. Например, ес-ли цикл в программе выполняется k раз, а внутри цикла имеется п ветвлений, то коли-чество маршрутов вычисляется по формуле
При n = 5 и k = 20 количество маршрутов т = 1014. Примем, что на разработку, выполнение и оценку теста по одному маршруту расходуется 1 мс. Тогда при работе 24 часа в сутки 365 дней в году на тестирование уйдет 3170 лет.
2.Исчерпывающее тестирование маршрутов не гарантирует соответствия про-граммы исходным требованиям к ней.
3.В программе могут быть пропущены некоторые маршруты.
Достоинства тестирования «белого ящика» связаны с тем, что принцип «белого ящика» позволяет учесть особенности программных ошибок:
1.Количество ошибок минимально в «центре» и максимально на «периферии» программы.
2.Предварительные предположения о вероятности потока управления или дан-ных в программе часто бывают некорректны. В результате типовым может стать мар-шрут, модель вычислений по которому проработана слабо.
3.При записи алгоритма ПО в виде текста на языке программирования возмож-но внесение типовых ошибок трансляции (синтаксических и семантических).
4.Некоторые результаты в программе зависят не от исходных данных, а от внутренних состояний программы.
Каждая из этих причин является аргументом для проведения тестирования по принципу «белого ящика». Тесты «черного ящика» не смогут реагировать на ошиб¬ки таких типов.
- 1. Определение понятий «программа», «программное средство», «программный продукт». Виды и краткое содержание программных документов (по еспд).
- 2. Связь программных документов с этапами жизненного цикла по.
- 3. Жизненный цикл программных средств. Базовые этапы моделей жц: назначение и характеристика.
- 4. Стратегии конструирования программных средств с точки зрения моделей жц. Характеристика стратегий, достоинства и недостатки.
- 6. Назначение, архитектура, классификация case-средств.
- 7. Определение и содержание процесса тестирования. Информационные потоки процесса тестирования.
- 8. Основные стратегии тестирования, их характеристики, достоинства и недостатки. Основные типы ошибок, выявляемых каждой из стратегий.
- 9. Потоковый граф и цикломатическая сложность программы. Примеры.
- 10. Способ тестирования базового пути.
- 11. Способ тестирования условий.
- 12. Способ тестирования потоков данных.
- 13. Функциональное тестирование. Способ разбиения по эквивалентности и анализа граничных значений.
- 14. Способ диаграмм причин-следствий.
- 15. Основные характеристики качества и надежности программных средств.
- 16. Понятия функциональной пригодности, корректности и надежности программных средств.
- 17. Функция надежности и функция отказа: определение, основные свойства.
- 18. Дискретные модели надежности по. Модель Муса.
- 19. Дискретные модели надежности по. Модель Шумана.
- 20. Статические модели надежности по (простая интуитивная модель, модель Нельсона, модель Миллса).
- 21. Эмпирические модели надежности по. Определение оптимальной продолжительности тестирования.
- 22. Понятие пользовательского интерфейса. Основные принципы разработки пользовательского интерфейса.
- 23. Оконные интерфейсы. Типы окон. Основные операции с окнами.
- 24. Типы диалога пользовательского интерфейса.
- 25. Типы элементов управления оконных интерфейсов.
- 26. Назначение элемента управления «меню». Стандартные разновидности меню.
- 27. Назначение элемента управления «кнопка». Стандартные разновидности кнопок.
- 28. Назначение элемента управления «список». Стандартные разновидности списков.
- 29. Назначение элемента управления «текстовая область». Стандартные разновидности текстовых областей.
- 30. Правовые методы защиты программных продуктов и баз данных.
- 31. Понятие компонента. Функциональные группы компонентов.
- 32. Открытый интерфейс доступа к базам данных (odbc).
- 33. Архитектуры сервера баз данных совместной обработки клиентских запросов.
- 34. Доступ к базам данных в двухзвенных моделях «клиент-сервер».
- 35. Основные требования к распределенной обработке данных.
- 36. Функции «типового» приложения обработки данных.
- 37. Базовые архитектуры распределенной обработки данных.
- Архитектура сервера баз данных
- Архитектура «один к одному»
- Многопотоковая односерверная архитектура
- 38. Источник данных. Архитектура приложения, работающего с внешними источниками данных.
- 39. Последовательность действий для обеспечения работы с объектом источника данных.
- 40. Форматы представления слабоструктурированных данных. Основные понятия стандарта iso 2709.
- 41. Форматы представления слабоструктурированных данных. Основные понятия коммуникативного формата мекоф.
- 42. Языки определения слабоструктурированных данных. Основные понятия xml.
- 43. Инфраструктура описания ресурсов (rdf).
- 44. Структура процессов в абстрактной аипс.
- 45. Фактографические и документальные бд.
- 46. Классификации. Типология классификаций на основе отношений, возможных между классами и атрибутами.
- 47. Библиотечно-библиографические классификации.
- 48. Патентные классификации.
- 49. Классификации наук.
- 50. Онтология как средство формализованного представления информации.
- 51. Методы выделения информативных терминов.
- 52. Методы классификации и кластеризации текстовой информации.