- •Тема 1. Введение. Основы методологии проектирования информационных систем 5
- •Жизненный цикл программного обеспечения
- •Модели жизненного цикла программного обеспечения
- •Макетирование
- •Спиральная модель жизненного цикла
- •Компонентно-ориентированная модель
- •Тема 2. Структурный анализ и проектирование Определение структурного анализа
- •Средства структурного анализа
- •Моделирование потоков данных
- •Контекстная диаграмма
- •Построение иерархии диаграмм потоков данных
- •Методология функционально стоимостного анализа
- •Методология функционального моделирования sadt (Structured Analysis and Design Technique)
- •Состав функциональной модели sadt
- •Иерархия диаграмм
- •Словарь данных
- •Тема 3. Построение информационной модели системы. Проектирование баз данных Диаграммы сущность-связь (erd)
- •Сущности, отношения и связи в нотации Чена
- •Типы связей в нотации Чена
- •Ассоциативная связь
- •Диаграммы атрибутов в классической модели Чена
- •Диаграмма категоризации
- •Нотация Баркера. Модель сущность- связь в нотации Баркера
- •Методология idef1x
- •Тема 4. Методика построения информационной модели данных (модели «сущность-связь»)
- •Идентификация отношений между сущностями
- •Разрешение неспецифических отношений
- •Использование средств и техники структурного системного анализа
- •Основные виды работ, рекомендуемые при построении логической и физической моделей программной системы
- •Подход Мартина (ie–методология)
- •Тема 5. Методология rad (Rapid Application Development)
- •Основные принципы методологии rad
- •Состав, структура и функциональные особенности case-средств
- •Поддержка графических моделей
- •Требования к современному диаграммеру
- •Тема 6. Структурное тестирование программного обеспечения Основные понятия и принципы тестирования программного обеспечения
- •Особенности тестирования белого ящика
- •Способ тестирования базового пути
- •Потоковый граф
- •Цикломатическая сложность
- •Шаги способа тестирования базового пути
- •Способы тестирования условий
- •Тестирование ветвей и операторов отношения
- •Способ тестирования потоков данных
- •Тестирование циклов
- •Тема 7. Функциональное тестирование программного обеспечения Особенности тестирования черного ящика
- •Способы разбиения на эквивалентности
- •Способ анализа граничных значений
- •Способ диаграмм причин–следствий
- •Тема 8. Организация процесса тестирования программного обеспечения
- •Методика тестирования программных систем
- •Тестирование элементов
- •Тестирование итераций
- •Восходящее тестирование интеграции
- •Тестирование правильности
- •Системное тестирование
Методика тестирования программных систем
Методика тестирования программной системы может быть представлена в виде разворачивающейся спирали. В начале осуществляется тестирование элементов, то есть модулей, проверяющее результаты этапа кодирования программной системы.
На втором шаге выполняется тестирование интеграции, ориентированное на выявление ошибок этапа проектирования программной системы.
На третьем обороте спирали производится тестирование правильности, проверяющее корректность этапа анализа требований к программной системе.
На заключительном этапе проводится системное тестирование, выявляющее недостатки этапа системного анализа программной системы.
Рисунок 16– Методика тестирования программной системы
Целью тестирования элементов является индивидуальная проверка каждого модуля, используя способы тестирования белого ящика. Цель тестирования интеграции заключается в оценке сборки модуля в программную систему. При этом применяются в основном способы тестирования черного ящика. Цель тестирования правильности – проверить реализацию в программной системе всех функциональных и поведенческих требований, а так же требований эффективности. На этом этапе используются исключительно способы тестирования черного ящика.
Цель системного тестирования – проверка правильности объединения и взаимодействия всех элементов компьютерной системы и реализация всех функций системы.
Организация процесса тестирования в виде эволюционной развивающейся спирали обеспечивает максимальную эффективность поиска ошибок. Однако при этом, актуальным является вопрос, когда заканчивать тестирование.
Практический ответ обычно основан на статистическом критерии, который заключается в следующем. Можно с 95% уверенностью сказать, что провели достаточное тестирование, если вероятность безотказной работы компьютера с программной системой в течение 1000 часов составляет 0,995.
Научный ответ на этот вопрос состоит в применении математической модели отказов.
Например, для логарифмической модели Пуассона формула расчета текущей интенсивности отказа имеет вид , где
–текущая интенсивность программных отказов, т.е. количество отказов в единицу времени.
–начальная интенсивность отказа, т.е. интенсивность отказа на момент тестирования.
p – экспоненциальное уменьшение интенсивности отказа за счет обнаружения и устранения ошибок.
t – время тестирования.
С помощью данного уравнения можно предсказать снижение количества ошибок в ходе тестирования, а также времени, требуемого для достижения допустимо нужной интенсивности отказа.
Тестирование элементов
Объектом тестирования элементов является наименьшая единица проектирования программной системы, т.е. программный модуль. Для обнаружения ошибок в рамках модуля тестируются его важнейшие управляющие пути.
Относительная сложность тестов и ошибок определяется как результат ограничений области тестирования элементов.
Тестированию подвергаются:
Интерфейс модуля;
Внутренняя структура данных;
Независимые пути;
Пути обработки ошибок;
Ограниченные условия;
Интерфейс модуля тестируется для проверки правильности ввода/вывода тестовой информации. Исследование внутренних структур данных гарантирует целостность сохраняемых данных. Тестирование независимых путей гарантирует однократное выполнение всех операторов модуля.
При тестировании путей выполнения обнаруживаются следующие категории ошибок: ошибочные вычисления, некорректные сравнения, неправильные потоки управления.
Наиболее общими ошибками вычислений являются:
Неправильный или неопределенный приоритет арифметических операций;
Некорректная инициализация;
Несогласованность представления и точности;
Некорректное символьное представление выражений;
Источником ошибок сравнения и неправильных потоков управления являются:
Сравнение данных различных типов;
Некорректные логические операции или их приоритеты;
Ожидание эквивалентности в условиях, когда ошибки точности делают эквивалентность невозможной;
Неправильное прекращение цикла;
Отказ в выходе из цикла при прекращении итераций;
Неправильное изменение элементов цикла;
Обычно при проектировании модуля предвидят некоторые ошибочные условия. Для защиты от ошибочных условий в модуль вводят пути обработки ошибок. Такие пути тоже должны тестироваться.
Тестирование путей обработки ошибок необходимо ориентировать на следующие ситуации:
сообщение об ошибке невразумительно;
текст сообщения не соответствует обнаруживаемой ошибке;
вмешательство системных средств, регистрация ошибки произошла до обработки ошибки в модуле;
обработка исключительного условия некорректна;
описание ошибки не позволяет определить ее причину.
Часто необходимо выполнять граничное тестирование модулей, поскольку ошибки часто происходят:
при обработке n-ого элемента массива из n элементов;
при выполнении m-ой итерации цикла с m-проходами;
при появлении минимального или максимального значения.
Тестовые варианты, ориентированные на данные варианты, имеют высокую вероятность обнаружения ошибок.
Тестирование элементов обычно рассматривается как дополнение к этапу кодирования. Оно начинается после разработки текста программного модуля. Поскольку модуль не является автономной системой, то для реализации тестирования требуются дополнительные средства.
Программная среда для тестирования модуля будет выглядеть следующим образом:
Рисунок 17– Программная среда для тестирования модуля
ИД – исходные данные.
ОР – ожидаемые результаты.
РР – реальные результаты.
Дополнительными средствами тестирования является драйвер тестирования и заглушки.
Драйвер – это управляющая программа, которая принимает исходные данные и ожидаемые результаты тестовых вариантов, запускает тестируемый модуль, получает из модуля реальные результаты и на основе сравнения ОР и РР формирует отчет о результатах тестирования.
Заглушки замещают модули, которые вызываются тестируемым модулем. Заглушка или фиктивная подпрограмма реализует интерфейс подчиненного модуля, может выполнять минимальную обработку данных, имитирует прием и возврат данных. Создание драйвера и заглушек подразумевает дополнительные затраты, так как они не поставляются вместе с конечным программным продуктом.
Тестирование элементов достаточно просто выполнить, если модуль имеет высокую связность. Например, при реализации модуля только одной функции количество тестовых вариантов уменьшается, а ошибки легко предсказываются.