- •Тема 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. Организация процесса тестирования программного обеспечения
- •Методика тестирования программных систем
- •Тестирование элементов
- •Тестирование итераций
- •Восходящее тестирование интеграции
- •Тестирование правильности
- •Системное тестирование
Цикломатическая сложность
Цикломатическая сложность – это метрика программного обеспечения, которая обеспечивает количественную оценку логической сложности программы. В основе тестирования базового пути цикломатическая сложность определяет:
Количество независимых путей в базовом множестве программы;
Верхнюю оценку, количество тестов, которое гарантирует однократное выполнение всех операторов;
Независимым является любой путь, который вводит новый оператор обработки или новые условия.
В терминах потокового графа независимый путь должен содержать дугу, не входящую в ранее определенные пути. Путь начинается в начальном узле, а заканчивается в конечном узле графа. Независимые пути формируются в порядке от самого короткого к самому длинному.
Новый путь обязательно включает новую дугу. Все независимые пути графа образуют базовое множество.
Свойства базового множества:
Тесты, обеспечивающие его проверку, гарантируют однократное выполнение каждого оператора, при выполнении каждого условия по ветвям True и False;
Мощность базового множества равна цикломатической сложности потокового графа.
Данное свойство дает априорную оценку количества независимых путей, которое имеет смысл – искать в графе.
Цикломатическая сложность вычисляется одним из трех способов:
Цикломатическая сложность равна количеству регионов потокового графа;
Цикломатическая сложность может быть вычислена по формуле V(G)=E–N–2, где E – количество дуг, а N – количество узлов потокового графа;
Цикломатическая сложность может быть вычислена по формуле V(G)=p+1, где p – количество предикатных вершин в потоковом графе G.
Шаги способа тестирования базового пути
На основе текста программы формируется потоковый граф. Для этого нумеруются операторы текста программы, и производится отображение пронумерованного текста программы в узлы и дуги потокового графа.
Определяется цикломатическая сложность потокового графа по любой из трех формул.
Определяется базовое множество независимых путей.
Подготавливаются тестовые варианты, интегрирующие выполнение каждого пути.
Каждый тестовый вариант формируется в виде исходных данных и ожидаемых результатов. Исходные данные должны выбираться так, чтобы предикатные вершины обеспечивали нужное переключение, т.е. запуск только тех операторов, которые перечислены в конкретном пути, причем в требуемом порядке.
Реальные результаты, каждого тестового варианта, сравниваются с ожидаемыми результатами. После выполнения всех тестовых вариантов гарантируется, что все операторы программы выполнены, по меньшей мере, один раз.
Важно отметить, что некоторые независимые пути не могут проверяться изолированно, такие пути должны проверяться при тестировании другого пути, как часть другого тестового варианта.
Способы тестирования условий
Цель этого семейства способов тестирования – строить тестовые варианты для проверки логических условий программы. При этом желательно обеспечить охват операторов из всех ветвей программы. Простое условие – это булева переменная или выражение отношения.
Выражение отношения имеет вид E1<оператор отношения>E2, где E1, E2 – арифметические выражения, а в качестве оператора отношения используется один из операторов >, <, =, .
Составное условие состоит из нескольких простых условий, булевых операторов и круглых скобок. Условие, не содержащее отношение выражения, называется булевым отношением. Таким образом, элементами условия являются булев оператор, булева переменная, пара скобок, заключающая простое или составное условие, оператор отношения, арифметическое выражение.
Эти элементы определяют типы ошибок в условии. Если условие некорректно, то некорректен, по меньшей мере, один из элементов условия.
В условии возможны следующие типы ошибок:
Ошибка булева оператора, т.е. наличие некорректных, отсутствующих или избыточных булевых операторов;
Ошибка булевой переменной;
Ошибка булевой скобки;
Ошибка оператора отношения;
Ошибка арифметического выражения.
Способ тестирования условий ориентирован на тестирование каждого условия в программе. Методики тестирования условий имеют два достоинства: во-первых, достаточно просто выполнить измерения тестового покрытия условия, во-вторых, тестовое покрытие условий в программе является фундаментальным для генерации дополнительных тестов в программе.
Целью тестирования условий является определение не только ошибок в условии, но и других ошибок в программе. Кроме того, если методика тестирования эффективна для обнаружения ошибок в условии, то вероятно, что эта методика будет эффективна ля обнаружения ошибок в программе.
Существует несколько методик тестирования условий.
Простейшая методика называется – тестирование ветвей. В соответствии с этой методикой для составления условий проверяется каждое простое условие, входящее в него, ветвь True, ветвь False.
Другая методика – тестирование области определения. В ней для выражения отношения требуется генерация 3-4 тестов.
Выражение вида E1<оператор отношения>E2 проверяется тремя тестами, которые формируют значение E1>E2 равным E2 и E1<E2.
Если оператор отношения неправильный, а E1 и E2 корректны, то эти три теста гарантируют обнаружение ошибки оператора отношения.
Для определения ошибок в E1 и E2 тест должен сформировать значение E1 большим или меньшим, чем E2, причем обеспечить как можно меньшую разницу между этими значениями.
Для булевых выражений с n переменными требуется набор из тестов. Этот набор позволяет обнаружить ошибки булевых операторов, переменных, скобок, но на практике применяется только при маломn.
Если в булево выражение, каждая булева переменная входит только один раз, то количество тестов легко уменьшается.